Multi Source Translation Content

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Multi Source Translation Content

Discussions

Sort by:
MCXW71 - Packet loss and instability at 2 Mbps half-duplex due to 2.4 GHz co-existence / RF robustne Hi NXP Community, I am currently working on a project using the  #MCXW71C wireless MCU. I have developed a half-duplex communication protocol between two MCXW71C chips running at a 2 Mbps data rate. While the communication is perfectly stable in a clean RF environment, I am experiencing severe instability and significant packet loss as soon as other 2.4 GHz RF devices (such as smartwatches, wireless earbuds, or smartphones with Bluetooth enabled) are brought close to our hardware (within a distance of about 30 cm). Here are some important details about our setup: Hardware: This is a custom PCB design (not an evaluation board). We designed and implemented the impedance matching network ourselves for the RF front-end. PHY / Protocol: GENFSK NXP SDK Version: SDK_2.25.09.00_MCXW716C Frequency Hopping: not us FHSS Given that our custom board works well in isolation but suffers in congested RF environments, we suspect the receiver might be desensitized or saturated by adjacent 2.4 GHz interferers. Could you please provide some guidance? Are there specific hardware tuning guidelines or registers for the MCXW71 to optimize receiver selectivity, AGC (Automatic Gain Control) behavior, or LNA gain in noisy environments? Is there a recommended software Coexistence configuration or CCA (Clear Channel Assessment) threshold tuning to better handle packet collisions? Could a slight mismatch in our custom impedance network degrade the selectivity/blocking performance of the transceiver specifically in the presence of strong out-of-band/adjacent interferers? Board Design Re: MCXW71 - Packet loss and instability at 2 Mbps half-duplex due to 2.4 GHz co-existence / RF robu Hello, Hope you are doing well.   Since you are using a custom board, I would recommend comparing its performance against the FRDM-MCXW71 under the same conducted test setup. Before modifying radio registers, it is important to verify factors such as the RF layout, grounding, antenna matching network, power supply noise, and any enclosure-related coupling effects. You can also run PER tests while sweeping the CCA threshold to find a practical operating point. CCA can help reduce packet collisions by preventing transmission when the channel is already busy, but the threshold should be validated empirically in the target RF environment. The following document describes RF performance testing methods and how to use them to evaluate CCA behavior: AN14399 MCXW71 Connectivity Test for 802.15.4 Applications To further validate your RF design, you may also find the following documents useful: UG10146 MCXW71 Hardware Design Guide AN14374 FRDM-MCXW71 RF System Evaluation Report for Bluetooth LE and IEEE 802.15.4 Applications AN2731 Compact Planar Antennas for 2.4 GHz Communication Best regards, Sofia.
View full article
GD3160 FlexGUI 软件安装问题 我从官方网站安装了GD3160 FlexGUI软件。当我查看 UM11592 文件时,它说我还需要下载“SW Package”软件,但我在官方网站上找不到任何与“SW Package”相关的资料。我可以通过安装“NXP_GD31xx_GUI_ppublic-1.13.0”来正常使用GD3160的FlexGUI软件吗?“GUI”文件夹中是否有“MSI”安装包?GD3160 Re: GD3160 FlexGUI software installation questions 你好, 软件软件包指的是包含所有必需文件的文件夹(ZIP 文件夹)。 所以,是的,您可以继续安装 NXP_GD31xx_GUI_public-1.13.0.ms i。 FLEXGUI 和 FLEXGUI2 都与 GD3160 设备兼容。但是,对于 GD3162,请使用 FLEXGUI2。 希望这能帮到你! 回复: GD3160 FlexGUI software installation questions 我在官方网站上看到,FlexGUI 软件有两个版本。应该使用哪一个?
View full article
MCXW71 - 由于 2.4 GHz 共存/射频鲁棒性问题,2 Mbps 半双工模式下出现丢包和不稳定。 NXP社区的各位好, 我目前正在做一个使用 #MCXW71C 无线 MCU 的项目。我开发了一种在两个以 2 Mbps 数据速率运行的 MCXW71C 芯片之间进行半双工通信的协议。 虽然在干净的射频环境中通信非常稳定,但一旦其他 2.4 GHz 射频设备(例如智能手表、无线耳机或启用蓝牙的智能手机)靠近我们的硬件(在大约 30 厘米的距离内),就会出现严重的不稳定和严重的丢包。 以下是我们设备配置的一些重要细节: 硬件:这是定制的 PCB 设计(不是评估板)。我们自行设计并实现了射频前端的阻抗匹配网络。 PHY/协议:GENFSK NXP SDK 版本:SDK_2.25.09.00_MCXW716C 跳频:我们不支持 FHSS 鉴于我们的定制电路板在单独使用时效果很好,但在拥挤的射频环境中效果不佳,我们怀疑接收器可能被邻近的 2.4 GHz 干扰源降低灵敏度或饱和。 请问您能否提供一些指导? MCXW71 是否有特定的硬件调谐指南或寄存器,以优化接收机选择性、AGC(自动增益控制)行为或噪声环境下的 LNA 增益? 是否有推荐的软件共存配置或 CCA(清晰信道评估)阈值调整方法,以更好地处理数据包冲突? 我们定制的阻抗网络的轻微不匹配是否会降低收发器的选择性/阻塞性能,尤其是在存在强烈的带外/相邻干扰的情况下? 电路板设计 Re: MCXW71 - Packet loss and instability at 2 Mbps half-duplex due to 2.4 GHz co-existence / RF robu 你好, 希望你一切都好。   由于您使用的是定制板,我建议您在相同的传导测试设置下,将其性能与 FRDM-MCXW71 进行比较。在修改无线电寄存器之前,必须验证射频布局、接地、天线匹配网络、电源噪声以及任何与外壳相关的耦合效应等因素。 您还可以在扫描 CCA 阈值的同时运行 PER 测试,以找到一个实际的操作点。CCA 可以通过在信道繁忙时阻止传输来帮助减少数据包冲突,但阈值应在目标射频环境中进行经验验证。 以下文档描述了射频性能测试方法以及如何使用这些方法评估 CCA 行为: AN14399 MCXW71 802.15.4 应用连接测试 为了进一步验证您的射频设计,您可能还会发现以下文档很有用: UG10146 MCXW71 硬件设计指南 AN14374 FRDM-MCXW71 射频系统评估报告,适用于蓝牙低功耗和 IEEE 802.15.4 应用 AN2731 紧凑型平面天线,适用于 2.4 GHz 通信 此致, 索菲亚。
View full article
PT2000 ローサイドドライバーのみ使用。 こんにちは、 私はPT2000を使って従来のインジェクター(12オーム)を駆動し、1台のPT2000は1チャネルのハイサイドとローサイド出力(両方のインジェクター配線をPT2000に接続)で駆動していますが、すべて期待通りに動作しています。 インジェクターの正極線を外部の連続+12V電源に接続し、片方のローサイドを駆動してインジェクターをオンにすることは可能でしょうか?マイクロコードを変更せずにこの解決策を試してみましたが、うまくいきません。このトポロジーで動作させるには、マイクロコアにどのような変更を加える必要がありますか?より一般的に言うと、ローサイドモードでソレノイドを駆動しつつ電流を制御することは可能でしょうか? ご支援ありがとうございます。 よろしくお願いします。
View full article
i.MX93 EQoS 以太网 DMA 复位失败,LAN8720A PHY(RMII 模式) 您好,NXP团队, 我正在使用i.MX93 SoM ,外接LAN8720A PHY,运行在 RMII 模式下。 硬件配置 处理器: i.MX93 PHY: LAN8720A RMII接口 物理层地址:0 PHY RESET GPIO 已配置 MAC提供50 MHz RMII参考时钟 苏观察 以太网接口初始化失败,并报告以下错误: imx-dwmac 428a0000.ethernet eth1: PHY [stmmac-1:00] 驱动程序 [SMSC LAN8710/LAN8720] imx-dwmac 428a0000.ethernet: DMA重置失败 stmmac_hw_setup:DMA 引擎初始化失败 __stmmac_open:硬件设置失败 dmsg 响应 oot@myd-lmx9x:~# dmesg | grep -i eth [ 0.000000] OF:保留内存:已初始化节点 ethosu_region@B0000000,兼容 ID shared-dma-pool [ 0.000000] psci:从 DT 探测管道方法。 [ 0.953397] fec 42890000.ethernet:无效的 MAC 地址:00:00:00:00:00:00 [ 0.960228] fec 42890000.ethernet:使用随机 MAC 地址:b2:da:68:e1:93:b7 [ 0.970863] hns3:适用于 Hip08 系列的海思以太网网络驱动程序 - 版本 [ 1.008422] igb:Intel(R) 千兆以太网网络驱动程序 [ 1.071474] usbcore:已注册新的接口驱动程序 kaweth [ 1.082559] usbcore:已注册新的接口驱动程序 cdc_ether [ 1.646174] optee:探测管道方法。 [ 1.744525] 蓝牙:BNEP(以太网仿真)版本 1.3 [ 2.560730] fec 42890000.ethernet eth0:已注册 PHC 设备 0 [ 2.567579] imx-dwmac 428a0000.ethernet:未找到 IRQ eth_lpi [ 2.573824] imx-dwmac 428a0000.ethernet:用户 ID:0x10,Synopsys ID:0x52 [ 2.580662] imx-dwmac 428a0000.ethernet:DWMAC4/5 [ 2.585448] imx-dwmac 428a0000.ethernet:DMA 硬件功能寄存器支持 [ 2.592568] imx-dwmac 428a0000.ethernet:支持 RX 校验和卸载引擎 [ 2.599692] imx-dwmac 428a0000.ethernet:支持插入 TX 校验和 [ 2.606382] imx-dwmac 428a0000.ethernet:支持局域网唤醒 [ 2.612538] imx-dwmac 428a0000.ethernet:通过硬件看门狗定时器启用接收缓解 [ 2.620184] imx-dwmac 428a0000.ethernet:已启用 L3L4 流 TC(条目=8) [ 2.626958] imx-dwmac 428a0000.ethernet:已启用 RFS 流 TC(条目数=10) [ 2.633749] imx-dwmac 428a0000.ethernet:启用硬件TC(条目数=256,最大关闭次数=256) [ 2.641316] imx-dwmac 428a0000.ethernet:使用 32/32 位 DMA 主机/设备宽度 [ 5.034969] systemd[1]: /lib/systemd/system/proftpd.service:8:标准输出类型 syslog 已过时,将自动更新为 journal。请更新您的单元文件,并考虑完全移除该设置。 [ 9.808139] SMSC LAN8710/LAN8720 42890000.ethernet-1:00:phy_poll_reset 失败:-110 [ 9.872078] fec 42890000.ethernet eth0:无法连接到物理层 [ 9.879398] imx-dwmac 428a0000.ethernet eth1: 注册 MEM_TYPE_PAGE_POOL RxQ-0 [ 10.892065] imx-dwmac 428a0000.ethernet eth1: __stmmac_open: 无法连接到 PHY(错误:-110) [ 10.900872] imx-dwmac 428a0000.ethernet eth1: 注册 MEM_TYPE_PAGE_POOL RxQ-0 [ 11.904042] imx-dwmac 428a0000.ethernet eth1: __stmmac_open: 无法连接到 PHY(错误:-110) [ 12.838630] SMSC LAN8710/LAN8720 42890000.ethernet-1:00:phy_poll_reset 失败:-110 [ 12.896039] fec 42890000.ethernet eth0:无法连接到物理层 [ 12.899637] imx-dwmac 428a0000.ethernet eth1: 注册 MEM_TYPE_PAGE_POOL RxQ-0 [ 13.904038] imx-dwmac 428a0000.ethernet eth1: __stmmac_open: 无法连接到 PHY(错误:-110) [ 289.712584] imx-dwmac 428a0000.ethernet eth1: 注册 MEM_TYPE_PAGE_POOL RxQ-0 [ 290.740032] imx-dwmac 428a0000.ethernet eth1: __stmmac_open: 无法连接到 PHY(错误:-110) [ 322.123525] imx-dwmac 428a0000.ethernet eth1: 注册 MEM_TYPE_PAGE_POOL RxQ-0 [ 323.104042] imx-dwmac 428a0000.ethernet eth1: __stmmac_open: 无法连接到 PHY(错误:-110) [ 655.579526] imx-dwmac 428a0000.ethernet eth1: 注册 MEM_TYPE_PAGE_POOL RxQ-0 [ 656.612033] imx-dwmac 428a0000.ethernet eth1: __stmmac_open: 无法连接到 PHY(错误:-110) Re: i.MX93 EQoS Ethernet DMA Reset Failure with LAN8720A PHY (RMII Mode) 步骤 1 — 隔离 EQoS 暂时禁用 FEC: &fec {         status = "disabled"; }; 然后启动并检查: dmesg | grep -Ei "dwmac|stmmac|eqos|mdio|phy|LAN87" 你想查看 EQoS/stmmac MDIO 总线下的 PHY,而不是 42890000.ethernet 下的 PHY。 步骤 2 — 手动验证 MDIO 如果您有mdio-tool或phytool: phytool 读取 eth1/0/2 phytool 读取 eth1/0/3 LAN8720A PHY ID 应该可读。如果读取超时或返回全部 0xffff/0x0000,则这是硬件/MDIO/RESET/时钟,而不是 IP 协议栈。 步骤 3 — 验证时钟树 cat /sys/kernel/debug/clk/clk_summary | grep -Ei "enet|qos" 同时测量引脚上的 RMII 参考时钟。NXP RMII 线程专门记录了生成预期 50 MHz 时钟和使用 <100000000>、<50000000> 进行 DTS 更新的必要性。 步骤 4 — 检查驱动程序补丁状态 grep -n "RMII_RESET_SPEED\|imx_dwmac_mx93_reset\|fix_soc_reset" \ drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c 如果缺失,请应用/移植 i.MX93 RMII DMA RESET 补丁。上游补丁说明它解决了 i.MX93 复位逻辑的问题,需要在 RMII 模式下配置正确的接口速度才能完成复位。( https://www.spinics.net/lists/netdev/msg894184.html )
View full article
LPI2Cにおけるスレーブビットエラーに関する問題 私はS32K146を使用していますが、マニュアルにはスレーブが1を送信しているのにバスが0の場合にビットエラーが発生すると記載されています。しかし、実際のテストでは、スレーブが0を送信しているのにバスが1の場合にもビットエラーが発生します。この現象は正しいのでしょうか? Re: An issue regarding slave bit errors in LPI2C こんにちは、 @GXY さん。 はい、その通りです。スレーブがSDAを駆動しているがサンプルが異なるとビットエラーフラグがトリガーされる 期待値よりも高い値を示す場合、必ずしも1を送信して0を読み取る場合に限られるわけではない。 私の推測では、レジスタの説明は、ビットエラーフラグが設定された場合の例を示すだけのものだと思います。 よろしくお願いします、 ジュリアン
View full article
FRDM-A-S32M276-C064 overcurrent error on my encoder My hardware is: FRDM-A-S32M276-C064 Faulhaber 3216 BXTH BLDC 12V Encoder is IEF3 with 128L I have connected it as shown in the starting guide  https://www.nxp.com/document/guide/getting-started-with-frdm-a-s32m276-development-board-setup-and-programming:GS-FRDM-A-S32M276 I have connected the encoder directly to the pins corresponding to the enconder and I dropped (Anegated, Bnegated, Inegated). In the provided code from the application hub I've set ENCODER 1, which runs the following (in the setup part): Siul2_Port_Ip_SetInputBuffer(NULL_PTR, NULL_PTR, 1, 54, 3U); //this effectively functions as: //IP_SIUL2->IMCR[54] = SIUL2_IMCR_SSS(3U); /* Assign eMIOS0_CH7 input to TRGMUX_OUT_38 */ Siul2_Port_Ip_SetInputBuffer(NULL_PTR, NULL_PTR, 1, 55, 4U); Then Lcu_Ip_SyncOutputValueType EncLcuEnable[6U]; EncLcuEnable[0].LogicOutputId = LCU_LOGIC_OUTPUT_8; EncLcuEnable[0].Value = 1U; EncLcuEnable[1].LogicOutputId = LCU_LOGIC_OUTPUT_9; EncLcuEnable[1].Value = 1U; EncLcuEnable[2].LogicOutputId = LCU_LOGIC_OUTPUT_10; EncLcuEnable[2].Value = 1U; EncLcuEnable[3].LogicOutputId = LCU_LOGIC_OUTPUT_11; EncLcuEnable[3].Value = 1U; Lcu_Ip_SetSyncOutputEnable(EncLcuEnable, 4U); and finally AEC_VDDE_Enable(1); When I run this without the encoder connected, the application works correctly (sensorless). When I plug in the encoder and I rerun, it goes into fault immediately. Debugging I see the following: which corresponds to an overcurrent event #define AEC_AE_EVENTS_STATUS_OCD_VDDE_FL_MASK (0x8U) #define AEC_AE_EVENTS_STATUS_OCD_VDDE_FL_SHIFT (3U) How can I fix this problem? Any advice would be appreciated. Re: FRDM-A-S32M276-C064 overcurrent error on my encoder Hello @alovi, I understand that you are using VDDE to supply the encoder. However, the VDDE output current is limited. Please note that 175 mA represents the maximum overcurrent detection threshold; the minimum threshold is not specified. At the same time, the VDDE pin can continuously supply up to 30 mA at 5 V. Looking at the encoder datasheet, its current consumption can reach up to 40 mA even without load, which already exceeds the supported VDDE capability. Best regards, Daniel Re: FRDM-A-S32M276-C064 overcurrent error on my encoder Is there any other pin on the board that I can use to power the encoder or do I have to use an external source to power it? Re: FRDM-A-S32M276-C064 overcurrent error on my encoder Hi @alovi, Unfortunately, only VDDE can be used to supply external devices from the internal regulator. In this case, an external regulator is required. Regards, Daniel
View full article
NXP Config Tools 26.06 for i.MXで保存された設定が読み込まれない こんにちは、 i.MX95用のDDR構成の新しいバージョンを評価していたところ、構成ツールにバグと思われる箇所を発見しました。 私が実際にやったことを、動作を再現できるように具体的に以下の通りです: 1. ツールのLinux版をインストールしました。 2. 新しい構成を作成する。 3. 選択されたプロセッサ MIMX9596xxxxN。 4. プリセットを「LPDDR4X EVK / FRDM 15x15 4000MTs Configuration」に変更しました。 5. 設定を保存し、ツールを閉じる。 6. ツールを再度開き、保存した設定を読み込んだ。 その時点では、DDR構成は全く表示されません。 少なくとも26.03版はMCUを選択していない状態で始まっていました(手動で選択すれば問題が解決します)が、今はこの問題を解決する方法がありません。 ご協力いただき、誠にありがとうございました。 よろしくお願いします、 エマヌエーレ Re: NXP Config Tools 26.06 for i.MX not loading saved configuration また、このツールのWindows版でも同じ問題が発生します。 スクリーンショットを添付しました。 Re: NXP Config Tools 26.06 for i.MX not loading saved configuration こんにちは、 このツールにおけるバグのご報告ありがとうございます。 私の方でも問題点を確認できました。 社内チームに報告し、できるだけ早く解決するよう依頼します。 よろしくお願いいたします。
View full article
使用 i.MX 95 SPSDK 实现安全启动(日本博客) 介绍 本文档描述了使用 安全配置 SDK (SPSDK) 在 i.MX 95 上创建和启动签名容器镜像以进行安全启动的过程。 除了经典的 RSA 和椭圆曲线数字签名 (ECDSA) 之外,i.MX 95 还支持后量子密码 (PQC) ML-DSA 作为安全启动数字签名算法。 在这里,我们将通过一个示例来探讨如何使用混合启动来实现 ECDSA 和 PQC ML-DSA 签名认证。 安全启动过程(概念图) 创建签名图像 SRKH:超级根密钥哈希 i.MX 95 AHAB(高级高精度启动)安全启动流程 本文假设您已经为i.MX 95 构建过一次 Linux BSP。 请参考以下文章了解如何构建该项目。 构建目标必须是 i.MX 95 的机器名称,但方法类似。 【新手指南】如何构建 Yocto Linux BSP - i.MX FRDM 开发板版(日语博客) 【新手指南】如何构建 Yocto Linux BSP - i.MX 8M Plus 版 本次测试所用的环境 硬件: i.MX 95 19x19 LPDDR5 EVK开发板 软件:Linux BSP 版本 L6.18.2-1.0.0 工具:SPSDK 版本 3.9.0Linux 版本 如果您使用 eMMC/SD 启动,则可以对FRDM i.MX 95 开发板(FRDM-IMX95 / LPDDR4X 兼容)执行相同的程序。 目录 1. Linux BSP 的准备工作 2. 安装 SPSDK 3. 密钥创建 4. 准备 YAML 文件 5. 准备工作空间 6. 创建签名图像 7. 引入签名图像 8. SRKH(超级根密钥哈希)eFuse 程序 9. 将生命周期更新为 OEM 关闭。 10. 检查 ELE 事件 11. 直接对引导加载程序进行签名   eMMC/SD启动和FlexSPI NOR启动的准备步骤和命令略有不同。因此,请按照您要测试的启动设备对应的步骤进行操作。 1. Linux BSP 的准备工作 1.1 引导加载程序 FlexSPI NOR 启动 BSP 的默认引导加载程序配置为 eMMC/SD 引导。 对于 FlexSPI NOR 启动,请将以下内容添加到 / /conf/local.conf 文件中。 UBOOT_CONFIG = "fspi" eMMC/SD/FlexSPI NOR启动通用 使用启用了u-boot CONFIG_AHAB_BOOT 的引导加载程序构建。 $ cd $ source setup-environment $ bitbake u-boot-imx -c cleansstate $ bitbake u-boot-imx -c configure $ bitbake u-boot-imx -c devshell 将会打开一个单独的 shell,您可以在其中修改 u-boot 配置。 # make O=../../build/ / menuconfig 使用 O= 指定的构建目录路径应根据您的实际环境进行调整。 ../../build/ /.config然后,确认显示 CONFIG_AHAB_BOOT=y 并返回到原始 shell。 # exit 使用原始 shell 重新构建。 $ bitbake u-boot-imx -c compile -f $ bitbake imx-boot 1.2 Linux 内核和设备树 我们将直接使用用 BSP 构建的二进制文件。 构建好的二进制文件创建在 BSP 的 /tmp/deploy/images/ / 目录中。 2. 安装 SPSDK 请按照SPSDK 安装指南准备和安装 Python 虚拟环境 (venv)。 安装完成后,检查是否可以查看版本信息和帮助。 (venv) $ spsdk --version (venv) $ spsdk --help 我们还将添加 PQC 插件。 (venv) $ pip install spsdk-pqc 3. 密钥创建 我们将为 ECDSA SECP384 创建四对私钥/公钥。 (venv) $ mkdir -p keys/secp384r1 (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk0_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk1_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk2_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk3_secp384r1.pem 我们还将为 PQC ML-DSA 创建四对私钥/公钥。 (venv) $ mkdir keys/mldsa65 (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk0_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk1_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk2_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk3_mldsa65.pem 将公钥哈希(超级根密钥哈希 - SRKH)写入 i.MX 95 的内置 eFuse 后,在重建镜像时,需要使用与该公钥配对的私钥对其进行签名,因此请保存您创建的所有密钥。 我不会将我的私钥透露给任何第三方。 4. 准备 YAML 文件 在 SPSDK 中,YAML 文件指定容器头设置、私钥、公钥以及构成签名镜像的二进制文件的路径。 请同时参考本次操作验证中使用的示例 YAML 文件。 YAML 文件中的容器头部设置和键规范字段如下: 容器头部 YAML 键 内容 srk_set SRK 套装 已使用的 srk_id SRK精选 srk_revoke_mask SRK撤销面具 gdet_runtime_behavior GDET 启用 检查所有签名 请核对所有签名。 口袋 快速启动 熔丝版本 熔丝版 sw_version SW 演化 容器标头中的每个字段都在i.MX 95 参考手册的“容器标头详细信息”部分中进行了描述。 主要规格 YAML 键 内容 签名者 经典私钥 签名者#2 PQC私钥 srk_table 经典公钥表 srk_table_#2 PQC公钥表 在所有 YAML 文件中指定相同的键。 4.1 引导加载程序的 YAML 文件 创建 YAML 文件模板,并准备 spl.yaml 和 uboot.yaml。 (venv) $ nxpimage ahab get-template -f mimx9596 -o ahab_template.yaml (venv) $ cp ahab_template.yaml spl.yaml (venv) $ cp ahab_template.yaml uboot.yaml spl.yaml 指定文件,直到它们被加载到 i.MX 95 的内部 SRAM 中,并执行 DRAM 初始化训练等。 YAML 键 内容 二进制容器 ELE 启动固件(特定于掩码版本) lpddr_imem LPDDR4X 或 5 初始化固件 lpddr_imem_qb LPDDR4X 或 5 初始化固件 lpddr_dmem LPDDR4X 或 5 初始化数据 lpddr_dmem_qb LPDDR4X 或 5 初始化数据 oei_ddr OEI 系统管理器 系统管理器 spl U-boot SPL cortex_m7_app(选项) M7图像 image_path(选项) FCB 复制生成 uboot.yaml U-boot SPL 指定要加载到 DRAM 中的文件。 YAML 键 内容 脚气 ARM 可信固件 uboot U-boot T恤(可选) OP-TEE OS(选项) 4.2 移除 FCB - 仅 FlexSPI NOR 启动 用于 FlexSPI NOR 启动的 YAML 文件也指定了 FCB(FlexSPI 配置块)。因此,为 FlexSPI NOR 启动构建的标准未签名引导加载程序 (flash.bin)...接下来,我们将使用 SPSDK 命令提取 FCB。 i.MX 95 内置的 eFuse 的 FCB 位于 FlexSPI_NOR_FCB_Offset(默认值为 0x400)。从该偏移量提取 512 字节以创建 fcb.bin。 (venv) $ nxpimage utils binary-image extract -b flash.bin -a 0x400 -s 0x200 -o fcb.bin 4.3 操作系统容器的 YAML 文件 根据 YAML 文件模板准备 os_cntr.yaml 文件。 (venv) $ cp ahab_template.yaml os_cntr.yaml 在 os_cntr.yaml 中,键image_path设置要使用的 Linux 内核和设备树的路径,并设置其他必要的参数。 4.4 数字签名算法的选择 这将使用 i.MX 95 的内置 eFuse 或容器标头中的标志进行选择。 eFuse 容器头部中的标志字段 通过在容器头的标志字段中设置“位 15:检查所有签名”= 0x1,无论 eFuse 中的 ELE_BOOT_CRYPTO 设置如何,容器内的所有签名都将进行身份验证。 容器标头的 Flags 部分中的“检查所有签名”字段由 YAML 键“check_all_signature”指定。 5. 准备工作空间 在 SPSDK 中创建一个工作区,并将必要的密钥文件、YAML 文件和二进制文件放置在其中。 5.1 创建工作区 (venv) $ nxpimage bootable-image get-templates -f mimx9596 -o workspace 5.2 密钥文件 我会把生成密钥时创建的整个 `keys` 文件夹导入过来。 5.3 YAML 文件示例 用于测试的 YAML 文件附加在imx95-spsdk-yaml-examples.tar.gz中。 5.4 二进制文件 如果您想从 Yocto Linux BSP 获取二进制文件, 构成引导加载程序的二进制文件 从 $ bitbake -e imx-boot | grep ^S= 显示的路径中复制位于 iMX95/ 中的二进制文件。 Linux 内核 / /tmp/deploy/images/ /Image-- - - .bin复制此内容。 设备树 复制位于 / /tmp/deploy/images/ / 目录下的 dtb 文件,选择您想要使用的其中一个。 如果您使用示例 YAML 文件, Linux内核是一个镜像。 设备树文件为 imx95.dtb 它们将被归入这些名称之下。 5.5 eMMC/SD 启动 文件结构如下: 如果使用示例 YAML 文件,请根据 DRAM 类型将 spl.yaml 从 emmc_sd/spl-lpddr4x.yaml 或 spl-lpddr5.yaml 重命名,并将其放置在正确的位置。 在上述示例中,RevC 产品的 ELE 启动固件为 mx95b0-ahab-container.img(B0 掩码)。 5.6 FlexSPI NOR 启动 文件结构如下。此外,还需要 fcb.bin 文件。 如果您想使用示例 YAML 文件,请从 fspi_nor/ 复制 bootable_image_fspi_nor.yaml。 另外,将 spl_fspi_nor-lpddr5.yaml 重命名为 spl.yaml 并将其放置在正确的位置。 在上述示例中,RevC 产品的 ELE 启动固件为 mx95b0-ahab-container.img(B0 掩码)。 6. 创建签名图像 我们将使用 SPSDK 创建已签名的引导加载程序和已签名的操作系统容器镜像。 导航至工作区准备期间创建的目录,并开始在该目录中工作。 (venv) $ cd workspace/imx_boot_flash_all/imx95-19x19-lpddr5-evk/ 6.1 签名引导加载程序 spl.yaml 和 uboot.yaml 文件分别指定密钥文件和二进制文件,它们由 bootable_image.yaml 调用。 将创建一个已签名的引导加载程序 signed_flash.bin 和一个用于 SRKH eFuse 程序的脚本 (*.bcf)。 eMMC/SD启动 (venv) $ nxpimage -v bootable-image export --config bootable_image.yaml -o output/signed_flash.bin 将显示以下信息。 FlexSPI NOR 启动 (venv) $ nxpimage -v bootable-image export --config bootable_image_fspi_nor.yaml -o output/signed_flash.bin 将显示以下信息。 与 eMMC/SD 的一个区别是,它以“FCB”开头。 您可以执行图像验证。 // eMMC / SD ブート (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/signed_flash.bin -m serial_downloader // FlexSPI NOR ブート (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/signed_flash.bin -m flexspi_nor 6.2 已签名操作系统容器 os_cntr.yaml 的内容将用于创建已签名的操作系统容器镜像。 (venv) $ nxpimage -v ahab export -c os_cntr.yaml 将显示以下信息。 您可以执行图像验证。 (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/os_cntr_signed.bin -m serial_downloader 7. 引入签名图像 本文档解释了如何安装您创建的已签名引导加载程序和已签名操作系统容器。 7.1 签名引导加载程序 将 signed_flash.bin 写入 i.MX95 板的启动设备。 将开发板的调试端口和串口下载端口连接到您的电脑。 如果 u-boot 启动,则切换到 fastboot 模式。 u-boot=> fastboot 0 或者,您可以以串行下载模式启动系统 BOOT_MODE。 我们将使用SPSDK编写程序。 // eMMC (venv) $ nxpuuu write -b emmc -f mimx9596 output/signed_flash.bin // SD (venv) $ nxpuuu write -b sd -f mimx9596 output/signed_flash.bin // FlexSPI NOR (venv) $ nxpuuu write -b qspi -f mimx9596 output/signed_flash.bin 也可以使用标准的 uuu 或 u-boot 命令而不是 SPSDK 的 nxpuuu 命令来刷写设备。 7.2 已签名操作系统容器 将 os_cntr_signed.bin 放入已写入 BSP 映像的 eMMC 或 SD 卡的启动分区中。 u-boot 命令使 i.MX95 连接的 eMMC 或 SD 卡显示为 USB 存储设备,从而可以将其挂载到 PC 上。 串口下载端口必须连接到您的电脑。 // eMMC u-boot=> ums mmc 0 // SDカード u-boot=> ums mmc 1 将 os_cntr_signed.bin 复制到挂载到 PC 上的启动分区后,在 u-boot 中按 Ctrl-C。 或者,您可以使用另一种方法将 os_cntr_signed.bin 放入启动分区。 启动已签名的操作系统容器时,将显示以下消息: CONFIG_AHAB_BOOT 启用u-boot 后,将使用 os_cntr_signed.bin(已签名)镜像,而不是常规的 Linux 镜像(未签名)。 7.3 运行检查 在该阶段,i.MX95 的生命周期状态为 OEM Open,因此 u-boot 或 Linux 将启动,但会在ELE 事件中检测到密钥哈希验证失败。 8. SRKH(超级根密钥哈希)eFuse 程序 8.1 eFuse 写入 将公钥的哈希值写入 i.MX 95 SRKH eFuse。 一旦写入,就无法撤销。 当在写入的设备上更新已签名的引导加载程序或已签名的操作系统容器时,将使用作为写入的 SRKH 底层公钥对的私钥对其进行签名。 如果您想使用不同的密钥对,请撤销当前的 SRKH,并使用您创建的四个未使用的密钥对之一。 将 i.MX 95 板的串行下载端口连接到您的 PC,并事先确保 u-boot 设置为 fastboot 模式。 u-boot=> fastboot 0 SRKH eFuse 编程脚本 (*.bcf) 在创建签名映像期间创建。我们将使用此方法并使用 SPSDK 编写程序。 SRKH eFuse 编程脚本包含 i.MX 95 eFuse 的字索引。 // OEM_SRKH (venv) $ nxpele -f mimx9596 batch output/ahab_oem0_srk0_hash_nxpele.bcf // OEM_PQC_SRKH (venv) $ nxpele -f mimx9596 batch output/ahab_oem0_srk1_hash_nxpele.bcf 8.2 检查 eFuse 值 您可以使用 SPSDK 的 nxpele 命令指定 eFuse 的字索引并读取它以检查其值。 // OEM_SRKH[31:0] word index = 128 (venv) $ nxpele -f mimx9596 read-common-fuse -i 128 // OEM_PQC_SRKH[511:480] word index = 463 (venv) nxpele -f mimx9596 read-common-fuse -i 463 など 或者,您可以使用 U-boot 命令或系统管理器监视器命令通过读写操作访问 eFuse,而不是使用 SPSDK。 U-boot u-boot=> 熔丝读取 u-boot=> fuse prog 系统管理器 >$ fuse.H >$ fuse.w 8.3 运行检查 现阶段,i.MX 95 的生命周期状态为 OEM 开放,但由于它已编程为 SRKH,除非被篡改,否则不会检测到ELE 事件。 即使发生篡改,如果该部分不影响操作,它将启动 OEM Open,但身份验证失败将在ELE 事件中检测到。 9. 将生命周期更新为 OEM 关闭。 i.MX 95 在出厂后的生命周期为 OEM 开放式。 调试完成后,将 i.MX 95 生命周期更改为 OEM 关闭。 关闭OEM后需要注意的几点 您无法恢复到OEM Open 模式。 CONFIG_AHAB_BOOT=y 使用包含 u-boot 的引导加载程序启动时,未签名的镜像和签名无效的镜像将无法启动。 CONFIG_AHAB_BOOT=y 如果引导加载程序包含 u-boot 但未进行此设置,则可以使用未签名的 Linux 镜像启动。因此,为确保始终启动操作系统容器 os_cntr_signed.bin,请使用包含 u-boot 且设置了 CONFIG_AHAB_BOOT=y 引导加载程序。 验证功能后,未签名的 Linux 镜像和设备树将从启动分区中删除。 9.1 SPSDK 将 i.MX 95 板的串行下载端口连接到您的 PC,并事先确保 u-boot 设置为 fastboot 模式。 u-boot=> fastboot 0 使用 SPSDK 更新生命周期。 (venv) $ nxpele -f mimx9596 forward-lifecycle-update -l OEM_CLOSED Forward Lifecycle update ends successfully. (venv) $ 9.2 U-boot u-boot=> ahab_close 即使将设备标记为 OEM 关闭,使用 uuu 写入 BSP 映像(wic 文件)时,仍然需要使用签名引导加载程序。 10. 检查 ELE 事件 ELE(Edgelock Secure Enclave)是 i.MX 95 中的一个内置模块,用于在安全启动期间验证容器镜像。 您可以使用 SPSDK、U-boot 和系统管理器命令检查 ELE 状态。 10.1 SPSDK 请先将串口下载端口连接到您的电脑,并使用 U-boot 进入 fastboot 模式,然后再继续操作。 u-boot=> fastboot 0 我们将使用 SPSDK 检索 ELE 事件。 (venv) $ nxpele -f mimx9596 get-events 10.2 U-boot CONFIG_AHAB_BOOT=y 这些是可以与 U-boot 一起使用的命令。 根据设备的生命周期,还会显示它是 OEM 开放式还是 OEM 封闭式。 u-boot=> ahab_status 10.3 系统管理器 >$ ele events 10.4 显示示例 当检测到ELE事件(SRKH值不匹配)时 SPSDK U-boot(当 OEM 打开时) 系统管理器 当未检测到ELE事件时 SPSDK U-boot(OEM 闭环后) 系统管理器   11. 直接对引导加载程序进行签名 也可以使用 SPSDK 直接向现有的未签名引导加载程序二进制文件添加签名。 在这种情况下,SPSDK 会解析来自引导加载程序二进制容器的配置。 虽然不能在 YAML 文件中为每个镜像指定详细设置,但只需指定容器头设置以及私钥和公钥的路径,即可创建签名引导加载程序。 11.1 模板创建 (venv) $ nxpimage ahab get-template -f mimx9596 -o ahab_sign.yaml --sign (venv) $ cp ahab_sign.yaml sign.yaml 11.2 YAML 文件 在 sign.yaml 中指定容器头部设置以及私钥和公钥的路径。 如果您使用的是示例 YAML 文件,请复制 direct_signing/sign.yaml。 11.3 添加签名 现有的引导加载程序二进制文件 flash.bin 将被签名。 // eMMC / SD (venv) $ nxpimage ahab sign -c sign.yaml -b flash.bin -o output/flash_directsign.bin -fs output // FlexSPI NOR (venv) $ nxpimage ahab sign -c sign.yaml -b flash.bin -o output/flash_directsign.bin -fs output -m flexspi_nor output/flash_directsign.bin 和 SRKH eFuse 编程脚本 output/*.bcf这将被创建。 综上所述 本文档介绍了如何使用 SPSDK 为 i.MX 95 安全启动创建签名镜像并启动该镜像,以保护 SoC 启动镜像。本示例演示了如何使用 PQC(i.MX 95 AHAB 中新增的功能)来完成此过程。 ========================= 即使您在本文的“评论”栏留言,我们目前也无法回复。 给您带来不便,我们深感抱歉。请在询问时参阅“NXP技术问题-联系方式(日本博客)”。 (如果您已经是NXP的代理商或与其有合作关系,可以直接向负责人咨询。) 本课程提供实践学习体验,讲解如何使用 安全配置 SDK (SPSDK) 创建和启动签名容器镜像,以便在 i.MX95 上进行安全启动。 本文档提供了一个示例,说明如何在混合启动环境中同时使用椭圆曲线数字签名密码学 (ECDSA) 和后量子密码学 (PQC) ML-DSA 来实现签名认证。 (预计工作时间:半天 *假设 i.MX 95的Linux BSP 构建已经完成一次) i.MX 处理器 安全 日本博客
View full article
Secure Boot with i.MX 95 SPSDK (Japanese Blog) Introduction This document describes the procedure for creating and booting a signed container image using the Secure Provisioning SDK (SPSDK) for secure booting on i.MX 95 . In addition to classic RSA and Elliptic Curve Digital Signatures (ECDSA), i.MX 95 also supports Post -Quantum Cryptography (PQC) ML-DSA as a secure boot digital signature algorithm. Here, we will look at an example of implementing both ECDSA and PQC ML-DSA signature authentication using Hybrid Boot. Secure Boot Process (Conceptual Diagram) Creating a signed image SRKH: Super Root Key Hash i.MX 95 AHAB (Advanced High Accuracy Boot) Secure Boot Flow This article assumes that you have already built the Linux BSP for i.MX 95 once. Please refer to the following article for instructions on how to build the project. The build target needs to be the machine name of the i.MX 95, but the method is similar. [Beginner's Guide] How to Build Yocto Linux BSP - i.MX FRDM Board Edition (Japanese Blog) [Beginner's Guide] How to Build Yocto Linux BSP - i.MX 8M Plus Edition The environment used for testing this time Hardware: Development board i.MX 95 19x19 LPDDR5 EVK Software: Linux BSP version L6.18.2-1.0.0 Tools: SPSDK version 3.9.0, Linux version If you are using eMMC/SD booting, you can perform the same procedure with the FRDM i.MX 95 development board (FRDM-IMX95 / LPDDR4X compatible). table of contents 1. Preparation on Linux BSP 2. Installing SPSDK 3. Key creation 4. Preparing the YAML file 5. Preparing the workspace 6. Creating a signed image 7. Introduction of signed images 8. SRKH (Super Root Key Hash) eFuse Program 9. Update the lifecycle to OEM Closed. 10. Checking ELE Events 11. Direct signing of the bootloader   The preparation procedures and commands used for eMMC/SD booting and FlexSPI NOR booting differ slightly. Therefore, please follow the procedure appropriate for the boot device you wish to test. 1. Preparation on Linux BSP 1.1 Bootloader FlexSPI NOR boot The BSP's default boot loader is configured for eMMC/SD booting. For FlexSPI NOR booting, add the following to the / /conf/local.conf file. UBOOT_CONFIG = "fspi" eMMC / SD / FlexSPI NOR Boot Common Use the bootloader built with u-boot CONFIG_AHAB_BOOT enabled. $ cd $ source setup-environment $ bitbake u-boot-imx -c cleansstate $ bitbake u-boot-imx -c configure $ bitbake u-boot-imx -c devshell A separate shell will open, where you can modify the u-boot configuration. # make O=../../build/ / menuconfig The build directory path specified with O= should be adjusted to match your actual environment. ../../build/ /.config Then, confirm that it shows CONFIG_AHAB_BOOT=y and return to the original shell. # exit Rebuild using the original shell. $ bitbake u-boot-imx -c compile -f $ bitbake imx-boot 1.2 Linux kernel and device tree We will use the binary built with BSP as is. The built binaries are created in the BSP's /tmp/deploy/images/ / directory. 2. Installing SPSDK Follow the SPSDK Installation Guide to prepare and install a Python virtual environment (venv). After installation, check if you can view version information and help. (venv) $ spsdk --version (venv) $ spsdk --help We will also add the PQC plugin. (venv) $ pip install spsdk-pqc 3. Key creation We will create four pairs of private/public keys for ECDSA SECP384. (venv) $ mkdir -p keys/secp384r1 (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk0_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk1_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk2_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk3_secp384r1.pem We will also create four pairs of private/public keys for PQC ML-DSA. (venv) $ mkdir keys/mldsa65 (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk0_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk1_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk2_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk3_mldsa65.pem After writing the public key hash (Super Root Key Hash - SRKH) to the i.MX 95's built-in eFuse, when you rebuild the image, you need to sign it with the private key that pairs with that public key, so save all the keys you've created. I will not disclose my private key to any third party. 4. Preparing the YAML file In SPSDK, the YAML file specifies the container header settings, the private key, the public key, and the paths to the binary files that make up the signed image. Please also refer to the example YAML file used in this operational verification. The container header settings and key specification fields in the YAML file are as follows: Container header YAML key Content srk_set SRK Set used_srk_id SRK Selection srk_revoke_mask SRK Revoke Mask gdet_runtime_behavior GDET enablement check_all_signatures Check all signatures pocket Fast Boot fuse_version Fuse Version sw_version SW Evolution Each field in the container header is described in the "Container header details" section of the i.MX 95 Reference Manual . Key specification YAML key Content signer Classic private key signer_#2 PQC private key srk_table Classic public key table srk_table_#2 PQC Public Key Table Specify the same key in all YAML files. 4.1 YAML file for bootloader Create a YAML file template and prepare spl.yaml and uboot.yaml. (venv) $ nxpimage ahab get-template -f mimx9596 -o ahab_template.yaml (venv) $ cp ahab_template.yaml spl.yaml (venv) $ cp ahab_template.yaml uboot.yaml spl.yaml Specify the files up to the point where they are loaded into the i.MX 95's internal SRAM and perform DRAM initialization training, etc. YAML Key Content binary_container ELE Boot Firmware (Binary specific to Mask Revision) lpddr_imem LPDDR4X or 5 Initialization Firmware lpddr_imem_qb LPDDR4X or 5 Initialization Firmware lpddr_dmem LPDDR4X or 5 initialization data lpddr_dmem_qb LPDDR4X or 5 initialization data oei_ddr OEI system_manager System Manager spl U-boot SPL cortex_m7_app (Option) M7 image image_path (Option) FCB copy generate uboot.yaml U-boot SPL specifies the files to be loaded into DRAM. YAML Key Content atf ARM Trusted Firmware uboot U-boot tee (Option) OP-TEE OS (Option) 4.2 Removing the FCB - FlexSPI NOR Boot Only The YAML file for FlexSPI NOR booting also specifies the FCB (FlexSPI Configuration Block). Therefore, the standard unsigned bootloader (flash.bin) built for FlexSPI NOR booting... Next, we'll extract the FCB using the SPSDK command. The FCB is located at the FlexSPI_NOR_FCB_Offset (default 0x400) of the i.MX 95's built-in eFuse. 512 bytes are extracted from that offset and used to create fcb.bin. (venv) $ nxpimage utils binary-image extract -b flash.bin -a 0x400 -s 0x200 -o fcb.bin 4.3 YAML file for OS container Prepare os_cntr.yaml from the YAML file template. (venv) $ cp ahab_template.yaml os_cntr.yaml In os_cntr.yaml, the key image_path sets the path to the Linux kernel and the device tree to be used, and other necessary parameters are also set. 4.4 Selection of a Digital Signature Algorithm This will be selected using the i.MX 95's built-in eFuse or the Flags in the container header. eFuse Flags field in the container header By setting "Bit 15: Check all signature" = 0x1 in the Flags field of the container header, all signatures within the container will be authenticated regardless of the ELE_BOOT_CRYPTO setting in eFuse. The "Check all signature" field in the container header's Flags section is specified by the YAML key "check_all_signature". 5. Preparing the workspace Create a workspace in SPSDK and place the necessary key files, YAML files, and binary files there. 5.1 Creating a Workspace (venv) $ nxpimage bootable-image get-templates -f mimx9596 -o workspace 5.2 Key File I'll bring over the entire `keys` folder that I created when generating the key . 5.3 Example YAML File The YAML file used for testing is attached to imx95-spsdk-yaml-examples.tar.gz . 5.4 Binary files If you want to get binary files from Yocto Linux BSP, The binary that makes up the boot loader Copy the binary located in iMX95/ from the path displayed by $ bitbake -e imx-boot | grep ^S=. Linux kernel / /tmp/deploy/images/ /Image-- - - .bin Copy this. Device Tree Copy one of the dtb files located in / /tmp/deploy/images/ / that you want to use. If you use the example YAML file , The Linux kernel is an image. The device tree is imx95.dtb They will be placed under these names. 5.5 eMMC / SD Boot The file structure will be as follows: If you use the example YAML file , rename spl.yaml from emmc_sd/spl-lpddr4x.yaml or spl-lpddr5.yaml depending on the DRAM type and place it in the correct location. In the above example, the ELE boot firmware is mx95b0-ahab-container.img for RevC products (B0 mask). 5.6 FlexSPI NOR Boot The file structure will be as follows. fcb.bin is also required. If you want to use the example YAML file , copy bootable_image_fspi_nor.yaml from fspi_nor/. Also, rename spl_fspi_nor-lpddr5.yaml to spl.yaml and place it in the correct location. In the above example, the ELE boot firmware is mx95b0-ahab-container.img for RevC products (B0 mask). 6. Creating a signed image We will create signed bootloader and signed OS container images using the SPSDK. Navigate to the directory created during workspace preparation and begin working there. (venv) $ cd workspace/imx_boot_flash_all/imx95-19x19-lpddr5-evk/ 6.1 Signed Bootloader The spl.yaml and uboot.yaml files, which specify the key file and binary file, are called from bootable_image.yaml. A signed bootloader, signed_flash.bin, and a script (*.bcf) for the SRKH eFuse program will be created. eMMC / SD Boot (venv) $ nxpimage -v bootable-image export --config bootable_image.yaml -o output/signed_flash.bin The following information will be displayed. FlexSPI NOR boot (venv) $ nxpimage -v bootable-image export --config bootable_image_fspi_nor.yaml -o output/signed_flash.bin The following information will be displayed. One difference from eMMC/SD is that it has "FCB" at the beginning. You can perform image verification. // eMMC / SD ブート (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/signed_flash.bin -m serial_downloader // FlexSPI NOR ブート (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/signed_flash.bin -m flexspi_nor 6.2 Signed OS Containers The contents of os_cntr.yaml will be used to create a signed OS container image. (venv) $ nxpimage -v ahab export -c os_cntr.yaml The following information will be displayed. You can perform image verification. (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/os_cntr_signed.bin -m serial_downloader 7. Introduction of signed images This explains how to install the signed bootloader and signed OS container you created. 7.1 Signed Bootloader Write signed_flash.bin to the boot device of the i.MX95 board. Connect the board's debug port and serial download port to your PC. If u-boot starts up, switch to fastboot mode. u-boot=> fastboot 0 Alternatively, you can start the system in BOOT_MODE as serial download mode. We will write the program using SPSDK. // eMMC (venv) $ nxpuuu write -b emmc -f mimx9596 output/signed_flash.bin // SD (venv) $ nxpuuu write -b sd -f mimx9596 output/signed_flash.bin // FlexSPI NOR (venv) $ nxpuuu write -b qspi -f mimx9596 output/signed_flash.bin It is also possible to flash the device using the standard uuu or u-boot command instead of the SPSDK's nxpuuu command. 7.2 Signed OS Containers Place os_cntr_signed.bin into the boot partition of the eMMC or SD card that already has the BSP image written to it. The u-boot command makes the connected eMMC or SD card of the i.MX95 appear as USB storage, allowing it to be mounted on the PC. The serial download port must be connected to your PC. // eMMC u-boot=> ums mmc 0 // SDカード u-boot=> ums mmc 1 After copying os_cntr_signed.bin to the boot partition mounted on your PC, press Ctrl-C in u-boot. Alternatively, you can place os_cntr_signed.bin into the boot partition using another method. When starting a signed OS container, the following message will appear: CONFIG_AHAB_BOOT With u-boot enabled , the os_cntr_signed.bin (signed) image is used instead of the regular Linux Image (unsigned). 7.3 Operation Check At this stage, the i.MX95's lifecycle state is OEM Open, so u-boot or Linux will start, but a KEY HASH verification failure will be detected in the ELE event . 8. SRKH (Super Root Key Hash) eFuse Program 8.1 eFuse Writing Write the hash value of the public key to the i.MX 95 SRKH eFuse. Once you write to it, you cannot undo it. When updating a signed bootloader or signed OS container on the written device, the private key, which is the public key pair underlying the written SRKH, is used to sign it. If you want to use a different key pair, revoke the current SRKH and use one of the four unused key pairs you have created. Connect the i.MX 95 board's serial download port to your PC, and ensure that u-boot is set to fastboot mode beforehand. u-boot=> fastboot 0 SRKH eFuse programming script (*.bcf) created during the creation of a signed image. We will use this and write the program using SPSDK. The SRKH eFuse programming script includes the word index for i.MX 95 eFuse. // OEM_SRKH (venv) $ nxpele -f mimx9596 batch output/ahab_oem0_srk0_hash_nxpele.bcf // OEM_PQC_SRKH (venv) $ nxpele -f mimx9596 batch output/ahab_oem0_srk1_hash_nxpele.bcf 8.2 Checking the eFuse value You can use the SPSDK's nxpele command to specify the word index of eFuse and read it to check the value. // OEM_SRKH[31:0] word index = 128 (venv) $ nxpele -f mimx9596 read-common-fuse -i 128 // OEM_PQC_SRKH[511:480] word index = 463 (venv) nxpele -f mimx9596 read-common-fuse -i 463 など Alternatively, you can access the eFuse via read and write using U-boot commands or System Manager monitor commands, instead of SPSDK. U-boot u-boot=> fuse read u-boot=> fuse prog System Manager >$ fuse.H >$ fuse.w 8.3 Operation Check At this stage, the lifecycle status of the i.MX 95 is OEM Open, but because it is programmed with SRKH, no ELE events will be detected unless it has been tampered with. Even if tampering occurs, if that part does not affect operation, it will boot for OEM Open, but the authentication failure will be detected in the ELE event . 9. Update the lifecycle to OEM Closed. The i.MX 95's lifecycle immediately after shipment is OEM Open. After debugging is complete, change the i.MX 95 lifecycle to OEM Closed. Points to note after closing the OEM You cannot revert to OEM Open. CONFIG_AHAB_BOOT=y When booting with a bootloader that includes u-boot, unsigned images and images with invalid signatures will not be able to boot. CONFIG_AHAB_BOOT=y A bootloader that does not include u-boot can boot with an unsigned Linux image. Therefore, to ensure that the OS container os_cntr_signed.bin is always booted, use a bootloader that includes u-boot with CONFIG_AHAB_BOOT=y . After verifying functionality, unsigned Linux images and device trees will be removed from the boot partition. 9.1 SPSDK Connect the i.MX 95 board's serial download port to your PC, and ensure that u-boot is set to fastboot mode beforehand. u-boot=> fastboot 0 Update the lifecycle using SPSDK. (venv) $ nxpele -f mimx9596 forward-lifecycle-update -l OEM_CLOSED Forward Lifecycle update ends successfully. (venv) $ 9.2 U-boot u-boot=> ahab_close Even after marking the device as OEM Closed, you will still need to use a signed bootloader when writing the BSP image (wic file) with uuu. 10. Checking ELE Events ELE (Edgelock Secure Enclave) is a built-in block in the i.MX 95 that authenticates container images during secure boot. You can check the ELE status using SPSDK, U-boot, and System Manager commands. 10.1 SPSDK Connect the serial download port to your PC and enter fastboot mode using U-boot before proceeding. u-boot=> fastboot 0 We will retrieve ELE events using SPSDK. (venv) $ nxpele -f mimx9596 get-events 10.2 U-boot CONFIG_AHAB_BOOT=y These are commands that can be used with U-boot. Depending on the device's lifecycle, it will also show whether it's OEM Open or OEM Closed. u-boot=> ahab_status 10.3 System Manager >$ ele events 10.4 Display Example When an ELE event (SRKH value mismatch) is detected SPSDK U-boot (when OEM open) System Manager When no ELE event is detected SPSDK U-boot (after OEM closure) System Manager   11. Direct signing of the bootloader It is also possible to directly add a signature to an existing unsigned bootloader binary using the SPSDK. In this case, SPSDK interprets the configuration from the bootloader binary container. While you cannot specify detailed settings for each image in a YAML file, you can create a signed bootloader by simply specifying the container header settings and the paths to the private and public keys. 11.1 Template Creation (venv) $ nxpimage ahab get-template -f mimx9596 -o ahab_sign.yaml --sign (venv) $ cp ahab_sign.yaml sign.yaml 11.2 YAML File Specify the container header settings and the paths to the private and public keys in sign.yaml. If you are using the example YAML file , make a copy of direct_signing/sign.yaml. 11.3 Adding Signatures The existing bootloader binary, flash.bin, will be signed. // eMMC / SD (venv) $ nxpimage ahab sign -c sign.yaml -b flash.bin -o output/flash_directsign.bin -fs output // FlexSPI NOR (venv) $ nxpimage ahab sign -c sign.yaml -b flash.bin -o output/flash_directsign.bin -fs output -m flexspi_nor output/flash_directsign.bin and the SRKH eFuse programming scripts output/*.bcf This will be created. In conclusion This document describes the process of creating a signed image for i.MX 95 Secure Boot using the SPSDK and booting it, in order to protect the SoC boot image. This example demonstrates the procedure using PQC, a new feature added in i.MX 95 AHAB. ========================= We are currently unable to respond to comments left in the "Comment" section of this post. We apologize for the inconvenience, but please refer to " Technical Questions to NXP - How to Contact Us( Japanese Blog) " when making an inquiry. (If you are already an NXP distributor or have a relationship with NXP, you may ask your representative directly.) This course provides hands-on instruction on creating and booting signed container images for secure booting on i.MX95 using the Secure Provisioning SDK (SPSDK) . This document presents an example of implementing signature authentication using both Elliptic Curve Digital Signature Cryptography (ECDSA) and Post-Quantum Cryptography (PQC) ML-DSA in a Hybrid Boot environment. (Estimated work time: half a day *Assuming that the Linux BSP build for i.MX 95 has already been completed once) i.MX Processors Security Japanese Blog
View full article
i.MX 95 SPSDK によるセキュアブート (日本語ブログ) はじめに i.MX 95 でのセキュアブートに使用する署名付きのコンテナ・イメージを Secure Provisioning SDK (SPSDK) で作成し、起動する手順です。 i.MX 95 では、セキュアブートのデジタル署名アルゴリズムとして、クラシックなRSA暗号や楕円曲線デジタル署名暗号 (ECDSA)に加えて、耐量子暗号 (PQC)の ML-DSA もサポートされています。 ここでは、ECDSA と PQC ML-DSA 両方の署名認証を行うHybrid boot での実現例を見ていきます。 セキュアブート・プロセス(概念図) 署名付きイメージの作成 SRKH : Super Root Key Hash i.MX 95 AHAB (Advanced High Accuracy Boot) セキュアブート・フロー 本記事は、i.MX 95 向けのLinux BSP を一度ビルド済みの前提で紹介します。 ビルド方法については以下の記事をご参照ください。 ビルドするターゲットを、i.MX 95 のマシン名とする必要がありますが、同様の方法になります。  [入門] Yocto Linux BSPのビルド方法 - i.MX FRDMボード編 (日本語ブログ) [入門] Yocto Linux BSPのビルド方法 - i.MX 8M Plus編 今回動作確認に使用した環境 ハードウェア:開発ボード i.MX 95 19x19 LPDDR5 EVK ソフトウェア:Linux BSP Version L6.18.2-1.0.0 ツール:SPSDK version 3.9.0, Linux 版 eMMC/SDブートであれば、FRDM i.MX 95開発ボード(FRDM-IMX95 / LPDDR4X対応)でも同様の手順で実施することができます。 目次 1. Linux BSP での準備 2. SPSDK のインストール 3. 鍵の作成 4. YAMLファイルの準備 5. ワークスペースの準備 6. 署名付きイメージの作成  7. 署名付きイメージの導入 8. SRKH (Super Root Key Hash) eFuse のプログラム 9. ライフサイクルを OEM Closed に更新 10. ELE イベントの確認 11. ブートローダの直接署名   eMMC/SDブートとFlexSPI NORブートでは、準備手順や実行するコマンドが一部異なります。そのため、確認したいブートデバイスに応じた手順を実施してください。 1. Linux BSP での準備 1.1 ブートローダ FlexSPI NOR ブート BSP デフォルトでのブートローダは、eMMC/SD ブート用となっています。 FlexSPI NOR ブートの場合には、 / /conf/local.conf ファイルに下記を追記しておきます。 UBOOT_CONFIG = "fspi" eMMC / SD / FlexSPI NOR ブート共通 u-boot の  CONFIG_AHAB_BOOT  を有効にしてビルドしたブートローダを使用します。 $ cd $ source setup-environment $ bitbake u-boot-imx -c cleansstate $ bitbake u-boot-imx -c configure $ bitbake u-boot-imx -c devshell 別のシェルが開きますので、u-boot コンフィグレーションを変更します。 # make O=../../build/ / menuconfig O= で指定するビルド・ディレクトリのパスは、実際の環境に合わせます。 ../../build/ /.config で、 CONFIG_AHAB_BOOT=y  となっていることを確認し、元のシェルに戻ります。 # exit 元のシェルで、再ビルドを行います。 $ bitbake u-boot-imx -c compile -f $ bitbake imx-boot 1.2 Linux カーネルとデバイスツリー BSP でビルドされたバイナリをそのまま利用します。 ビルドされたバイナリは、BSP の  /tmp/deploy/images/ / に作成されています。 2. SPSDK のインストール SPSDK Installation Guide に従い、Python 仮想環境 venv を準備してインストールします。 インストール後、バージョン情報やヘルプ表示ができるかを確認します。 (venv) $ spsdk --version (venv) $ spsdk --help PQCプラグインも追加します。 (venv) $ pip install spsdk-pqc 3. 鍵の作成 ECDSA SECP384 の秘密鍵/公開鍵を、4ペア作成します。 (venv) $ mkdir -p keys/secp384r1 (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk0_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk1_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk2_secp384r1.pem (venv) $ nxpcrypto -v key generate -k secp384r1 -o keys/secp384r1/srk3_secp384r1.pem PQC ML-DSA の秘密鍵/公開鍵も、4ペア作成します。 (venv) $ mkdir keys/mldsa65 (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk0_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk1_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk2_mldsa65.pem (venv) $ nxpcrypto -v key generate -k mldsa65 -o keys/mldsa65/srk3_mldsa65.pem i.MX 95 内蔵eFuse に公開鍵のハッシュ Super Root Key Hash (SRKH) を書いたあと、イメージをビルドしなおした時は、その公開鍵とペアとなる秘密鍵で署名する必要があるので、作成したすべての鍵は保存しておきます。 秘密鍵は、第三者に開示しないようにします。 4. YAMLファイルの準備 SPSDK では、YAMLファイルに、コンテナヘッダ設定や、秘密鍵、公開鍵および、署名付きイメージを構成するバイナリファイルのパスを指定します。 あわせて、今回の動作確認で使用したYAMLファイルの例もご参照ください。 YAMLファイルでのコンテナヘッダ設定や、鍵を指定する項目は、次のようになっています。 コンテナヘッダ YAMLキー 内容 srk_set SRK Set used_srk_id SRK Selection srk_revoke_mask SRK Revoke Mask gdet_runtime_behavior GDET enablement check_all_signatures Check all signatures fastboot Fast Boot fuse_version Fuse Version sw_version SW Version コンテナヘッダの各フィールドは、i.MX 95 Reference Manual の、『Container header details』に記載されています。 鍵の指定 YAMLキー 内容 signer クラシック 秘密鍵 signer_#2 PQC 秘密鍵 srk_table クラシック 公開鍵テーブル srk_table_#2 PQC 公開鍵テーブル すべてのYAMLファイルで同じ鍵を指定します。 4.1 ブートローダ用YAML ファイル YAMLファイルのテンプレートを作成し、spl.yaml と uboot.yaml を準備します。 (venv) $ nxpimage ahab get-template -f mimx9596 -o ahab_template.yaml (venv) $ cp ahab_template.yaml spl.yaml (venv) $ cp ahab_template.yaml uboot.yaml spl.yaml i.MX 95 内蔵SRAM にロードされ、DRAM 初期化トレーニングなどを実施する部分までのファイルを指定します。 YAML キー 内容 binary_container ELE ブート・ファームウエア(マスク・レビジョン専用のバイナリ) lpddr_imem LPDDR4X or 5 初期化ファームウエア lpddr_imem_qb LPDDR4X or 5 初期化ファームウエア lpddr_dmem LPDDR4X or 5 初期化データ lpddr_dmem_qb LPDDR4X or 5 初期化データ oei_ddr OEI system_manager System Manager spl U-boot SPL cortex_m7_app (Option) M7 image image_path (Option) FCB copy image uboot.yaml U-boot SPL でDRAMにロードされる部分のファイルを指定します。 YAML キー 内容 atf ARM Trusted Firmware uboot U-boot tee (Option) OP-TEE OS (Option) 4.2 FCB の取り出し - FlexSPI NOR ブートのみ FlexSPI NOR ブート用のYAMLファイルでは、FCB (FlexSPI Configuration Block)も指定します。そのため、FlexSPI NOR ブート向けにビルドした通常の署名なしブートローダ (flash.bin) から、SPSDK コマンドにて、FCB を取り出しておきます。 i.MX 95 内蔵eFuse のFlexSPI_NOR_FCB_Offset (デフォルト 0x400) にFCB が配置されています。そのオフセットから 512 バイト分を取り出し、 fcb.bin を作成します。 (venv) $ nxpimage utils binary-image extract -b flash.bin -a 0x400 -s 0x200 -o fcb.bin 4.3 OSコンテナ用YAML ファイル YAMLファイルのテンプレートから、os_cntr.yaml を準備します。 (venv) $ cp ahab_template.yaml os_cntr.yaml os_cntr.yaml では、キー image_path で、Linux カーネルと使用するデバイスツリーのパスをセットし、その他必要なパラメータも設定します。 4.4 デジタル署名アルゴリズムの選択 i.MX 95 内蔵eFuse やコンテナヘッダのFlags で選択することになります。 eFuse コンテナヘッダの Flags フィールド コンテナヘッダの Flags フィールドにある "Bit 15: Check all signature" = 0x1 とすることで、eFuse のELE_BOOT_CRYPTO 設定によらず、コンテナ内にあるすべての署名を認証します。 コンテナヘッダの Flags フィールドの "Check all signature"は、YAML キー "check_all_signature" で指定します。 5. ワークスペースの準備 SPSDK でワークスペースを作成し、必要な鍵ファイル、YAML ファイル およびバイナリファイルを配置します。 5.1 ワークスペースの作成 (venv) $ nxpimage bootable-image get-templates -f mimx9596 -o workspace 5.2 鍵ファイル 鍵の作成で作ったkeys フォルダごと持ってきます。 5.3 YAML ファイル例 動作確認に使用したYAMLファイルを、imx95-spsdk-yaml-examples.tar.gz に添付しています。 5.4 バイナリファイル Yocto Linux BSP からバイナリファイルを持ってくる場合、 ブートローダを構成するバイナリ $ bitbake -e imx-boot | grep ^S= により表示されるパスの、 iMX95/ にあるバイナリからコピーします。 Linux カーネル / /tmp/deploy/images/ /Image-- - - .bin を コピーします。 デバイスツリー / /tmp/deploy/images/ /にあるdtb で、使用するもの1つコピーします。 YAMLファイルの例 を使用する場合、 ・Linux カーネルは、Image ・デバイスツリーは、imx95.dtb という名前で、それぞれ配置します。 5.5 eMMC / SD ブート 下記のようなファイル構成となります。 YAMLファイルの例を使用する場合、spl.yaml は、DRAMタイプにより、emmc_sd/spl-lpddr4x.yaml または spl-lpddr5.yaml から名前を変更して配置します。 上記では、ELE ブート・ファームウエア は、RevC 品 (B0マスク)用の mx95b0-ahab-container.img となっています。 5.6 FlexSPI NOR ブート 下記のようなファイル構成となります。fcb.binも必要です。 YAMLファイルの例を使用する場合、fspi_nor/から、bootable_image_fspi_nor.yaml をコピーしてきます。 また、spl_fspi_nor-lpddr5.yaml を spl.yaml に名前を変更し配置します。 上記では、ELE ブート・ファームウエア は、RevC 品 (B0マスク)用の mx95b0-ahab-container.img となっています。 6. 署名付きイメージの作成 署名付きブートローダと署名付き OS コンテナのイメージを、 SPSDK で作成します。 ワークスペースの準備 で作成されたディレクトリに移動して作業します。 (venv) $ cd workspace/imx_boot_flash_all/imx95-19x19-lpddr5-evk/ 6.1 署名付きブートローダ 鍵ファイルとバイナリファイルを指定する spl.yaml と uboot.yaml を、bootable_image.yaml から呼び出します。 署名付きブートローダ signed_flash.bin と、SRKH eFuse プログラム用のスクリプト (*.bcf) が作成されます。 eMMC / SD ブート (venv) $ nxpimage -v bootable-image export --config bootable_image.yaml -o output/signed_flash.bin 下記のような情報が、表示されます。 FlexSPI NOR ブート (venv) $ nxpimage -v bootable-image export --config bootable_image_fspi_nor.yaml -o output/signed_flash.bin 下記のような情報が、表示されます。 eMMC/SDとの違いとして、FCB が先頭についているのが分かります。 イメージの検証を行うことができます。 // eMMC / SD ブート (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/signed_flash.bin -m serial_downloader // FlexSPI NOR ブート (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/signed_flash.bin -m flexspi_nor 6.2 署名付きOSコンテナ os_cntr.yaml の内容で、署名付き OS コンテナのイメージを作成します。 (venv) $ nxpimage -v ahab export -c os_cntr.yaml 下記のような情報が、表示されます。 イメージの検証を行うことができます。 (venv) $ nxpimage -v bootable-image verify -f mimx9596 -b output/os_cntr_signed.bin -m serial_downloader 7. 署名付きイメージの導入 作成した署名付きブートローダおよび署名付きOSコンテナを導入する方法です。 7.1 署名付きブートローダ i.MX95 ボードのブートデバイスに、signed_flash.bin を書き込みます。 ボードのデバッグ・ポートとシリアル・ダウンロード・ポートを、PC に接続します。 u-boot が起動する場合には fastboot モードにします。 u-boot=> fastboot 0 もしくは、BOOT_MODE を シリアル・ダウンロード・モード として起動しておきます。 SPSDKで書き込みます。 // eMMC (venv) $ nxpuuu write -b emmc -f mimx9596 output/signed_flash.bin // SD (venv) $ nxpuuu write -b sd -f mimx9596 output/signed_flash.bin // FlexSPI NOR (venv) $ nxpuuu write -b qspi -f mimx9596 output/signed_flash.bin SPSDK の nxpuuu コマンドではなく、通常の uuu または u-boot コマンドを使用して書き込むことも可能です。 7.2 署名付きOSコンテナ あらかじめBSP イメージが書き込んであるeMMC もしくはSDカード の boot パーティションに、os_cntr_signed.bin を入れます。 u-boot コマンドで、i.MX95 の接続されたeMMC または SDカードを、USBストレージとしてみせることで、PCにマウントさせます。 シリアル・ダウンロード・ポートをPC に接続しておく必要があります。 // eMMC u-boot=> ums mmc 0 // SDカード u-boot=> ums mmc 1 PC にマウントされた boot パーティションに 、os_cntr_signed.bin をコピーしたあと、u-boot で Ctrl-C を押します。 もしくは、別の手段で os_cntr_signed.bin を、boot パーティションに入れておきます。 署名付きOSコンテナの起動時、下記のような表示が出ます。 CONFIG_AHAB_BOOT  を有効にした u-boot では、通常のLinux Image (署名なし)ではなく、 os_cntr_signed.bin (署名付き)が使用されます。 7.3 動作確認 この段階では、i.MX95 のライフサイクルの状態は、OEM Open のため、u-boot や Linux が起動しますが、KEY HASH の検証失敗が、ELE イベントで検出されます。 8. SRKH (Super Root Key Hash) eFuse のプログラム 8.1 eFuse 書き込み i.MX 95 SRKH eFuse に、公開鍵のハッシュ値を書き込みます。 一度書き込むと元に戻せません。 書き込んだデバイスで、署名付きブートローダや署名付きOS コンテナを更新するときは、書き込んだ SRKH のもととなる公開鍵のペアである秘密鍵を使い署名します。 別の鍵ペアを使う場合には、現在のSRKH をRevoke し、4組作成しておいた鍵ペアで未使用のものを使用します。 i.MX 95 ボードのシリアル・ダウンロード・ポートをPCに接続し、 u-boot はあらかじめ fastboot モードにしておきます。 u-boot=> fastboot 0 署名付きイメージの作成で作られたSRKH eFuse のプログラミング用スクリプト(*.bcf) を使い、 SPSDK で書き込みます。 SRKH eFuse のプログラミング用スクリプトには、 i.MX 95 eFuse の word index が記載されています。 // OEM_SRKH (venv) $ nxpele -f mimx9596 batch output/ahab_oem0_srk0_hash_nxpele.bcf // OEM_PQC_SRKH (venv) $ nxpele -f mimx9596 batch output/ahab_oem0_srk1_hash_nxpele.bcf 8.2 eFuse 値の確認 SPSDK の nxpele コマンドで、 eFuse のword index を指定しリードして、値を確認することができます。 // OEM_SRKH[31:0] word index = 128 (venv) $ nxpele -f mimx9596 read-common-fuse -i 128 // OEM_PQC_SRKH[511:480] word index = 463 (venv) nxpele -f mimx9596 read-common-fuse -i 463 など SPSDK の代わりに、U-boot コマンド もしくは System Manager モニタのコマンドで、eFuse にリード・ライトアクセスすることもできます。 U-boot u-boot=> fuse read u-boot=> fuse prog System-Manager >$ fuse.r >$ fuse.w 8.3 動作確認 この段階では、i.MX 95 のライフサイクルの状態は、OEM Openですが、SRKH プログラム済みのため、改ざんがなければ、ELEイベントは検出されません。 改ざんがあっても、その部分が動作に影響しなければ、OEM Openのため起動しますが、認証の失敗が ELE イベントで検出されます。 9. ライフサイクルを OEM Closed に更新 i.MX 95 出荷直後のライフサイクルは、OEM Open です。 デバッグ終了後に、i.MX 95 のライフサイクルを OEM Closed に変更します。 OEM Closed にしたあとの留意点 OEM Openには戻せません。 CONFIG_AHAB_BOOT=y とした u-boot を含んだブートローダで起動すると、署名の無いイメージや、不正な署名付きイメージは起動できなくなります。 CONFIG_AHAB_BOOT=y としていない u-boot を含んだブートローダでは、署名なし Linux Image で起動できてしまいますので、必ず署名付きOS コンテナ os_cntr_signed.bin で起動させるため、 CONFIG_AHAB_BOOT=y とした u-boot を含んだブートローダを使用します。 動作確認後、署名なしのLinux Image やデバイスツリーは、boot パーティションから削除します。 9.1 SPSDK i.MX 95 ボードのシリアル・ダウンロード・ポートはPCと接続し、u-boot は、あらかじめfastboot モードにしておきます。 u-boot=> fastboot 0 SPSDK でライフサイクルを更新します。 (venv) $ nxpele -f mimx9596 forward-lifecycle-update -l OEM_CLOSED Forward Lifecycle update ends successfully. (venv) $ 9.2 U-boot u-boot=> ahab_close OEM Closed とした後、 uuu で BSP イメージ (wic ファイル) を書き込む場合にも、署名付きブートローダを使用する必要があります。 10. ELE イベントの確認 ELE (Edgelock Secure Enclave) は、i.MX 95 の内蔵ブロックで、セキュアブート時のコンテナ・イメージの認証を行います。 SPSDK および U-boot、System Manager コマンドで、ELE の状態を確認することができます。 10.1 SPSDK シリアル・ダウンロード・ポートとPCを接続し、U-boot でfastboot モードにしてから行います。 u-boot=> fastboot 0 SPSDK でELE イベントを取得します。 (venv) $ nxpele -f mimx9596 get-events 10.2 U-boot CONFIG_AHAB_BOOT=y  としたU-boot で使用できるコマンドです。 デバイスのライフサイクルにより、OEM Open または OEM closed も表示されます。 u-boot=> ahab_status 10.3 System Manager >$ ele events 10.4 表示例 ELE イベント(SRKH 値の不一致)が検出されたとき SPSDK U-boot (OEM open時) System Manager ELE イベント検出がないとき SPSDK U-boot (OEM close後) System Manager   11. ブートローダの直接署名 既存の署名なしブートローダのバイナリに、 SPSDK で直接署名を追加することも可能です。 この場合、SPSDK がブートローダ・バイナリのコンテナから構成を解釈します。 YAML ファイルで、各イメージごとの細かい設定は指定できませんが、コンテナヘッダの設定と秘密鍵および公開鍵のパスを指定するのみで、署名付きブートローダを作成することができます。 11.1 テンプレートの作成 (venv) $ nxpimage ahab get-template -f mimx9596 -o ahab_sign.yaml --sign (venv) $ cp ahab_sign.yaml sign.yaml 11.2 YAML ファイル sign.yaml に、コンテナヘッダの設定と秘密鍵および公開鍵のパスを指定します。 YAMLファイルの例 を使用する場合、 direct_signing/sign.yaml をコピーしておきます。 11.3 署名の追加 既存のブートローダのバイナリ flash.bin に署名処理を行います。 // eMMC / SD (venv) $ nxpimage ahab sign -c sign.yaml -b flash.bin -o output/flash_directsign.bin -fs output // FlexSPI NOR (venv) $ nxpimage ahab sign -c sign.yaml -b flash.bin -o output/flash_directsign.bin -fs output -m flexspi_nor output/flash_directsign.bin と、SRKH eFuse のプログラミング用スクリプト output/*.bcf が作成されます。 おわりに SoC 起動イメージの保護を実現するため、i.MX 95 セキュアブートに使用する署名付きイメージを、SPSDK を使って作成し、起動するまでの流れを紹介しました。今回はi.MX 95 AHAB で新たに追加されたPQCを利用する手順例で示しました。 ========================= 本投稿の「Comment」欄にコメントをいただいても、現在返信に対応しておりません。 お手数をおかけしますが、お問い合わせの際には「NXPへの技術質問 - 問い合わせ方法 (日本語ブログ)」をご参照ください。 (既に弊社NXP代理店、もしくはNXPとお付き合いのある方は、直接担当者へご質問いただいてもかまいません。) i.MX95 でのセキュアブートに使用する署名付きのコンテナ・イメージを Secure Provisioning SDK (SPSDK) で作成し、起動する手順をハンズオン形式で学べる内容となっています。 楕円曲線デジタル署名暗号 (ECDSA)と、耐量子暗号 (PQC) ML-DSA 両方の署名認証を行うHybrid boot での実現例を紹介します。 (作業時間:半日 *一度i.MX 95向けの Linux BSP のビルドが完了している前提) i.MX Processors Security 日本語ブログ
View full article
Building AI/ML Devices at the Edge? Start with FRDM From smart sensing and anomaly detection to computer vision, voice recognition, and multimodal GenAI—AI/ML use cases are rapidly moving onto the device. But if you're an engineer getting started, the real questions usually are: What hardware products should I use? What NXP tools actually work for embedded AI applications? Do I need the cloud for anything? Let’s break it down ! Why Edge AI is important? Running AI models directly on-device enables: Real-time decisions (low latency) Better security Offline operation (no cloud dependency) Optimized power consumption That’s exactly where the FRDM development platform comes in Quick Positioning: From MCU to Edge AI Processor Category Boards AI Capability Level Typical Use Case MCU (Low Power Edge ML) FRDM-MCXA156 + ⭐ sensor AI, TinyML MCU + Neural Acceleration FRDM-MCXN947 ++ ⭐⭐ Edge AI with vision/audio, TinyML Application Processor (Entry Edge AI) FRDM-IMX93 +++ ⭐⭐⭐ HMI + AI inference High-Performance Edge AI FRDM-IMX8MPLUS ++++ ⭐⭐⭐⭐ Vision AI, Advanced HMI Next-Gen AI + Safety FRDM-IMX95 / PRO +++++ ⭐⭐⭐⭐⭐ Gen AI, Advanced Edge Computing AI/ML applications can run on general-purpose hardware, but leveraging dedicated hardware acceleration significantly improves performance, enables faster results, and reduces power consumption. Below is a reference list of FRDM development boards that support AI/ML applications, helping you choose the right platform based on your target use case   Board Positioning AI Acceleration Hardware Capabilities (AI-relevant) Best For FRDM-MCXA156 Entry-level MCU (TinyML)  No NPU (CPU-only) Sensors via Expansion headers (Arduino, MikroBUS, Pmod) Parallel display support Sensor ML Anomaly detection Basic TinyML FRDM-MCXN947 MCU with neural acceleration NPU Parallel camera interface (basic) Parallel display Audio (PDM/I2S) Voice AI  Low-res vision Object classification Anomaly Detection FRDM-IMX93 Entry Edge AI MPU NPU  MIPI CSI camera Display (MIPI DSI/LVDS) Audio + connectivity Smart HMI Light vision AI Edge gateways FRDM-IMX8MPLUS Advanced Multimedia + Edge AI platform NPU Multi-camera (MIPI CSI) High-res display (HDMI/DSI)  Audio DSP Connectivity (Wi-Fi, BLE, Ethernet) Some PCIe expansion Computer vision Object detection Industrial AI FRDM-IMX95 Next-gen AI + real-time MPU Next-gen NPU + heterogeneous compute Multi-camera pipelines Advanced HMI Industrial connectivity M.2 expansion(Up to 1 AI accelerators) Robotics Industrial AI Safety applications FRDM-IMX95-PRO Full-featured AI dev platform High-performance NPU + scalable AI (Ara240 Discrete NPU)  Multi-camera Advanced display M.2 expansion (Up to 2 AI accelerators) Advanced AI prototyping Gen AI Edge servers Edge computing  Software and tools for ML/AI applications   GoPoint GoPoint accelerates AI/ML evaluation on FRDM platforms powered by i.MX application processors by providing a ready-to-use, graphical environment with pre-integrated demos. Developers can quickly run applications such as image classification, object detection, and voice recognition directly on the hardware without complex setup. These demos are already optimized for available compute resources—including CPU, GPU, DSP, and NPU—allowing users to immediately visualize performance and understand how AI workloads map to the system. This makes GoPoint an ideal starting point for exploring edge AI capabilities and validating use cases before moving into full application development. Application Code Hub (ACH) Application Code Hub complements rapid evaluation tools by offering a centralized repository of reusable, production-oriented software examples for FRDM boards. It provides full application projects, source code, and documentation that developers can directly import into MCUXpresso IDE or VS Code. With filtering based on use case—such as vision AI, audio processing, or anomaly detection, ACH enables developers to quickly find and customize reference implementations. This helps bridge the gap between proof-of-concept and real product development, significantly reducing development time while enabling scalable AI/ML application design. Application Code Hub Guide eIQ Time Series Studio (TSS) eIQ Time Series Studio is purpose-built for developing AI models based on sensor and time-series data, making it highly relevant for FRDM-based edge intelligence applications. It provides a guided workflow for data collection, labeling, model training, and validation, all optimized for MCU-class devices. Developers can easily transform raw sensor data—such as vibration, motion, or environmental signals—into deployable machine learning models for use cases like predictive maintenance, anomaly detection, and condition monitoring. With built-in analytics and seamless deployment to FRDM boards, TSS simplifies the path from data to intelligent behavior on the edge. eIQ AI/ML Software Environment The eIQ software environment is the foundation that enables AI/ML development across the entire FRDM ecosystem, providing an end-to-end workflow from model creation to on-device inference. It supports importing and optimizing models from popular frameworks such as TensorFlow, PyTorch, and ONNX, and integrates tightly with MCUXpresso and Linux-based environments. eIQ includes tools for model optimization—such as quantization and pruning—as well as runtime engines designed for efficient execution on CPUs, DSPs, and NPUs. By combining these capabilities with hardware acceleration available on FRDM boards, eIQ allows developers to build, deploy, and run real-time AI applications directly on embedded devices with minimal reliance on cloud computing. eIQ Training Curriculum FQA What is an NPU ? A Neural Processing Unit (NPU) in the FRDM platform is a dedicated hardware accelerator integrated into certain microcontrollers (such as the MCX-N family) that is specifically designed to execute machine learning and neural network workloads efficiently. Unlike general-purpose CPUs, the NPU is optimized for the mathematical operations used in AI models, enabling significantly faster inference—up to tens of times higher throughput—while consuming less power. In FRDM boards, the NPU works alongside the CPU and DSP to offload complex AI computations, allowing real-time processing for applications such as image recognition, voice detection, and sensor-based anomaly detection directly on the device. Combined with NXP’s eIQ® software environment, the NPU becomes the core execution engine that transforms FRDM platforms into efficient, low-power edge AI systems capable of running intelligent applications without relying on the cloud What is a Discrete NPU? A Discrete Neural Processing Unit (DNPU) is a standalone AI accelerator designed specifically to execute machine learning and neural network workloads efficiently. Unlike integrated NPUs that are built into a processor, a DNPU exists as a separate chip or module that can be added to a system. It offloads compute-intensive AI operations, such as matrix multiplications and deep learning inference from the main CPU or GPU, delivering significantly higher performance and better energy efficiency. This makes DNPUs ideal for advanced edge AI applications like computer vision, generative AI, and real-time multimodal processing. How do I use Ara modules (DNPU) with FRDM boards? Ara modules, based on NXP’s DNPU technology, can be used with compatible FRDM boards to extend AI processing capabilities. On supported i.MX-based FRDM platforms such as FRDM-IMX95 or FRDM-IMX95-PRO—developers can connect Ara modules (e.g., Ara240) through the M.2 expansion interface. Once connected, the Ara module works alongside the main processor to offload complex AI workloads, enabling faster inference, lower latency, and improved power efficiency. Using the eIQ® AI software environment, developers can prototype and validate models on FRDM, then scale performance by enabling Ara acceleration, creating a seamless path from development to high-performance edge AI deployment. From TinyML to advanced edge AI and GenAI, discover how to build intelligent systems directly on-device with FRDM, no cloud dependency required. FRDM-IMX8 FRDM-IMX8MP FRDM-IMX9 FRDM-MCXN i.MX Application Processors MCU
View full article
Importing a Wrapped Key Blob Using PSA Crypto APIs on RW612 Introduction In a previous article, we demonstrated how to import an RFC3394-wrapped key blob into ELS by manually performing the following operations: Deriving NXP_DIE_KEK_SK using CKDF-SP800-108 Importing the wrapped blob with mcuxClEls_KeyImport_Async() Deleting the temporary KEK after import While this approach provides full visibility into the underlying ELS operations, applications using the PSA Crypto API can achieve the same result with significantly less code. This article demonstrates how to use psa_import_key() together with PSA_KEY_LOCATION_S50_RFC3394_STORAGE to import a wrapped key blob stored in OTP. The PSA Oracle driver transparently handles the secure key loading sequence, including KEK derivation, key unwrapping, ELS slot management, and cleanup. Prerequisites FRDM-RW612 Key blob wrapped using RFC3394 format using HSM_STORE_KEY Key blob programmed to OTP fuses using LoadKeyBlob command. Required Headers: #include "psa/crypto.h" #include "mcuxClPsaDriver_Oracle_Interface_key_locations.h" #include "fsl_romapi_otp.h" Step 0 – Read the Wrapped Key Blob from OTP The example reads the blob directly from OTP memory. otp_fuse_read(starting_fuse_index + i, &fuse_word); Each fuse word contains four bytes.   These words are assembled into a contiguous buffer: blob_data[i * 4 + 0] = (fuse_word >> 0) & 0xFF; blob_data[i * 4 + 1] = (fuse_word >> 8) & 0xFF; blob_data[i * 4 + 2] = (fuse_word >> 16) & 0xFF; blob_data[i * 4 + 3] = (fuse_word >> 24) & 0xFF; The resulting buffer contains the RFC3394 wrapped key. Step 1 – Configure PSA Key Attributes Before importing the blob, PSA key attributes must describe how the key should be managed. The most important configuration is the key location: psa_set_key_lifetime( &attributes, PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( PSA_KEY_PERSISTENCE_VOLATILE, PSA_KEY_LOCATION_S50_RFC3394_STORAGE)); The PSA_KEY_LOCATION_S50_RFC3394_STORAGE location informs the Oracle driver that: The provided data is an RFC3394-wrapped key blob. The blob requires unwrapping before use. NXP_DIE_KEK_SK must be derived automatically during key loading. In this example we used an AES 128-bit key. The key type and size must match the wrapped key: psa_set_key_type(&attributes, PSA_KEY_TYPE_AES); psa_set_key_bits(&attributes, 128); Usage permissions are then assigned: psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT); Finally, specify the algorithm: psa_set_key_algorithm( &attributes, PSA_ALG_ECB_NO_PADDING); Step 2 – Import the Wrapped Blob The blob is imported using a single PSA API call: psa_import_key( &attributes, blob_data, blob_length, &key_handle); For developers familiar with the low-level ELS implementation, this single call effectively replaces: derive_nxp_die_kek_sk() import_wrapped_key_blob() delete_key_from_slot() At this point, PSA stores the wrapped blob and returns a key handle: psa_key_id_t key_handle; The returned handle is subsequently used for cryptographic operations. Next Steps At this point, the wrapped key blob has been successfully imported into the target ELS key slot, and the temporary  NXP_DIE_KEK_SK  has been removed. The imported key is now available for use by ELS-protected cryptographic operations without exposing the underlying key material to application software. The next step is to validate the imported key by performing the operation it was provisioned for.  For this example, we used AES-ECB encryption: psa_cipher_encrypt( key_handle, PSA_ALG_ECB_NO_PADDING, plaintext, sizeof(plaintext), ciphertext, sizeof(ciphertext), &ciphertext_length); Step 4 – Cleanup Once the key is no longer required, destroy it using: psa_destroy_key(key_handle); This releases the PSA key object and allows the Oracle driver to clean up any associated secure resources. Unlike the low-level ELS implementation, the application does not need to explicitly manage ELS keyslots. PSA vs Direct ELS Implementation Direct ELS API PSA Crypto API Derive KEK manually Automatic Import blob manually Automatic Manage keyslots Managed by Oracle Delete temporary KEK Automatic Greater control Simpler application code Higher implementation effort Faster integration Both approaches ultimately leverage the same secure hardware mechanisms within RW612. The PSA approach simply abstracts the underlying ELS operations behind a standardized cryptographic interface.
View full article
Importing a Wrapped Key Blob into ELS Using NXP_DIE_KEK_SK on RW612 Introduction When provisioning secrets into an RW612 device, one common requirement is to securely load cryptographic keys without ever exposing the plaintext key material to application software. The EdgeLock Secure Subsystem (ELS) provides a secure mechanism for accomplishing this by allowing a wrapped key blob to be imported directly into an ELS key slot. The wrapping key is derived from device-unique root material inside the secure enclave. This article demonstrates how to: Derive the die-specific NXP_DIE_KEK_SK Import and unwrap the blob using ELS Store the resulting key in an ELS keyslot Remove temporary key material after provisioning The imported key never exists in plaintext in application memory, significantly reducing the attack surface compared to software-based key management. Understanding the Key Hierarchy Before looking at the implementation, it is useful to understand the different keys involved. NXP_DIE_MK_SK(NXP_DIE_INT_MK_SK) This is the 256-bit die master key derived from UDF and PUF using the KEYPROV operation. Characteristics: Die unique Not exportable Used as a root-of-trust Occupies key slot 0 on RW612 The key is loaded via dedicated secret key bus from PUF into ELS and XOR with a UDF derived key using KEYPROV, where it is used as a main key for further derivation of all remaining keys used by ROM. Applications never directly access the key material. NXP_DIE_KEK_SK This 256-bit key is derived from the master key using CKDF. It used for the wrapping of RFC3394 blobs stored in the OTP fuse region. Purpose: Acts as a Key Encryption Key (KEK) Used only for wrapping or unwrapping other keys Can be generated dynamically when needed In this example the KEK is stored temporarily in key slot 5. Imported Key The final key imported from the wrapped blob depends on how the blob was originally generated using the HSM provisioning flow (for example, via HSM_STORE_KEY and later loaded with loadkeyblob ). The imported key may represent a customer-defined security asset such as: Customer master key ( CUST_CKDFK_FLAG ) HKDF master key ( CUST_HKDFK_FLAG ) HMAC key ( CUST_HMACK_FLAG ) CMAC key ( CUST_CMACK_FLAG ) AES key ( CUST_AESK_FLAG ) Key unwrap-only key ( CUST_KUOK_FLAG ) Regardless of the key type, the import process remains the same. The key material is never exposed to application software during this process. Once imported, the key can be used directly by ELS for the cryptographic operations associated with its intended purpose, while remaining protected within the secure subsystem. Prerequisites FRDM-RW612 Key blob wrapped using RFC3394 format using HSM_STORE_KEY Key blob programmed to OTP fuses using LoadKeyBlob command. Required Headers: #include "mcux_els.h" #include "mcuxClEls.h" #include "mcux_pkc.h" #include "fsl_romapi_otp.h" Step 1 – Derive NXP_DIE_KEK_SK The wrapped blob is protected using a Key Encryption Key (KEK). On RW612, the KEK can be derived from the device master key ( NXP_DIE_MK_SK ) using the official recipe constants. The derivation operation uses  masterKeyIdx = 0;  which corresponds to NXP_DIE_MK_SK  and produces a new key in the target slot. Example: static const uint8_t derivation_data[12] = { 0x94, 0xbe, 0x03, 0xac, 0x8b, 0x59, 0x32, 0x45, 0x11, 0x7f, 0xf8, 0x3f }; mcuxClEls_Ckdf_Sp800108_Async( masterKeyIdx, target_slot, targetKeyProperties, derivation_data);   Wait for completion: mcuxClEls_WaitForOperation(MCUXCLELS_ERROR_FLAGS_CLEAR);   Verify that the derived key slot becomes active before proceeding. Step 2 – Retrieve the Wrapped Blob The example reads the blob directly from OTP memory. otp_fuse_read(starting_fuse_index + i, &fuse_word); Each fuse word contains four bytes.   These words are assembled into a contiguous buffer: blob_data[i * 4 + 0] = (fuse_word >> 0) & 0xFF; blob_data[i * 4 + 1] = (fuse_word >> 8) & 0xFF; blob_data[i * 4 + 2] = (fuse_word >> 16) & 0xFF; blob_data[i * 4 + 3] = (fuse_word >> 24) & 0xFF; The resulting buffer contains the RFC3394 wrapped key. Step 3 – Import and Unwrap the Blob Once the KEK exists and the blob has been retrieved, the import operation can begin. Configure ELS for RFC3394 import: mcuxClEls_KeyImportOption_t options; options.word.value = 0; options.bits.kfmt = MCUXCLELS_KEYIMPORT_KFMT_RFC3394; Perform the import: mcuxClEls_KeyImport_Async( options, blob_data, blob_length, kek_slot, target_slot); Parameters: Parameter Purpose blob_data Wrapped key blob blob_length Blob size kek_slot Slot containing NXP_DIE_KEK_SK target_slot Destination keyslot Wait for completion: mcuxClEls_WaitForOperation(MCUXCLELS_ERROR_FLAGS_CLEAR); If successful, ELS unwraps the blob internally and places the resulting key into the destination key slot. No plaintext key material is exposed to software. Step 4 – Clean Up Temporary KEK After the blob has been imported, delete the temporary KEK: mcuxClEls_KeyDelete_Async(kek_slot); mcuxClEls_WaitForOperation(MCUXCLELS_ERROR_FLAGS_CLEAR); This leaves only the imported key resident inside ELS. Next Steps At this point, the wrapped key blob has been successfully imported into the target ELS key slot, and the temporary NXP_DIE_KEK_SK has been removed. The imported key is now available for use by ELS-protected cryptographic operations without exposing the underlying key material to application software. The next step is to validate the imported key by performing the operation it was provisioned for. Depending on the key type, this may include: AES encryption or decryption operations HMAC generation or verification CMAC generation or verification HKDF-based key derivation Importing or unwrapping additional key material Secure firmware or data encryption workflows A successful cryptographic operation confirms that: The blob was read correctly from storage. The NXP_DIE_KEK_SK derivation completed successfully. The RFC3394 unwrap operation succeeded. The key was installed into the intended ELS keyslot with the expected properties. For production deployments, this import mechanism provides a secure method for provisioning customer keys generated with the HSM tooling while ensuring that plaintext key material never leaves the ELS security boundary.
View full article
i.MX8MP RAW 捕获最大几何尺寸 NXP社区的各位好, 我们正在尝试在 i.MX8MP 上使用特定的图像传感器。 我们正在尝试将 RAW12 捕获从 MIPI 推送到 RAM。看来唯一的方法是通过如下所述的 ISI 模块: 问题在于,关于几何限制的文档含糊不清,我们正在尝试确定 i.MX8MP 是否适合我们的应用。 图像的高度和宽度在 ISI 中使用 CHNL_IMG_CFG[WIDTH/HEIGHT] 寄存器定义。这些条目是 13 位的,理论上将我们限制在 8191 x 8191 的几何尺寸。 宽度似乎受到硬件的限制,因为行缓冲区实际上只能容纳 2K 像素,但文档概述了通过组合其他通道的行缓冲区来实现 4K 的方法。文档中没有说明是否可以达到 8191 像素的线宽寄存器限制。我们可以绕过 ISI 处理,我们的目标是直接将 RAW MIPI 捕获的数据推送到 RAM 中。 此外,与宽度限制不同,高度限制似乎并非由物理硬件引起。 是否有任何证据表明我们可以支持 CHNL_IMG_CFG[HEIGHT] 寄存器 13 位最大值所定义的 8191 行高度? 任何支持都将不胜感激。我已阅读过其他类似帖子,例如以下这些: https://community.nxp.com/t5/i-MX-Processors/Direct-MIPI-CSI2-to-memory-access-on-i-MX8MP/mp/2158946 https://community.nxp.com/t5/i-MX-Processors/I-MX8MP-ISI-maximum-supported-width/mp/1224069 但是,目前尚未确认是否支持 8191 宽度,我想知道这方面是否有任何更新。 此外,高度限制也没有明确规定。 谢谢 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Re: i.MX8MP Maximum Geometry for RAW Capture i.MX8MP 的 ISI 驱动程序限制在 2K 分辨率,但如果使用链式缓冲区,ISI 可以支持高达 4K 的分辨率,但不支持 8191 像素宽。在 i.MX8MP 上,单个摄像头最高可支持 4K@30Hz 的分辨率。 Re: i.MX8MP Maximum Geometry for RAW Capture 感谢您的回复。 所以宽度限制与我最初的发现相符。 请问ISI模块的高度限制是多少?我们能否通过 ISI 实现 8191 车道高度? 谢谢 Re: i.MX8MP Maximum Geometry for RAW Capture 请参考驾驶员说明,最大高度为 8191。 #define MXC_ISI_MIN_WIDTH 1U #define MXC_ISI_MIN_HEIGHT 1U #define MXC_ISI_MAX_WIDTH_UNCHAINED 2048U #define MXC_ISI_MAX_WIDTH_CHAINED 4096U #define MXC_ISI_MAX_HEIGHT 8191U https://github.com/nxp-imx/linux-imx/blob/lf-6.12.y/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
View full article
Requesting Gerbers for AFT05MP075N Hello, I'm working on a VHF/UHF power amplifier design using the AFT05MP075N. I have the DXF reference PCB files from the AFT05MP075N product page but I will need the complete Gerber file package for the 450–520 MHz broadband reference board. I understand these were previously provided to customers upon request. I would like support in getting those files. Thank you RF Re: Requesting Gerbers for AFT05MP075N Hello, Please note that NXP does not provide Gerber files for this product. Instead, we offer a DXF file, which you can find on the product page under the Design Resources section. We apologize for any inconvenience this may cause and appreciate your understanding.
View full article
ニューヨーク州ニューヨーク市の離婚弁護士 ニューヨークの離婚弁護士は家族法を専門とし、離婚、別居、または関連問題の解決を求める方々に専門的な代理を提供します。彼らの専門分野は、離婚、別居合意、子どもの親権、面会、養育費、配偶者扶養、財産分割、婚前および婚後契約、父性紛争、既存契約の修正などです。優れた離婚弁護士は、ニューヨークの家族法の経験、優れた交渉および訴訟スキル、共感力、細部への注意力、そして地元の裁判所や手続きの知識を持っているべきです。離婚弁護士を雇うメリットとしては、権利と利益の保護、複雑な手続きにおける専門家の指導、個別の対応、有利な結果が得られる可能性の向上、ストレスや精神的負担の軽減などが挙げられます。資格のあるニューヨーク州離婚弁護士 を見つけるためのリソース:州弁護士協会、アメリカ婚姻弁護士協会、そして全米州裁判所センター。 Re: new york ny divorce lawyer 深刻な犬の攻撃は、被害者に身体的な怪我や医療費、将来への不確実性をもたらす可能性があります。テキサス州で犬に噛まれたことによる傷害賠償請求を行うことで、治療費、逸失利益、精神的苦痛、その他事故に関連する損害に対する補償を得られる可能性があります。テキサス州の経験豊富な犬咬傷弁護士は、襲撃の状況を確認し、裏付けとなる証拠を集め、被害者を法的手続きに導きます。事件が公共の場所で発生したか私有地で発生したかにかかわらず、自分の権利を理解することは、自分の利益を守るための重要な一歩です。地元の代理を求める方には、アーリントンの犬咬傷弁護士がCASEの詳細に合わせた法的支援を提供できます。テキサス州の信頼できる人身傷害弁護士は、被害者がテキサス州法に基づいて受け取る権利のある賠償金を得られるよう支援します。
View full article
i.MX RT1064 - PEmicro 连接助手错误和启动配置意外更改 您好, 我正在使用i.MX RT1064控制器,并通过 MCUXpresso IDE 中的PEmicro Multilink接口进行调试/烧录。 有时,我在尝试连接目标设备时会遇到附件中的“PEmicro 连接助手”错误。这个问题似乎是随机发生的;我还没有发现任何特定的软件活动、代码更改或硬件事件会持续触发信号它。 我观察到,当出现此错误时,控制器的启动配置似乎发生了意外变化。在这种状态下,我无法对设备进行刷机或调试。我目前唯一能恢复的方法是将启动配置恢复到其原始设置——内部闪存模式,之后刷写和调试功能就能再次正常工作了。 一些补充细节: MCU:i.MX RT1064 调试探针:PEmicro 多链路通用 Rev E IDE:MCUXpresso IDE 有人遇到过类似的问题吗? 我希望您能就以下方面提供指导: 什么原因会导致启动配置意外更改? 是否存在调试器或应用程序代码可能影响启动配置的已知场景。 防止这种情况发生的建议方法。 能否在不手动更改的情况下通过软件更改启动配置 我附上了错误信息的截图供您参考。 谢谢! i.MX RT106x Re: i.MX RT1064 - PEmicro Connection Assistant Error and Boot Configuration Changing Unexpectedly 你好, 您能帮我解答以下问题吗? 你用的是定制主板还是EVK主板? 您使用的是哪个版本的SDK和IDE? 你烧断过熔丝吗? 您提到需要将启动配置恢复到内部闪存模式——您目前使用的是哪种启动配置? 此致, 巴勃罗 Re: i.MX RT1064 - PEmicro Connection Assistant Error and Boot Configuration Changing Unexpectedly 我使用的是定制电路板,但这个问题在 EVK 上也出现过。 SDK 版本:26.03.00 IDE 版本:25.6.136 我们没有烧断熔丝。 我们通常使用内部启动模式来烧录代码并进行正常操作,但它会随机导致一些意想不到的问题,所以我们将其更改为串行下载模式,擦除闪存,然后再将其改回内部启动模式,之后再次烧录代码。 请查看附件图片以获取启动配置信息。 Re: i.MX RT1064 - PEmicro Connection Assistant Error and Boot Configuration Changing Unexpectedly 你好@Subhasri_S , 通过在 POR_B 的上升沿对 BOOT_MODE0 和 BOOT_MODE1 输入进行采样来初始化 BOOT_MODE 寄存器。对这些输入进行采样后,它们的后续状态不会影响内部 BOOT_MODE 寄存器的内容。 如果 BT_FUSE_SEL = 0,则可以使用 GPIO 引脚而不是 eFuse 来设置特定的启动配置参数。 能否请您在问题出现时,在 RESET 过程中测量一下 BOOT_MODE 和 BT_CFG 引脚的值? 关于此问题的另一种可能结论,请参阅以下知识库文章: 知识库: RT板恢复调试器连接问题 “当闪存中包含异常应用程序(访问内存不存在、内存损坏、时钟配置错误等)时,会导致板处于未知状态,此时调试器无法控制内核。但是,当将核心置于串行下载器模式时,它将使核心处于已知状态,这样,调试器就可以控制核心。 因此,当RT板出现调试器问题时,尝试在串行下载模式下批量擦除外部闪存,这样就能使板载调试器恢复正常状态。 此致, 巴勃罗
View full article
纽约州纽约市离婚律师 纽约离婚律师专门从事家庭法,为寻求离婚、分居或解决相关问题的个人提供专业代理服务。他们的执业领域包括离婚、分居协议、子女监护权、探视权、子女抚养费、配偶赡养费、财产分割、婚前和婚后协议、亲子鉴定纠纷以及现有协议的修改。一名优秀的离婚律师应该具备纽约州家庭法方面的经验、较强的谈判和诉讼技巧、同理心、注重细节,以及对当地法院和程序的了解。聘请离婚律师的好处包括保护权利和利益、在复杂的过程中提供专家指导、个性化代理、提高获得有利结果的可能性以及减轻压力和情感负担。寻找合格的纽约州离婚律师的资源:纽约州律师协会、美国婚姻律师学会和国家州法院中心。 Re: new york ny divorce lawyer 严重的犬只袭击事件可能使受害者面临身体伤害、医疗费用以及对未来的不确定性。在德克萨斯州提起狗咬伤索赔诉讼可能有助于获得治疗费用、工资损失、疼痛以及与该事件相关的其他损失的赔偿。德克萨斯州经验丰富的狗咬伤律师可以审查袭击事件的情况,收集佐证材料,并指导受害者完成法律程序。无论事件发生在公共场所还是私人场所,了解您的权利都是保护自身利益的重要一步。对于那些寻求本地法律援助的人来说,阿灵顿的狗咬伤律师可以提供根据案件具体情况量身定制的法律支持。值得信赖的德克萨斯州人身伤害律师致力于帮助受害者根据德克萨斯州法律获得他们应得的赔偿。
View full article
i.MX RT1064 - PEmicro Connection Assistant エラーおよび起動設定の予期しない変更 こんにちは、 i.MX RT1064コントローラーを使い、MCUXpresso IDEのPEmicro Multilinkインターフェースを通じてデバッグやフラッシュを行っています。 ターゲットへの接続を試みる際に、添付の「PEmicro Connection Assistant」エラーが発生することがあります。この問題はランダムに発生するようです。特定のソフトウェア活動、コード変更、ハードウェアイベント情報で継続的にトリガーされるものは特定していません。 私が観察したのは、このエラーが起こると、コントローラーの 起動設定が予期せず変更されているように見えることです。この状態では、デバイスのフラッシュやデバッグを行うことができません。唯一回復できた方法は、起動設定を元の設定(内部フラッシュモード)に戻すことで、その後はフラッシュやデバッグが正常に動作します。 追加情報: MCU:i.MX RT1064 デバッグプローブ: PEmicro Multilink Universal Rev E IDE:MCUXpresso IDE 同様の問題に遭遇した方はいらっしゃいますか? 以下の点についてご助言いただければ幸いです。 なぜ起動設定が予期せず変わるのでしょうか。 デバッガやアプリケーションコードがブート設定に影響を与える既知のシナリオがあるかどうか。 これを防ぐための推奨方法。 CAN 手動変更なしでソフトウェアで起動設定を変更することはできますか 参考までに、エラーメッセージのスクリーンショットを添付しました。 よろしくお願いします。 i.MXRT 106x Re: i.MX RT1064 - PEmicro Connection Assistant Error and Boot Configuration Changing Unexpectedly こんにちは、 以下の質問に答えてもらえますか? カスタムボードを使用していますか、それともEVKを使用していますか? SDKとIDEのバージョンは何を使っていますか? ヒューズを焼いてしまったことはありますか? 起動設定を内部フラッシュモードに復元する必要があるとおっしゃっていましたが、現在どのブート設定を使っていますか? よろしくお願いします、 パブロ Re: i.MX RT1064 - PEmicro Connection Assistant Error and Boot Configuration Changing Unexpectedly 私はカスタムボードを使用していますが、この問題はEVKでも確認されています。 SDK バージョン : 26.03.00 IDEバージョン:25.6.136 ヒューズは一つも切っていない。 通常は内部ブートモードでコードをフラッシュし、通常の動作をしますが、予期せぬ問題がランダムに起こるため、シリアルダウンロードモードに変え、フラッシュを消去してから再び内部ブートモードに戻してから再度コードをフラッシュします。 ブート設定情報については、添付画像をご覧ください。 Re: i.MX RT1064 - PEmicro Connection Assistant Error and Boot Configuration Changing Unexpectedly こんにちは、 @Subhasri_S さん。 BOOT_MODEレジスタは、POR_Bの立ち上がりエッジでBOOT_MODE0とBOOT_MODE1の入力をサンプリングすることによって初期化されます。これらの入力がサンプリングされた後、その後の状態は内部のBOOT_MODEレジスタの内容に影響を与えません。 BT_FUSE_SEL = 0の場合、特定のブート設定パラメータはeFuseの代わりにGPIOピンで設定できます。 問題が起きたときにリセット時にBOOT_MODEとBT_CFGピンの測定を手伝ってもらえますか? この問題に関する別の可能性のある結論については、以下のナレッジベース記事に記載されています。 ナレッジベース:デバッガー接続の問題に対するRTボードの復旧 「フラッシュに異常なアプリ(アクセスメモリが存在しない、メモリが破損している、クロックの誤設定など)が含まれていると、ボードが未知の状態に陥り、デバッガがコアを制御できなくなります。しかし、コアをシリアルダウンローダーモードにすると、コアは既知の状態になり、デバッガーがコアを制御できるようになります。 SO、RTボードでデバッガの問題が発生した場合は、シリアルダウンロードモードで外部フラッシュを一括消去してみてください。そうすればボードデバッガは通常の状態に復元されます。」 よろしくお願いします、 パブロ
View full article