Multi Source Translation Content

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multi Source Translation Content

ディスカッション

ソート順:
IMX8MP SDIO DDR50 时钟问题 Hello 我们最近应用了内核 v7.2-rc4 中的以下 NXP 修复程序。 58c08eea91572df62d71731f1d1180a0dc8e3a6f mmc:sdhci-esdhc-imx:修复 esdhc_change_pinstate() 以允许恢复默认状态 在此修复之前,esdhc_change_pinstate() 要求在应用任何特定于时序的引脚控制状态之前,设备树中必须存在所有名为 default、state_100mhz 和 state_200mhz 的引脚控制状态。因此,如果 USDHC 设备树节点中未定义任何引脚控制,即使 SDIO 设备切换到 DDR50 时序,驱动程序也不会应用 state_100mhz。 修复后,驱动程序仅验证并应用所选定时模式所需的引脚控制状态。因此,state_100mhz 现在已正确应用于 SDR50 和 DDR50 模式。 应用此修复程序后,我们发现 state_100mhz 下的 SD2 时钟焊盘配置存在问题。 SDIO 设备(DDR50 模式)与以下设备不兼容: MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x194 但是,SDIO 设备(在 DDR50 模式下)可与以下设备配合使用: MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x184 MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x192 MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x196 0x184 设置与 0x194 设置的区别仅在于转换速率。其他工作设置使用不同的驱动强度值。 我们认为这种现象可能与信号完整性有关。然而,结果并不简单:DDR50 使用 0x194 时会失败,但使用较慢的转换速率 (0x184) 和更强的驱动器设置 (0x196) 时都能正常工作。 此外,SDR50 可以与 0x194 正常工作。该问题仅在 DDR50 模式下出现。 请问i.MX8MP USDHC/SDIO配置还有其他要求或已知限制需要考虑吗?我们也希望得到一些调试步骤方面的建议。 问候 维沙尔 i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus Linux Re: IMX8MP SDIO DDR50 clock issue 嗨@Zhiming_Liu 对于 state_100mhz SD2_DATA 为 0x194。 问候 维沙尔 Re: IMX8MP SDIO DDR50 clock issue 你好@vishal088 您能否也分享一下 SD2_DATA 设置? 此致, 志明 Re: IMX8MP SDIO DDR50 clock issue 你好@vishal088 如果将DATA 和 CMD 配置为0x1D4 ,然后将 CLK 设置为0x194 ,DDR50 还会再次出现故障吗? 请问您能否分享一下您正在使用的完整 USDHC DTS 节点?此外,软件团队想知道您是如何将 usdhc 修复为 DDR50 模式的。 此致, 志明 Re: IMX8MP SDIO DDR50 clock issue 嗨@Zhiming_Liu 抱歉,我刚才打错了。在我的设备树中,状态为 state_100mhz 的 SD2_DATAx 和 SD2_CMD 为 0x1d4 而不是 0x194。   &usdhc2 { pinctrl-names = "default", "state_100mhz"; pinctrl-0 = <&pinctrl_usdhc2>; pinctrl-1 = <&pinctrl_usdhc2_100mhz>;            总线宽度 = <4> 不可拆卸; cap-power-off-card; vmmc-supply = <&reg_wifi_ena> 状态 = "好的" };   pinctrl_usdhc2: usdhc2_grp {            fsl,pins = < MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x190                         MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD             0x1D0                         MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0       0x1D0                         MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1         0x1D0                         MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2       0x1D0                         MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3       0x1D0 > };   pinctrl_usdhc2_100mhz: usdhc2_100mhz-grp {            fsl,pins = <                         MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK                0x194                         MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD            0x1d4                         MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0      0x1d4                         MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1        0x1d4                         MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2      0x1d4                         MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3      0x1d4 > }; 由于我们没有定义 state_200mhz pinctrl,因此本函数中 esdhc_readl_le,驱动程序(sdhci-esdhc-imx.c) 移除了对主机 SDR104 和 HS400 的支持,并保留了对 DDR50 和 SDR50 的支持。 - - 代码 如果( IS_ERR_OR_NULL ( imx_data -> pins_100mhz )) val &= ~ ( SDHCI_SUPPORT_SDR50 | SDHCI_SUPPORT_DDR50 ); 如果( IS_ERR_OR_NULL ( imx_data -> pins_200mhz )) val &= ~ ( SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_HS400 ); 在 sdio 连接阶段,它在与显卡协商其功能后,将时序设置为 DDR50。 使用“cat /sys/kernel/debug/mmc1/ios”命令验证了这一点。 时钟频率:50000000 Hz 实际时钟频率:50000000 Hz vdd:21(3.3 ~ 3.4 V) 总线模式:2(推挽式) 芯片选择:0(无所谓) 电源模式:2(开启) 总线宽度:2(4 位) 时序规格:7(SD UHS DDR50) 信号电压:1(1.80 V) 驱动类型:0(B型驱动) 注意:我们使用的是 6.12.49 内核,我们注意到“esdhc_change_pinstate”函数存在问题,经过检查,我们发现 NXP 在 7.2-rc4 内核中提供了一个修复程序。应用该修复程序后,它开始正确使用 state_100mhz pinctrl 状态,但却完全破坏了 sdio 设备的通信。 后来,正如前面消息中提到的,我们反复调整时钟配置,最终发现时钟设置为 0x194 是导致问题的原因。 问候 维沙尔 Re: IMX8MP SDIO DDR50 clock issue 你好@vishal088 我在 i.MX8MP EVK 板上进行了测试,dts 和内核设置与之前相同。目前,为了加快测试速度,我使用的是 L6.18.20 内核,但我认为这个问题与内核版本关系不大。 使用补丁之前。 imx8mpevk login: root root@imx8mpevk:~# cat /sys/kernel/debug/mmc1/ios clock: 50000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 7 (sd uhs DDR50) signal voltage: 1 (1.80 V) driver type: 0 (driver type B) root@imx8mpevk:~# dmesg | grep -i sd [ 2.445460] sdhci: Secure Digital Host Controller Interface driver [ 2.451674] sdhci: Copyright(c) Pierre Ossman [ 2.463953] sdhci-pltfm: SDHCI platform and OF driver helper [ 2.507075] mmc2: SDHCI controller on 30b60000.mmc [30b60000.mmc] using ADMA [ 3.635632] sdhci-esdhc-imx 30b40000.mmc: allocated mmc-pwrseq [ 3.636284] sdhci-esdhc-imx 30b50000.mmc: Got CD GPIO [ 3.669847] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA [ 3.682520] mmc1: SDHCI controller on 30b50000.mmc [30b50000.mmc] using ADMA [ 3.818728] mmc1: new UHS-I speed DDR50 SDHC card at address 59b4 [ 9.902634] imx-sdma 30e00000.dma-controller: firmware found. [ 9.902634] imx-sdma 30e10000.dma-controller: firmware found. [ 9.920146] imx-sdma 30bd0000.dma-controller: firmware found. [ 9.928124] imx-sdma 30bd0000.dma-controller: loaded firmware 4.6 root@imx8mpevk:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mtdblock0 31:0 0 32M 0 disk mmcblk2 179:0 0 29.2G 0 disk |-mmcblk2p1 179:1 0 256M 0 part /run/media/boot-mmcblk2p1 `-mmcblk2p2 179:2 0 10.5G 0 part / mmcblk2boot0 179:32 0 4M 1 disk mmcblk2boot1 179:64 0 4M 1 disk mmcblk1 179:96 0 29.8G 0 disk |-mmcblk1p1 179:97 0 256M 0 part /run/media/boot-mmcblk1p1 `-mmcblk1p2 179:98 0 12G 0 part /run/media/root-mmcblk1p2 root@imx8mpevk:~# cp /run/media/boot-mmcblk1p1/Image ./ root@imx8mpevk:~# ls -la Image -rwxr-x--- 1 root root 35678720 Mar 13 15:48 Image 使用补丁后,测试SD卡的读写功能。 root@imx8mpevk:~# cp /run/media/boot-mmcblk1p1/tee.bin ./ root@imx8mpevk:~# cp tee.bin tee_test.bin root@imx8mpevk:~# cp tee_test.bin /run/media/boot-mmcblk1p1/ root@imx8mpevk:~# ls /run/media/boot-mmcblk1p1/ Image imx95-19x19-evk-dsi-serdes-jdi-wuxga-panel.dtb imx95-19x19-evk-os08a20-dual.dtb imx95-19x19-evk-ti-serdes-combo.dtb 'System Volume Information' imx95-19x19-evk-dsi-serdes-jdi-wuxga-panel.dtbo imx95-19x19-evk-os08a20-isp-it6263-lvds0.dtb imx95-19x19-evk-ti-serdes-combo.dtbo imx95-15x15-ab2.dtb imx95-19x19-evk-dsi-serdes.dtb imx95-19x19-evk-os08a20-isp-lvds-two-disp.dtb imx95-19x19-evk-ti-serdes.dtb imx95-15x15-evk-adv7535-ap1302.dtb imx95-19x19-evk-dsi-serdes.dtbo imx95-19x19-evk-os08a20.dtb imx95-19x19-evk-ti-serdes.dtbo imx95-15x15-evk.dtb imx95-19x19-evk-dual-os08a20-isp-it6263-lvds0.dtb imx95-19x19-evk-os08a20.dtbo imx95-19x19-evk-tja1104-rgmii.dtb imx95-15x15-frdm-8mic-reve.dtb imx95-19x19-evk-it6263-lvds-dual.dtb imx95-19x19-evk-ox03c10-all.dtb imx95-19x19-evk-tja1104-rmii.dtb imx95-15x15-frdm-ap1302.dtb imx95-19x19-evk-it6263-lvds-dual.dtbo imx95-19x19-evk-ox03c10-combo.dtb imx95-19x19-evk.dtb imx95-15x15-frdm-aud-hat.dtb imx95-19x19-evk-it6263-lvds-two-disp.dtb imx95-19x19-evk-ox03c10-combo.dtbo imx95-19x19-frdm-pro-aqr113c.dtb imx95-15x15-frdm-boe-wxga-lvds-panel.dtb imx95-19x19-evk-it6263-lvds0.dtb imx95-19x19-evk-ox03c10-isp-it6263-lvds0.dtb imx95-19x19-frdm-pro-aud-hat.dtb imx95-15x15-frdm-dual-os08a20-isp.dtb imx95-19x19-evk-it6263-lvds0.dtbo imx95-19x19-evk-ox03c10.dtb imx95-19x19-frdm-pro-dual-os08a20-isp.dtb imx95-15x15-frdm-neutron.dtb imx95-19x19-evk-it6263-lvds1.dtb imx95-19x19-evk-ox03c10.dtbo imx95-19x19-frdm-pro-inmate.dtb imx95-15x15-frdm-os08a20-combo-isp.dtb imx95-19x19-evk-it6263-lvds1.dtbo imx95-19x19-evk-ox05b1s-combo.dtb imx95-19x19-frdm-pro-neutron.dtb imx95-15x15-frdm-os08a20-isp.dtb imx95-19x19-evk-jdi-wuxga-lvds-panel.dtb imx95-19x19-evk-ox05b1s-combo.dtbo imx95-19x19-frdm-pro-os08a20-combo-isp.dtb imx95-15x15-frdm-root.dtb imx95-19x19-evk-jdi-wuxga-lvds-panel.dtbo imx95-19x19-evk-ox05b1s-isp-it6263-lvds0.dtb imx95-19x19-frdm-pro-os08a20-isp.dtb imx95-15x15-frdm-rpmsg.dtb imx95-19x19-evk-jtag.dtb imx95-19x19-evk-ox05b1s-isp-lvds-two-disp.dtb imx95-19x19-frdm-pro-root.dtb imx95-15x15-frdm-waveshare-7inch-c-panel.dtb imx95-19x19-evk-jtag.dtbo imx95-19x19-evk-ox05b1s.dtb imx95-19x19-frdm-pro-waveshare-7inch-c-panel.dtb imx95-15x15-frdm.dtb imx95-19x19-evk-lpspi-slave.dtb imx95-19x19-evk-ox05b1s.dtbo imx95-19x19-frdm-pro.dtb imx95-19x19-evk-adv7535-ap1302.dtb imx95-19x19-evk-lt9611uxc-ap1302.dtb imx95-19x19-evk-pcie1-ep.dtb imx95-jailhouse-inmate.dtb imx95-19x19-evk-adv7535.dtb imx95-19x19-evk-lt9611uxc.dtb imx95-19x19-evk-pcie1-ep.dtbo mcore-demos imx95-19x19-evk-adv7535.dtbo imx95-19x19-evk-lt9611uxc.dtbo imx95-19x19-evk-rm692c9.dtb tee.bin imx95-19x19-evk-ap1302.dtb imx95-19x19-evk-netc-rpmsg.dtb imx95-19x19-evk-rm692c9.dtbo tee_test.bin imx95-19x19-evk-ap1302.dtbo imx95-19x19-evk-neutron.dtb imx95-19x19-evk-root.dtb xen imx95-19x19-evk-cs42888.dtb imx95-19x19-evk-os08a20-combo.dtb imx95-19x19-evk-rpmsg.dtb imx95-19x19-evk-cs42888.dtbo imx95-19x19-evk-os08a20-combo.dtbo imx95-19x19-evk-sof.dtb DTS 修改中, pinctrl_usdhc2_100mhz 是 linux-imx 的默认值。测试表明,这些修改并未影响 DDR50 下的 SD 卡读写操作。 &usdhc2 { assigned-clocks = <&clk IMX8MP_CLK_USDHC2>; assigned-clock-rates = <400000000>; pinctrl-names = "default", "state_100mhz"; pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>; pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>; // pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>; cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>; vmmc-supply = <&reg_usdhc2_vmmc>; bus-width = <4>; status = "okay"; }; pinctrl_usdhc2_100mhz: usdhc2-100mhzgrp { fsl,pins = < MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x194 MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD 0x1d4 MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0 0x1d4 MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1 0x1d4 MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2 0x1d4 MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x1d4 MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc0 >; }; 所以我认为你现在遇到的问题可能与定制主板有关。碰巧的是,0x194 会导致信号质量问题。 顺祝商祺! 志明
記事全体を表示
SCP03平台在SE050C1上进行钥匙旋转——插入钥匙被拒绝(6A80 / 6982) 我们无法将SE050C1上的SCP03平台密钥从NXP工厂(OEF)密钥更换为我们自己设备生成的密钥。在我们尝试过的所有变体中,无论是使用 Plug&Trust 3.0.6 还是 4.7.1,在全新的零件上,PUT KEY 都被拒绝。 使用工厂密钥的 Platform SCP03 会话可以正常工作——我们可以打开它并成功运行 applet 命令(GetVersion、GetRandom、ReadObject、WriteBinary)。只有 PUT KEY 操作失败。 我们想知道用于轮换此部件上平台 SCP03 密钥的正确 APDU 序列,最好能有一个参考实现。 设置: 安全元件 SE050C1 (SSS_PFSCP_ENABLE_SE050C1 = 1) ATR 00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08 01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41 54 50 4F(“JCOP4 ATPO”) 主机MCU ESP32-S3,ESP-IDF v5.3.4 通过 I2C 传输 T=1 (T1oI2C) 中间件 Plug&Trust — 已测试 3.0.6 和 4.7.1 版本,两者的行为完全相同(迷你版)。 身份验证 SE05X_Auth=PlatfSCP03,SSS_HAVE_SE05X_AUTH_PLATFSCP03 主机加密 mbedTLS 该部件是全新的:从未成功旋转过,并且使用 ex_sss_tp_scp03_keys.h 中的 SE050C1 OEF 密钥进行身份验证。 我们想做什么: 将平台 SCP03 密钥集(ENC / MAC / DEK)从工厂 OEF 密钥轮换为在 ESP32 上派生的设备唯一密钥(基于 ESP32 的 eFuse 驻留 HMAC 密钥的 PBKDF2-HMAC-SHA256),以便只有该特定主机 MCU 才能使用其 SE050 打开平台 SCP03 会话。 哪些做法行之有效: 使用出厂密钥成功打开了 Platform SCP03 会话,并且会话内的命令可以正常工作:scp :DEBUG:身份验证成功!!! APDU:调试:获取版本 [] -> 90 00 APDU:DEBUG:GetRandom [] -> 90 00 APDU:DEBUG:WriteBinary [] -> 90 00 所以通道、密钥和安全消息传递功能都正常。 哪些方面失败了: 案例A: PUT KEY 被拒绝,错误代码为 6A80(数据错误)。 命令头和纯文本数据字段(SCP03封装之前): hdr:80 D8 0B 81 Lc=70 数据:0B <- 密钥版本号 88 11 10 <16 字节 ENC 加密。在 DEK> 03<3-byte KCV> 88 11 10 <16 字节 MAC 加密在 DEK> 03<3-byte KCV> 88 11 10 <16 字节 DEK 加密。DEK>下03<3-byte KCV> 密钥值使用当前(工厂)DEK,采用 AES-密码块链接(CBC) 和零 IV 进行加密;KCV 是使用新密钥对 0x01 的 16 字节块进行 AES 加密的前 3 个字节。 案例B:ISD选定 如果我们首先选择ISD: GP_Select(A0 00 00 01 51 00 00 00) -> 90 00 响应: 6F 10 84 08 A0000001 51000000 A5 04 9F 65 01 FF 然后,同样的 PUT KEY 请求被拒绝,错误代码为 6982(安全性未满足),而不是 6A80。 这表明 ISD 确实识别了该命令,但需要一个安全通道——并且在案例 A 中,该命令是发送到 SE050 小程序,而该小程序没有 D8 指令。 但是,中间件中的 GP_Select() 发送的是明文 APDU,这会破坏现有的 SCP03 通道。在选择 ISD 后,我们尝试重新建立 SCP03(再次调用 nxScp03_AuthenticateChannel(),并重置会话中的 fp_Transform / authType / pdynScp03Ctx),但失败了: scp :WARN :nxEnsure:'status == kStatus_SSS_Success' 失败。 第 148 行 函数:nxScp03_AuthenticateChannel 案例 C: 通过 DoAPDUTxRx_s_Case4_ext(带 Le)发送返回 6700(长度错误),与 ISD 的 FCI 广告 9F 65 01 FF(最大数据字段 255)一致。 已经排除的: 这些方法都经过测试,结果均未对结果产生影响: 尝试过的变量值 P1 0x00(创建新版本),0x0B(替换当前版本),0x11(目标版本) 数据字段中是否存在前导 KVN 字节 APDU 案例 Case4(简短版)/ Case4_ext(扩展版) 密钥块结构 88 11 10 03 当前 DEK 下的密钥封装 AES-密码块链接(CBC) 零 IV(相当于一个区块的 ECB) 使用新密钥对 16×0x01 字节的 KCV 方法进行 AES 加密,前 3 个字节 中间件版本 Plug&Trust 3.0.6 和 4.7.1 DEK 源已验证 KEK 与打开会话的密钥集相同 选择小程序后,所有变体均显示 6A80;选择 ISD 后,所有短形式变体均显示 6982。 问题: 在SE050C1上,轮换SCP03平台按键的正确APDU序列是什么?具体来说:PUT KEY 是应该发送到颁发者安全域,还是发送到 SE050 小程序? 如果必须连接到 ISD,那么如何使用 Plug&Trust 中间件与 ISD 建立 Platform SCP03 通道?EX_SSS_BOOT_SKIP_SELECT_APPLET 是否是预期的机制?如果是,正确的调用顺序是什么(SELECT ISD → INITIALIZE UPDATE → EXTERNAL AUTHENTICATE → PUT KEY)? 上述关键数据字段格式是否适用于此部分,特别是密钥类型编码、长度编码、DEK 封装模式和 KCV 算法? 我们的 Plug&Trust 包在 nxScp03_Const.h 中定义了 INS_GP_PUT_KEY (0xD8)。以及 global_platf.h,但没有实现,也没有使用它的示例。能否提供平台 SCP03 密钥轮换示例/演示(相当于 se05x_Delete_and_test_provision 的配置示例),或者在完整的 SDK 中指出它的位置? 能否提供 AN12436(在 ex_sss_auth.h 中引用)?作为 OEF 平台 SCP03 密钥的来源),还是记录此部件密钥轮换的 应用笔记? 背景——为什么这件事没有被注意到 坦白地说,这是我们自己造成的问题,而且我们最近才发现。 我们的配置代码调用了 PUT KEY 命令,然后丢弃了返回状态: sw = gp_put_key_using_nxp_middleware(se, DERIVED_SCP03_KEYVER, ...); /* 状态从未检查 */ mark_rotated(se, DERIVED_SCP03_KEYVER); /* 写入“已旋转”标记 */ ESP_LOGI(TAG, "SCP03 按键轮换成功"); /* 无条件打印 */ 由于标记写入(WriteBinary)成功,每个设备最终都会设置“已轮换”标志,而其平台 SCP03 密钥仍然是出厂密钥,并且配置报告成功。我们后来添加了状态检查,也正是通过状态检查,我们发现 PUT KEY 在任何设备上实际上从未成功执行过。 我们不需要这方面的帮助——它已经修好了。我们提及此事只是为了解释为什么我们现在提出这个问题而不是在启动时提出,并明确指出该部件确实没有旋转,而不是处于某种部分旋转的状态。 SE050 Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) 嗨@Rutwik0409 , 根据所提供的信息,SE050C1 在小程序层面似乎工作正常:  SELECT  ,  GetVersion  ,  GetRandom  ,  ReadObject  , 和  WriteBinary  全部成功通过 SCP03 平台。因此,这看起来不像是一个基本的传输故障、T=1 故障、SCP03 密钥故障或安全消息传递故障。 由于您使用的是带有自定义 T=1 over I²C 传输的 ESP32-S3,这很可能是 GlobalPlatform 安全域 SCP03 会话的移植/集成问题,而不是 SE050C1 不支持平台 SCP03 密钥轮换的证据。 为了 SCP03平台关键轮换 , 这  PUT KEY  命令是 全球平台安全域操作 这不是 SE050 IoT 小程序命令。记录的序列如下: 选择安全域/SSD。 使用以下方式打开平台 SCP03 安全通道  INITIALIZE UPDATE  /  EXTERNAL AUTHENTICATE  。 发送  PUT KEY  更新平台 SCP03 密钥集。 这也与观察到的现象相符: 选择SE050小程序时,  PUT KEY  返回  6A80  这与向错误目标发送 GlobalPlatform 命令的情况一致。 当选择了 ISD 但未与该功能域建立安全通道时,  PUT KEY  返回  6982  这与“安全状态未得到满足”相符。 所以,需要检查的主要点是: 不仅要看平台 SCP03 是否能与 SE050 小程序配合使用 但是,中间件在发出命令之前是否针对正确的安全域打开了平台 SCP03?  PUT KEY  。 NXP 提供了一个针对此操作的参考演示: se05x_RotatePlatformSCP03Keys 该演示明确指出,它演示了如何使用默认平台 SCP 密钥进行身份验证,以及如何将这些密钥轮换为用户定义的密钥。  我们的建议是避免手动构建  PUT KEY  首先是 APDU,然后是 NXP 参考实现。 首先,我建议您使用 NXP 的官方参考路径(例如 Zephyr + nano 软件包中的 `se05x_RotatePlatformSCP03Keys` 演示)来验证实现,以便您的 ESP32 MCU 能够得到良好的支持,而无需任何移植工作。该演示是 NXP 针对 SCP03 平台按键旋转的参考实现。当前问题表明“PUT KEY”命令被发送到了错误的目标,或者在选择 ISD/SSD 后,相应的平台 SCP03 安全通道没有正确建立。SCP03 与 SE050 小程序的通信正常进行并不能保证 GlobalPlatform 安全域级别的“PUT KEY”进程已正确设置。 更多详情请参阅https://github.com/NXPPlugNTrust/nano-package/blob/master/zephyr/readme.rst 。   希望对您有所帮助。   祝你有美好的一天, 坎 ------------------------------------------------------------------------------- 笔记: - 如果此回复解答了您的问题,请点击“标记为正确答案”按钮。谢谢你! - 我们会持续关注帖子,从最后一条回复发出后持续7周,之后的回复将被忽略。 如果您之后有相关问题,请另开新帖并引用已关闭的帖子。 ------------------------------------------------------------------------------- Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) 嗨@Kan_Li , 平台 SCP03 外部身份验证失败时,是否存在重试计数器或锁定计数器? Platform SCP03 是否支持“尝试密钥集 A,回退到密钥集 B”模式?或者 NXP 是否建议对混合集群采用不同的方法,例如在主机端记录密钥集状态,并且永远不要尝试错误的密钥集? 问候, 鲁特维克 Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) 嗨@Rutwik0409 , 我的评论如下: 平台 SCP03 外部身份验证失败时,是否存在重试或锁定计数器? 不。在 SE050C1 的平台 SCP03(GlobalPlatform ISD)级别上没有暴力锁定计数器。外部身份验证失败时,只会返回一个非 9000 状态字(例如:6300 或 6982),且通道未打开。SE 随后即可立即进行全新的 INITIALIZE UPDATE 操作。未写入持久锁定状态。 请注意,这与 SE05x小程序级别的身份验证对象(AES 密钥、ECKeys、UserID)不同,后者在其对象策略中具有可配置的身份验证尝试计数器。通过 ISD/GlobalPlatform 层的 SCP03 平台不使用该机制。 是否支持“尝试使用键集 A,回退到键集 B”这种模式? 它本身并不支持,我们不建议将其作为正常的操作流程。原因如下: INITIALIZE_UPDATE 命令在 P2 中携带密钥版本号 (KVN)。如果您发送 INITIALIZE UPDATE 时 KVN=0x01,但设备持有 KVN=0x11,则 SE 返回 6A88 (未找到引用的密钥)。然后您可以使用正确的 KVN 重试 - 不会锁定 - 但每次 INITIALIZE UPDATE 失败都是一次不完整的身份验证尝试,并且随着时间的推移可能会导致序列计数器不同步。 它还会泄露设备上存在的密钥版本信息。 混合车队推荐方案 最简洁的做法是在主机端跟踪密钥集状态,并且永远不要尝试错误的 KVN: 成功完成 PUT KEY 轮换后,写入一个标记(例如,主机后端的一个标志,以 SE050 唯一 ID / CPLC 序列号为键),记录哪个 KVN 现在处于活动状态。 在每次后续启动时,在发出 INITIALIZE UPDATE 之前查找该标记,以便始终使用正确的 KVN 打开会话。 nano-package 中的 se05x_rotate_scp03_keys 演示( https://github.com/NXPPlugNTrust/nano-package/tree/master/examples/se05x_rotate_scp03_keys )是 PUT KEY 机制的良好起点,但请注意,根据设计,它在最后会恢复到旧键——第二个 ex_se05x_change_keys 调用是开发安全回滚。文档中写道: “为了进行开发测试,我们会回滚到原始密钥。客户可以自行注释掉这一行。”在生产环境中使用时,请注释掉第二个调用。完成此操作后,SE 仅保存新密钥,因此必须相应地更新主机固件,以便从那时起始终使用新的 KVN 打开会话。 一个重要的实用提示:在写入旋转标记之前,务必验证 PUT KEY 的返回状态字。如果 PUT KEY 静默失败(例如,返回 6A80(如您所见),无论如何写入“rotated”标记都会导致后续的每次连接尝试使用错误的 KVN。 祝你有美好的一天, 坎 ------------------------------------------------------------------------------- 笔记: - 如果此回复解答了您的问题,请点击“标记为正确答案”按钮。谢谢你! - 我们会持续关注帖子,从最后一条回复发出后持续7周,之后的回复将被忽略。 如果您之后有相关问题,请另开新帖并引用已关闭的帖子。 -------------------------------------------------------------------------------
記事全体を表示
如何将 S32 Design Studio 许可证转移/重新注册到我自己的 NXP 帐户 你好, 尊敬的技术支持团队: 这是第二条信息 (第一页: https ://community.nxp.com/t5/MPC5xxx/Request-for-Software-License-Extension-Due-to-Expiration/mp/2396968#M28490) 我的办公电脑是我从前任经理那里继承来的,S32 Design Studio 仍然是在他的 NXP 账户下激活的,而不是我的。因此,我电脑上安装的许可证似乎已经过期了。 我已经确认我的许可证有效期至 2028 年,因此我想将这台电脑上的 S32DS 切换到我的 NXP 帐户和许可证,而不是前任所有者的帐户和许可证。 请问正确的操作步骤是什么?具体来说: 1. 是否有办法停用或解除与先前帐户关联的现有激活状态? 2. 我能否使用我自己的帐户凭据重新激活 S32DS,还是需要完全卸载并重新安装? 感谢您的帮助。 顺祝商祺! Re: How to transfer/re-register an S32 Design Studio license to my own NXP account 你好, 您可以使用之前用户的旧激活码。激活码与特定账户无关。 您可以使用旧代码重新激活现有安装。 Re: How to transfer/re-register an S32 Design Studio license to my own NXP account 你好, 您可以使用激活密钥激活之前机主电脑上安装的 S32DS,无需卸载。如果出现缺少许可证的提示信息,只需输入您的激活码即可。
記事全体を表示
自分のNXPアカウントにS32 Design Studioライセンスを移管/再登録する方法 こんにちは、 サポートチームの皆様、 これは2番目のメッセージです (まずはこちら: https ://community.nxp.com/t5/MPC5xxx/Request-for-Software-License-Extension-Due-to-Expiration/mp/2396968#M28490) 私は元マネージャーから仕事用PCを引き継ぎましたが、S32 Design Studioは私のではなく彼のNXPアカウントでまだ有効化されています。そのため、私のマシンにインストールされているライセンスの有効期限が切れてしまったようです。 自分のライセンスが2028年まで有効であることを確認したので、このPCのS32DSを前の所有者ではなくNXPのアカウントとライセンスに切り替えたいと考えています。 正しい手順を教えてもらえますか?具体的には: 1. 前のアカウントに紐づいた既存のアクティベーションを無効化または解除する方法はありますか? 2. 自分のアカウント認証情報でS32DSを再アクティベートできますか?それとも完全なアンインストールとクリーンインストールが必要ですか? ご協力ありがとうございます。 よろしくお願いいたします。 Re: How to transfer/re-register an S32 Design Studio license to my own NXP account こんにちは、 前のユーザーの古いアクティベーションコードを使うことができます。アクティベーションコードは特定のアカウントにコネクテッドしていません。 古いコードで既存のインストールを再開できます。 Re: How to transfer/re-register an S32 Design Studio license to my own NXP account こんにちは、 前の所有者のPCにS32DSをインストールした状態でアクティベーションキーを使えます。アンインストールする必要はありません。ライセンス情報が不足しているというメッセージが表示された場合は、アクティベーションコードを入力してください。
記事全体を表示
How to transfer/re-register an S32 Design Studio license to my own NXP account Hello, Dear Support Team, That is Second Message  ( First : https://community.nxp.com/t5/MPC5xxx/Request-for-Software-License-Extension-Due-to-Expiration/m-p/2396968#M28490 ) I inherited my work PC from my former manager, and S32 Design Studio is still activated under his NXP account, not mine. Because of this, the installed license appears to have expired on my machine. I have confirmed that my own license is valid until 2028, so I would like to switch S32DS on this PC over to my NXP account and license instead of the previous owner's. Could you let me know the correct procedure for this? Specifically: 1. Is there a way to deactivate or release the existing activation tied to the previous account? 2. Can I simply re-activate S32DS with my own account credentials, or is a full uninstall and clean reinstall required? Thank you for your help. Best regards, Re: How to transfer/re-register an S32 Design Studio license to my own NXP account Hi,  you can use the old activation code from previous user. The activation code is not connected to specific account.  You can re-activate existing installation with the old code.  Re: How to transfer/re-register an S32 Design Studio license to my own NXP account Hi,  you can use your activation key with S32DS installed on previous owner PC, you don't need to uninstall it. When message with missing license appears - simply enter your activation code. 
記事全体を表示
Failed to add the HSE component I am using S32 Design Studio IDE version 3.6.8, RTD version 7.0.1, with an S32K314 project. I cannot add the HSE IP core in the peripheral configuration view, which prevents the configuration tool from automatically generating the hse_mu driver in the generated files. How can I solve this problem? 1131_0-1788401575417.png1131_0-1788401575417.png What components should I add further? 1131_1-1788401624401.png1131_1-1788401624401.png Re: Failed to add the HSE component Hi You also need to install a separate patch package whose description includes "Crypto Driver", such as S32K3 Real-Time Drivers ASR R23-11 Version 7.0.1 P02. The SW32K3_RTD_R23-11_7.0.1_P02_D2603_ReleaseNotes.pdf, specifically section 2.5 Support and Driver Plugins Delivered, mentions Hse_IP. Best Regards, Robin
記事全体を表示
Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) We cannot rotate the Platform SCP03 keys on SE050C1 from the NXP factory (OEF) keys to our own device-derived keys. PUT KEY is rejected in every variation we have tried, on a factory-fresh part, with both Plug&Trust 3.0.6 and 4.7.1. A Platform SCP03 session with the factory keys works correctly — we can open it and run applet commands (GetVersion, GetRandom, ReadObject, WriteBinary) successfully. Only PUT KEY fails. We would like to know the correct APDU sequence to rotate Platform SCP03 keys on this part, and ideally a reference implementation. Setup: Secure element SE050C1 (SSS_PFSCP_ENABLE_SE050C1 = 1) ATR 00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08 01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41 54 50 4F ("JCOP4 ATPO") Host MCU ESP32-S3, ESP-IDF v5.3.4 Transport T=1 over I2C (T1oI2C) Middleware Plug&Trust — tested 3.0.6 and 4.7.1, identical behaviour both mini  Auth SE05X_Auth=PlatfSCP03, SSS_HAVE_SE05X_AUTH_PLATFSCP03 Host crypto mbedTLS The part is factory-fresh: it has never been successfully rotated , and it authenticates with the SE050C1 OEF keys from ex_sss_tp_scp03_keys.h. what are we trying to do: Rotate the Platform SCP03 key set (ENC / MAC / DEK) from the factory OEF keys to device-unique keys derived on the ESP32 (PBKDF2-HMAC-SHA256 over the ESP32's eFuse-resident HMAC key), so that only that specific host MCU can open a Platform SCP03 session with its SE050. what is working: Opening a Platform SCP03 session with the factory keys succeeds, and commands inside it work:scp :DEBUG:Authentication Successful!!! APDU :DEBUG:GetVersion [] -> 90 00 APDU :DEBUG:GetRandom [] -> 90 00 APDU :DEBUG:WriteBinary [] -> 90 00 So the channel, keys, and secure messaging are all functioning. waht fails: case A :  PUT KEY is rejected with 6A80(Wrong data). Command header and plaintext data field (before SCP03 wrapping): hdr : 80 D8 0B 81 Lc=70 data: 0B <- key version number 88 11 10 <16 bytes ENC enc. under DEK> 03 <3-byte KCV> 88 11 10 <16 bytes MAC enc. under DEK> 03 <3-byte KCV> 88 11 10 <16 bytes DEK enc. under DEK> 03 <3-byte KCV> Key values are encrypted with the current (factory) DEK using AES-CBC with a zero IV; KCV is the first 3 bytes of the AES encryption of a 16-byte block of 0x01 under the new key. Case B: ISD Selected If we first select the ISD: GP_Select(A0 00 00 01 51 00 00 00) -> 90 00 response: 6F 10 84 08 A0000001 51000000 A5 04 9F 65 01 FF then the same PUT KEY is rejected with 6982(security not satisfied)  instead of 6A80. This suggests the ISD does recognise the command but requires a secure channel — and that in Case A the command was going to the SE050 applet, which has no D8 instruction. However, GP_Select() in the middleware sends a plaintext APDU, which tears down the existing SCP03 channel. Our attempts to re-establish SCP03 after selecting the ISD (calling nxScp03_AuthenticateChannel() again, having reset fp_Transform / authType / pdynScp03Ctx on the session) fail: scp :WARN :nxEnsure:'status == kStatus_SSS_Success' failed. At Line:148 Function:nxScp03_AuthenticateChannel case C: Sending via DoAPDUTxRx_s_Case4_ext (with Le) returns 6700 (wrong length), consistent with the ISD's FCI advertising 9F 65 01 FF (max data field 255). waht already ruled out: Each of these was tested and made no difference to the result: Variable Values tried P1 0x00 (create new), 0x0B (replace current), 0x11 (target version) Leading KVN byte in data field present / absent APDU case Case4 (short) / Case4_ext (extended) Key block structure 88 11 10 03 Key wrapping AES-CBC zero IV under current DEK (equivalent to ECB for one block) KCV method AES of 16×0x01 under the new key, first 3 bytes Middleware version Plug&Trust 3.0.6 and 4.7.1 DEK source verified the KEK is the same key set that opens the session With the applet selected all variants give 6A80; with the ISD selected all short-form variants give 6982. Question: What is the correct APDU sequence to rotate the Platform SCP03 keys on SE050C1? Specifically: is PUT KEY expected to be sent to the Issuer Security Domain, or to the SE050 applet? If it must go to the ISD, how should the Platform SCP03 channel be established against the ISD using the Plug&Trust middleware? Is EX_SSS_BOOT_SKIP_SELECT_APPLET the intended mechanism, and if so what is the correct call sequence (SELECT ISD → INITIALIZE UPDATE → EXTERNAL AUTHENTICATE → PUT KEY)? Is the key data field format above correct for this part, in particular the key type coding, the length encoding, the DEK wrapping mode, and the KCV algorithm? Our Plug&Trust package defines INS_GP_PUT_KEY (0xD8) in nxScp03_Const.h and global_platf.h, but contains no implementation and no example that uses it. Could you provide the Platform SCP03 key rotation example / demo (the equivalent of what se05x_Delete_and_test_provision is for provisioning), or point us to it in the full SDK? Could you provide AN12436 (referenced in ex_sss_auth.h as the source of the OEF Platform SCP03 keys), or the application note that documents key rotation for this part? Background — why this went unnoticed For transparency, this is a problem we created for ourselves and only recently detected. Our provisioning code called PUT KEY and then discarded the return status: sw = gp_put_key_using_nxp_middleware(se, DERIVED_SCP03_KEYVER, ...); /* status never checked */ mark_rotated(se, DERIVED_SCP03_KEYVER); /* writes "rotated" marker */ ESP_LOGI(TAG, "SCP03 keys rotated successfully"); /* printed unconditionally */ Because the marker write (WriteBinary) does succeed, every device ends up with a "rotated" flag set while its Platform SCP03 keys are still the factory ones, and provisioning reported success. We have since added the status check, which is how we discovered PUT KEY has never actually succeeded on any unit. We are not asking for help with that part — it is fixed. We mention it only to explain why we are raising this now rather than at bring-up, and to make clear that the part is genuinely unrotated rather than in some partially-rotated state. SE050 Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) Hi @Rutwik0409 , Based on the information provided, the SE050C1 appears to be working correctly at the applet level:  SELECT  ,  GetVersion  ,  GetRandom  ,  ReadObject  , and  WriteBinary  all succeed over Platform SCP03. Therefore, this does not look like a basic transport, T=1, SCP03 key, or secure-messaging failure. Since you are using ESP32-S3 with a custom T=1 over I²C transport, this is likely a porting/integration issue around the GlobalPlatform Security Domain SCP03 session, not evidence that SE050C1 does not support Platform SCP03 key rotation. For Platform SCP03 key rotation , the  PUT KEY  command is a GlobalPlatform Security Domain operation , not an SE050 IoT applet command. The documented sequence is: Select the Security Domain / SSD. Open the Platform SCP03 secure channel using  INITIALIZE UPDATE  /  EXTERNAL AUTHENTICATE  . Send  PUT KEY  to update the Platform SCP03 key set. This also matches the behavior observed: When the SE050 applet is selected,  PUT KEY  returns  6A80  , which is consistent with sending a GlobalPlatform command to the wrong target. When the ISD is selected but no secure channel is established to that domain,  PUT KEY  returns  6982  , which is consistent with “security status not satisfied.” So the main point to check is not only whether Platform SCP03 works to the SE050 applet , but whether the middleware is opening Platform SCP03 against the correct Security Domain before issuing  PUT KEY  . NXP provides a reference demo for this exact operation: se05x_RotatePlatformSCP03Keys The demo is specifically described as demonstrating authentication with the default Platform SCP keys and rotation of those keys to user-defined keys.  Our recommendation is to avoid manually constructing the  PUT KEY  APDU at first, and instead compare against the NXP reference implementation. Here I would first suggest that you verify the implementation using NXP's official reference paths—such as the `se05x_RotatePlatformSCP03Keys` demo found in the Zephyr + nano package so that your ESP32 MCU is well supported without any porting work. This demo serves as NXP's reference implementation for platform SCP03 key rotation. The current issue suggests that the `PUT KEY` command is being sent to the wrong target, or that the corresponding platform SCP03 secure channel was not correctly established after selecting the ISD/SSD. The fact that SCP03 communication with the SE050 applet is functioning correctly does not guarantee that the `PUT KEY` process at the GlobalPlatform Security Domain level has been correctly set up. Please refer to https://github.com/NXPPlugNTrust/nano-package/blob/master/zephyr/readme.rst for more details.   Hope that helps,   Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. ------------------------------------------------------------------------------- Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) hi @Kan_Li, is there a retry or lockout counter on failed Platform SCP03 EXTERNAL AUTHENTICATE? Is a "try key set A, fall back to key set B" pattern supported for Platform SCP03, or does NXP recommend a different approach for a mixed fleet — for example recording the key-set state host-side and never attempting the wrong one? regards, rutwik Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) Hi @Rutwik0409 , Please have my comments as below: Is there a retry or lockout counter on failed Platform SCP03 EXTERNAL AUTHENTICATE? No. There is no brute-force lockout counter at the Platform SCP03 (GlobalPlatform ISD) level on SE050C1. A failed EXTERNAL AUTHENTICATE simply returns a non-9000 status word (e.g. 6300 or 6982) and the channel is not opened. The SE is fully available for a fresh INITIALIZE UPDATE immediately after. No persistent lockout state is written. Note this is different from SE05x applet-level Authentication Objects (AES keys, ECKeys, UserID), which do have a configurable authentication attempts counter in their object policy. Platform SCP03 via the ISD/GlobalPlatform layer does not use that mechanism. Is a "try key set A, fall back to key set B" pattern supported? It is not natively supported, and we would not recommend it as the normal operating flow. The reasons: The INITIALIZE_UPDATE command carries the key version number (KVN) in P2. If you send INITIALIZE UPDATE with KVN=0x01 but the device holds KVN=0x11, the SE returns 6A88 (referenced key not found). You can then retry with the correct KVN — there is no lockout — but each failed INITIALIZE UPDATE is an incomplete authentication attempt and can cause sequence counter desynchronisation over time. It also leaks information about which key version is present on the device. Recommended approach for a mixed fleet The cleanest pattern is to track key-set state host-side and never attempt the wrong KVN: After a successful PUT KEY rotation, write a marker (e.g. a flag in your host backend, keyed by the SE050 Unique ID / CPLC serial number) recording which KVN is now active. On every subsequent boot, look up that marker before issuing INITIALIZE UPDATE so you always open the session with the correct KVN. The se05x_rotate_scp03_keys demo in the nano-package (https://github.com/NXPPlugNTrust/nano-package/tree/master/examples/se05x_rotate_scp03_keys) is a good starting point for the PUT KEY mechanics, but note that by design it reverts back to the old keys at the end — the second ex_se05x_change_keys call is a development safety rollback. The documentation states: "For development testing, we rollback to original keys. It is left to customer to comment out this line." For production use, comment out that second call. Once you do, the SE holds only the new keys, so your host firmware must be updated accordingly to always open the session with the new KVN from that point forward. One important practical note: always verify the return status word of PUT KEY before writing the rotation marker. If PUT KEY fails silently (e.g. returns 6A80 as you are seeing), writing the "rotated" marker anyway will cause every subsequent connection attempt to use the wrong KVN. Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. -------------------------------------------------------------------------------
記事全体を表示
プラットフォームSCP03のキー回転SE050C1 — PUT KEYが拒否(6A80 / 6982) NXPファクトリー(OEF)のキーから、当社独自のデバイス派生キーにSE050C1のプラットフォームSCP03キーをローテーションすることはできません。Plug&Trust 3.0.6と4.7.1の両方で、新品の部品に対して試したすべてのバリエーションでPUT KEYが拒否されました。 工場キーを使ったプラットフォーム SCP03セッションは正常に動作します — 開いてアプレットコマンド(GetVersion、GetRandom、ReadObject、WriteBinary)を正常に実行できます。PUT KEYのみが失敗します。 この部品でプラットフォームSCP03キーを回転させるための正しいAPDUシーケンスと、理想的には参照実装を知りたい。 設定: セキュア要素SE050C1(SSS_PFSCP_ENABLE_SE050C1 = 1) ATR 00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08 01 00 00 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41 54 50 4F(「JCOP4 ATPO」) ホストMCU ESP32-S3、ESP-IDF v5.3.4 I2C経由でのT=1の転送(T1oI2C) ミドルウェアPlug&Trust — 3.0.6と4.7.1をテストしましたが、どちらもミニ版で同じ動作でした。 認証 SE05X_Auth=PlatfSCP03、SSS_HAVE_SE05X_AUTH_PLATFSCP03 ホスト暗号化mbedTLS この部品は工場出荷時の新品です。一度も正常に回転したことはなく、ex_sss_tp_scp03_keys.h の SE050C1 OEF キーで認証されます。 私たちが目指していること: プラットフォームSCP03キーセット(ENC / MAC / DEK)を工場出荷時のOEFキーから、ESP32上で派生したデバイス固有のキー(PBKDF2-HMAC-SHA256、ESP32のeFuse常駐HMACキー上)にローテーションし、特定のホストMCUのみがSE050でプラットフォームSCP03セッションを開けるようにします。 うまくいっている点: 工場出荷時キーでプラットフォームSCP03セッションを開くと成功し、その中のコマンドはwork:scp :DEBUG:認証 Successful!!! APDU :DEBUG:GetVersion [] -> 90 00 APDU 😄 EBUG:GetRandom [] -> 90 00 APDU 😄 EBUG:WriteBinary [] -> 90 00 つまり、チャネル、キー、セキュアメッセージングはすべて正常に機能しています。 何が失敗するか: ケースA: PUT KEYは6A80(誤ったデータ)で却下されます。 コマンドヘッダーと平文データフィールド(SCP03によるラッピング前): hdr : 80 D8 0B 81 Lc=70 データ: 0B <- キーバージョン番号 88 11 10 <16 バイト ENC エンコード。DEK> 03<3-byte KCV> 88 11 10 <16 バイト MAC 暗号化。DEK> 03<3-byte KCV> 88 11 10 <16 バイト DEK エンコード。DEK下> 03<3-byte KCV> キー値は現在の(工場出荷時の)DEKでAES-CBCを用いてゼロIVで暗号化されます。KCVは、新しい鍵の下で16バイトの0x01ブロックのAES暗号化の最初の3バイトです。 ケースB:ISD選択 まずISDを選択すると: GP_Select(A0 00 00 01 51 00 00 00) -> 90 00 応答:6F 10 84 08 A0000001 510000000 A5 04 9F 65 01 FF 同じPUT KEYは6A80ではなく6982(セキュリティ未履行)で却下されます。 これは、ISDがコマンドを認識しているものの、安全なチャネルを必要としていることを示唆しており、CASE Aの場合、コマンドはD8命令がないSE050アプレットに送られていたことになります。 しかし、ミドルウェアのGP_Select()は平文のAPDUを送信し、既存のSCP03チャネルを切断します。ISDを選択した後(セッションでfp_Transform / authType / pdynScp03Ctxをリセットした後、nxScp03_AuthenticateChannel()を再度呼び出した)にSCP03を再確立しようとする試みは失敗します。 scp :WARN :nxEnsure:'status == kStatus_SSS_Success' が失敗しました。 行:148 関数:nxScp03_AuthenticateChannel ケースC: DoAPDUTxRx_s_Case4_ext経由(Leと共に送信)すると6700(長さが誤り)を返し、ISDのFCI広告で9F 65 01 FF(最大データフィールド255)と一致します。 既に除外されているもの: これらのそれぞれについてテストを行ったが、結果に違いはなかった。 試した変数の価値 P1 0x00(新規作成)、0x0B(現在のバージョンを置き換える)、0x11(ターゲットバージョン) データフィールドの先頭KVNバイトが存在/不在 APDUケース4(短編)/Case4_ext(拡張) キーブロック構造 88 11 10 03 現在のDEK(1ブロックのECBに相当)でのAES-CBC 0 IVキーラッピング KCV方法AESは新しいキーで16×0x01の最初の3バイトを使いました ミドルウェアバージョン Plug&Trust 3.0.6 および 4.7.1 DEKソースは、KEKがセッションを開く鍵セットと同じであることを確認した。 アプレットを選択した場合、すべてのバリアントで6A80が返されます。ISDを選択した場合、すべての短縮形バリアントで6982が返されます。 質問: プラットフォームSCP03キーをSE050C1上で回転させる正しいAPDUシーケンスは何ですか?具体的には、PUT KEYは発行者セキュリティドメインに送信される予定ですか、それともSE050アプレットに送られる予定ですか? もしISDに送る必要がある場合、Plug&Trustミドルウェアを使ってプラットフォームSCP03チャネルをISDに対してどのように構築すべきでしょうか?EX_SSS_BOOT_SKIP_SELECT_APPLET意図されたメカニズムでしょうか?もしそうなら、正しい呼び出し順序(SELECT ISD → INITIALIZE UPDATE → EXTERNAL AUTHENTICATE → PUT KEY)は何でしょうか? 上記のキーデータフィールドのフォーマットは、この部分において正しいでしょうか?特に、キータイプのコーディング、長さのエンコーディング、DEKラッピングモード、およびKCVアルゴリズムについて教えてください。 当社のPlug&TrustパッケージはnxScp03_Const.hでINS_GP_PUT_KEY(0xD8)を定義していますglobal_platf.h は存在するが、実装も使用例も含まれていない。プラットフォーム SCP03のキーローテーションの例やデモ(se05x_Delete_and_test_provisionプロビジョニング用のものに相当)を教えてもらえますか?またはフルSDKで教えていただけますか? AN12436(ex_sss_auth.hで参照)を教えていただけますか?OEFプラットフォームSCP03キーのソースとして、あるいはこの部分のキー回転を文書化したアプリケーションノート? 背景 ― なぜこれが見過ごされたのか 透明性を保つために申し上げると、これは私たちが自ら招いた問題であり、ごく最近になってようやく気づいたことです。 当社のプロビジョニングコードはPUT KEYを呼び出し、その後、戻りステータスを破棄しました。 sw = gp_put_key_using_nxp_middleware(se, DERIVED_SCP03_KEYVER, ...); /* ステータスは一度もチェックされていません */ mark_rotated(se, DERIVED_SCP03_KEYVER); /* "rotated"マーカーを書き込む */ ESP_LOGI(TAG, "SCP03キーが正常に回転しました"); /* 無条件に出力されます */ マーカー書き込み(WriteBinary)は成功するため、すべてのデバイスは「回転」フラグが設定され、プラットフォームSCP03キーが工場出荷時のままであり、プロビジョニングで成功が報告されます。その後、ステータスチェックを追加したところ、PUT KEYがどのユニットでも実際に成功したことがないことが判明しました。 その部分については、助けを求めていません。既に修正済みです。私たちがこの件を最初に提起するのではなく、今提起する理由を説明するため、そして当該部品が部分的に回転した状態ではなく、完全に回転していない状態であることを明確にするために、このことを言及しています。 SE050 Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) こんにちは、 @Rutwik0409 さん。 提供された情報に基づき、SE050C1はアプレットレベルで正しく動作しているようです:  SELECT  、  GetVersion  、  GetRandom  、  ReadObject  、そして  WriteBinary  全員がSCP03プラットフォーム上で成功。したがって、これは基本的な輸送、T=1、SCP03キー、またはセキュアメッセージングの失敗ではないようです。 ESP32-S3をカスタムT=1のI²Cトランスポートで使用しているため、これはGlobalPlatformセキュリティドメインSCP03セッションに関するポートや統合の問題であり、SE050C1がSCP03キーローテーションをサポートしていない証拠ではない可能性が高いです。  Platform SCP03キーローテーション において、the  PUT KEY  コマンドは GlobalPlatform Security Domain操作 であり、SE050のIoTアプレットコマンドではありません。文書化された手順は以下のとおりです。 セキュリティドメイン/SSDを選択してください。 プラットフォームSCP03のセキュアチャネルを  INITIALIZE UPDATE  /  EXTERNAL AUTHENTICATE  で開け。 プラットフォームSCP03キーセットを更新するためにSend   PUT KEY  。 これは観察された挙動とも一致する。 SE050アプレットを選択すると、  PUT KEY  returns  6A80  これはGlobalPlatformコマンドを誤ったターゲットに送ることと一致します。 ISDを選択しても、そのドメインへのチャネルが  PUT KEY  returns  6982  に確立されていない場合、これは「セキュリティステータスが満たされていない」と一致します。 ですので、確認すべき主なポイントは SCP03プラットフォームがSE050アプレットに動作するかどうかだけでなく ミドルウェアが発行前に正しいセキュリティドメインに対してSCP03プラットフォームを開いているかどうかです  PUT KEY  。 NXPは、この操作に関するリファレンスデモを提供しています。 se05x_RotatePlatformSCP03Keys デモは、デフォルトのプラットフォームSCPキーでの認証と、そのキーをユーザー定義キーにローテーションする様子を具体的に説明しています。  弊社の推奨事項は、手動で構築することを避けることです。  PUT KEY  最初はAPDUを使用し、代わりにNXPのリファレンス実装と比較する。 まずは、NXPの公式リファレンスパス、例えばZephyr + nanoパッケージに収録されている「se05x_RotatePlatformSCP03Keys」デモを使って実装を検証することをお勧めします。これにより、移植作業なしでESP32 MCUがしっかりサポートされます。このデモは、NXPによるSCP03キー回転プラットフォームのリファレンス実装として機能しています。現在の問題は、「PUT KEY」コマンドが誤ったターゲットに送られているか、または対応するプラットフォームSCP03のセキュアチャネルがISD/SSDを選択した後に正しく確立されていないことを示唆しています。SCP03がSE050アプレットと通信しているからといって、GlobalPlatformセキュリティドメインレベルでの「PUT KEY」プロセスが正しく設定されているとは限りません。 詳細については、 https://github.com/NXPPlugNTrust/nano-package/blob/master/zephyr/readme.rstを参照してください。   お役に立てば幸いです。   すてきな一日を、 カン ------------------------------------------------------------------------------- 注記: この投稿があなたの質問への回答になっている場合は、「正解としてマーク」ボタンをクリックしてください。ありがとうございます! - 前回の投稿から7週間Threadをフォローしており、その後の返信は無視しています もし後で関連する質問があれば、新しいThreadを開き、閉じたThreadを参照してください。 ------------------------------------------------------------------------------- Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) こんにちは 、@Kan_Li。 失敗したプラットフォームSCP03外部認証時に再試行やロックアウトカウンターはありますか? プラットフォームSCP03で「キーセットAを試して、鍵セットBにフォールバックする」パターンはサポートされているのでしょうか?それともNXPは混合フリートに対して、例えばホスト側でキーセットの状態を記録し、間違ったものを試みないなど、別のアプローチを推奨しているのでしょうか? よろしくお願いいたします。 ルトウィク Re: Platform SCP03 key rotation on SE050C1 — PUT KEY rejected (6A80 / 6982) こんにちは、 @Rutwik0409 さん。 私の意見は以下の通りです。 失敗したプラットフォームSCP03の外部認証に再試行やロックアウトカウンターはありますか? いいえ。プラットフォームSCP03(グローバルプラットフォームISD)レベルでは、SE050C1のブルートフォースロックアウトカウンターはありません。EXTERNAL AUTHENTICATE が失敗すると、9000 以外のステータス ワードが返されます (例:6300または6982)でチャネルは開かれません。SEは、その後すぐに新しいINITIALIZE UPDATEを実行できる状態になります。永続的なロックアウト状態は書き込まれません。 これはSE05xのアプレットレベルの認証オブジェクト(AESキー、ECKey、UserID)とは異なり、SE05xはオブジェクトポリシーに認証試行カウントを設定可能です。ISD/GlobalPlatform層を経由するプラットフォームSCP03はそのメカニズムを使用しません。 「キーセットAを試してみて、ダメならキーセットBにフォールバックする」というパターンはサポートされていますか? これはネイティブサポートされておらず、通常の運用フローとしては推奨しません。理由: INITIALIZE_UPDATE コマンドは、P2 内のキー バージョン番号 (KVN) を運びます。KVN=0x01を指定してINITIALIZE UPDATEを送信したが、デバイスがKVN=0x11を保持している場合、SEは 6A88 (参照されたキーが見つかりません)を返します。正しいKVNで再挑戦できますが、ロックアウトはありません。しかし、INITIALIZE UPDATEに失敗するたびに認証が不完全であり、時間とともにシーケンスカウンターの同期不良を引き起こす可能性があります。 また、デバイスにインストールされているキーのバージョンに関する情報も漏洩します。 混合車両群に対する推奨アプローチ 最もクリーンな方法は、ホスト側でキーセットの状態を追跡し、間違ったKVNを試行しないことです。 PUT KEY ローテーションが成功した後、ホストバックエンドのフラグ(例:SE050固有ID/CPLCシリアル番号でキー付け)を記録し、どのKVNがアクティブかを記録します。 その後の起動時には、INITIALIZE UPDATEを発行する前にそのマーカーを確認し、正しいKVNでセッションを開けるようにしてください。 ナノパッケージ(https://github.com/NXPPlugNTrust/nano-package/tree/master/examples/se05x_rotate_scp03_keys)のデモ se05x_rotate_scp03_keys は PUT KEY メカニクスの良い出発点ですが、設計上最後には旧キーに戻されます。2つ目の ex_se05x_change_keys コールは開発セーフティのロールバックです。ドキュメントには「開発テストでは、元のキーにロールバックします。このラインについてはお客様にコメントを委ねます」と記載されています。本番環境で使用する場合は、2番目の呼び出しをコメントアウトしてください。一度そうすると、SEは新しいキーだけを保持するため、ホストファームウェアはそれに合わせて更新され、常に新しいKVNでセッションを開く必要があります。 重要な実務上の注意点:回転マーカーを書き込む前に、必ず PUT KEY の戻りステータスワードを確認してください。 PUT KEY がサイレントに失敗した場合 (例:ご覧のとおり 6A80 が返されますが、それでも「rotated」マーカーを書き込むと、以降の接続試行すべてで間違った KVN が使用されます。 すてきな一日を、 カン ------------------------------------------------------------------------------- 注記: この投稿があなたの質問への回答になっている場合は、「正解としてマーク」ボタンをクリックしてください。ありがとうございます! - 前回の投稿から7週間Threadをフォローしており、その後の返信は無視しています もし後で関連する質問があれば、新しいThreadを開き、閉じたThreadを参照してください。 -------------------------------------------------------------------------------
記事全体を表示
Time Sensitive Networking (TSN) Protocols Usage on I.MX95 Platform This document analyzes IMX95 supported TSN protocols such as 802.1Qav, 802.1Qbv, 802.1Qbu and 802.1Qci, and introduces use cases design to implement these protocols on I.MX95 platform.
記事全体を表示
Using DMA for Pulse Counting on S32K3 Application note AN5258 for the S32K1 describes how to implement external pulse counting using DMA and PORT modules. Referring to that application note, we will implement a similar function using SIUL2 and DMA on the S32K3.   1. Introduction This article describes how to perform pulse counting using Enhanced Direct Memory Access (eDMA) and the SIUL2 module on a 32-bit automotive MCU in the S32K3 series. Typically, signal pulses can be counted using the eMios module; however, eMios can also be used for PWM output, ICU, OCU, and GPT. If resources available for eMios are insufficient, consider using the SIUL2 and DMA modules to implement external pulse counting. In this note, the SIUL2 module will be used to capture multiple pulse inputs, and the current major loop iteration count(CITER) register of the eDMA channel will be used as a pulse counter. 2. SIUL2 supports DMA triggering. SIUL2, or System Integration Unit Lite2, is primarily responsible for controlling the electrical attributes, multiplexing functions, GPIO, EIRQ, etc., of external pins. For the S32K3, SIUL2 functions can be categorized as follows: Pin mux/pad control: Configures MSCR, IMCR, etc. GPIO input/output: Typically used via Siul2_Dio/Siul2_Port drivers. External interrupt EIRQ: Only pins with the EIRQn option support SIUL2 external interrupts. DMA is triggered by external edge events. When using SIUL2 pins to trigger DMA, note that: SIUL2 EIRQ[0-15] can be used for interrupt requests or DMA requests, while EIRQ[16-31] can only be used for interrupt requests. In other words, the SIU2L module can support up to 16 external edge events triggering DMA. The file "S32K3xx_IOMUX.xlsx" can be found in the datasheet appendix. 3. Basic Event Chain for SIUL2 Triggered DMA SIUL2 external events still rely on the EIRQ path: a pad needs to be connected to the corresponding EIRQ input via IMCR, input buffering needs to be enabled, rising/falling edge detection needs to be configured, and the relevant request needs to be enabled. In this example, PTB26 is configured as SIUL2 EIRQ13, and external interrupt configuration is completed through registers such as IREER/IFEER and DIRSR. IP_SIUL2->IREER0 |= (1 << 13); // IREER0[EIRE13] = 1 (Enable Rising Edge) IP_SIUL2->IFEER0 &= ~(1 << 13); // IFEER0[EIRE13] = 1 (Enable Falling Edge) IP_SIUL2->DIRSR0 |= (1 << 13); // Select DMA Request for PTB26 The above bare-metal code clearly shows how to configure the Siul2 module to trigger DMA. However, if using RTD, note that: the current "Siul2_Icu" driver does not support configuring the DMA option. Therefore, when using the "Siul2_Icu" component, you also need to manually add and modify the "DIRSRx" bit to 1, i.e., select to enable "DMA request". SIUL2->DIRSR0 |= (1<<13);/* Select DMA Request for PTB26 */ 4. DMAMUX / RM Configuration After a DMA request is generated on the SIUL2 side, the request source needs to be connected to a DMA channel via DMAMUX. This path is described in “S32K3xx_DMAMUX_map.xlsx”: 1.EIRQ[0 ~ 7] corresponds to 1 to 7 of DMAMUX0 Source, and EIRQ[8 ~ 15] corresponds to 1 to 7 of DMAMUX1 Source. 2.TCD 0 ~ 15 can be configured with any channel corresponding to EIRQ[0 ~ 7], and TCD 15 ~ 31 can be configured with any channel corresponding to EIRQ[8 ~ 15].  eDMA is mainly used for data transfer between main memory and other peripheral register spaces without CPU intervention. Upon receiving a peripheral request, the eDMA module's second loop begins basic data transfer. We set an empty transfer; each time SIUL2 triggers DMA, an empty transfer is performed, and the CITER bit is decremented accordingly. At this time, the value of the CITER register reflects the actual pulse count. Based on the above principle, we can calculate the pulse count or pulse frequency by periodically reading the CITER register. Note:       The CITER register can only hold a maximum of 15 bits of data. Check the CITER register each time you read it to ensure its value is not zero. When the CITER register is zero, CITER will reload its value from the BITER register and continue decrementing. 5. Example Project Demonstration This example program is based on the S32K344, using RTD version 7.0.1. It implements the function of acquiring the pulse frequency input from PTB26, PTA18, and PTA19 pins. 1.The timer is set to 1 second; the count value read in 1 second can be directly used as the measured frequency. 2. The maximum value of the CITER register is 0x7FFF, or 32767. When the count value exceeds 0x7FFF, the register will be reloaded with an initial value of 0x7FFF.. 3. CITER triggers a DMA interrupt during reload. "g_DmaChx_CallbackCounter" can be used to record the number of overflow reloads. 4. Based on CITER and "g_DmaCh16_CallbackCounter", high-frequency pulse input counting can be achieved. 5. To measure an input frequency of 40kHz, connect the signal generator's output signal to PTB26, PTA18, and PTA19. Senlent_0-1787211805542.pngSenlent_0-1787211805542.png 6. Test result in S32 DS. Senlent_1-1787211927621.pngSenlent_1-1787211927621.png        Using the Siul2 module to trigger DMA for counting is a very efficient method, but it should be noted that if other eDMA transfers are enabled in your application, more testing is required to ensure stable execution of all eDMA channels.
記事全体を表示
我的 JLINK 无法连接到 S32K118 大家好, 我目前的情况是,我通过SWD读取MDM-AP的状态,返回值为0x0001003A。保护位(0x400~0x40f)为0xFFFFFFFFFFFFFFFFFFFFFFFFFE7FFFFF。但是我的JLINK无法连接到S32K118。我应该如何排查这个问题? 谢谢,此致敬礼! 莉卡。 Re: my JLINK can't connect to the S32K118 我已经连接了 RESET_b。 Re: my JLINK can't connect to the S32K118 你好 Robin_Shen, MDM-AP 控制寄存器的值为 0x00000000。我已经完成了 S32K14x 的 SWD 主机调试。对于 S32K11x 芯片,我的代码遵循与 S32K14x 相同的调试流程,但出现了我描述的情况。我想请问 S32K11x 和 S32K14x 的 SWD 调试流程是否存在任何差异? 目前,我的个人程序员可以访问 S32K118 的 SWD 调试端口,但在使用 MASS ERASE 后,通过 RAM 执行的算法返回 ack 错误,而 MASS ERASE 之前并没有发生这种情况。 谢谢,此致敬礼! 莉卡。 Re: my JLINK can't connect to the S32K118 HI MDM-AP STATUS 和 FSEC 的值似乎是正确的。顺便问一下,MDM-AP 控制寄存器的值是多少? 请检查调试接口是否符合 AN5426 S32K1xx 微控制器硬件设计指南 中的 表 8. S32K1xx - JTAG 和 SWD 接口 。 强烈建议连接RESET_b 。另外,请确保调试接口上的上拉/下拉电阻接对了。 Table 8. S32K1xx - JTAG and SWD interface AN5426.png表 8. S32K1xx - JTAG 和 SWD 接口 AN5426.png 或者,尝试“修复 S32K146”中提到的方法。 此致敬礼, Robin 回复: my JLINK can't connect to the S32K118 还有什么细节需要补充吗? 回复: my JLINK can't connect to the S32K118 在 JLINK 连接失败之前,我自己的编程器设备无法读取 0x40c~0x40f 处的数据,我可以确认该芯片未处于安全状态或设置了任何保护。在我尝试使用 MASS ERASE 之后,我拥有的所有设备都无法完全操作 S32K118。之后的事情就和我寻求帮助时描述的一模一样了。
記事全体を表示
Access NDA required for SR040 and SR150 I'm interested in having a meeting talking about the above IC's - I cant seem to find an easy way to do this or to request the NDA to access more knowledge about the SR040 and SR150 and would appreciate some help being pointed in the right direction. Thank you! Re: Access NDA required for SR040 and SR150 Hello, Hope you are doing well. Sorry for the inconvenience this might cause you but as the information of this product it's under NDA (Non-Disclosure Agreement) the information it's not public. For more information about the chip could you please contact one of our distributors available in the Distributor Network|NXP? Or if you have any direct contact who helped you getting this device, please contact them. If you are looking for information about our UWB products or you are interested in this technology, I would recommend you check these Development Kits and Modules from our Partners (Trimension UWB Partners). In case you are interested in one of these Kits/Modules, you would need to go directly with them to know the process and the support that they can provide them, as the support path for this technology is through them. The documentation and software are distributed by the corresponding UWB Module partner. By selecting a module, you will be guided to our partner’s page where you can access datasheets, application notes, and the required enablement Regards, Ricardo
記事全体を表示
S32K312 Firmware-Compatibility Hello NXP Support, We are developing TPMS controllers using S32K312HVS MCUs. Currently sourced from China (Rev: 0P09C), we are transitioning to Malaysia production (same MCU model). For Phase 1 validation, please confirm the following: 1. SILICON & FIRMWARE COMPATIBILITY - Will identical firmware binary (we developed ourselves) run identically on Malaysia-sourced S32K312HVS without recompilation? - Are there ANY silicon-level differences between China and Malaysia MCUs (same part number)? 2. SPECIFICATION CONSISTENCY – exact match on Malaysia MCUs? - Reset module (RGM: FREC/FRET/DREC/DRET counters) – identical behavior? - FlexCAN peripheral (500 kbps, ISO-TP) – no variations? - Clock accuracy & PLL lock time – same specs? 3. ERRATA & WORKAROUNDS - Current firmware includes workarounds (RGM escalation, CAN timeout handling). - Are these workarounds still valid on Malaysia MCUs, or do we need adjustments? - Any NEW errata specific to Malaysia production? 4. PROCESS VARIATIONS - Any electrical parameter shifts (timing, power, temperature coefficient)? - ECC reliability differences on Malaysia-sourced Flash/NVM? Please confirm: Can we use the SAME firmware binary and expect IDENTICAL product behavior on Malaysia MCUs, or are adjustments required? Timeline: Phase 1 validation starts in the end of September. Your quick response would be appreciated. Re: S32K312 Firmware-Compatibility Hello, The S32K3xx ordering part number system uses a "N" prefix to designate "Non-China manufacturing qualified ordering part number." This is purely a sourcing/ordering designation. Critically, it does not indicate a new mask set or silicon revision — the same die/mask (0P09C) is used. The Malaysia assembly/test site is ATKL (Petaling Jaya, Malaysia), which is NXP's qualified assembly and test facility for the S32K family. What you have to pay attention is the mask revision petervlna_0-1788419667576.pngpetervlna_0-1788419667576.png petervlna_1-1788419699369.pngpetervlna_1-1788419699369.png The "N" prefix is essentially a supply chain resilience and geopolitical risk mitigation tool. It gives customers: Guaranteed non-China assembly & test — the device is assembled and tested exclusively at non-China sites (e.g., ATKL Petaling Jaya, Malaysia). Customers who have contractual, regulatory, or policy requirements to avoid China-origin manufacturing can source the "N" variant to satisfy those requirements. Export control / trade compliance — some customers (especially in defense-adjacent, government, or regulated automotive supply chains) are required to document and control country-of-origin for components. The "N" variant provides a clean audit trail. Supply diversification — having both "S" and "N" qualified variants gives customers flexibility to switch sourcing without re-qualification, since both variants share the same silicon die, mask set, and electrical specifications. Best regards, Peter
記事全体を表示
WoAをサポートするCortex-A53 SoCに関する問い合わせ NXPテクニカルサポート担当者様 NXP S32G2/S32G3プラットフォーム上のCortex-A53コアについてアドバイスをいただきたいです。 NXPはCortex-A53コア向けに公式にLinux BSPを提供していると理解しています。しかし、Linux以外のオペレーティングシステム、特にWindows on Armを実行できるかどうかを調査したいと考えています。 私の初期調査によると、Windows on ArmはAArch64(ARM64)アーキテクチャをサポートしており、Cortex-A53はARMv8-A 64ビットアーキテクチャに基づいています。したがって、CPUアーキテクチャの観点から見ると、両者は互換性があるように思われる。しかし、CPUアーキテクチャの互換性だけでは特定のハードウェアプラットフォームでWindowsを動かすには不十分かもしれないことは理解しています。 以下の点についてアドバイスいただけますか? Linux BSP以外で、S32G2/S32G3のCortex-A53コアでWindows on Armを動かすことは可能でしょうか? 可能であれば、どのような方法が利用できますか? 例えば、既存のBSPやポーティングソリューションはありますか?それともブートローダーやUEFI、ACPIの設定、デバイスドライバなどのコンポーネントを移植・開発する必要があるのでしょうか? Windows on ArmがS32G2/S32G3プラットフォームで動作するなら、ハードウェアやドライバーの互換性はどの程度期待できるのでしょうか? 特に、既存のペリフェラルやドライバがWindows上でサポートできるかどうかを理解したいと考えています。 Windows on ArmがCortex-A53コア上で動作している場合、Cortex-A53のロックステップ機能はまだ使えますか? もしそうなら、ロックステップはどのように設定されているのでしょうか?また、Linux BSP環境と比べて何か違いや制限はありますか? 私たちのプロジェクトの目標は、S32Gプラットフォーム上でWindows on Armを動かすだけでなく、Cortex-A53のロックステップ機能がWindows環境で使用可能かどうかを検証することです。 このテーマについて、皆さまのアドバイスやおすすめをいただけると大変ありがたいです。 Re: Inquiry about Cortex-A53 SoC supporting WoA こんにちは、 @Toan 投稿ありがとうございます。 1.Linux BSP以外にも、一部の顧客はQNX、Vxworks、さまざまなRTOSなどS32G上で他のOSを使用している場合があります。 2. Windows(ARM版)をS32Gプラットフォームに移植することに関する参考文献やサンプル、ドキュメントは一切ありません。 3. 私の理解では、理論的にはARM用のWindowsはArm64と互換性があるため、S32GのA53コアで使用可能です。ただし、ACPI、GPU、UEFIなどはWindows(ARMバージョン)で必要とされる場合があります。既存のS32Gソフトウェア実装とは全く異なるため、WindowsをARMで動かすために必要なすべての項目を実装するのは簡単ではありません。 BR チェイン 
記事全体を表示
LS1028A Felix (swp0): Hardware TX Timestamp Not Produced for Custom-EtherType Frames on the CPU-Inje 1. Environment Platform: NXP LS1028ARDB (VSC9959 / Felix switch) Kernel: Linux 6.18.2-rt3 (NXP Yocto real-time-edge, PREEMPT_RT) Topology (DSA): eno2 (ENETC) = DSA conduit / NPI port swp0 = Felix user port (CPU-injection path: CPU → eno2 → NPI → egress swp0 physical port) eno0 (ENETC) = separate test port (now directly cabled to swp0, used to verify the actual egress frame content) Application: AF_PACKET SOCK_RAW socket bound to swp0, SO_TIMESTAMPING(TX_HARDWARE|RAW_HARDWARE), transmitting frames with custom EtherType 0x88B5, expecting the hardware TX timestamp from the socket error queue (SCM_TIMESTAMPING). ptp4l is running on swp0 (HWTSTAMP_TX_ON, syncing normally, unaffected). 2. Goal Obtain a hardware TX timestamp for custom 0x88B5 (non-PTP) frames transmitted on swp0, without breaking PTP synchronization on swp0. 3. Confirmed working PTP frames DO get timestamps: using the same AF_PACKET raw socket on swp0, transmitting 0x88F7 + a valid PTP header, 30/30 frames returned a hardware TX timestamp via the error queue (ocelot_get_txtstamp matched, timestamp delivered to the socket error queue). The driver timestamp-request path works for the custom frames: 0x88B5 frames reach ocelot_port_txtstamp_request (dmesg shows felix-tx-ts: port 0 non-PTP=1 ts_id=0..3), i.e. ocelot_port->ptp_cmd is non-zero (set by ptp4l) and a timestamp ID is allocated. 4. Problem For 0x88B5 frames, a timestamp ID is allocated, but the hardware produces no timestamp: SYS_PTP_STATUS PTP_MESS_VLD = 0 immediately after sending a burst of 0x88B5 frames (no FIFO entries, no overflow). The socket error queue stays empty. 5. What we checked and ruled out (evidence) Check Result ocelot_port->ptp_cmd (two-step enable) ✅ non-zero (set by ptp4l) IFH BYPASS (bit 127) ✅ =1 (driver ocelot_ifh_set_bypass) IFH REW_OP1 (bits 125–117) ✅ confirmed by code: two-step(3) + ts_id written for 0x88B5 frames REW_PTP_CFG.PTP_2STEP_DIS ✅ =0 (two-step not disabled) PTP_CFG_MISC.PTP_ENA ✅ =1 SYS_PORT_MODE.DATA_WO_TS (ports 0/4/6) ✅ =0 (inline timestamp write not disabled) REW_PORT_CFG.FCS_UPDATE_CPU_ENA ✅ =1 (CPU frames always get FCS recomputed, no bad-CRC drops) IS2 rules adding two-step authorization for 0x88B5 (ingress swp0, then swp0|NPI) ❌ no effect (CPU-injected frames have BYPASS=1, analyzer/IS2 is skipped) Inline timestamp insertion SYS_TIMESTAMP_OFFSET (ETH_TYPE_CFG=0x88B5, TIMESTAMP_OFFSET=14; register write/readback verified) ❌ no effect (with swp0↔eno0 direct cable, no timestamp at absolute byte 28 of the egress frame) 6. Questions for Official Confirmation Does the VSC9959/Felix two-step TX timestamping (IFH REW_OP1, REW_OP[2:0]=3) actually work for CPU-injected frames with a non-PTP EtherType? The reference manual (16.4.13.12.3.1) states "can be applied to any frame, also non-PTP frames", but we measure SYS_PTP_STATUS VLD=0 (zero FIFO entries). Is the actual silicon behavior that, even with BYPASS=1 and REW_OP1 in the IFH, the rewriter still requires the frame to be classified as PTP (by EtherType / PTP header) before it produces a timestamp FIFO entry? Does SYS_TIMESTAMP_OFFSET (inline timestamp insertion) have any hidden enable/trigger condition beyond the ETH_TYPE_CFG match? We verified: the register is written correctly (ETH_TYPE_CFG=0x88B5, offset=14), FCS update is enabled, DATA_WO_TS=0, and with a direct swp0↔eno0 cable we confirmed the egress frame content — but no timestamp was written into the frame. Is this feature also restricted on the CPU-injection (BYPASS) path? On the CPU-injection (BYPASS=1) path, is there an officially supported way to get a hardware TX timestamp for arbitrary-EtherType custom frames transmitted on swp0? (e.g., some enable bit, a PTP classification table configuration, or a required frame format.) If neither of the two manual-documented mechanisms supports non-PTP frames on this silicon, is there a known erratum or a recommended alternative? Re: LS1028A Felix (swp0): Hardware TX Timestamp Not Produced for Custom-EtherType Frames on the CPU- Two-step TX timestamping for non-PTP CPU-injected frames The RM documents REW_OP[2:0] = 3 in the CPU Injection Header as “Two-step PTP,” with REW_OP[8:3] carrying the timestamp identifier; IDs 0–3 are explicitly pre-allocated for CPU-injected frames. It also states that two-step timestamping can be applied to “any frame, also non-PTP frames,” because the frame itself is not modified, and the TX timestamp is stored in SYS::PTP_STATUS / SYS::PTP_TXSTAMP .  So, from the RM, BYPASS=1 + IFH REW_OP[2:0]=3 should be a valid mechanism for CPU-injected two-step timestamping, including non-PTP frames . I did not find RM evidence that the rewriter must first classify the frame as PTP by EtherType/header when the IFH supplies the two-step command. The contradictory part is your measurement: SYS_PTP_STATUS.PTP_MESS_VLD=0 after confirmed IFH REW_OP1 , which is not explained by the RM text I retrieved. SYS_TIMESTAMP_OFFSET / inline timestamp insertion ES_SYS_SYSTEM_TIMESTAMP_OFFSET is documented as matching ETH_TYPE_CFG and placing a 64-bit nanosecond TX timestamp at TIMESTAMP_OFFSET ; the manual even gives a “generic timestamp insert (Chronos)” example where offset 14 places the timestamp at absolute byte 28 in the Ethernet frame.  I did not retrieve documentation that states an additional hidden enable bit beyond the general PTP enable / timestamp-offset configuration, nor documentation that explicitly says this feature is supported or blocked on CPU-injected BYPASS=1 frames. The RM wording supports the generic mechanism, but your direct-cable observation that no bytes are written at the expected offset indicates that, in this CPU-injection path, ETH_TYPE_CFG match alone is not sufficient in your setup. Officially supported way under Linux DSA to timestamp arbitrary EtherType frames on swp0 The strongest software-side evidence says: generic packet timestamping is not supported by the DSA framework used by the LS1028A switch driver, even though the switch hardware is capable of it .  Therefore, under the stock/standard DSA Felix driver model, I would treat PTP/IEEE-1588 event message timestamping as the supported path , and arbitrary EtherType 0x88B5 TX timestamping via SO_TIMESTAMPING on swp0 as not officially supported by that software stack . That aligns with your observation that valid 0x88F7 PTP frames timestamp reliably while 0x88B5 does not. Erratum / recommended alternative I did not retrieve a timestamp-specific LS1028A/Felix erratum for this behavior. The evidence I found says the published Felix erratum mentioned in the retrieved ticket material is ERR A-050484 , related to NPI flow control / frame-loss management rather than timestamp FIFO generation. 
記事全体を表示
In S32DS Debug mode, the scst self-test enters a hard fault, causing the program to crash (urgent). Good morning I encountered a very urgent problem at work. How should I solve it? I'm using S32DS. In Debug mode, the scst self-test enters a hard fault, causing the program to crash. Looking forward to your reply 回复: S32DS Debug 模式下scst 自检会进入hardfault 导致程序跑死(急) The supplementary environment is as follows: Chip: S32K312NVSOPO0CCTRK2515N S32DS Version: 3.6.2 RTD Version: SW32K3_S32M27x_RTD_R23-11_7.0.1_D2603 SCST: S32K3_M7SCST_1.0.4_D2401 Debugging steps: In debug mode, when SCST self-test runs to the m7_scst_exception_usage_fault_test test case, it enters the trap. After commenting it out, the next test case also enters the trap. 回复: S32DS Debug 模式下scst 自检会进入hardfault 导致程序跑死(急) Hi, The m7_scst_exception_usage_fault_test intentionally exercises the Cortex-M7 exception mechanism. Therefore, seeing an exception during execution of this atomic test may be expected. In a debug session the debugger may halt when the exception is generated before SCST processes it and returns control to the test shell. Could you please confirm: whether the issue occurs only in Debug mode, whether execution continues after pressing Resume, the SCST return value/signature, and the value of m7_scst_fault_inject_test_index before the SCST execution? There is a previously reported S32K312 SCST issue where incorrect initialization of m7_scst_fault_inject_test_index caused unexpected behavior in m7_scst_exception_usage_fault_test. https://community.nxp.com/t5/SafeAssure-Community/S32K312-After-integrating-SCST-the-SCST-test-fails-the-first-run/m-p/1878710 BR, Petr 回复: S32DS Debug 模式下scst 自检会进入hardfault 导致程序跑死(急) The above may not be complete; the following environment should be added: Chip: S32K312NVSOPO0CCTRK2515N S32DS Version: 3.6.2 RTD Version: SW32K3_S32M27x_RTD_R23-11_7.0.1_D2603_DesignStudio_updatesit 回复: S32DS Debug 模式下scst 自检会进入hardfault 导致程序跑死(急) Resolved, thank you very much
記事全体を表示
RT1180 EVKのETH1/ETH2/ETH3をlwIP用に1Gbpsで初期化する方法は? 私はMIMXRT1180-EVKを使用しています。利用可能なSDKの例、例えばlwIP pingやiPerfでは、イーサネット初期化は ETH4のみで示されています。 私たちの製品は、RT1180と外部デバイス間のデータ交換のために ETH1/ETH2/ETH3 を1Gbpsで使用する必要があります。 ETH1/ETH2/ETH3のイーサネット初期化と設定は自分たちで開発することが期待されているのか、それとも既存のリファレンス実装があるのか? よろしくお願いします! Re: How to Initialize RT1180 EVK ETH1/ETH2/ETH3 at 1 Gbps for lwIP? @JuiHung様、 現時点では、この特定の要件をカバーした参考例やユーザーガイドは存在しません。 もう少しお待ちいただけますか?社内の専門家が現在、関連するサンプルプロジェクトを準備中ですが、公開できるまでにはもう少し時間がかかります。 ご理解とご辛抱に感謝いたします。進捗状況については随時ご報告いたします。 よろしくお願いいたします。 シェリー
記事全体を表示
SC18IM704 does not work Hi everyone! I used STM32F407 for UART communication with SC18IM704 chip. The UART peripheral of STM32 successfully sent data to tx, but there was no feedback from SC18IM704 on rx.when board is power on.UART baud rate is 9600 bit/s. The schematic diagram of the board is shown in the figure. 3046B74B-E9DE-4e11-8E23-9134E0817F20.png3046B74B-E9DE-4e11-8E23-9134E0817F20.png I use the Read version function ID command of SC18IM704 .shown in the figure SDS1204X_HD_JPG_1.jpgSDS1204X_HD_JPG_1.jpg No data feedback provided of SC18IM704 I2C uart Re: SC18IM704 does not work Hi,  according to the SC18IM704 datasheet, after power up the SC18IM704 send two bytes to the host. Do you receive these two bytes after power up?  JozefKozon_0-1779954086888.pngJozefKozon_0-1779954086888.png If you are not receiving these two bytes, please check if the RESET pin is high. Please remove the 10k pull-up resistors on the TX and RX lines. Only the RX pin requires pull-up resistor and only if you want to keep the SC18IM704 in Deep Power-down mode. Otherwise no pull-up resistors should be on the TX and RX lines. With Best Regards, Jozef Re: SC18IM704 does not work Hello,  thank you for confirmation. Please remove the R106 resistor, to disconnect the TX pin from your MCU. To make sure, that the TX pin is floating (not held high by your MCU). Then power up the SC18IM704 and measure the TX pin on the SC18IM704 with an oscilloscope to look for the "OK", the two bytes 0x4F and 0x4B.  If you still don't see the "OK" please conduct the reset with the RESET pin.  1. Watch TX with oscilloscope 2. Hold RESET LOW (GND) for ~10 ms 3. Release to HIGH 4. See if the "OK" appears   With Best Regards, Jozef Re: SC18IM704 does not work hello Jozef: I check the RESET pin of SC18IM704 is high(3.3V) by oscilloscope.after power up the SC18IM704. I not find the two bytes('OK') by oscilloscope. I removed the 10k pull-up resistors on the TX and RX lines. I use four SC18IM704 chips ,and the situation is the same. I don't know how to solve this problem,please help me. Re: SC18IM704 does not work Hi, I am running into similar issue, did remove the Rx and Tx resistors, but still now showing ok. What are some common next step to trouble shoot, or if there is a recommended design that I can look into.
記事全体を表示
添加 HSE 元器件失败 我使用的是S32 Design Studio IDE 3.6.8版本,RTD 版本 7.0.1,采用 S32K314 项目。我无法在外围配置视图中添加 HSE IP 核,这导致配置工具无法在生成的文件中自动生成 hse_mu 驱动程序。我该如何解决这个问题? 1131_0-1788401575417.png1131_0-1788401575417.png 我还需要添加哪些元器件? 1131_1-1788401624401.png1131_1-1788401624401.png Re: Failed to add the HSE component HI 您还需要安装一个单独的补丁包,其描述包含“加密驱动程序”,例如S32K3 实时驱动程序 ASR R23-11 版本 7.0.1 P02 。 SW32K3_RTD_R23-11_7.0.1_P02_D2603_ReleaseNotes.pdf ,特别是第2.5 节“支持和提供的驱动程序插件” ,提到了Hse_IP 。 此致敬礼, Robin
記事全体を表示
LS1028A Felix (swp0):CPU-Inje 上的 Custom-EtherType 帧未生成硬件发送时间戳 1. 环境 平台:NXP LS1028ARDB(VSC9959 / Felix 交换机) 内核:Linux 6.18.2-rt3 (NXP Yocto real-time-edge, PREEMPT_RT) 拓扑结构(DSA): eno2 (ENETC) = DSA 导管 / NPI 端口 swp0 = Felix 用户端口(CPU 注入路径:CPU → eno2 → NPI → 出口 swp0 物理端口) eno0 (ENETC) = 单独的测试端口(现在直接连接到 swp0,用于验证实际的出口帧内容) 应用程序:AF_PACKET SOCK_RAW套接字绑定到swp0 , SO_TIMESTAMPING(TX_HARDWARE|RAW_HARDWARE) ,使用自定义 EtherType 0x88B5发送帧,期望从套接字错误队列 (SCM_TIMESTAMPING) 获取硬件 TX 时间戳。 ptp4l 在 swp0 上运行( HWTSTAMP_TX_ON ,同步正常,不受影响)。 2. 目标 获取在 swp0 上传输的自定义 0x88B5(非 PTP) 帧 的硬件 TX 时间戳 ,而不破坏 swp0 上的 PTP 同步。 3. 已确认正常工作 PTP 帧确实会获取时间戳:在 swp0 上使用相同的 AF_PACKET 原始套接字,发送 0x88F7 + 有效的 PTP 标头,30/30 个帧通过错误队列返回硬件 TX 时间戳( ocelot_get_txtstamp匹配,时间戳已传递到套接字错误队列)。 驱动程序时间戳请求路径适用于自定义帧:0x88B5 帧到达ocelot_port_txtstamp_request (dmesg 显示felix-tx-ts:端口 0 非 PTP=1 ts_id=0..3 ),即ocelot_port->ptp_cmd非零(由 ptp4l 设置),并且分配了时间戳 ID。 4. 问题 对于 0x88B5 帧,会分配一个时间戳 ID,但硬件不会生成时间戳: 发送 0x88B5 帧突发后, SYS_PTP_STATUS PTP_MESS_VLD = 0 (无 FIFO 条目,无溢出)。 套接字错误队列保持为空。 5. 我们检查并排除的内容(证据) 检查结果 ocelot_port->ptp_cmd (两步启用) ✅ 非零值(由 ptp4l 设置) IFH旁路(位127) ✅ =1(驱动程序 ocelot_ifh_set_bypass ) IFH REW_OP1 (位 125–117) ✅ 代码已确认:two-step(3) + ts_id 已写入 0x88B5 帧 REW_PTP_CFG.PTP_2STEP_DIS ✅ =0(两步走未禁用) PTP_CFG_MISC.PTP_ENA ✅ =1 SYS_PORT_MODE.DATA_WO_TS (端口 0/4/6) ✅ =0(未禁用内联时间戳写入) REW_PORT_CFG.FCS_UPDATE_CPU_ENA ✅ =1(CPU帧总是重新计算FCS,不会出现CRC校验错误丢帧) IS2 规则为 0x88B5 添加两步授权(入口 swp0,然后 swp0|NPI) ❌ 无影响(CPU注入的帧具有BYPASS=1,分析器/IS2被跳过) 内联时间戳插入SYS_TIMESTAMP_OFFSET (ETH_TYPE_CFG=0x88B5, TIMESTAMP_OFFSET=14; 寄存器写入/读取已验证) ❌ 无影响(使用 swp0↔eno0 直连电缆,出口帧第 28 个字节无时间戳) 6. 需要官方确认的问题 VSC9959/Felix 的两步发送时间戳(IFH REW_OP1,REW_OP[2:0]=3)是否真的适用于 CPU 注入的非 PTP 以太网类型帧?参考手册 (16.4.13.12.3.1) 指出“可应用于任何帧,包括非 PTP 帧”,但我们测量到SYS_PTP_STATUS VLD=0(FIFO 条目为零)。实际的芯片行为是否是,即使 BYPASS=1 且 IFH 中设置了 REW_OP1,重写器仍然需要先将帧分类为 PTP(通过以太网类型/PTP 头部),然后才会生成时间戳 FIFO 条目? SYS_TIMESTAMP_OFFSET (内联时间戳插入)除了 ETH_TYPE_CFG 匹配之外,是否还有其他隐藏的启用/触发条件?我们已验证:寄存器写入正确(ETH_TYPE_CFG=0x88B5,偏移量=14),FCS 更新已启用,DATA_WO_TS=0,并且使用直接连接 swp0↔eno0 的线缆确认了输出帧的内容——但帧中并未写入时间戳。此功能是否也仅限于 CPU 注入(旁路)路径? 在 CPU 注入(BYPASS=1)路径下,是否存在官方支持的方法,可以为通过 swp0 发送的任意以太网类型自定义帧获取硬件发送时间戳? (例如,通过启用位、PTP 分类表配置或所需的帧格式。) 如果这两种手册中记录的机制都不支持此硅芯片上的非 PTP 帧,是否有已知的勘误或推荐的替代方案? Re: LS1028A Felix (swp0): Hardware TX Timestamp Not Produced for Custom-EtherType Frames on the CPU- 对非PTP CPU注入帧采用两步发送时间戳 RM 文档在 CPU 注入头中将 REW_OP[2:0] = 3 表示为“两步 PTP”,其中 REW_OP[8:3] 携带时间戳标识符;ID 0-3 已明确预先分配给 CPU 注入的帧。它还指出,两步时间戳可以应用于“任何帧,包括非PTP帧”,因为帧本身不会被修改,发送时间戳存储在SYS::PTP_STATUS/SYS::PTP_TXSTAMP中。 因此,从 RM 来看,BYPASS=1 + IFH REW_OP[2:0]=3 应该是 CPU 注入的两步时间戳的有效机制,包括非 PTP 帧。我没有找到 RM 证据表明,当 IFH 提供两步命令时,重写器必须首先根据 EtherType/报头将帧分类为 PTP。矛盾之处在于您的测量结果:在确认 IFH REW_OP1 之后,SYS_PTP_STATUS.PTP_MESS_VLD=0,而我检索到的 RM 文本并未对此进行解释。 SYS_TIMESTAMP_OFFSET / 内联时间戳插入 ES_SYS_SYSTEM_TIMESTAMP_OFFSET 的文档说明是与 ETH_TYPE_CFG 匹配,并在 TIMESTAMP_OFFSET 处放置一个 64 位纳秒级的发送时间戳;手册甚至给出了一个“通用时间戳插入(Chronos)”示例,其中偏移量 14 将时间戳放置在以太网帧的绝对第 28 个字节处。 我没有找到任何文档说明除了通用的 PTP 启用/时间戳偏移配置之外,还有额外的隐藏启用位,也没有找到任何文档明确说明 CPU 注入的 BYPASS=1 帧是否支持或阻止此功能。RM 的措辞支持通用机制,但您通过直接电缆观察到,在预期的偏移量处没有写入任何字节,这表明,在此 CPU 注入路径中,仅 ETH_TYPE_CFG 匹配在您的设置中是不够的。 Linux DSA 官方支持的方法,用于在 swp0 上为任意 EtherType 帧添加时间戳 最有力的软件方面证据表明:尽管LS1028A交换机硬件具备通用数据包时间戳功能,但LS1028A交换机驱动程序使用的DSA框架并不支持该功能。 因此,在标准的 DSA Felix 驱动程序模型下,我会将 PTP/IEEE-1588 事件消息时间戳视为支持的路径,而通过 swp0 上的 SO_TIMESTAMPING 进行任意 EtherType 0x88B5 TX 时间戳则不被该软件栈正式支持。这与您的观察结果一致,即有效的 0x88F7 PTP 帧的时间戳可靠,而 0x88B5 帧的时间戳则不可靠。 勘误/推荐替代方案 我没有找到针对此行为的特定时间戳的 LS1028A/Felix 勘误表。我找到的证据表明,已发布的Felix勘误表(在检索到的工单材料中提到)是ERR A-050484,它与NPI流程控制/丢帧管理有关,而不是与时间戳FIFO生成有关。
記事全体を表示