Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
iMXRT10xx SDK MCUBoot version Hi, I'm using the iMXRT1021 MCU with MCUXpresso SDK 24.12.00 and MCUBoot as middelware component from SDK. Is there a way to know which MCUBoot version is included with SDK? I searched in code but no version is defined for MCUBoot... Thanks! Re: iMXRT10xx SDK MCUBoot version Hi! Just found in SDK documentation the MCUBoot Release Notes: it should be 2.0.0 MCUboot release notes — MCUXpresso SDK Documentation
View full article
推荐使用 MX8QM PMIC 我正在规划一个基于 MX8QM 处理器的设计。我们将使用以下接口 A72 2x 内核 PCIe 接口 eMMC 接口 以太网接口 我们不会使用 GPU、VPU 和显示器等。 在 PMIC 选择页面上,https://www.nxp.com/products/power-management/pmics-and-sbcs:POWR_MAN_USER_INTERFACE 推荐的设备是 PF81-PF82,根据产品页面,不推荐使用。 那么推荐的设备是什么? 我们可以使用PCA9450C 吗? 此致 i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus Re: MX8QM recommended PMIC 你好 遗憾的是,恩智浦没有 PF81-PF82 的替换零件编号。 我建议您寻找第三方解决方案: 针对恩智浦 i.MX8 QuadMax 处理器的集成电源设计 此外,PCA9450 PMIC 与 i.MX8QM 不兼容,因为与 i.MX8MN/M/P 处理器相比,PCA9450 PMIC 需要更高的电流功耗和不同的上电/断电顺序。 请记住,在 2034 年 5 月之前,PF81-PF82 产品系列是我们的长寿计划的一部分 顺祝商祺!
View full article
iMXRT10xx SDK MCUBoot バージョン こんにちは、 私は、iMXRT1021 MCU を MCUXpresso SDK 24.12.00 と、SDK からのミドルウェア コンポーネントとして MCUBoot とともに使用しています。 SDKs に含まれている MCUBoot のバージョンを確認する方法はありますか? コードで検索しましたが、MCUBoot のバージョンは定義されていません... よろしくお願いします! Re: iMXRT10xx SDK MCUBoot version こんにちは! SDKドキュメントのMCUBootリリースノートで見つけました: 2.0.0のはずです MCUboot リリースノート — MCUXpresso SDK ドキュメント
View full article
带 ATF 调整时钟的 S32G Linux 用于扩频 你好 Linux 电路板支持包 团队, 客户询问了有关如何调整带有 ATF 的 Linux 电路板支持包中的时钟扩频设置的指南。 我检查了最新的 S32G 电路板支持包,找不到以下与时钟扩频相关的锁相环频率调制 (PLLFM) 寄存器配置。 我的问题是,我们有计划在 Linux 电路板支持包 中添加这种支持吗? BRs, 天祥 Linux BSP Re: S32G Linux with ATF adjust clock for spread spectrum 理论上,扩频只能在 1516MHz(DS 值略低于 1600MHz)的频率下工作,因为它不能向下扩频,否则就意味着要对 DDR 进行超频,而法雷奥则决定将 DDR 频率提高到 1590MHz(更接近 1600MHz),因为它比 SS 更容易实现。但由于 1590MHz 不在 DS 和校准工具中,因此风险自负。下面是这篇文章: [S32G]将 DDR 频率改为 1590MHz,并使用 20 欧元的 SDR 加密狗测量结果 Re: S32G Linux with ATF adjust clock for spread spectrum 你好,根纳迪 知道了,谢谢你的快速确认。 BRs, 天祥 Re: S32G Linux with ATF adjust clock for spread spectrum 你好@Tianxiang_Huang、 目前还不支持用于 DDR PLL 频率调制的时钟扩频,也不打算在短期内添加。如果这与一个或多个客户相关,则需要详细的变更申请。请注意,鉴于 TF-A 集成了该工具生成的代码,因此任何与 DDR 相关的更改都必须与 DDR 工具同步。 此致, 根纳迪
View full article
如何在 iMX91 处理器上版本 & 测试 OPTEE 您好, 我想了解 OPTEE 的功能。请求在以下方面提供支持 1.有关 OPTEE 的文件/教程iMX91 2.如何使用 YOCTO 在 iMX91 处理器上版本 & 测试 OPTEE。 目前,我有一个 YOCTO 基础,它是由--......开发的。 仓库 init-u https://github.com/nxp-imx/imx-manifest-b imx-linux-styhead -m imx-6.12.3-1.0.0_security-参考设计.xml 下面是由它生成的文件列表 ls tmp/deploy/images/imx91-11x11-lpddr4-evk ├── bl31-imx91.bin ├── bl31-imx91.bin-optee ├── core-image-base.env ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.manifest ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.spdx.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.testdata.json ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.bmap ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.manifest -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.manifest ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.spdx.tar.zst -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.spdx.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.tar.zst -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.testdata.json -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.testdata.json ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.wic.bmap -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.bmap ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.wic.zst -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.zst ├── core-image-base-imx-imx-boot-bootpart.wks ├── core-image-minimal-secure-boot.env ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.manifest ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.spdx.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.testdata.json ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.bmap ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.manifest -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.manifest ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.spdx.tar.zst -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.spdx.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.tar.zst -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.testdata.json -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.testdata.json ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.wic.bmap -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.bmap ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.wic.zst -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.zst ├── core-image-minimal-secure-boot-imx-imx-boot-bootpart.wks ├── files.txt ├── flash.bin ├── flash_os.bin ├── Image -> Image--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.bin ├── Image--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.bin ├── Image-imx91-11x11-lpddr4-evk.bin -> Image--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.bin ├── imx91-11x11-evk--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk.dtb ├── imx91-11x11-evk-aud-hat--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-aud-hat.dtb ├── imx91-11x11-evk-aud-hat.dtb ├── imx91-11x11-evk-aud-hat-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-aud-hat.dtb ├── imx91-11x11-evk.dtb ├── imx91-11x11-evk-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk.dtb ├── imx91-11x11-evk-ld--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-ld.dtb ├── imx91-11x11-evk-ld.dtb ├── imx91-11x11-evk-ld-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-ld.dtb ├── imx91-11x11-evk-lpuart--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-lpuart.dtb ├── imx91-11x11-evk-lpuart.dtb ├── imx91-11x11-evk-lpuart-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-lpuart.dtb ├── imx91-11x11-evk-mt9m114--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-mt9m114.dtb ├── imx91-11x11-evk-mt9m114.dtb ├── imx91-11x11-evk-mt9m114-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-mt9m114.dtb ├── imx91-11x11-evk-tianma-wvga-panel--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-tianma-wvga-panel.dtb ├── imx91-11x11-evk-tianma-wvga-panel.dtb ├── imx91-11x11-evk-tianma-wvga-panel-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-tianma-wvga-panel.dtb ├── imx-boot -> imx-boot-tagged ├── imx-boot-imx91-11x11-lpddr4-evk-sd.bin-flash_singleboot ├── imx-boot-tagged ├── imx-boot.tagged ├── imx-boot-tools │ ├── bl31-imx91.bin │ ├── bl31-imx91.bin-optee │ ├── csf_ahab.cfg.sample │ ├── csf_hab4.cfg.sample │ ├── imx_signer │ ├── lpddr4_dmem_1d_v202201.bin │ ├── lpddr4_dmem_2d_v202201.bin │ ├── lpddr4_imem_1d_v202201.bin │ ├── lpddr4_imem_2d_v202201.bin │ ├── mkimage_imx8 │ ├── mx91a0-ahab-container.img │ ├── soc.mak │ ├── spsdk_ahab.cfg.sample │ ├── tee.bin │ ├── u-boot-imx91-11x11-lpddr4-evk.bin-sd │ └── u-boot-spl.bin-imx91-11x11-lpddr4-evk-sd ├── imx-boot-untagged ├── lpddr4_dmem_1d_v202201.bin ├── lpddr4_dmem_2d_v202201.bin ├── lpddr4_imem_1d_v202201.bin ├── lpddr4_imem_2d_v202201.bin ├── modules--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.tgz ├── modules-imx91-11x11-lpddr4-evk.tgz -> modules--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.tgz ├── mx91a0-ahab-container.img ├── optee │ ├── ta │ │ ├── 023f8f1a-292a-432b-8fc4-de8471358067.elf │ │ ├── 023f8f1a-292a-432b-8fc4-de8471358067.stripped.elf │ │ ├── 02a42f43-d8b7-4a57-aa4d-87bd9b5587cb.elf │ │ ├── 02a42f43-d8b7-4a57-aa4d-87bd9b5587cb.stripped.elf │ │ ├── 25497083-a58a-4fc5-8a72-1ad7b69b8562.elf │ │ ├── 25497083-a58a-4fc5-8a72-1ad7b69b8562.stripped.elf │ │ ├── 380231ac-fb99-47ad-a689-9e017eb6e78a.elf │ │ ├── 380231ac-fb99-47ad-a689-9e017eb6e78a.stripped.elf │ │ ├── 528938ce-fc59-11e8-8eb2-f2801f1b9fd1.elf │ │ ├── 528938ce-fc59-11e8-8eb2-f2801f1b9fd1.stripped.elf │ │ ├── 5b9e0e40-2636-11e1-ad9e-0002a5d5c51b.elf │ │ ├── 5b9e0e40-2636-11e1-ad9e-0002a5d5c51b.stripped.elf │ │ ├── 5c206987-16a3-59cc-ab0f-64b9cfc9e758.elf │ │ ├── 5c206987-16a3-59cc-ab0f-64b9cfc9e758.stripped.elf │ │ ├── 5ce0c432-0ab0-40e5-a056-782ca0e6aba2.elf │ │ ├── 5ce0c432-0ab0-40e5-a056-782ca0e6aba2.stripped.elf │ │ ├── 731e279e-aafb-4575-a771-38caa6f0cca6.elf │ │ ├── 731e279e-aafb-4575-a771-38caa6f0cca6.stripped.elf │ │ ├── 80a4c275-0a47-4905-8285-1486a9771a08.elf │ │ ├── 80a4c275-0a47-4905-8285-1486a9771a08.stripped.elf │ │ ├── 873bcd08-c2c3-11e6-a937-d0bf9c45c61c.elf │ │ ├── 873bcd08-c2c3-11e6-a937-d0bf9c45c61c.stripped.elf │ │ ├── 8aaaf200-2450-11e4-abe20002a5d5c51c.elf │ │ ├── 8aaaf200-2450-11e4-abe20002a5d5c51c.stripped.elf │ │ ├── a4c04d50-f180-11e8-8eb2-f2801f1b9fd1.elf │ │ ├── a4c04d50-f180-11e8-8eb2-f2801f1b9fd1.stripped.elf │ │ ├── a720ccbb-51da-417d-b82e-e5445d474a7a.elf │ │ ├── a720ccbb-51da-417d-b82e-e5445d474a7a.stripped.elf │ │ ├── b3091a65-9751-4784-abf7-0298a7cc35ba.elf │ │ ├── b689f2a7-8adf-477a-9f99-32e90c0ad0a2.elf │ │ ├── b689f2a7-8adf-477a-9f99-32e90c0ad0a2.stripped.elf │ │ ├── c3f6e2c0-3548-11e1-b86c-0800200c9a66.elf │ │ ├── c3f6e2c0-3548-11e1-b86c-0800200c9a66.stripped.elf │ │ ├── cb3e5ba0-adf1-11e0-998b-0002a5d5c51b.elf │ │ ├── cb3e5ba0-adf1-11e0-998b-0002a5d5c51b.stripped.elf │ │ ├── d17f73a0-36ef-11e1-984a-0002a5d5c51b.elf │ │ ├── d17f73a0-36ef-11e1-984a-0002a5d5c51b.stripped.elf │ │ ├── e13010e0-2ae1-11e5-896a-0002a5d5c51b.elf │ │ ├── e13010e0-2ae1-11e5-896a-0002a5d5c51b.stripped.elf │ │ ├── e6a33ed4-562b-463a-bb7e-ff5e15a493c8.elf │ │ ├── e6a33ed4-562b-463a-bb7e-ff5e15a493c8.stripped.elf │ │ ├── f04a0fe7-1f5d-4b9b-abf7-619b85b4ce8c.elf │ │ ├── f04a0fe7-1f5d-4b9b-abf7-619b85b4ce8c.stripped.elf │ │ ├── f157cda0-550c-11e5-a6fa-0002a5d5c51b.elf │ │ ├── f157cda0-550c-11e5-a6fa-0002a5d5c51b.stripped.elf │ │ ├── fd02c9da-306c-48c7-a49c-bbd827ae86ee.elf │ │ ├── fd02c9da-306c-48c7-a49c-bbd827ae86ee.stripped.elf │ │ └── ffd2bded-ab7d-4988-95ee-e4962fff7154.elf │ ├── tee.bin │ ├── tee.elf │ ├── tee-header_v2.bin │ ├── tee.mx91evk.bin │ ├── tee-pageable_v2.bin │ ├── tee-pager_v2.bin │ └── tee-raw.bin ├── os_cntr_signed.bin ├── signed-imx-boot-imx91-11x11-lpddr4-evk-sd.bin-flash_singleboot ├── tee.bin -> optee/tee.mx91evk.bin ├── u-boot.bin -> u-boot-sd-2024.04-r0.bin ├── u-boot.bin-sd -> u-boot-sd-2024.04-r0.bin ├── u-boot-imx91-11x11-lpddr4-evk.bin -> u-boot-sd-2024.04-r0.bin ├── u-boot-imx91-11x11-lpddr4-evk.bin-sd -> u-boot-sd-2024.04-r0.bin ├── u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd -> u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd-2024.04-r0 ├── u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd-2024.04-r0 ├── u-boot-imx-initial-env-sd -> u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd-2024.04-r0 ├── u-boot-sd-2024.04-r0.bin ├── u-boot-spl.bin -> u-boot-spl.bin-sd-2024.04-r0 ├── u-boot-spl.bin-imx91-11x11-lpddr4-evk -> u-boot-spl.bin-sd-2024.04-r0 ├── u-boot-spl.bin-imx91-11x11-lpddr4-evk-sd -> u-boot-spl.bin-sd-2024.04-r0 ├── u-boot-spl.bin-sd -> u-boot-spl.bin-sd-2024.04-r0 └── u-boot-spl.bin-sd-2024.04-r0 4 directories, 153 files 谢谢, 基兰 Re: How to Build & Test OPTEE on iMX91 processor 嗨,@KiranM7! 感谢您联系恩智浦支持中心! 在我们的 BSP 中,OP-TEE 默认处于启用状态。虽然我们目前没有运行 optee-test 的官方指南,但您可以参考官方 OP-TEE 文档以获取详细说明: 选项测试 致以最崇高的敬意, Chavira
View full article
MX8QM推奨PMIC MX8QM プロセッサをベースにした設計を計画しています。以下のインターフェースを使用します A72 2コア PCIeインターフェース eMMCインターフェース イーサネットインターフェース GPU、VPU、ディスプレイなどは使用しません。 PMIC 選択ページ ( https://www.nxp.com/products/power-management/pmics-and-sbcs:POWR_MAN_USER_INTERFACE ) では、推奨デバイスは PF81-PF82 ですが、製品ページによると推奨されていません。 SO、推奨されるデバイスは何でしょうか? PCA9450Cは使えますでしょうか? よろしくお願いします。 i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus Re: MX8QM recommended PMIC こんにちは、 残念ながら、NXP の PF81-PF82 の交換部品番号はありません。 次のようなサードパーティのソリューションを探すことをお勧めします。 NXP i.MX8 QuadMaxプロセッサ向け統合電源デザイン また、PCA9450 PMIC は、i.MX8MN/M/P プロセッサと比較して、電力要件がより高い電流消費と異なる電源オン/電源オフ シーケンスであるため、i.MX8QM と互換性がありません。 PF81-PF82製品ファミリは、2034年5月まで当社の長寿プログラムの一部であることをご留意ください。 よろしくお願いいたします。
View full article
NTAG 424 no login possible after key 0 change Hi all, i'm facing a strange behaviour that i can't solve. I completed all my steps to configure a #NTAG424 for a security platform: everything is ok BUT one last thing I had to change all the 5 keys and started with this "loop" for 4 to 0: Login with key 0 Change key X I'm aware that changing K0 is different from K4-1 and the response is 91-00 so seems everything is correct. Now the problem: i can login with all the kyes 4-1 but with K0 i get a 91-AE in login part 2. I suppose that the encryption is wrong so the key is different from what i think, but i checked a lot of time the code and is ok. I only changet the cryptogram calculation as per data sheet and AN12196.  Any hint? Thank Re: NTAG 424 no login possible after key 0 change Hello @MPucci , Have you already implemented ChangeKey 0 and 1-4 in your post? I am currently implementing this, but I have encountered some issues. I am unable to successfully modify Key1-4 to respond to 911E, and after modifying Key0, the authentication response is 91AE. I would like to seek some help from you, and I would greatly appreciate it. Re: NTAG 424 no login possible after key 0 change Hello @KaiLi  I didn't see 6.16.2 in AN12196. Is it because the version of the document is different? Any hints? Thank you! Re: NTAG 424 no login possible after key 0 change Hello @MPucci  Thanks for contacting us and based on your issue description, it's recommended that you try the steps of chapter 6.16.2 of AN12196. For example: 1. Authentication by keyNo 0x00 2. input the New key  3. execute ChangeKey command 4. double check using the new key to authenticate NTAG424. BR Kelly Re: NTAG 424 no login possible after key 0 change Some more info: i know is not correct but i use the same RndA in all login before change the keys. I can't identify the root of the issue, but if i use 5 different RndA in login, no problems with keys (even K0), if i use the same RndA in login, K0 is corrupted. So for now the problem is solved, without knowing the cause.
View full article
ATF 搭載の S32G Linux で拡散スペクトル用にクロックを調整 Linux BSPチームの皆さん、こんにちは。 お客様から、ATF を使用して Linux BSP のクロック拡散スペクトル設定を調整する方法についてのガイダンスを問い合わせがありました。 S32G の最新 BSP を確認しましたが、次のクロック拡散スペクトル関連の PLL 周波数変調 (PLLFM) レジスタ構成が見つかりません。 私の質問は、このサポートを Linux BSP に追加する予定があるかどうかです。 よろしくお願いいたします。 天祥 Linux BSP Re: S32G Linux with ATF adjust clock for spread spectrum 理論上はダウンスプレッドされないため 1516MHz (DS 値は 1600MHz よりわずかに低い) でしか動作しない拡散スペクトルではなく (そうでない場合は DDR をオーバークロックすることになります)、Valeo は SS に比べて実装が簡単なため、DDR 周波数を 1590MHz (1600MHz にかなり近い) に移動することにしました。ただし、1590MHz は DS およびキャリブレーション ツールには含まれていないため、自己責任となります。こちらがその記事です: [S32G] DDR周波数を1590MHzに変更し、20ユーロのSDRドングルで結果を測定します Re: S32G Linux with ATF adjust clock for spread spectrum こんにちは、ゲナディさん。 わかりました。すぐに確認していただきありがとうございます。 よろしくお願いいたします。 天祥 Re: S32G Linux with ATF adjust clock for spread spectrum こんにちは@Tianxiang_Huangさん 現在のところ、DDR PLL 周波数変調のクロック拡散スペクトルはサポートされておらず、近いうちに追加される予定もありません。これが 1 人以上のクライアントに関係するCASEには、詳細な変更リクエストが必要です。TF-A はこのツールによって生成されたコードを統合するため、DDR 関連の変更はすべて DDR ツールと同期する必要があることに注意してください。 よろしくお願いいたします。 ゲナディ
View full article
NTAG 424 キー0の変更後にログインできない こんにちは、皆さん。 解決できない奇妙な動作に直面しています。セキュリティプラットフォーム用の#NTAG424を構成するためのすべての手順を完了しました。すべて正常ですが、最後に1つあります。 5 つのキーをすべて変更する必要があり、4 から 0 までのこの「ループ」から開始しました。 キー0でログイン キーXを変更 K0 の変更は K4-1 とは異なり、応答は 91-00 です。SO すべてが正しいようです。 ここで問題があります。すべてのキーを 4-1 でログインCANますが、K0 ではログイン パート 2 で 91-AE になります。 暗号化が間違っているため、キーが私の考えと異なると思いますが、コードを何度もチェックしたところ、問題ありませんでした。データシートと AN12196 に従って暗号文の計算のみを変更しました。 何かヒントはありますか? お返事をよろしくお願いします。 Re: NTAG 424 no login possible after key 0 change こんにちは@MPucci 、 投稿に ChangeKey 0 と 1-4 を既に実装しましたか?現在これを実装中ですが、いくつか問題が発生しています。Key1-4 を 911E に応答するように正常に変更することができず、Key0 を変更した後、認証応答は 91AE になります。あなたに助けていただきたく存じます。 Re: NTAG 424 no login possible after key 0 change こんにちは@KaiLi AN12196 に 6.16.2 が見つかりませんでした。文書のバージョンが違うからでしょうか? 何かヒントはありますか? ご回答をお待ちしています。 Re: NTAG 424 no login possible after key 0 change こんにちは@MPucci お問い合わせいただきありがとうございます。問題の説明に基づいて、AN12196 の第 6 章.16.2 の手順を試すことをお勧めします。例えば: 1. キー番号0x00による認証 2. 新しいキーを入力します 3. ChangeKeyコマンドを実行する 4. 新しいキーを使用してNTAG424を認証します。 BR ケリー Re: NTAG 424 no login possible after key 0 change さらに詳しい情報: 正しくないことはわかっていますが、キーを変更する前は、すべてのログインで同じ RndA を使用しています。問題の根本原因を特定することはできませんが、ログイン時に 5 つの異なる RndA を使用するとキーに問題はありません (K0 も)。ログイン時に同じ RndA を使用すると、K0 が破損します。 SO、今のところ、原因は分からないまま、問題は解決しました。
View full article
MX8QM recommended PMIC I am planning a design based on the MX8QM processor. We will be using the following interfaces  A72 2x cores  PCIe interface  eMMC interface  Ethernet interface We will not use the GPU, VPU, display etc. On the PMIC selection page, https://www.nxp.com/products/power-management/pmics-and-sbcs:POWR_MAN_USER_INTERFACE the device recommended is PF81-PF82 which according to the product page is Not Recommended. So what is the recommended device? Could we use PCA9450C  ? Regards i.MX 8 Family | i.MX 8QuadMax (8QM) | 8QuadPlus Re: MX8QM recommended PMIC Hello, Unfortunately, there are no replacement part numbers for PF81-PF82 from NXP. I suggest you look for third-party solutions as: Integrated Power Supply Design for NXP i.MX8 QuadMax Processor Also, PCA9450 PMIC is not compatible for i.MX8QM since power requirements are higher current power consumption and different power-up/power-off sequences compared to i.MX8MN/M/P processors. Keep in mind that PF81-PF82 product family is part of our Longevity program until May 2034 Best regards.
View full article
S32G Linux with ATF adjust clock for spread spectrum Hi Linux BSP team, Customer inquired the guidance on how to adjust the clock spread spectrum settings in the Linux BSP with ATF. I checked S32G latest BSP, the following clock spread spectrum related PLL Frequency Modulation(PLLFM)register configuration is not found. My question is that do we have the plan to add this support in Linux BSP? BRs, Tianxiang Linux BSP Re: S32G Linux with ATF adjust clock for spread spectrum Rather than spread spectrum that can in theory only works at 1516MHz (DS value just below 1600MHz) as it is not down-spread, meaning you overclock you DDR otherwise, Valeo has decided to simply move the DDR freq to 1590MHz (far closer to 1600MHz) as it is easier to implement compared to SS. But as 1590MHz, is not in the DS and calibration tool, it is at their own risk. Here is the article: [S32G] change the DDR frequency to 1590MHz and measure the results with a 20€ SDR dongle Re: S32G Linux with ATF adjust clock for spread spectrum Hi Ghennadi, Got it, thanks for the quick confirmation. BRs, Tianxiang Re: S32G Linux with ATF adjust clock for spread spectrum Hi @Tianxiang_Huang , As of today, the clock spread spectrum for DDR PLL Frequency Modulation is not supported, and it is not planned to be added anytime soon. A detailed change request is needed in case this is relevant for one or more clients. Please take into account that any DDR-related change has to be synchronized with DDR tool given that TF-A integrates the code generated by this tool.  Regards, Ghennadi
View full article
iMXRT10xx SDK MCUBoot 版本 您好, 我正在使用带有 MCUXpresso SDK 24.12.00 的 imxRT1021 MCU 和 McuBoot 作为 SDK 的中间件元器件。 有办法知道 SDK 包含哪个 MCUBoot 版本吗? 我在代码中进行了搜索,但没有为 MCUBoot 定义任何版本... 谢谢您! Re: iMXRT10xx SDK MCUBoot version 你好! 刚刚在 SDK 文档中找到了 McuBoot 版本说明:应该是 2.0.0 MCUboot 版本说明 — MCUXpresso SDK 文档
View full article
OpenSSL 无法正确处理 refpem 密钥,nxp 方案正常工作 大家好, 我正在尝试集成 SE050 以便在 node.js 网络服务器中使用。我成功编译了包括 OpenSSL 提供商在内的中间件,还让 sscli 正常工作。 我使用 ssscli 创建了一个密钥对,将其注入 SE 并创建了一个 refpem 密钥。我还修改了系统的 openssl.cnf 文件,使其与 simwtop/demos/linux/common/openssl30_sss_se050.cnf 文件中的一致。 但是,与服务器的任何 TLS 连接都会在握手中失败,因为 OpenSSL 使用对密钥槽的参考作为实际私钥,而不是调用 SE050 提供商。 我还尝试让它与 OpenSSL CLI(即 openssl s_server)配合使用。我可以使用 nxp: 方案获得连接,但不能使用 refpem 密钥文件。 以下命令会导致错误: openssl s_server -accept 12345 -cert server.pem -key server.refpem.key -CAfile root.pem 错误: SSL3 alert read:fatal:decrypt error SSL_accept:error in error ERROR 20203CA4FFFF0000:error:1B80006E:lib(55):ossl_parse_query:trailing characters:../openssl-3.0.13/crypto/property/property_parse.c:454:HERE-->/usr/lib/libsssProvider.so 20203CA4FFFF0000:error:0A00041B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:../openssl-3.0.13/ssl/record/rec_layer_s3.c:1590:SSL alert number 51 shutting down SSL 不过,如果我使用 nxp 网址方案,就能成功连接到服务器。 openssl s_server -accept 12345 -cert server.pem -key nxp:0x6789ABCD -CAfile root.pem 但是,我无法在 node.js 代码中指定 nxp: 0x6789ABCD 密钥参考,但必须使用 refpem 文件。有办法做到这一点吗? 我还尝试通过在配置文件中指定一个 propquery,让 OpenSSL 优先使用 SE050 提供程序,而不是默认提供程序。但目前还没有收获。 # Relevant parts from openssl.cnf [openssl_init] providers = provider_sect alg_section = evp_properties [provider_sect] default = default_sect nxp_prov = nxp_prov_sec [default_sect] activate = 1 [nxp_prov_sec] identity = nxp_prov module = /usr/local/lib/libsssProvider.so activate = 1 [evp_properties] default_properties = ?provider=nxp_prov 如能得到任何帮助,将不胜感激! SE050 Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 我忘了说,我使用的 Node 版本是 20.12.2。 ,20.x 之后的版本可能没有这个问题,但我目前无法验证。 经过进一步调查,发现客户端解密问题是由于提供程序加载顺序不正确造成的。 不过,这个版本的 Node 在处理随机数生成方面存在问题。 问题与 Node 如何初始化提供程序有关。 node.cc 文件包含一个修复程序(在源代码中带有注释),但它不适用于 libsssProvider.so。 我在此分享一系列变通方法,以防有人遇到类似情况。 首先,我要说的是,这些都与 libsssProvider 有关,主要目的是不更改 Node 或 OpenSSL,因此显然可以采用其他更简洁的解决方案。 我不能分享代码,希望下面的信息足够清楚。 可用选项: 1.在 CMakeLists.txt 文件中,设置 SSS_PROV_DISABLE_SE05X_RNG 变量。 这就完全禁止了 SE05X 的随机使用。 这并不理想,但如果你没有任何特殊需要,它还是可行的。 2.在 sssProvider_main.c 中文件,更改 srands 结构的算法,使提供的名称不是已知名称之一(尤其不是默认名称)。 3. 与第 2 点类似,但在这种情况下,名称可选择由环境变量提供(srands 显然不能是常量)。这样,只有在 Node 应用程序中才能避免使用 SE05X 随机发生器,而将其用于其他用途。 有了这些选项, refpems 可以正常工作。 Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 我遇到了与@tksec 完全相同的问题。 如果使用 OpenSSL cli 工具,一切正常,我可以通过 libsssProvider.so 使用 SE052 模块中的密钥建立 TLS 连接。 关于 Node.js、我确认 libsssProvider 已加载,但握手总是失败,错误如下: SSL3 alert write:fatal:decrypt error SSL_connect:error in error 20109DB6FFFF0000:error:0A00007B:SSL routines:tls_process_cert_verify:bad signature:/usr/src/debug/openssl/3.2.1/ssl/statem/statem_lib.c:584: @Kan_Li所建议的通过 id 调用键似乎并不奏效: - 如果我在 options.key 中提供 refpem 文件的路径,服务器就能顺利启动并监听连接,但正如报告所述,握手失败。 - 如果我在 options.key 中提供 urk 密钥路径(nxp: ),应用程序就会崩溃。 -如果我在 options.key 中提供密钥参考 (nxp: ) 应用程序会崩溃 那么,能否请@Kan_Li分享一段可以成功初始化服务器的 Node.js 代码,假设如上所述,这应该可以正常工作? 谢谢! Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 嗨 @tksec, 你找到在 node.js 中使用密钥参考的合适方法了吗? 我也有类似的问题。我正在使用带有 OpenSSL 3.0.14 的 se05x-openssl-provider (v01.00.03) 来生成密钥对,但我无法按照 openssl 提供商 Github 仓库自述文件中的描述使用文件格式为 " 的 " 参考密钥。 其他两个版本(带有参考密钥的标签(示例-恩智浦:" 参考密钥文件路径 ")和带有密钥 ID 的 标签(示例-nxp: 0x12345678)运行良好。 自述文件内容如下:" 注意:使用此方法时,必须先加载 sss 提供程序。这将确保 sss 提供商可以解码引用密钥中存在的密钥 ID 信息 。 " 遗憾的是,我不知道如何做到这一点。通过在 openssl.cnf 文件中添加提供程序来加载提供程序对我来说不起作用。如果我想使用文件格式的参考密钥,我仍然会遇到解密错误。 在此先表示感谢。 致以最诚挚的问候 托马斯 Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 你好@tksec、 感谢您提供的信息!您使用 refpem 文件的用例是什么?签署&验证?我可以尝试在这里重现这个问题。 顺祝商祺! 坎 Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 你好@Kan_Li、 是的,我使用了 ssscli 工具。我运行的是 MW v4.05.00。我在另一个系统上用 OpenSSL 创建了原始密钥。使用 ssscli set 命令将其加载到 SE 中,并使用 ssscli refpem 命令创建 refpem。在使用 s_client、s_server、rsa 等 openssl 命令时,可以成功使用和解析该密钥。也可以使用 OSSL_STORE API(openssl 命令的内部功能)将其转换为 EVP_PKEY,但使用 PEM_read_bio_PrivateKey 无法解析,而 NXP 引擎(在 EmbSe_LoadPrivKey 中)和 node.js 都使用 PEM_read_bio_PrivateKey。 谢谢您! Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 你好@tksec、 您是如何为 RSA 密钥生成 refpem 的?您现在使用的是哪个版本的 MW?请予以澄清。 祝您愉快, Kan ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 ------------------------------------------------------------------------------- Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 你好@Kan_Li 谢谢你说明 refpem 密钥只能用于 openssl 引擎。特别是 node.js 的问题在于,它们会直接对提供的任何密钥字符串调用 PEM_read_bio_PrivateKey 函数,而当密钥字符串不是 PEM 字符串或文件路径而是 uri 时,该函数显然会失效。目前还没有对 OpenSSL 提供商的直接支持。 我改回使用 OpenSSL 引擎,结果也遇到了类似的问题。使用 EC 密钥时工作正常,而使用 RSA 密钥时,在解析 PEM 文件时再次出现错误:1E08010C:DECODER routines::unsupported from OpenSSL。我调试了代码,可以将错误追溯到 PEM_read_bio_PrivateKey 函数,该函数在引擎代码中的 EmbSe_LoadPrivKey 中调用。 您知道在 OpenSSL 引擎中处理 RSA refpem 密钥的问题吗?如何解决这个问题?在我看来,RSA 的 refpem 比 EC 密钥的侵入性更强,这可能是个问题? Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 你好@tksec、 refpem 密钥文件仅适用于 openssl 引擎,但由于您使用的是带有提供程序的 openssl 3.xx,因此请使用"nxp:key_id" 代替。你可以将"se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient.sh" 与"se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient_3_0.sh" 进行比较,检查两者的区别。 我还想知道你对此是否有任何网络安全问题,实际上从我的选择来看,它只是大多数脚本应该接受的字符串,为什么不能在 node.js 代码中指定 nxp: 0x6789ABCD 密钥参考?请澄清。 祝您愉快, Kan ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"标记正确" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 -------------------------------------------------------------------------------
View full article
iMX91プロセッサ上でOPTEEを構築およびテストする方法 こんにちは、 OPTEE の機能を理解しようとしています。以下のサポートをリクエストします: 1.OPTEEドキュメント/チュートリアルiMX91 2.YOCTO を使用して iMX91 プロセッサ上で OPTEE を構築およびテストする方法。 現在、YOCTOベースを開発しています - repo init -u https://github.com/nxp-imx/imx-manifest-b imx-linux-styhead -m imx-6.12.3-1.0.0_セキュリティリファレンスデザイン.xml 生成されたファイルのリストは以下をご覧ください。 ls tmp/deploy/images/imx91-11x11-lpddr4-evk ├── bl31-imx91.bin ├── bl31-imx91.bin-optee ├── core-image-base.env ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.manifest ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.spdx.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.testdata.json ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.bmap ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.manifest -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.manifest ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.spdx.tar.zst -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.spdx.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.tar.zst -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.tar.zst ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.testdata.json -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.testdata.json ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.wic.bmap -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.bmap ├── core-image-base-imx91-11x11-lpddr4-evk.rootfs.wic.zst -> core-image-base-imx91-11x11-lpddr4-evk.rootfs-20250630102959.wic.zst ├── core-image-base-imx-imx-boot-bootpart.wks ├── core-image-minimal-secure-boot.env ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.manifest ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.spdx.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.testdata.json ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.bmap ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.manifest -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.manifest ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.spdx.tar.zst -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.spdx.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.tar.zst -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.tar.zst ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.testdata.json -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.testdata.json ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.wic.bmap -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.bmap ├── core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs.wic.zst -> core-image-minimal-secure-boot-imx91-11x11-lpddr4-evk.rootfs-20250627055427.wic.zst ├── core-image-minimal-secure-boot-imx-imx-boot-bootpart.wks ├── files.txt ├── flash.bin ├── flash_os.bin ├── Image -> Image--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.bin ├── Image--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.bin ├── Image-imx91-11x11-lpddr4-evk.bin -> Image--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.bin ├── imx91-11x11-evk--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk.dtb ├── imx91-11x11-evk-aud-hat--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-aud-hat.dtb ├── imx91-11x11-evk-aud-hat.dtb ├── imx91-11x11-evk-aud-hat-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-aud-hat.dtb ├── imx91-11x11-evk.dtb ├── imx91-11x11-evk-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk.dtb ├── imx91-11x11-evk-ld--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-ld.dtb ├── imx91-11x11-evk-ld.dtb ├── imx91-11x11-evk-ld-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-ld.dtb ├── imx91-11x11-evk-lpuart--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-lpuart.dtb ├── imx91-11x11-evk-lpuart.dtb ├── imx91-11x11-evk-lpuart-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-lpuart.dtb ├── imx91-11x11-evk-mt9m114--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-mt9m114.dtb ├── imx91-11x11-evk-mt9m114.dtb ├── imx91-11x11-evk-mt9m114-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-mt9m114.dtb ├── imx91-11x11-evk-tianma-wvga-panel--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.dtb -> imx91-11x11-evk-tianma-wvga-panel.dtb ├── imx91-11x11-evk-tianma-wvga-panel.dtb ├── imx91-11x11-evk-tianma-wvga-panel-imx91-11x11-lpddr4-evk.dtb -> imx91-11x11-evk-tianma-wvga-panel.dtb ├── imx-boot -> imx-boot-tagged ├── imx-boot-imx91-11x11-lpddr4-evk-sd.bin-flash_singleboot ├── imx-boot-tagged ├── imx-boot.tagged ├── imx-boot-tools │ ├── bl31-imx91.bin │ ├── bl31-imx91.bin-optee │ ├── csf_ahab.cfg.sample │ ├── csf_hab4.cfg.sample │ ├── imx_signer │ ├── lpddr4_dmem_1d_v202201.bin │ ├── lpddr4_dmem_2d_v202201.bin │ ├── lpddr4_imem_1d_v202201.bin │ ├── lpddr4_imem_2d_v202201.bin │ ├── mkimage_imx8 │ ├── mx91a0-ahab-container.img │ ├── soc.mak │ ├── spsdk_ahab.cfg.sample │ ├── tee.bin │ ├── u-boot-imx91-11x11-lpddr4-evk.bin-sd │ └── u-boot-spl.bin-imx91-11x11-lpddr4-evk-sd ├── imx-boot-untagged ├── lpddr4_dmem_1d_v202201.bin ├── lpddr4_dmem_2d_v202201.bin ├── lpddr4_imem_1d_v202201.bin ├── lpddr4_imem_2d_v202201.bin ├── modules--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.tgz ├── modules-imx91-11x11-lpddr4-evk.tgz -> modules--6.6.36+git0+d23d64eea5-r0-imx91-11x11-lpddr4-evk-20250627055427.tgz ├── mx91a0-ahab-container.img ├── optee │ ├── ta │ │ ├── 023f8f1a-292a-432b-8fc4-de8471358067.elf │ │ ├── 023f8f1a-292a-432b-8fc4-de8471358067.stripped.elf │ │ ├── 02a42f43-d8b7-4a57-aa4d-87bd9b5587cb.elf │ │ ├── 02a42f43-d8b7-4a57-aa4d-87bd9b5587cb.stripped.elf │ │ ├── 25497083-a58a-4fc5-8a72-1ad7b69b8562.elf │ │ ├── 25497083-a58a-4fc5-8a72-1ad7b69b8562.stripped.elf │ │ ├── 380231ac-fb99-47ad-a689-9e017eb6e78a.elf │ │ ├── 380231ac-fb99-47ad-a689-9e017eb6e78a.stripped.elf │ │ ├── 528938ce-fc59-11e8-8eb2-f2801f1b9fd1.elf │ │ ├── 528938ce-fc59-11e8-8eb2-f2801f1b9fd1.stripped.elf │ │ ├── 5b9e0e40-2636-11e1-ad9e-0002a5d5c51b.elf │ │ ├── 5b9e0e40-2636-11e1-ad9e-0002a5d5c51b.stripped.elf │ │ ├── 5c206987-16a3-59cc-ab0f-64b9cfc9e758.elf │ │ ├── 5c206987-16a3-59cc-ab0f-64b9cfc9e758.stripped.elf │ │ ├── 5ce0c432-0ab0-40e5-a056-782ca0e6aba2.elf │ │ ├── 5ce0c432-0ab0-40e5-a056-782ca0e6aba2.stripped.elf │ │ ├── 731e279e-aafb-4575-a771-38caa6f0cca6.elf │ │ ├── 731e279e-aafb-4575-a771-38caa6f0cca6.stripped.elf │ │ ├── 80a4c275-0a47-4905-8285-1486a9771a08.elf │ │ ├── 80a4c275-0a47-4905-8285-1486a9771a08.stripped.elf │ │ ├── 873bcd08-c2c3-11e6-a937-d0bf9c45c61c.elf │ │ ├── 873bcd08-c2c3-11e6-a937-d0bf9c45c61c.stripped.elf │ │ ├── 8aaaf200-2450-11e4-abe20002a5d5c51c.elf │ │ ├── 8aaaf200-2450-11e4-abe20002a5d5c51c.stripped.elf │ │ ├── a4c04d50-f180-11e8-8eb2-f2801f1b9fd1.elf │ │ ├── a4c04d50-f180-11e8-8eb2-f2801f1b9fd1.stripped.elf │ │ ├── a720ccbb-51da-417d-b82e-e5445d474a7a.elf │ │ ├── a720ccbb-51da-417d-b82e-e5445d474a7a.stripped.elf │ │ ├── b3091a65-9751-4784-abf7-0298a7cc35ba.elf │ │ ├── b689f2a7-8adf-477a-9f99-32e90c0ad0a2.elf │ │ ├── b689f2a7-8adf-477a-9f99-32e90c0ad0a2.stripped.elf │ │ ├── c3f6e2c0-3548-11e1-b86c-0800200c9a66.elf │ │ ├── c3f6e2c0-3548-11e1-b86c-0800200c9a66.stripped.elf │ │ ├── cb3e5ba0-adf1-11e0-998b-0002a5d5c51b.elf │ │ ├── cb3e5ba0-adf1-11e0-998b-0002a5d5c51b.stripped.elf │ │ ├── d17f73a0-36ef-11e1-984a-0002a5d5c51b.elf │ │ ├── d17f73a0-36ef-11e1-984a-0002a5d5c51b.stripped.elf │ │ ├── e13010e0-2ae1-11e5-896a-0002a5d5c51b.elf │ │ ├── e13010e0-2ae1-11e5-896a-0002a5d5c51b.stripped.elf │ │ ├── e6a33ed4-562b-463a-bb7e-ff5e15a493c8.elf │ │ ├── e6a33ed4-562b-463a-bb7e-ff5e15a493c8.stripped.elf │ │ ├── f04a0fe7-1f5d-4b9b-abf7-619b85b4ce8c.elf │ │ ├── f04a0fe7-1f5d-4b9b-abf7-619b85b4ce8c.stripped.elf │ │ ├── f157cda0-550c-11e5-a6fa-0002a5d5c51b.elf │ │ ├── f157cda0-550c-11e5-a6fa-0002a5d5c51b.stripped.elf │ │ ├── fd02c9da-306c-48c7-a49c-bbd827ae86ee.elf │ │ ├── fd02c9da-306c-48c7-a49c-bbd827ae86ee.stripped.elf │ │ └── ffd2bded-ab7d-4988-95ee-e4962fff7154.elf │ ├── tee.bin │ ├── tee.elf │ ├── tee-header_v2.bin │ ├── tee.mx91evk.bin │ ├── tee-pageable_v2.bin │ ├── tee-pager_v2.bin │ └── tee-raw.bin ├── os_cntr_signed.bin ├── signed-imx-boot-imx91-11x11-lpddr4-evk-sd.bin-flash_singleboot ├── tee.bin -> optee/tee.mx91evk.bin ├── u-boot.bin -> u-boot-sd-2024.04-r0.bin ├── u-boot.bin-sd -> u-boot-sd-2024.04-r0.bin ├── u-boot-imx91-11x11-lpddr4-evk.bin -> u-boot-sd-2024.04-r0.bin ├── u-boot-imx91-11x11-lpddr4-evk.bin-sd -> u-boot-sd-2024.04-r0.bin ├── u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd -> u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd-2024.04-r0 ├── u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd-2024.04-r0 ├── u-boot-imx-initial-env-sd -> u-boot-imx-initial-env-imx91-11x11-lpddr4-evk-sd-2024.04-r0 ├── u-boot-sd-2024.04-r0.bin ├── u-boot-spl.bin -> u-boot-spl.bin-sd-2024.04-r0 ├── u-boot-spl.bin-imx91-11x11-lpddr4-evk -> u-boot-spl.bin-sd-2024.04-r0 ├── u-boot-spl.bin-imx91-11x11-lpddr4-evk-sd -> u-boot-spl.bin-sd-2024.04-r0 ├── u-boot-spl.bin-sd -> u-boot-spl.bin-sd-2024.04-r0 └── u-boot-spl.bin-sd-2024.04-r0 4 directories, 153 files よろしくお願いします キラン Re: How to Build & Test OPTEE on iMX91 processor こんにちは@KiranM7 ! NXP サポートにお問い合わせいただきありがとうございます。 OP-TEE は BSP でデフォルトで有効になっています。現在、 optee-test を実行するための公式ガイドはありませんが、詳細な手順については公式の OP-TEE ドキュメントを参照してください。 optee_test よろしくお願いします、 チャビラ
View full article
OpenSSL は refpem キーを正しく処理しませんが、nxp スキームは機能しています こんにちは、皆さん。 SE050 を node.js Web サーバーで使用できるように統合しようとしています。OpenSSL プロバイダーを含むミドルウェアを正常にコンパイルし、ssscli も動作するようになりました。 ssscli を使用してキー ペアを作成し、それを SE に挿入して refpem キーを作成しました。また、システムの openssl.cnf を simwtop/demos/linux/common/openssl30_sss_se050.cnf のものと一致するように調整しました。 しかし、OpenSSL は SE050 プロバイダーを呼び出す代わりに、キー スロットへの参照を実際の秘密キーとして使用するため、サーバーへの TLS 接続はハンドシェイクで失敗します。 また、OpenSSL CLI (openssl s_server) でも動作するようにしてみました。nxp: スキームを使用して接続CANますが、refpem キー ファイルは使用できません。 次のコマンドを実行するとエラーが発生します。 openssl s_server -accept 12345 -cert server.pem -key server.refpem.key -CAfile root.pem エラー: SSL3 alert read:fatal:decrypt error SSL_accept:error in error ERROR 20203CA4FFFF0000:error:1B80006E:lib(55):ossl_parse_query:trailing characters:../openssl-3.0.13/crypto/property/property_parse.c:454:HERE-->/usr/lib/libsssProvider.so 20203CA4FFFF0000:error:0A00041B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:../openssl-3.0.13/ssl/record/rec_layer_s3.c:1590:SSL alert number 51 shutting down SSL ただし、nxp URL スキームを使用すると、サーバーに正常に接続 CAN ます。 openssl s_server -accept 12345 -cert server.pem -key nxp:0x6789ABCD -CAfile root.pem ただし、node.js コードで nxp:0x6789ABCD キー参照を指定することはCANず、refpem ファイルを使用する必要があります。それをなんとかする方法はあるでしょうか? また、設定ファイルでプロパティクエリを指定して、OpenSSL がデフォルトのプロバイダーよりも SE050 プロバイダーを優先するようにしてみました。しかし、今のところ運がない。 # Relevant parts from openssl.cnf [openssl_init] providers = provider_sect alg_section = evp_properties [provider_sect] default = default_sect nxp_prov = nxp_prov_sec [default_sect] activate = 1 [nxp_prov_sec] identity = nxp_prov module = /usr/local/lib/libsssProvider.so activate = 1 [evp_properties] default_properties = ?provider=nxp_prov どのようなご助力もいただければ幸いです。 SE050 Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 私が使用している Node バージョンは 20.12.2 であることをお伝えするのを忘れました。 20.x 以降のバージョンではこの問題は発生しない可能性がありますが、現時点ではこれを確認する方法がありません。 さらに調査を進めたところ、クライアント側の復号化の問題は、プロバイダーの読み込み順序が間違っていたために発生したことが判明しました。 そうは言っても、このバージョンの Node では乱数生成の処理に問題があることが判明しました。 この問題は、Node がプロバイダーを初期化する方法に関連しています。 具体的には、乱数ジェネレータの初期化で、sss_rand_get_ctx_params への呼び出しの無限ループが発生します。 node.cc ファイルには修正が含まれています (ソースにコメントが含まれています) が、libsssProvider.so では機能しません。 同じような状況に陥った人のために、いくつかの回避策を紹介します。 まず、これらはすべて libsssProvider に関連しており、主に Node または OpenSSL を変更しないことを目的としているSO、他のよりクリーンなソリューションが可能であることは明らかだと述べます。 コードを共有することはできませんが、以下の情報が十分に明確であることを願います。 利用可能なオプション: 1.CMakeLists.txt ファイルで、SSS_PROV_DISABLE_SE05X_RNG 変数を設定します。 これにより、ランダムに対する SE05X の使用が完全に無効になります。 理想的ではありませんが、特別なニーズがない場合は機能します。 2. sssProvider_main.cファイルで、指定された名前が既知の名前 (特にデフォルトではない名前) にならないSO、srands 構造体のアルゴリズムを変更します。これにより、openssl 構成ファイルでランダム キーを設定することで、必要に応じて SE05X ランダム モジュールを使用できるようになります。 3. ポイント 2 と似ていますが、このCASE、名前はオプションで環境変数で提供されます (srands は明らかに定数にすることはCANません)。この方法では、Node アプリケーションの場合にのみ、SE05X 乱数ジェネレーターの使用を回避し、代わりに他の用途でアクティブなままにすることができます。 refpems はこれらのオプションで正しく動作します。 Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working 私も@tksecとまったく同じ問題を経験しています。 OpenSSL cli ツールを使用してすべてが正常であれば、libsssProvider.SO を介して SE052 モジュールのキーを使用する TLS 接続を確立でCAN。 Node.jsでは、libsssProvider がロードされていることを確認しましたが、以下のエラーのように、ハンドシェイクは常に失敗します。 SSL3 アラート書き込み:致命的:復号化エラー SSL_connect:エラーでエラー 20109DB6FFFF0000:エラー:0A00007B:SSLルーチン:tls_process_cert_verify:不正な署名:/usr/src/debug/openssl/3.2.1/ssl/statem/statem_lib.c:584: @Kan_Liが提案したように、ID でキーを参照することは実際には機能しないようです。 - options.key に refpem ファイルへのパスを指定すると、サーバーは問題なく起動し、接続をリッスンしますが、報告されているようにハンドシェイクは失敗します。 - options.key にキーパスを urk (nxp: ) として指定すると、アプリケーションがクラッシュします - options.key にキー参照 (nxp: ) を指定すると、アプリケーションがクラッシュします SO、 @Kan_Liさん、これが問題なく動作するはずであると仮定して、サーバーを正常に初期化できる Node.js コードを共有していただけますCANか? よろしくお願いします。 Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working こんにちは@tksec 、 node.js でキー参照を使用する適切な方法を見つけましたか? 私も同様の問題を抱えています。OpenSSL 3.0.14 で se05x-openssl-プロバイダ (v01.00.03) を使用してキー ペアを生成していますが、openssl プロバイダの Github リポジトリの Readme ファイルに記載されている「ファイル形式の参照キー」を使用できません。 他の2つのバージョン(参照キー付きのラベリング(例:nxp:"参照キーファイルへのパス")と キー ID 付きのラベリング (例: nxp:0x12345678) は正常に機能します。 Readme には次のように記載されています。「注意: この方法を使用する場合は、まず sss プロバイダをロードする必要があります。これにより、sss プロバイダが参照キーに存在するキー ID 情報をデコードできます。 」 残念ながら、その方法が分かりません。プロバイダーを openssl.cnf ファイルに追加してロードしても機能しませんでした。ファイル形式で参照キーを使用しようとすると、依然として復号化エラーが発生します。 よろしくお願いします。 よろしくお願いします トーマス Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working こんにちは@tksec 、 情報ありがとうございます!refpem ファイルを使用するユースCASEは何ですか?署名と検証?ここでこの問題を再現してみようと思います。 よろしくお願いいたします。 カン Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working こんにちは@Kan_Liさん はい、ssscli ツールを使用しました。MW v4.05.00を実行しています。別のシステムで OpenSSL を使用して元のキーを作成しました。ssscli set コマンドを使用して SE にロードし、ssscli refpem コマンドで refpem を作成しました。s_client、s_server、rsa などの openssl コマンドを使用する場合、キーは正常に使用および解析CAN。これは、OSSL_STORE API (openssl コマンドが内部的に実行するもの) を使用して EVP_PKEY に変換することもCANますが、NXP エンジン (EmbSe_LoadPrivKey 内) と node.js の両方で使用される PEM_read_bio_PrivateKey を使用して解析することはできません。 よろしくお願いします! Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working こんにちは@tksec 、 RSA キーの refpem をどのように生成しましたか? ssscli のツールで?現在どのバージョンのMWを使用していますか?ご説明をよろしくお願いいたします。 すてきな一日を、 カン --------------------------------------------------------------------------------- 注記: - この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう! - Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。 後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。 --------------------------------------------------------------------------------- Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working こんにちは@Kan_Li refpem キーは openssl エンジンでのみ使用可能であることを明確にしていただきありがとうございます。特に node.js の問題は、提供されたキー文字列に対して PEM_read_bio_PrivateKey 関数を直接呼び出すことです。キー文字列が PEM 文字列やファイル パスではなく uri の場合、明らかに失敗します。OpenSSL プロバイダーに対する直接的なサポートはまだありません。 代わりに OpenSSL エンジンの使用に戻しましたが、同様の問題が発生しました。EC キーの使用は完全に機能しますが、RSA キーを使用すると、OpenSSL からのエラー:1E08010C:DECODER routines::unsupported が発生し、PEM ファイルの解析中に再び失敗します。コードをデバッグしたところ、エンジンのコード内の EmbSe_LoadPrivKey 内から呼び出される関数 PEM_read_bio_PrivateKey にエラーが遡って発生していることがわかりました。 OpenSSL エンジンで RSA refpem キーを処理する際にこのような問題が発生することをご存知ですか?これをどう解決すればいいでしょうか?私の場合、refpem は EC キーよりも RSA キーに対してより侵入的であるように見えますが、これが問題になるでしょうか? Re: OpenSSL doesn't handle refpem key correctly, nxp scheme is working こんにちは@tksec 、 refpem キー ファイルは openssl エンジン専用ですが、プロバイダーで openssl 3.xx を使用するため、代わりに "nxp:key_id" を使用してください。「se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient.sh」と「se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient_3_0.sh」を比較して違いを確認することができます。また、これに関してセキュリティ上の懸念事項はございますでしょうか。私の見解では、これはほとんどのスクリプトで受け入れられる文字列であるはずですが、なぜNode.jsコードでnxp:0x6789ABCDキー参照を指定できないのでしょうか?ご説明いただけますでしょうか。 すてきな一日を、 カン --------------------------------------------------------------------------------- 注記: - この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう! - Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。 後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。 ---------------------------------------------------------------------------------
View full article
Regarding PT2000 automatic diagnostic issues When I enabled automatic, the simulated nozzle malfunctioned and could not continue to work after recovery; Using software interrupt to simulate nozzle failure, the nozzle can continue to work after recovery。 HS|LS Configurable Driver 回复: Regarding PT2000 automatic diagnostic issues Thank you, this issue has been resolved. But I have a new question.Why can't my jetting function properly when the D_LS1 and G_LS1 pins in the image below are in a floating state? Re: Regarding PT2000 automatic diagnostic issues Hi, When using automatic diagnostics, check if the recovery process includes any steps for re-initializing the nozzle or system components after a failure is detected. If the system does not reset or properly transition out of an error state, it could prevent the nozzle from working post-recovery. If the software interrupt method works, check the difference in configuration between manual interrupt handling and the automatic diagnostic feature. There might be subtle differences, such as error flags or status registers, that need to be cleared in the case of automatic diagnostics. BRs, Tomas
View full article
sja1110 中的动态配置 你好、 我想动态配置 l2 查找表,如何配置? 不使用 ECT 工具,如何配置 l2 查找表? 有例子吗? 此致敬礼 阿特金森 Re: Dynamic configuration in sja1110 您好 @PavelL "在您的代码中,条目[3]中缺少移位值,条目[3]、条目[4]和条目[5]中缺少或错放了括号。" 我已经实现了与 python 代码相同的功能,抱歉,我不确定在哪里缺少了括号和移位值。请您提供对齐的代码,这样可能会更清楚,抱歉漏掉了括号和移位 。如果您能提供准确的 entry[3]、entry[4]、entry[5],会更有帮助,也更清楚。 Re: Dynamic configuration in sja1110 你好@Atkinson、 在您的代码中,输入条目[3]中缺少移位值,输入条目[3]、输入条目[4]和输入条目[5]中缺少或错位了括号。 为了验证您的 L2 查找配置,您可以考虑将条目设置为静态条目,而不是动态条目,这有助于区分问题是出在条目格式上,还是出在动态更新机制上。 另外,请注意,Python 脚本中的"漂亮表格" 仅用于格式化命令窗口中的输出,并不影响功能或寄存器配置。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好@PavelL int WriteL2LookupEntry(int cs) { const uint32_t DESTPORTS = 0x004; const uint32_t INDEX = 2; const uint64_t MACADDR = 0x112233445566; const uint64_t MACADDR_MASK = 0xffffffffffffffff; const uint32_t VLANID = 0; const uint32_t VLANID_MASK = 0x0; const uint32_t IOTAG = 0; const uint32_t IOTAG_MASK = 0; const uint32_t SRCPORT = 0x6; const uint32_t SRCPORT_MASK = 0xF; const uint32_t ENFPORT = 0; const uint32_t RETAG = 0; const uint32_t MIRROR = 0; const uint32_t TAKETS = 0; const uint32_t MIRR_VLAN = 0xFFF; const uint32_t TRAPTOHOST = 0; const uint32_t CBSIDIN = 0x3F; const uint32_t CBENONDA = 0; const uint32_t VLIDX = 0xFFF; const uint32_t SA_POLICE = 0; const uint32_t DA_POLICE = 0; uint32_t L2_OFFSET = 0x23; uint32_t L2CTRL_OFFSET = 0x29; 常量 uint32_t SWREG_BASE = 0x00000000; const uint32_t VALID = 1U; const uint32_t RDWRSET = 1U; const uint32_t VALIDENT = 1U; const uint32_t HOSTCMD = 3U; const uint32_t MGMTROUTE = 0U; const uint32_t LOCKED = 1U; const uint32_t ERROR = 0U; uint32_t L2_ADDRESS = SWREG_BASE + L2_OFFSET; uint32_t L2_ADDRESS_CTL = SWREG_BASE + L2CTRL_OFFSET; uint32_t l2Entry[ADDRESS_RANGE] = {0}; l2Entry[0] = (((INDEX& 0x03ff)<< (1% 32))+ ((ENFPORT& 1)<< (11% 32)) + ((DESTPORTS& 0x7FF)<< (12% 32))+ ((SRCPORT& 0xF)<< (23% 32)) + ((MACADDR& 0x1F)<< (27% 32))); l2Entry[1] = (((MACADDR>> 5)& 0xFFFFFFFF)); l2Entry[2] = ((((MACADDR>> 37)& 0x7FF)<< (64% 32))+ ((VLANID& 0xFFF)<< (75% 32)) + ((IOTAG& 1)<< (87% 32))+ ((MACADDR_MASK& 0xFF)<< (88% 32))); l2Entry[3] = (((MACADDR_MASK>> 😎 & 0xFFFFFFFF)); l2Entry[4] = (((MACADDR_MASK>> 40)& 0xFF<< (128% 32))+ ((VLANID_MASK& 0xfff)<< (136% 32)) + ((IOTAG_MASK& 1)<< (148% 32))+ ((SRCPORT_MASK& 0xF)<< (149% 32)) + ((RETAG& 0x1)<< (153% 32))+ ((MIRROR& 0x1)<< (154% 32)) + ((TAKETS& 0x1)<< (155% 32))+ ((MIRR_VLAN& 0xF)<< (156% 32))); l2Entry[5] = (((MIRR_VLAN>> 4)& 0xFF<< (160% 32))+ ((TRAPTOHOST& 0x1)<< (168% 32)) + ((CBSIDIN& 0x3F)<< (169% 32))+ ((CBENONDA& 0x1)<< (175% 32)) + ((VLIDX& 0xFFF)<< (177% 32))+ ((SA_POLICE& 0x1)<< (189% 32)) + ((DA_POLICE& 0x1)<< (190% 32))); uint32_t status = 0; do { Std_ReturnType ret = spi_read_reg(L2_ADDRESS_CTL,&status); if (ret != E_OK) { return -1; } } while ((status>> VALID_BIT_SHIFT)& 1U); for (int i = 0; i< ADDRESS_RANGE; i++) { Std_ReturnType ret = spi_write_reg(L2_ADDRESS + i, l2Entry[i]); if (ret != E_OK) { return -2; } uint32_t readBack = 0; ret = spi_read_reg(L2_ADDRESS + i,&readBack); if (ret != E_OK || readBack != l2Entry[i]) { return -3; } } uint32_t controlL2Entry = 0; controlL2Entry = ((VALID<< 31) + (RDWRSET<< 30) + (ERROR<< 29) + (LOCKED<< 28) + (VALIDENT<< 27) + (MGMTROUTE<< 26) + (HOSTCMD<< 23)); Std_ReturnType ret = spi_write_reg(L2_ADDRESS_CTL, controlL2Entry); if (ret != E_OK) { return -4; } do { ret = spi_read_reg(L2_ADDRESS_CTL,&status); if (ret != E_OK) { return -5; } } while ((status>> VALID_BIT_SHIFT)& 1U); return 0; } 我改变了与 Python 脚本类似的实现方式。如果发现任何错误,请将修改内容发送给我 Python 脚本 # 写入控制 平台.spi_write(L2_ADDRESS_CTL, 控制 L2Entry, cs) 表 = prettytable.PrettyTable( ("索引", "DESTPORTS", "MACADDR", "VLANID", "ENFPORT", "IOTAG")) 条目 =( str(INDEX), '{0:11b}'.格式(DESTPORTS), mac_to_str(MACADDR), str(VLANID), str(ENFPORT), str(IOTAG)) 桌.添加行(条目) 打印(表格.get_string())       " 写完之后,尝试发送一个符合条目的 mac/VLAN/Port 标准的帧,然后观察该帧是否根据 DESTPORTS 字段进行转发 " 正如你提到的那样, 我正在尝试用这种方式发送但看不到这种反射 我看不到我的参赛 作品是否得到反映? 还有其他需要设置的东西吗? 在 Python 脚本中,在将 controll2entry 的寄存器值写入 L2_ADDRESS_CTL 之后 , 有几行代码可以在 " prettytable " 中添加一个条目,我们是否 也需要 这样做? Re: Dynamic configuration in sja1110 你好@Atkinson、 在条目[3]、条目[4]和条目[5]中存在缺失的移位值和不完整的表达式。这可能导致寄存器值不正确。我建议将你的逻辑与 Python 引用脚本进行比较,后者正确构造了 L2 条目。 写入后,尝试发送一个符合该条目 MAC/VLAN/ 端口条件的帧,并观察它是否根据 DESTPORTS 字段转发。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好@PavelL int WriteL2LookupEntry(int cs) { const uint32_t DESTPORTS = 0x002; const uint32_t INDEX = 8; const uint64_t MACADDR = 0x661122334455; const uint64_t MACADDR_MASK = 0xffffffffffffffff; const uint32_t VLANID = 0; const uint32_t VLANID_MASK = 0xffffff; const uint32_t IOTAG = 0; const uint32_t IOTAG_MASK = 0; const uint32_t SRCPORT = 0x5; const uint32_t SRCPORT_MASK = 0xF; const uint32_t ENFPORT = 0; const uint32_t RETAG = 0; const uint32_t MIRROR = 0; const uint32_t TAKETS = 0; const uint32_t MIRR_VLAN = 0xFFF; const uint32_t TRAPTOHOST = 0; const uint32_t CBSIDIN = 0x3F; const uint32_t CBENONDA = 0; const uint32_t VLIDX = 0xFFF; const uint32_t SA_POLICE = 0; const uint32_t DA_POLICE = 0; uint32_t L2_OFFSET = 0x23; uint32_t L2CTRL_OFFSET = 0x29; 常量 uint32_t SWREG_BASE = 0x00000000; const uint32_t VALID = 1U; const uint32_t RDWRSET = 1U; const uint32_t VALIDENT = 1U; const uint32_t HOSTCMD = 3U; const uint32_t MGMTROUTE = 0U; const uint32_t LOCKED = 1U; const uint32_t ERROR = 0U; uint32_t L2_ADDRESS = SWREG_BASE + L2_OFFSET; uint32_t L2_ADDRESS_CTL = SWREG_BASE + L2CTRL_OFFSET; uint32_t l2Entry[ADDRESS_RANGE] = {0}; l2Entry[0] = ((INDEX& 0x03FF)<< 1) | ((ENFPORT& 0x1)<< 11) | ((DESTPORTS& 0x7FF)<< 12) | ((SRCPORT& 0xF)<< 23) | ((uint32_t)(MACADDR& 0x1F)<< 27); l2Entry[1] = (uint32_t)((MACADDR>> 5)& 0xFFFFFFFF); l2Entry[2] = (uint32_t)(((MACADDR>> 37)& 0x7FF)<< 0) | ((VLANID& 0xFFF)<< 11) | ((IOTAG& 0x1)< < 23) | ((uint32_t)(MACADDR_MASK& 0xFF)<< 24); l2Entry[3] = (uint32_t)((MACADDR_MASK)>> 😎 & 0xFFFFFFFF); l2Entry[4] = ((uint32_t)((MACADDR_MASK>> 40)& 0xFF)<< 0) | ((VLANID_MASK& 0xFFF)<< 😎 | ((IOTAG_MASK& 0x1)<< 20) | ((SRCPORT_MASK& 0xF)<< 21) | ((RETAG& 0x1)<< 25) | ((MIRROR& 0x1)<< 26) | ((TAKETS& 0x1)<< 27) | ((MIRR_VLAN& 0xF)<< 28); l2Entry[5] = (((MIRR_VLAN>> 4)& 0xFF)<< 0) | ((TRAPTOHOST& 0x1))<< 😎 | ((CBSIDIN& 0x3F)<< 9) | ((CBENONDA& 0x1)<< 15) | ((VLIDX& 0xFFF)<< 17) | ((SA_POLICE& 0x1)<< 29) | ((DA_POLICE& 0x1)<< 30); uint32_t status = 0; do { Std_ReturnType ret = spi_read_reg(L2_ADDRESS_CTL,&status); if (ret != E_OK) { return -1; } } while ((status>> VALID_BIT_SHIFT)& 1U); for (int i = 0; i< ADDRESS_RANGE; i++) { Std_ReturnType ret = spi_write_reg(L2_ADDRESS + i, l2Entry[i]); if (ret != E_OK) { return -2; } uint32_t readBack = 0; ret = spi_read_reg(L2_ADDRESS + i,&readBack); if (ret != E_OK || readBack != l2Entry[i]) { return -3; } } uint32_t controlL2Entry = 0; controlL2Entry |= (VALID<< VALID_BIT_SHIFT); controlL2Entry |= (RDWRSET<< RDWRSET_BIT_SHIFT); controlL2Entry |= (ERROR<< ERROR_BIT_SHIFT); controlL2Entry |= (LOCKED<< LOCKED_BIT_SHIFT); controlL2Entry |= (VALIDENT<< VALIDENT_BIT_SHIFT); controlL2Entry |= (MGMTROUTE<< MGMTROUTE_BIT_SHIFT); controlL2Entry |= (HOSTCMD<< HOSTCMD_BIT_SHIFT); Std_ReturnType ret = spi_write_reg(L2_ADDRESS_CTL, controlL2Entry); if (ret != E_OK) { return -4; } do { ret = spi_read_reg(L2_ADDRESS_CTL,&status); if (ret != E_OK) { return -5; } } while ((status>> VALID_BIT_SHIFT)& 1U); return 0; } 这是我修改后的代码实现 ,你能否验证一下这个实现是否会带来动态入口。因此,我试着回读寄存器的值来调试寄存器是否被写入,我可以看到寄存器被写入了值,但我不确定是否创建了enrty? 此外,L2 查找表的动态条目也没有得到反映? ,那么我如何验证 L2 查找表是否已创建? Re: Dynamic configuration in sja1110 你好@Atkinson、 1.位移语法 (<< ,>> ) 您代码中的一些位移运算符似乎被替换成了 HTML 实体,如<< 和>>。这种情况通常发生在将代码复制到网络平台时。总之,请直接在代码中进行检查。 #define L2_CTRL_VALID_BIT (1U<< 31) 应为: #define L2_CTRL_VALID_BIT (1U<< 31) 2.条目问题 在 CreateL2Entry() 函数中,尤其是在条目[3]、条目[4]和条目[5]中,存在一些语法错误和缺失的移位值。这可能导致寄存器写入不完整或无效。 例如 ((TRAPTOHOST &0x1) << | 我建议将您的实现与 Python 参考脚本进行比较,后者正确构造了 L2 条目的所有六个 32 位单词。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 Hi@PavelL 3.)I have changed the Register address to #define L2_ENTRY0_ADDR 0x00000023 but still I am not able to identify the table which I am trying to add getting reflected when I transmit the message "If I understand correctly, you're referring to the L2 Lookup Table described in Table 1182 of UM11107. 该表每个条目由六个 32 位寄存器组成。您可以在 Python 脚本的调试输出中看到这种结构。" 因此,我遇到了这样一个问题:我试图将数据写入需要在 L2 查找表中创建动态条目的地址,但却没有创建动态条目。 #define L2_ENTRY0_ADDR 0x00000023 #define L2_ENTRY1_ADDR 0x00000024 #define L2_ENTRY2_ADDR 0x00000025 #defineL2_ENTRY3_ADDR 0x00000026 #define L2_ENTRY4_ADDR 0x00000027 #define L2_ENTRY5_ADDR 0x00000028 #define L2_CTRL_ADDR 0x00000029 #define L2_CTRL_VALID_BIT (1U<< 31) #define L2_CTRL_WR_RDB_BIT (1U<< 30) #define L2_CTRL_VALIDENTRY_BIT(1U<< 28) #define L2_CTRL_HOSTCMD_SHIFT 23 #define L2_CTRL_HOSTCMD_WRITE (0b011U<< L2_CTRL_HOSTCMD_SHIFT) Std_ReturnType CreateL2Entry(uint32_t entry[6]) { uint16_t INDEX = 11; uint64_t MACADDR = 0x661122334455; uint64_t MACADDR_MASK = 0xFFFFFFFFFFFF; uint16_t VLANID = 3; uint16_t VLANID_MASK = 0xFFFFF; uint8_t IOTAG = 0; uint8_t IOTAG_MASK = 0; uint8_t SRCPORT = 5; uint8_t SRCPORT_MASK = 0xF; uint8_t DESTPORTS = 0x02; uint8_t ENFPORT = 1; uint8_t RETAG = 0; uint8_t MIRROR = 0; uint8_t TAKETS = 0; uint16_t MIRR_VLAN = 0xFFF; uint8_t TRAPTOHOST = 0; uint8_t CBSIDIN = 0x3F; uint8_t CBENONDA = 0; uint16_t VLIDX = 0xFFF; uint8_t SA_POLICE = 0; uint8_t DA_POLICE = 0; entry[0] = ((INDEX& 0x03FF)<< 1) | ((ENFPORT& 0x1)<< 11)| ((DESTPORTS& 0x7FF)<< 12)| ((SRCPORT& 0xF)<< 23)| ((MACADDR& 0x1F)<< 27); entry[1] = (uint32_t)((MACADDR>> 5)& 0xFFFFFFFF); entry[2] = (((MACADDR>> 37)& 0x7FF)<< 0)| ((VLANID& 0xFFF)<< 11)| ((IOTAG& 0x1)<< 23)| ((MACADDR_MASK& 0xFF)<< 24); entry[3] = (uint32_t)((MACADDR_MASK)>> 😎 & 0xFFFFFFFF); entry[4] = (((MACADDR_MASK>> 40)& 0xFF)<< 0)| ((VLANID_MASK& 0xFFF)<< 😎 | ((IOTAG_MASK& 0x1)<< 20)| ((SRCPORT_MASK& 0xF)<< 21)| ((RETAG& 0x1)<< 25)| ((MIRROR& 0x1)<< 26)| ((TAKETS& 0x1)<< 27)| ((MIRR_VLAN& 0xF)<< 28); entry[5] = (((MIRR_VLAN>> 4)& 0xFF)<< 0)| ((TRAPTOHOST& 0x1)<< 😎 | ((CBSIDIN& 0x3F)<< 9)| ((CBENONDA& 0x1)<< 15)| ((VLIDX& 0xFFF)<< 17)| ((SA_POLICE& 0x1)<< 29)| ((DA_POLICE& 0x1)<< 30); return E_OK; } Std_ReturnType WriteL2LookupEntry(uint8_t swt) { if (swt> 0) return E_NOT_OK; Std_ReturnType ret; uint32_t ctrlReg = 0; uint32_t entry[6]; // 第 1 步:创建条目 ret = CreateL2Entry(entry); if (ret != E_OK) return ret; // 第 2 步:等待 VALID 位清零 do { ret = spi_read_reg(L2_CTRL_ADDR,&ctrlReg); if (ret != E_OK) return ret; } while (ctrlReg& L2_CTRL_VALID_BIT); // 第 3 步:将条目数据写入寄存器 ret = spi_write_reg(L2_ENTRY0_ADDR, entry[0]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY1_ADDR, entry[1]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY2_ADDR, entry[2]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY3_ADDR, entry[3]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY4_ADDR, entry[4]); if (ret != E_OK) 返回 ret; ret = spi_write_reg(L2_ENTRY5_ADDR, entry[5]); if (ret != E_OK) 返回 ret; //步骤 4:设置控制寄存器以触发信号写入 uint32_t ctrlValue = (1U<< 31) | (1U<< 30) | (1U<< 28) | (1U<< 27) | (3U<< 23); ret = spi_write_reg(L2_CTRL_ADDR, ctrlValue); if (ret != E_OK) return ret; do { ret = spi_read_reg(L2_CTRL_ADDR,&ctrlReg); if (ret != E_OK) return ret; } while (ctrlReg& L2_CTRL_VALID_BIT); return E_OK; } 你能否检查一次,是否存在任何问题,因为它没有为 L2 查找表创建动态条目? Re: Dynamic configuration in sja1110 你好@Atkinson、 1。是的,主机工具最初是为 SJA1110-EVM 板开发的。我个人使用这些带有调试打印的脚本来验证我对寄存器访问的理解。虽然您不能在 S32G-VNP-RDB2 平台上直接运行它们,但由于 S32G 通过 SPI 访问 SJA1110,因此可以调整底层逻辑。 2.如果您正在为 S32G 平台寻找 SPI 读/写实现方案,您有两个主要选择: 请参阅 S32G RTD 4.0.0 代码包中提供的 SPI 示例。 或者,我建议在恩智浦S32G社区论坛上发布一个专用的问题,S32G支持团队可以在该论坛上进一步为您提供帮助。我主要关注汽车以太网主题,与特定平台驱动程序的重叠有限。 3.如果我没理解错的话,你指的是 UM11107 表 1182 中描述的 L2 查找表。该表每个条目由 6 个 32 位寄存器组成。您可以从 Python 脚本的调试输出中看到这种结构。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好@PavelL 我有一些问题 1.)l2_write_lookup_table.py 的这份 Debug 打印件取自 SJA1110 EVM 板的实现不是来自 S32G-VNP RDB 板吗?而且我们无法直接在 S32G-VNP-RDB32 板中实现 l2_write_lookup_table.py 2.) 你能向我提供用于与上述代码集成的 SPI_read 和 SPI_Write 的代码吗? 因为在 S32G 中通过 SPI_Read 和 SPI_write 执行写入操作时,无法看到动态条目被添加。 Std_ReturnType spi_read_reg(uint32_t regAddress, uint32_t* regValue) { Std_ReturnType ret; uint32_t TxChBuf[65] = {0}; uint32_t RxChBuf[65] = {0}; uint16_t regCount = 1; Siul2_Dio_Ip_WritePin(SPI_MCU_ES1_CS_AP_PORT, SPI_MCU_ES1_CS_AP_PIN, 0U); ret = getSpiAPCommand(false, regAddress, regCount, TxChBuf, regValue); if (ret != E_OK) { Siul2_Dio_Ip_WritePin(SPI_MCU_ES1_CS_AP_PORT, SPI_MCU_ES1_CS_AP_PIN, 1U); return ret; } ret=Spi_SetupEB(5u, (uint8_t*)TxChBuf, (uint8_t*)RxChBuf, 8u); if (ret == E_OK) { ret=Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_sja); if (ret == E_OK) { *regValue = RxChBuf[1]; } } Siul2_Dio_Ip_WritePin(SPI_MCU_ES1_CS_AP_PORT, SPI_MCU_ES1_CS_AP_PIN, 1U); return ret; } Std_ReturnType spi_write_reg(uint32_t regAddress, uint32_t regValue) { Std_ReturnType ret; uint32_t TxChBuf[65] = {0}; uint32_t RxChBuf[65] = {0}; uint16_t regCount = 1; uint32_t regValArray[1] = { regValue }; // 将芯片选择拉低 Siul2_Dio_Ip_WritePin(SPI_MCU_ES1_CS_AP_PORT,SPI_MCU_ES1_CS_AP_PIN,0U); ret = getSpiAPCommand(true, regAddress, regCount, TxChBuf, regValArray); if (ret != E_OK) { Siul2_Dio_Ip_WritePin(SPI_MCU_ES1_CS_AP_PORT, SPI_MCU_ES1_CS_AP_PIN, 1U); return ret; } ret=Spi_SetupEB(5u, (uint8_t*)TxChBuf, (uint8_t*)RxChBuf, 8u); if (ret == E_OK) { ret=Spi_SyncTransmit(SpiConf_SpiSequence_SpiSequence_sja); } Siul2_Dio_Ip_WritePin(SPI_MCU_ES1_CS_AP_PORT, SPI_MCU_ES1_CS_AP_PIN, 1U); return ret; } Correct me if I am wrong !! 3.)I have changed Register address to#define L2_ENTRY0_ADDR 0x00000023 but still I am not able to identify which I am trying to add table getting reflected when I transmit the message Re: Dynamic configuration in sja1110 你好@Atkinson、 你的代码看起来不错。但是,如果您想通过 SPI 访问动态表,则入口地址不含 FF,并右移 2。 因此,#define L2_ENTRY0_ADDR0xFF00008c应该是 #define L2_ENTRY0_ADDR0x00000023 但这取决于你的例程spi_write_reg 的实际作用。 以下是 write_l2_lookup_table.py 的输出结果,包括我的调试打印(tx/rx 指的是通过示波器或逻辑分析仪在 SPI 线路上看到的数据): DBG spi_tx:['0x02000290', '0xAABBCCDD'] DBG spi_rx:['0x02000290', '0x00000000'] DBG spi_read 0x0029 -> 0x00000000 DBG spi_write 0x0023< - 0x37FFFA00 DBG spi_tx:['0x80000230', '0x37FFFA00'] DBG spi_write 0x0024< - 0x119A22AB DBG spi_tx:['0x80000240', '0x119A22AB'] DBG spi_write 0x0025< - 0xFF807089 DBG spi_tx:['0x80000250', '0xFF807089'] DBG spi_write 0x0026< - 0xFFFFFFFF DBG spi_tx:['0x80000260', '0xFFFFFFFF'] DBG spi_write 0x0027< - 0xF1FFFFFF DBG spi_tx:['0x80000270', '0xF1FFFFFF'] DBG spi_write 0x0028< - 0x1FFE7EFF DBG spi_tx:['0x80000280', '0x1FFE7EFF'] DBG spi_write 0x0029 - 0xD9800000 DBG spi_tx:['0x80000290', '0xD9800000'] +-------+-------------+-------------------+--------+---------+-------+ | INDEX | DESTPORTS | MACADDR | VLANID | ENFPORT | IOTAG | +-------+-------------+-------------------+--------+---------+-------+ | 256 | 11111111111 | 11:22:33:44:55:66 | 14 | 1 | 1 | +-------+-------------+-------------------+--------+---------+-------+ 已写入 L2 查找表项 (SW1) 关于 FAE 申请,FAE 不在我的升级路径中。贵公司已指派 FAE,因此您可以直接联系 FAE。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好@PavelL #define L2_ENTRY0_ADDR 0xFF00008c #define L2_ENTRY1_ADDR 0xFF000090 #define L2_ENTRY2_ADDR 0xFF000094 #define L2_ENTRY3_ADDR 0xFF000098 #define L2_ENTRY4_ADDR0xFF00009C #define L2_ENTRY5_ADDR 0xFF0000A0 #define L2_CTRL_ADDR 0xFF0000A4 Std_ReturnType CreateL2Entry(uint32_t entry[6]) { uint16_t INDEX = 11; uint64_t MACADDR = 0x661122334455; uint64_t MACADDR_MASK = 0xFFFFFFFFFFFF; uint16_t VLANID = 3; uint16_t VLANID_MASK = 0xFFFFF; uint8_t IOTAG = 0; uint8_t IOTAG_MASK = 0; uint8_t SRCPORT = 5; uint8_t SRCPORT_MASK = 0xF; uint8_t DESTPORTS = 0x02; uint8_t ENFPORT = 1; uint8_t RETAG = 0; uint8_t MIRROR = 0; uint8_t TAKETS = 0; uint16_t MIRR_VLAN = 0xFFF; uint8_t TRAPTOHOST = 0; uint8_t CBSIDIN = 0x3F; uint8_t CBENONDA = 0; uint16_t VLIDX = 0xFFF; uint8_t SA_POLICE = 0; uint8_t DA_POLICE = 0; entry[0] = ((INDEX& 0x03FF)<< 1) | ((ENFPORT& 0x1)<< 11)| ((DESTPORTS& 0x7FF)<< 12)| ((SRCPORT& 0xF)<< 23)| ((MACADDR& 0x1F)<< 27); entry[1] = (uint32_t)((MACADDR>> 5)& 0xFFFFFFFF); entry[2] = (((MACADDR>> 37)& 0x7FF)<< 0)| ((VLANID& 0xFFF)<< 11)| ((IOTAG& 0x1)<< 23)| ((MACADDR_MASK& 0xFF)<< 24); entry[3] = (uint32_t)((MACADDR_MASK)>> 😎 & 0xFFFFFFFF); entry[4] = (((MACADDR_MASK>> 40)& 0xFF)<< 0)| ((VLANID_MASK& 0xFFF)<< 😎 | ((IOTAG_MASK& 0x1)<< 20)| ((SRCPORT_MASK& 0xF)<< 21)| ((RETAG& 0x1)<< 25)| ((MIRROR& 0x1)<< 26)| ((TAKETS& 0x1)<< 27)| ((MIRR_VLAN& 0xF)<< 28); entry[5] = (((MIRR_VLAN>> 4)& 0xFF)<< 0)| ((TRAPTOHOST& 0x1)<< 😎 | ((CBSIDIN& 0x3F)<< 9)| ((CBENONDA& 0x1)<< 15)| ((VLIDX& 0xFFF)<< 17)| ((SA_POLICE& 0x1)<< 29)| ((DA_POLICE& 0x1)<< 30); return E_OK; } Std_ReturnType WriteL2LookupEntry(uint8_t swt) { if (swt> 0) return E_NOT_OK; Std_ReturnType ret; uint32_t ctrlReg = 0; uint32_t entry[6]; ret = CreateL2Entry(entry); if (ret != E_OK) return ret; do { ret = spi_read_reg(L2_CTRL_ADDR,&ctrlReg); if (ret != E_OK) return ret; } while (ctrlReg& (1U<< 31)); ret = spi_write_reg(L2_ENTRY0_ADDR, entry[0]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY1_ADDR, entry[1]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY2_ADDR, entry[2]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY3_ADDR, entry[3]); if (ret != E_OK) return ret; ret = spi_write_reg(L2_ENTRY4_ADDR, entry[4]); if (ret != E_OK) 返回 ret; ret = spi_write_reg(L2_ENTRY5_ADDR, entry[5]); if (ret != E_OK) 返回 ret; uint32_t ctrlValue = (1U<< 31) | (1U<< 30) | (1U<< 28) | (1U<< 27) | (3U<< 23); ret = spi_write_reg(L2_CTRL_ADDR, ctrlValue); if (ret != E_OK) return ret; do { ret = spi_read_reg(L2_CTRL_ADDR,&ctrlReg); if (ret != E_OK) return ret; } while (ctrlReg& (1U<< 31)); return E_OK; } 这是目前创建动态条目的实现方法,你能否与 FAE 相互验证一下这种实现方法是否正确 !! 还需要做其他修改吗? Re: Dynamic configuration in sja1110 你好@Atkinson、 您的问题的答案与您的应用程序用例有关。 您可以在任何地方创建动态条目,也可以在 S32G 或 SJA1110 中创建: 以任何支持的方式将条目传输到 S32G,并通过 SPI 或以太网将其写入 SJA1110 或者,通过以太网将条目传输到 SJA1110 并使用内部 AHB 访问 或者,向 SJA1110 发送自定义触发信号(GPIO、以太网帧等),在那里创建一个动态条目并通过 AHB 访问写入该条目 或 .... 或 .... 这里有如何向 SJA1110 的开关芯写入动态入口的示例: 通过 SPI - python 脚本 write_l2_lookup_table.py 通过 AHB - ECT 服务器源代码 问候、 帕维尔 Re: Dynamic configuration in sja1110 你好@PavelL 1.) 2.)If via SJA1110 switch whether reading and write the register by SPI need to be performed and where this implementation need to be carried in between SWITCH_DRV? 3.)where we can create our Dynamic entry so that it will get append in switch More Explanation would be great help!! Re: Dynamic configuration in sja1110 你好@Atkinson、 很抱歉,由于我目前工作繁忙,回复迟了。 我知道这乍看起来可能并不简单,但实际上这个概念非常简单。 最终的寄存器地址取决于访问方法--是通过 AHB 在内部访问 M7 内核,还是通过 SPI_AP 接口从外部访问。基本地址因接入点而异。 寄存器地址使用 UM11107 表 2 中提供的基地址计算。例如,对于交换机子系统,SPI_AP 访问的基地址为0x00000000 ,AHB 访问的基地址为0xFF000000 。 在这种情况下,通过 AHB 访问寄存器0x8C (DYN_BE_LKP_ENTRY0)时,寄存器会变成0xFF00008C 。 现在,可能会让人感到困惑的地方来了:SDK 驱动程序定义了以下内容: #define SJA1110_L2_ART_LE_ADDR(0x3fc00023) /**< l2ArtLockedEntry 寄存器的地址 *   SWITCH_DRV_Write 例程将地址左移 2 位 (<< 2),用于内部 (AHB) 访问。对于 SPI 传输(级联开关设置中使用),不应用移位。因此,0x3fc00023 << 2 的结果是0xFF00008C。   我希望通过上面的解释,现在有感知了。   顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好 @PavelL 你 能不能给我读写 地址名称访问RESET描述 8Ch DYN_BE_LKP_ ENTRY0 R/W 0h (fffffFeh) 8ch 之前的完整地址会是什么基址? 比如它会有 0x3fc0008c 所以在这个动态入口表中我们会有完整的地址你能不能给我 8Ch DYN_BE_LKP_ ENTRY0 R/W 0h (fffffFEH) 90h DYN_BE_LKP_ ENTRY1 R/W 0h 94h DYN_BE_LKP_ ENTRY2 R/W 0h 98h DYN_BE_LKP_ R/W 0h 9 8h DYN_BE_LKP_ ENTRY3 R/W 0h 9Ch DYN_BE_LKP_ ENTRY4 R/W 0h a0h a0h dyn_BE_LKP_ ENTRY5 R/W 0h a4H DYN_BE_LKP_ A4H DYN_BE_LKP_CTRL R/W 0h (ff800000h) Re: Dynamic configuration in sja1110 你好@Atkinson、 我不知道有任何支持文件——这是常识,与设备无关。我向 Copilot 咨询了这个问题,应该可以修改 sja11xx_ftdi4232.py 以使用 DSPI5 而不是 FTDI。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好 @PavelL 要在 S32G-VNP-RDB2 或 RDB3 板上使用这个脚本,需要修改 FTDI 层才能在 S32G 处理器上通过 DSPI5 进行通信。 有什么证明文件吗? Re: Dynamic configuration in sja1110 你好@Atkinson、 问题 1:" 那么,既然 Linux 电路板支持包已预安装在 SD 卡上... 它会自动启用动态配置吗?" A1:不,电路板支持包包含 DSA 驱动程序,该驱动程序支持动态配置,但它不会在所有用例中自动启用。 问题 2:"通过动态使用 write_l2_lookup.py(python evm 主机工具)配置 L2 查找条目,该过程是否保持不变?对于 S32G-VNP-RDB 板,它将更改 " A2:创建和上传动态条目的大致流程保持不变,如 UM11107 和 AN12925 中所述。 但是,write_l2_lookup_table.py 脚本使用 FTDI 驱动程序通过 USB 访问 SJA1110-EVM。 要在 S32G-VNP-RDB2 或 RDB3 板上使用此脚本,需要修改 FTDI 层,以便在 S32G 处理器上通过 DSPI5 进行通信。 问题 3:" 是否有可能连接笔记本电脑 & S32G-VNP_RDB32 板创建动态条目?" A3:是的,这是可能的。您可以自由开发运行在 Linux 上的定制软件,通过 SPI 或以太网处理自己的协议,配置动态条目。 问题 4:"还有一件事,SJA1110_SDK_1.0.2 是否是实施 RTM1.0.0 所需的主要内容?" 答 4: 不是,建议使用最新版本的 SJA1110 SDK 1.0.2,以保证兼容性和稳定性。 如需进一步支持,请联系您的 FAE 或通过https://support.nxp.com/s/?language=en_US 提交报告。 感谢您的理解。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好@PavelL 因此,如果 SD 卡插入 S32G-VNP-RDB 板,Linux 电路板支持包会预先安装在 SD 卡上。那么SD卡中存在的电路板支持包是否会自动启用动态配置 通过动态使用 write_l2_lookup.py(python evm 主机工具)配置 L2 查找条目时,进程是否保持不变?对于 S32G-VNP-RDB 板来说,情况将会发生变化 如果流程保持不变我们如何连接笔记本电脑 & rdb32Board 在通过笔记本电脑和 SJA1110 EVM 板连接时它将使用 USB 接口进行连接,这将有助于对其进行配置动态输入那么对于 S32G-VNP-RDB32 板来说,接口会是什么样子? 是否有可能连接笔记本电脑 & S32G-VNP_RDB32 板创建动态条目? 还有,SJA1110_SDK_1.0.2 是否是实施 RTM1.0.0 所需的主要内容? Re: Dynamic configuration in sja1110 你好@Atkinson、 Linux 电路板支持包已经预装在 S32G-VNP-RDB3 板附带的 SD 卡上,因此在这方面无需采取任何其他措施。 我假设你已经成功启动了板(如果你在之前的消息中已经提到了这一点,很抱歉)。 电路板支持包 包含 SJA1110 DSA 驱动程序,该驱动程序提供了一系列有用的功能,包括支持动态 L2 查询表配置。 DSA 驱动程序默认已启用。 随着这个案例演变成一个多功能域话题,我已经联系了你的FAE,讨论我们应该如何进一步发展。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好 @PavelL 我目前正在尝试在 S32G-VNP-RDB32 中实现它 — SJA1110 Switch 目前,我自己没有任何固件需要使用 哪个 Linux 电路板支持包可能需要完成全部更改 Re: Dynamic configuration in sja1110 你好@Atkinson、 如果你打算在 S32G-VNP-RDB3 板上这样做,情况就会发生重大变化。你会在板上运行 Linux 电路板支持包,还是打算使用自己的固件? 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好 @PavelL 3.SPI_HAP(主机访问协议) 主机工具中的 write_l2_lookup_table.py 脚本演示了如何通过 SPI 动态配置 L2 表。任何外部 MCU 或主机处理器都可以使用这种方法。如有需要,也可将该脚本中的逻辑移植到内部 M7 内核上直接运行。 我希望通过 write_l2_lookup_table.py 配置一个条目 通过我们在 write_l2_lookup_table.py 文件中编写的配置将如何移至 RDB32 板 , 从笔记本电脑到 RDB32 板 需要做 什么接口? 我们可以通过什么通信机制将二级查询条目传递给设备(RDB32 板) 你 能给我一个程序或者我可以在哪里找到实施程序 Re: Dynamic configuration in sja1110 你好@Atkinson、 是的,你说得对,系统启动时,静态配置会自动从外部闪存加载。 让我来详细说明一下动态配置的概念。 动态配置的任务可分为两个部分: 组装有效条目 - 参见 UM11107,第 5.6 章"动态配置" 将此条目写入交换机 - 参见 AN12925,第 5.1.3.2 章"写入 L2 查找表条目" 有三种接口可用于此目的: AHB - 通过内部 M7 内核。SDK 支持可用,ECT 服务器源代码可作为起点。 SPI_HAP - 主机处理器组装一个有效条目并将其写入交换机。这就是 write_l2_lookup_table.py 的作用。 以太网 - 主机处理器发送用户定义的信息(UDP、TCP 等),由内部 M7 内核处理。M7 对报文进行解码,生成一个有效条目,并将其写入交换机--因此我们实际上又回到了第一点。这就是电痉挛疗法的内部工作原理。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 Hi@PavelL 3. SPI_HAP(主机访问协议) 主机工具中的 write_l2_lookup_table.py 脚本演示了如何通过 SPI 动态配置 L2 表。任何外部 MCU 或主机处理器都可以使用这种方法。如有需要,也可将该脚本中的逻辑移植到内部 M7 内核上直接运行。 我希望通过 write_l2_lookup_table.py 配置一个条目 通过我们在 write_l2_lookup_table.py 文件中编写的配置将如何移至 RDB32 板,从笔记本电脑到 RDB32板 需要做 什么接口? 我们可以通过什么通信机制将二级查询条目传递给设备(RDB32 板)你 能给我一个程序或者我可以在哪里找到实施程序 Re: Dynamic configuration in sja1110 您好@PavelL 正如您所提到的,我想动态地配置 switch_core 配置 当系统启动时,我们在外设中配置的静态配置会被加载 我正在寻找一种方法来配置表项,这些表项是在静态中配置的,需要通过动态来配置。 在这两种情况下,通常有三种方法可以动态更新交换机配置: 来自 M7 内核 通过 SPI_HAP 从主机处理器发送 从主机处理器通过以太网 ,所以你是说这些是动态更新系统的唯一途径? 如果这些都是唯一可能的方法,那么按照我提供的代码进行配置是可行还是不可行? ,这里提到的三个过程与 ECT& write_l2_lookup_table.py 是否相同? Re: Dynamic configuration in sja1110 你好@Atkinson、 能否请您说明使用动态 L2 查找表的用例? 就我个人而言,我会考虑在两种典型情况下使用动态条目: 当你想在多台设备上维护通用的交换机配置,然后 " 对每台交换机进行个性化设置 " 时,会在开机后对每台交换机进行动态设置。 当您需要根据特定应用要求在运行时修改交换机配置时。 在这两种情况下,通常有三种方法可以动态更新交换机配置: 来自 M7 内核 通过 SPI_HAP 从主机处理器发送 通过以太网从主机处理器 您的用例属于这些类别之一,还是您的目标有所不同? 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 您好@PavelL 正如您所提到的,我尝试加入代码 您能否确认我需要在哪里放置代码,这将有助于我们创建条目 您在之前的信息中提到有两种方法可以通过使用 ECT(以太网配置工具)和 SPI_HAP 所以这些工具和文件需要在运行时进行处理,对吗? 我分享的代码是我试图在不使用这些工具的情况下实现的 我想创建一个动态 L2 查找条目,这样做可以吗? Atkinson Regards Re: Dynamic configuration in sja1110 你好@Atkinson、 很抱歉由于公共假期而延迟回复。 感谢您分享代码。我快速浏览了一下,乍一看似乎与 AN12925 第 5.1.3.2 章中概述的原则一致写入 L2 查找表项。我还注意到,sja1110.h 中的 #define 语句似乎被重复使用了,这是标准做法。 但请注意,深入的自定义代码审查超出了我们免费在线支持的范围。此外,调用此函数的时间和上下文高度特定应用,可能会因您的系统架构和要求而异。 顺祝商祺! 帕维尔 Re: Dynamic configuration in sja1110 你好@PavelL static status_t wait_for_valid_clear(uint8_t swt) { status_t status; uint32_t ctrl = 0; do { status = SWITCH_DRV_Read(swt, 1, DYN_BE_LKP_CTRL,&ctrl); if (status != STATUS_SUCCESS) return status; } while (ctrl& DYN_BE_LKP_CTRL_VALID_MASK); if (ctrl& DYN_BE_LKP_CTRL_ERROR_MASK) return STATUS_ERROR; return STATUS_SUCCESS; } status_t SJA1110_AddL2LookupEntry_Dynamic(uint8_t swt) { status_t status; // MAC = 66:11:22:33:44:55 uint8_t mac[6] = {0x66, 0x11, 0x22, 0x33, 0x44, 0x55}; uint64_t mac64 = ((uint64_t)mac[0]<< 40)| ((uint64_t)mac[1]<< 32)| ((uint64_t)mac[2]<< 24)| ((uint64_t)mac[3]<< 16)| ((uint64_t)mac[4] )<< 😎 | (uint64_t)mac[5]; // 准备 L2 查找条目字段 uint32_t entry[WORD_COUNT] = {0}; 条目 [0] = ((5 & 0xF) << 24) | (1 << 11); // SrcPort, DestPorts 1 & 2 条目 [1] = (uint32_t)(mac64 & 0xFFFFFFFF); 条目 [2] = (uint32_t)((mac64 >> 32) & 0xFFFF); 条目 [2] |= (3 << 16); // VLAN ID = 3 条目 [3] = 0; // 可选的掩码 条目 [4] = 0; 条目 [5] = (8 << 4) | (1 << 10); // CB_SID_IN = 8, CB_ON_DA = 1 // 等待直到前一个操作完成 status = wait_for_valid_clear(swt); if (status != STATUS_SUCCESS) return status; // 将 L2 输入数据写入寄存器 status = SWITCH_DRV_Write(swt,WORD_COUNT,DYN_BE_LKP_ENTRY0,entry); if (status != STATUS_SUCCESS) return status; // 构造控制寄存器值 uint32_t ctrl = DYN_BE_LKP_CTRL_VALID_MASK | DYN_BE_LKP_CTRL_RDWRSET_MASK | (HOSTCMD_WRITE<< DYN_BE_LKP_CTRL_HOSTCMD_SHIFT); //触发信号写入 状态 = switch_drv_Write (swt, 1, DYN_BE_LKP_CTRL, & ctrl); if (status! = STATUS_SUCCESS) 返回状态; // 等待操作完成 return wait_for_valid_clear(swt); } 这段代码是否可用于生成动态条目? 如果这段代码正确,需要在何处调用该函数? Atkinson Regards Re: Dynamic configuration in sja1110 你好@PavelL #include #include // 根据 SoC 映射定义寄存器地址 #define DYN_BE_LKP_ENTRY0 0x000 // 替换为实际地址 #define DYN_BE_LKP_ENTRY1 0x004 #defineDYN_BE_LKP_ENTRY2 0x008 #define DYN_BE_LKP_ENTRY3 0x00C #define DYN_BE_LKP_ENTRY4 0x010 #define DYN_BE_LKP_ENTRY5 0x014 #define DYN_BE_LKP_CTRL 0x018 void insert_l2_unicast_entry(void) { // === INPUTS === uint64_t mac = 0x021122334455ULL; // MAC 地址 uint16_t vlan_id = 3; uint8_t dest_port = 3; // 端口 3 uint16_t dest_ports_mask = (1<< dest_port); uint16_t index = 5; // === 第 1 步:等待上一步操作完成 === while (read_register(DYN_BE_LKP_CTRL)& ETHSW_DYN_BE_LKP_CTRL_bValid_MASK); // === 第 2 步:准备输入字段 === uint32_t mac_lo = (uint32_t)(mac& 0xFFFFFFFF); // 低 32 位 uint32_t mac_hi = (uint32_t)((mac>> 32)& 0xFFFF); // 高 16 位 uint32_t entry0 = ethsw_dyn_be_be_lkp_entry0_uventry_30__0_ (0x00000000);uint32_t entry1 = ethsw_dyn_be_lkp_entry1_uventry_62__31_ (mac_lo);uint32_t entry2 = ethsw_dyn_BE_BE_LKP_ENTRY1_UVENTRY_62__31_ (mac_lo);uint32_t entry2 = ethsw_dyn_BE_BE_LK_LKp_entry2_uventry_94__63_ (mac_hi); uint32_t entry3 = ethsw_dyn_be_lkp_entry3_uventry_126__95_ (((vlan_id & 0xFFF) < < 16) | (dest_ports_mask & 0xFFF));uint32_t entry4 = ethfff sw_dyn_be_lkp_entry4_uventry_158__127_ (0x00000000);// 可选标志/保留的 uint32_t 条目5 = ethsw_dyn_be_lkp_entry5_uventry_190__159_(索引); // === 第 3 步:将条目写入 DYN 寄存器 === write_register(DYN_BE_LKP_ENTRY0, entry0); write_register(DYN_BE_LKP_ENTRY1, entry1); write_register(DYN_BE_LKP_ENTRY2, entry2); write_register(DYN_BE_LKP_ENTRY3, entry3); write_register(DYN_BE_LKP_ENTRY4, entry4); write_register(DYN_BE_LKP_ENTRY5, entry5); //=== 步骤 4:通过控制寄存器触发写入 === uint32_t ctrl_val = 0; ctrl_val |= ethsw_dyn_be_ctrl_bvalid (1); ctrl_val |= ethsw_dyn_be_be_ctrl_bw rdb (1);//写入操作 ctrl_val |= ethsw_dyn_be_be_be__lkp_ctrl_uvHostCommand (0b011);//主机写入 ctrl_val |= ethsw_dyn_be_lkp_ctrl_bvalident ry (1);//有效输入 write_register(DYN_BE_LKP_CTRL, ctrl_val); // === 第 5 步:等待操作完成 === while (read_register(DYN_BE_LKP_CTRL)& ETHSW_DYN_BE_LKP_CTRL_bValid_MASK); // === 第 6 步:检查错误 === uint32_t status = read_register(DYN_BE_LKP_CTRL); if (status& ETHSW_DYN_BE_LKP_CTRL_bError_MASK) { // 处理错误 // 你可以根据需要打印或记录 } } 我是否可以插入这段代码,将数据动态写入 L2 查找表 我应该在哪里插入这段代码进行测试? 期待您的回复 Atkinson Re: Dynamic configuration in sja1110 你好@PavelL 在通过 SPI_HAP 进行配置的方法中 在哪里可以找到 write_l2_lookup_table.py? 如何通过 SPI_HAP 进行通信?设备启动后的时间以前 在静态配置期间,我们已经通过每个索引配置了每个数据? 那么,如果最初配置的是静态数据,是否就可以连接? 您能分享一下 write_l2_lookup_table.py 吗? 当从哪里(需要连接哪个端口才能传递数据)运行这个脚本时,脚本将轮询数据? Atkinson Re: Dynamic configuration in sja1110 你好@Atkinson、 动态配置的方法取决于您的使用情况--可以由内部 M7 内核执行,也可以通过 SPI 从外部执行。下面是一份可能的解决方案清单: 1.ECT(以太网控制工具) 通过外部以太网(UDP)帧进行动态配置。M7 核心上运行的内部固件接收配置并将其应用到交换机核心。 2.修改后的 ECT ECT 源代码可进行调整,以接受任何以太网帧格式(不仅仅是 UDP)。这样就可以集成到定制协议或系统中。内部逻辑保持不变--M7 内核执行实际的寄存器更新。 3.SPI_HAP(主机访问协议) 主机工具中的 write_l2_lookup_table.py 脚本演示了如何通过 SPI 动态配置 L2 表。任何外部 MCU 或主处理器都可以使用这种方法。如果需要,该脚本中的逻辑也可以移植到 M7 内核上直接运行。 上述所有方法都遵循 AN12925 第 5.1.3.2 节所述的相同原则。寄存器级别的流程是相同的,包括轮询控制寄存器、写入条目寄存器以及通过控制寄存器触发信号更新。 顺祝商祺! 帕维尔
View full article
カードエミュレーション PN7160 シリアル番号 こんにちは、 現在、ESP32 にコネクテッドされた PN7160 を使用したカード エミュレーションに取り組んでいます。 PN7160 を Android NFCリーダ (NFC ツールを使用) にタップすると、エミュレートされたカードが検出されます。ただし、最初のバイトは常に 08 ですが、それ以外はタップごとに UID が変わることに気付きました。 私が観察したUIDの例: 08467004 0886036e 08c7351f 0831fb0d ... 私の質問は次のとおりです: PN7160 でカード エミュレーション モードを使用する場合、完全にカスタマイズされた静的 UID (たとえば、「0456789A」のような固定 4 バイト UID) を構成することは可能ですか? ご意見やご指導をいただければ幸いです。 通信と制御(I3C | I2C | SPI | FlexCAN | イーサネット | FlexIO) Re: CARD emulation PN7160 Serial number こんにちは@EduardoZamoraさん、 ご説明いただき、NXP_HCE_RNDM_UID_ENB 構成を教えていただき、誠にありがとうございます。これにより、テスト中に観察された動作が明確になります。 サポートありがとうございます! よろしくお願いします、 AWN Re: CARD emulation PN7160 Serial number こんにちは、 @awnさん あなたの調子が良いといいのですが。 カード エミュレーション モードでは、UID はランダムな数字になるCANがあり、1 バイトのみが固定されます。この構成では、RF オフ -> RF オンの遷移が発生するたびに (各タップごとに) UID が変更されます。 詳細については、 PN7160/PN7220 構成ファイルのセクション 5.8 NXP_HCE_RNDM_UID_ENBを確認することをお勧めします。 よろしくお願いいたします。 エドゥアルド。
View full article
"Flash_VerifyErase" 在 PRINCE 地区不起作用 我一直在使用 Flash_VerifyErase(),以确保不会读取已擦除的闪存页面并导致硬故障。在我开启 PRINCE 闪存加密之前,这个功能一直运行稳定。 由于某些原因,Flash_VerifyErase() 无法检测到 PRINCE 闪存的已擦除区域,并在我执行读取操作时导致硬故障。函数 Flash_read()似乎不起作用,因此目前我没有办法确保在读取 Flash 时不会出现硬故障。 检测 PRINCE 擦除是否有不同的功能?启用 PRINCE 后,如何防止硬故障? Re: "Flash_VerifyErase" does not work on PRINCE regions 我也有同样的问题。如何安全地阅读加密的 Flash 页面? Re: "Flash_VerifyErase" does not work on PRINCE regions 是的,这是用于 LPC55S69 的 1B 版本硅片--抱歉我之前忘记了这一信息! 请看我的代码,附在下面。注释部分是进行 Flash 读取的推荐方法,但启用 PRINCE 后,这部分代码将不再工作。在启用 PRINCE 之前,我在"else if" 内设置了这个注释块,memcpy 现在就在这里。 status_t status = FLASH_VerifyErase(&flash_instance, addr, PflashPageSize); if(status == kStatus_Success) { memset(data, 0xFF, len); return len; } else if(status == kStatus_FLASH_CommandFailure) { memcpy(data, (void*)addr, len); } else { return -1; } // status = FLASH_Read(&flash_instance, addr, data, len); // // if(status == kStatus_FLASH_EccError) // { // memset(data, 0xFF, len); // return len; // } // else if(status != kStatus_Success) // { // return -1; // } Re: "Flash_VerifyErase" does not work on PRINCE regions 你好,亚历山大、 能告诉我们您使用的部件编号吗?你使用 LPC55xx 系列吗? 总之,我建议您参考 AN12527.pdf 和 AN12527SW.zip,可从以下链接下载: https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc5500-cortex-m33/high-efficiency-arm-cortex-m33-based-microcontroller-family:LPC55S6x?tab=Documentation_Tab 如果仍有问题,请公布所有代码,以便我们进行审查。 BR 荣向军
View full article
S32K344 CAN FD 当我使用 PCAN-USB pro 从 S32K344 接收 64 字节数据时。 PCAN-USB pro 只收到了前 8 个字节,剩下的 56 个字节丢失了。 当我使用 PCAN-USB pro 向 S32K344 传输 64 字节数据时。 S32K344 成功接收 64 字节数据。 Re: S32K344 CAN FD 平台:S32DS3.5 SDK:PlatformSDK_S32K3_S32K344_M7-5.0.0 我将示波器的通道 1 连接到 S32K344 的 CAN H,将通道 2 连接到 S32K344 的 CAN L,得到了以下波形。 我已经将 CAN 有效载荷设置为 64 字节,但是示波器上显示的 DLC 仍然是 8 而不是 64 字节。 Can_43_FLEXCAN-CanConfigSet-CanControllerCan_43_FLEXCAN-CanConfigSet-CanController Can_43_FLEXCAN-CanConfigSet-TRANSMITCan_43_FLEXCAN-CanConfigSet-TRANSMIT Can_43_FLEXCAN-CanConfigSet-RECEIVECan_43_FLEXCAN-CanConfigSet-RECEIVE Re: S32K344 CAN FD 您好, 尝试在发送信息后删除 Can_43_FLEXCAN_SetControllerMode 调用。不知道你为什么要停止/启动控制器。 BR, Petr Re: S32K344 CAN FD 我再次上传文件。 Re: S32K344 CAN FD 您好, 我无法查看/下载项目。因此,请务必根据需要更新 Can_PduInfo。 BR, Petr Re: S32K344 CAN FD 我正在使用MCAL来版本这个项目。 在上一条信息中,我附上了我的项目。 Re: S32K344 CAN FD 您好, 您是否正确设置了 tx_info 参数,以使用具有所需有效载荷大小的 CAN FD 帧? BR, Petr
View full article