Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
異なる DDR サイズに応じて i.MX8MP の予約メモリを調整するにはどうすればよいでしょうか? NXPエキスパートの皆様、こんにちは。 コミュニティ全体を検索しましたが、満足のいく答えは見つかりませんでした。 以下はNXPのLinux 6.12のimx8mp.dtsiの予約メモリノードです。 予約メモリ { #アドレスセル = <2>; #size-cells = <2>; 範囲; /* * optee の使用のために予約されたメモリ。使用しないでください。 * OP-TEE がインストールされている場合は、これが dtb に自動的に追加されます。 * optee@56000000 { * reg = <0 0x56000000 0 0x2000000>; * マップなし; * }; */ /* 連続した割り当てのためのグローバル自動構成領域 */ Linux、cma { compatible = "共有DMAプール"; 再利用可能 サイズ = <0 0x3c000000>; 割り当て範囲 = <0 0x40000000 0 0xC0000000>; linux、cma-デフォルト; }; GPU予約済み: GPU予約済み@100000000 { マップなし; レジスタ = <0x1 0x00000000 0 0x10000000>; }; dsp_reserved: dsp@92400000 { レジスタ = <0 0x92400000 0 0x1000000>; マップなし; }; dsp_reserved_heap: dsp_reserved_heap@93400000 { レジスタ = <0 0x93400000 0 0xef0000>; マップなし; }; dsp_vdev0vring0: vdev0vring0@942f0000 { レジスタ = <0 0x942f0000 0 0x8000>; マップなし; }; dsp_vdev0vring1: vdev0vring1@942f8000 { レジスタ = <0 0x942f8000 0 0x8000>; マップなし; }; dsp_vdev0バッファ: vdev0バッファ@94300000 { compatible = "共有DMAプール"; レジスタ = <0 0x94300000 0 0x100000>; マップなし; }; }; 1.2GB/4GB/8GB DDR サイズの i.MX8MP の reserved-memory/linux,cma/size と reserved-memory/linux,cma/alloc-ranges を調整するにはどうすればよいでしょうか?(サイズ(960MB)は2GB DDRには大きすぎること、割り当て範囲も2GB DDRの範囲外であることは明らかです) 2.linux,cma/size と linux,cma/alloc-ranges を除いて、DDR サイズ 2GB/4GB/8GB に応じて変更する必要がある他のプロパティはありますか? 3. gpu_reserved ノードの reg が 2GB ddr の範囲外であることは明らかですが、どのように変更すればよいでしょうか? NXP の linux6.12 arch/arm64/boot/dts/freescale/imx8mp-tqma8mpql-mba8mpxl.dts で、reserved-memory/linux,cma/size&alloc-ranges が変更されていることがわかります。 予約メモリ { #アドレスセル = <2>; #size-cells = <2>; 範囲; /* 連続した割り当てのためのグローバル自動構成領域 */ Linux、cma { compatible = "共有DMAプール"; 再利用可能 サイズ = <0 0x38000000>; 割り当て範囲 = <0 0x40000000 0 0xB0000000>; linux、cma-デフォルト; }; }; 4.この変更のきっかけは何ですか?これは DDR サイズの違いによるものでしょうか? また、NXP の Linux 6.12 arch/arm64/boot/dts/freescale/imx8mp-evk-root.dts では、node/reserved-memory がさらに変更されていることにも気付きました。 &{/予約メモリ} { jh_reserved: jh@fdc00000 { マップなし; レジスタ = <0 0xfdc00000 0x0 0x400000>; }; loader_reserved: loader@fdb00000 { マップなし; レジスタ = <0 0xfdb00000 0x0 0x00100000>; }; ivshmem_reserved: ivshmem@fda00000 { マップなし; reg = <0 0xfda00000 0x0 0x00100000>; }; ivshmem2_reserved: ivshmem2@fd900000 { マップなし; reg = <0 0xfd900000 0x0 0x00100000>; }; pci_reserved: pci@fd700000 { マップなし; レジスタ = <0 0xfd700000 0x0 0x00200000>; }; 受刑者予約: 受刑者@c0000000 { マップなし; レジスタ = <0 0xc0000000 0x0 0x3d700000>; }; }; &{/予約メモリ/linux,cma} { サイズ = <0 0x28000000>; 割り当て範囲 = <0 0x40000000 0 0x60000000>; }; 5. 新しく追加されたノード jh_reserved/loader_reserved/ivshmem_reserved/ivshmem2_reserved/pci_reserved/inmate_reserved はどのような状況で使用する必要がありますか? 上記の疑問について詳しく説明してください。 i.MX 8M | i.MX 8M ミニ | i.MX 8M ナノ Re: How to adjust i.MX8MP's reserved-memory accroding different DDR size? こんにちは、ホルヘ・カスさん。 ご協力誠にありがとうございます。Quction6についてはまだ疑問があります。 2GB/4GB/8GB DDR を搭載したカスタム imx8mp ボード (6GB DDR を搭載した imx8mpevk ボードに基づく) では、異なる DDR サイズの各ボードごとに個別の u-boot.imx があり、linux6.12 ソース コードの imx8mp-evk.dts から次の ' memory@40000000' ノードを変更せずに保持します。 メモリ@40000000 { device_type = "メモリ"; レジスタ = <0x0 0x40000000 0 0xc0000000>, <0x1 0x00000000 0 0xc0000000>; //3GB+3GB=6GB }; そして、弊社の imx8mp ボードは正常に動作します。また、彼らは一晩のテストに合格することもできます。 以下は 4GB DDR を搭載した imx8mp ボードです。 root@router:/#無料 使用可能な使用済み無料共有バフ/キャッシュの合計 Mem: 3686580 159528 2914044 19536 613008 3458156 // 4GB DDR の場合、合計 3686580 KB を認識するのが妥当です。 スワップ: 0 0 0 root@router:/# /プレスリリース、製品ニュース/MCB2/memtester 3G memtester バージョン 4.3.0 (32 ビット) 著作権 (C) 2001-2012 Charles Cazabon。 GNU General Public License バージョン 2 (のみ) に基づいてライセンスされます。 ページサイズは4096です ページサイズマスクは0xfffff000です 3072MB(3221225472バイト)必要 3072MB (3221225472 バイト) を取得しました。mlock を試行しています...ロックされました。 ループ1: スタックアドレス: テスト3[3326.210063] clean_cache.sh (100707): drop_caches: 1 [ 3326.277139] clean_cache.sh (100707): drop_caches: 2 [ 3326.316299] clean_cache.sh (100707): drop_caches: 3 わかりました ランダム値: OK XOR比較: OK 比較SUB:OK MULを比較: OK DIVを比較: OK 比較OR:OK ANDを比較: OK 順次増分: OK ソリッドビット:OK ブロックシーケンシャル:OK チェッカーボード:OK ビットスプレッド:OK ... // 一晩のテストでは問題は見つかりませんでした。 4GB DDRデバイスのカーネル起動段階のメモリ情報は次のとおりです。 [ 0.000000] マシンモデル: NXP i.MX8MPlus EVKボード [ 0.000000] efi: UEFI が見つかりません。 [ 0.000000] 予約メモリ: 0x00000000c4000000 に CMA メモリプールを作成しました。サイズは 960 MiB です。 [ 0.000000] OF: 予約済みメモリ: 初期化されたノード Linux、cma、互換ID 共有DMAプール [ 0.000000] OF: 予約済みメモリ: 0x00000000c4000000..0x00000000ffffffff (983040 KiB) マップ再利用可能 Linux,cma [ 0.000000] OF: 予約済みメモリ: 0x0000000057c00000..0x0000000057ffffff (4096 KiB) nomap 再利用不可 optee_shm@0x57c00000 [ 0.000000] OF: 予約済みメモリ: 0x0000000056000000..0x0000000057bfffff (28672 KiB) nomap 再利用不可 optee_core@0x56000000 [ 0.000000] OF: 予約済みメモリ: 0x0000000100000000..0x000000010ffffffff (262144 KiB) nomap 再利用不可 gpu_reserved@100000000 [ 0.000000] OF: 予約済みメモリ: 0x0000000092400000..0x00000000933fffff (16384 KiB) nomap 再利用不可 dsp@92400000 [ 0.000000] OF: 予約済みメモリ: 0x0000000093400000..0x00000000942effff (15296 KiB) nomap 再利用不可 dsp_reserved_heap@93400000 [ 0.000000] OF: 予約済みメモリ: 0x00000000942f0000..0x00000000942f7fff (32 KiB) nomap 再利用不可 vdev0vring0@942f0000 [ 0.000000] OF: 予約済みメモリ: 0x00000000942f8000..0x00000000942fffff (32 KiB) nomap 再利用不可 vdev0vring1@942f8000 [ 0.000000] 予約メモリ: 0x0000000094300000 に DMA メモリプールを作成しました。サイズは 1 MiB です。 [ 0.000000] OF: 予約済みメモリ: 初期化されたノード vdev0buffer@94300000、互換性のあるIDは共有DMAプール [ 0.000000] OF: 予約済みメモリ: 0x0000000094300000..0x00000000943fffff (1024 KiB) nomap 再利用不可 vdev0buffer@94300000 [ 0.000000] NUMA: [mem 0x0000000040000000-0x000000013fffffff] でノードを偽装しています [ 0.000000] NODE_DATA(0) 割り当て済み [mem 0x13f84a840-0x13f84d3bf] [ 0.000000] ゾーン範囲: [ 0.000000] DMA [メモリ 0x0000000040000000-0x00000000ffffffff] [ 0.000000] DMA32 空 [ 0.000000] 正常 [メモリ 0x0000000100000000-0x000000013ffffffff] [ 0.000000] 各ノードの移動可能ゾーンの開始 [ 0.000000] 初期メモリノード範囲 [ 0.000000] ノード 0: [メモリ 0x0000000040000000-0x0000000055ffffff] [ 0.000000] ノード 0: [メモリ 0x0000000058000000-0x00000000923fffff] [ 0.000000] ノード 0: [メモリ 0x0000000092400000-0x00000000943fffff] [ 0.000000] ノード 0: [メモリ 0x0000000094400000-0x00000000ffffffff] [ 0.000000] ノード 0: [メモリ 0x0000000100000000-0x000000010fffffff] [ 0.000000] ノード 0: [メモリ 0x0000000110000000-0x000000013ffffffff] [ 0.000000] 初期化メモリ セットアップ ノード 0 [メモリ 0x0000000040000000-0x000000013fffffff] [ 0.000000] ノード0のゾーンDMA: 使用できない範囲に8192ページ 1.実際には 4GB DDR デバイスの memory@40000000 ノードの6GB reg 構成によって発生した不合理なログを特定できますか? 2.SO、カーネルはDTSのmemory@40000000/reg構成のみに基づいてメモリ範囲を計算しているのではなく、U-BootからATAGを介してカーネルに渡される実際の物理メモリサイズと合わせて、包括的にメモリ範囲を決定しているのではないかと推測しています。つまり、2GB/4GB/8GBのメモリ構成ごとに別々のDTBファイルを用意する必要はないのではないかと考えています。この点についてご確認いただけますでしょうか? 改めて感謝申し上げます。 Re: How to adjust i.MX8MP's reserved-memory accroding different DDR size? こんにちは、 1. デバイス ツリー内の予約済みメモリ ノードを調整するための具体的なドキュメントはありません。これらの値は DDR サイズとアプリケーションによって異なるためです。唯一の制限は、リファレンス マニュアルのメモリ マップに記載されているように、各モジュールに割り当てられた最大メモリ領域になります。 BSP のデフォルトの CMA サイズは 960 MB CAN が、2GB DDR の場合、960 MB は大きすぎるため、CMA を 256 MB ~ 512 MB 程度に減らすのが一般的です。有効な DDR スペースでの割り当てに重点を置く必要があります。 2. 追加のプロパティを追加する必要はありません。 3. 設計で使用可能なサイズに応じて各ノードを再編成できます。例: gpu_reserved: gpu_reserved@70000000 { no-map; reg = <0 0x70000000 0 0x10000000>; }; 他も同様です。 4. このデバイス ツリーは、ハイパーバイザーの予約済みメモリに使用されます。 5. これらのノードは Jailhouse/PCIe/仮想化に使用されますが、使用しない場合はこれらのノードを省略できます。 詳細については、このドキュメントをCAN参照できます。 i.MX 仮想化ユーザーガイド 6. はい、各 DDR サイズに一致するはずです。 よろしくお願いいたします。 Re: How to adjust i.MX8MP's reserved-memory accroding different DDR size? 質問6:(追加 ) メモリ@400000000ノード(arch/arm64/boot/dts/freescale/imx8mp-evk.dts内)のregプロパティはDDR容量(2GB/4GB/8GB)に応じて変更する必要がありますか? メモリ@40000000 { device_type = "メモリ"; レジスタ = <0x0 0x40000000 0 0xc0000000>, <0x1 0x00000000 0 0xc0000000>; }; はいの場合、異なる DDR サイズのカスタム i.MX8MP ボードには個別の DTB ファイルが必要であることを意味しますか? 事前に考えます! Re: How to adjust i.MX8MP's reserved-memory accroding different DDR size? こんにちは、ホルヘ・カスさん。 カーネルは U-boot から渡された DDR サイズを使用するので、DTS で memory@40000000/reg を構成する目的は何ですか? Re: How to adjust i.MX8MP's reserved-memory accroding different DDR size? こんにちは、 情報ありがとうございます。 1. エラーや警告などの重大なログはなく、カーネルは U-boot から利用可能なメモリ範囲を使用するだけです。 2. カーネルでは U-boot と DTS の両方の構成が使用されます。 デバイス ツリーでは、物理メモリが十分でない場合でも仮想メモリをさらに割り当てることができますが、RAM の使用量が多いとシステムがクラッシュする可能性があります。 よろしくお願いいたします。 Re: How to adjust i.MX8MP's reserved-memory accroding different DDR size? こんにちは、 社内チームに確認しました。 U-boot 構成には、使用可能な物理 DDR メモリに関する正しいデータが含まれていますが、DTS 予約メモリ ノードもカーネルに渡されます。あなたのCASE、ノードにさらに仮想メモリを割り当てることができますが、物理予約メモリをすべて使い切ると、使用可能なメモリがないためエラーが発生し、物理アドレスが存在しない、または他のモジュールによって使用される可能性があるためにリソースの問題が発生します。 予約メモリを各ボードに適合させる必要があります。おっしゃるとおり、これは機能しますが、RAM の使用量が多い場合は、エラーやカーネル パニックが発生する可能性があります。 前回の返信を訂正させていただきます。 よろしくお願いいたします。
記事全体を表示
恩智浦 s32k312 SRAM 多位错误 @danielmartynek 对于单位错误,我可以调用 SRAM ISR(ERM0_ISR_Handler),但对于多位错误,却无法调用处理程序。 据我所知,不可纠错事件与多位错误相对应,对吗? 我可以看到 SRAM 不可更正的错误事件位是在 SR0 中设置的,但是 ISR 没有被触发信号。 能否请您帮助我了解如何调用多位错误 ISR? 我还在 CR0 寄存器中启用了 SRAM0 的中断通知功能 Re: NXP s32k312 SRAM MultibitError 你好,@Anitha7、 不可纠正的错误会触发信号 CM7 故障异常。 在我链接的示例中,我启用了 Bus_Fault 异常,但其优先级低于 ERM 处理程序的优先级,这样 ERM 处理程序就会首先被调用。 我认为这可能是您项目中的问题所在。 此外,请仔细检查 VTOR 指针,并确保在 NVIC 中启用 ERM 中断。您可能会注意到 NVIC 中的中断待处理。 Re: NXP s32k312 SRAM MultibitError 你好@丹尼尔-马蒂内克 多比特是指 RM 规定的双比特 我根据你的参考将系统配置为 SRAM0。通过设置 SRO 寄存器中的相应位,可避免发生无法纠正的 ECC 故障(NEC0)。 我在相应的 CR0 寄存器中启用了 NEC0 和单比特事件的中断通知。 发生不可纠正的 ECC 故障后,控制权转移到系统调用功能,此后直到我执行 RESET 后,软件才能运行。尽管我已经添加了 ERM_1_Hand ler ,但它没有被触发。对于单位错误, ERM_0_H andler 会被正确触发信号。 我该如何确保 ERM_1_Handler 在发生多位(不可纠正)ECC 错误时被调用? 另外,我想确认一下,多位错误(双位错误)是否总是表示出现了无法纠正的 ECC 故障? 发生不可纠正的 ECC 事件后,我需要在正常模式下在 ECU 中执行 RESET 运行 Re: NXP s32k312 SRAM MultibitError 你好,@Anitha7、 多位错误是什么意思? 64 位(8 字节)的数据有一个 8 位校验和,不可能检测到所有可能的 ECC 错误。有 ECC SECDED(单错误纠正,双错误检测)。 此致, 丹尼尔 Re: NXP s32k312 SRAM MultibitError 你好@丹尼尔-马蒂内克 VTOR 表仅在 SRAM0 注入无法纠正的 ECC 故障时指向闪存。 我根据您的参考示例代码将系统配置为 SRAM0。通过设置 SRO 寄存器中的相应位,可在发生不可纠正的 ECC 故障时自动恢复 ECC。 我在相应的 CR0 寄存器中启用了中断通知功能。 发生不可纠正的 ECC 故障后,控制权转移到系统调用功能,之后软件将无法运行,直到我执行 RESET。尽管我已经添加了 ERM_1_Handler,但它没有被触发信号。对于单位错误,ERM_0_Handler 会被正确触发。 我该如何确保在发生多位(不可修正)ECC 错误时调用ERM_1_Handler? 另外,我想确认一下,多位错误是否总是表示无法纠正的 ECC 故障? Re: NXP s32k312 SRAM MultibitError 你好,@Anitha7、 我更新了示例,在 SRAM0 中加入了不可纠正的错误注入。 https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-EIM-ERM-DTCM-SRAM-Baremetal-v3-0-S32DS36/ta-p/2193534 您能在应用程序中读取 VTOR 寄存器吗? 在内存中注入无法纠正的 ECC 故障时,中断向量表不得位于 SRAM0 中。 否则,ECC 故障会在获取过程中损坏矢量表,导致另一个故障异常。 此致, 丹尼尔
記事全体を表示
Kinetis 器件的复位引脚建议 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 嘿,Kinetis 爱好者们!我们 Kinetis 微控制器系统工程团队了解客户遇到的各种情况,但没有一种情况像复位引脚的处理那样特别麻烦。本文档的目的是提供我们在 Kinetis 系统工程部门收到的常见问题 (FAQ) 列表。这是一个动态列表,因此可能并不完整。然而,我们希望您发现以下问题和答案很有用。 问:我需要连接复位信号才能调试 Kinetis 设备吗? 这是一个常见的问题。严格来说,您不需要将 Kinetis 设备的设备复位线连接到调试连接器即可进行调试。调试端口 MDM-AP 寄存器允许通过仅使用 SWD_CLK 和 SWD_DIO 线设置系统复位请求位来使处理器保持复位状态。 但是,在决定从调试连接器中省略复位线之前,您应该仔细考虑这可能会如何影响在某些情况下对设备进行编程和调试的能力。 调试器/闪存编程器或外部调试器是否需要复位引脚?您使用的特定工具可能仅支持通过重置线重置设备,而不提供通过 MDM-AP 重置设备的功能。 您是否更改了调试信号的默认功能?您可能需要在应用程序中使用 SWD_CLK 和/或 SWD_DIO 信号来实现其他功能。对于低引脚数封装来说尤其如此。一旦功能发生变化(通过 PORTx_PCRy 寄存器),您将无法再通过这些信号访问 MDM-AP。如果您无法访问重置信号,那么您就无法阻止核心执行禁用引脚 SWD 功能的代码。因此您将无法重新编程该设备。为了防止这种情况,您需要: 设置您的代码以在复位释放几秒钟后更改 SWD 引脚的功能,以便调试器可以在发生这种情况之前停止核心。 在您的代码中放置某种“后门”机制,不会在这些引脚上重新编程 SWD 功能或重新启用 SWD 功能。例如,通过 UART 或 SPI 接口发送的特定字符序列。 一些 Kinetis 设备允许禁用复位引脚的复位功能。在这种情况下,您只能使用 SWD 信号作为通过 MDM-AP 重置设备的一种方式。如果您除了禁用复位引脚之外还更改了 SWD 引脚功能,那么如果您想对设备进行重新编程,就必须提供重新启用 SWD 功能的后门方法。 Kinetis硬件支持 Kinetis K系列MCU Kinetis L系列MCU Kinetis V系列MCU/单片机 Kinetis W系列MCU
記事全体を表示
SynGas OBD 节油器是否合法?真实的深度 SynGas 评论 2026 SynGas 评论:SynGas OBD Fuel Saver 是否合法?这是我在亲自测试之前的第一个问题。2026 年的油价依然居高不下,很多驾驶员都在寻找提高燃油效率的现实方法,而不需要昂贵的汽车改装或复杂的改装系统。 SynGas是一款简单的即插即用设备,可连接到车辆的OBD2端口,并声称通过根据实际驾驶习惯使用汽车的ECU来优化燃油消耗。它的有趣之处在于,它并不承诺立竿见影的神奇效果。取而代之的是,该设备在最初的 150 英里内会经历一个学习阶段,以便更好地了解加速、制动和整体驾驶模式,然后才能更有效地调整燃油优化。 点击此处查看 SynGas 的最新详情和官方信息 2026 年,节油技术已成为一个热门话题,因为人们正在积极寻找经济实惠的方法来降低交通成本。SynGas通过提供即插即用的方法来直接利用这一趋势,而不是昂贵的ECU调整或持续购买燃料添加剂。 那么,SynGas OBD 节油器是否合法? 根据研究、用户反馈和500英里后的真实驾驶观察,它似乎是真正的OBD2燃料优化设备,而不是另一个随机的互联网花招。然而,现实的期望很重要。这并不神奇,每辆车或每位驾驶员的结果也不尽相同。最大的价值似乎来自于长期的日常使用,尤其是对于通勤者和长时间在路上行驶的驾驶员来说。 点击此处查看 SynGas OBD 节油器的工作原理和当前供应情况:     Re: Is SynGas OBD Fuel Saver Legit? An Honest Depth SynGas Reviews 2026 您的问题似乎与恩智浦 QorIQ 系列(数字网络)处理器无关。 请在正确的社区区块中提交您的问题。
記事全体を表示
RT685: SDK 25.12 没有 HASHCRYPT 加速功能 你好 我们最近更新到了 SDK 25.12,发现我们的 TLS 解密率降低了一半。 mbedTLS v3.x 不再使用fsl_hashcrypt硬件加速功能。 下面是使用以前的 SDK 25.09 调用mbedtls_ssl_read 的调用堆栈。可以看到,最终使用了HASHCRYPT_AES_EncryptEcb。 hashcrypt_aes_one_block_aligned() at fsl_hashcrypt.c:437 hashcrypt_aes_one_block() at fsl_hashcrypt.c:581 HASHCRYPT_AES_EncryptEcb() at fsl_hashcrypt.c:1,284 mbedtls_internal_aes_encrypt() at aes_alt.c:1,959 mbedtls_aes_crypt_ecb() at aes_alt.c:1,323 aes_crypt_ecb_wrap() at cipher_wrap.c:114 mbedtls_cipher_update() at cipher.c:521 mbedtls_gcm_update() at gcm.c:358 mbedtls_gcm_crypt_and_tag() at gcm.c:456 mbedtls_gcm_auth_decrypt() at gcm.c:491 mbedtls_cipher_aead_decrypt() at cipher.c:1,407 mbedtls_cipher_auth_decrypt_ext() at cipher.c:1,613 mbedtls_ssl_decrypt_buf() at ssl_msg.c:1,242 ssl_prepare_record_content() at ssl_msg.c:3,667 ssl_get_next_record() at ssl_msg.c:4,551 mbedtls_ssl_read_record() at ssl_msg.c:3,817 mbedtls_ssl_read() at ssl_msg.c:5,237 <...more frames...> 下面是定义了MBEDTLS_USE_PSA_CRYPTO的 SDK 25.12 的调用堆栈。在该版本中,mbedtls_internal_aes_encrypt全部是 C 代码,没有硬件加速。 mbedtls_internal_aes_encrypt() at aes.c:894 mbedtls_aes_crypt_ecb() at aes.c:1,062 aes_crypt_ecb_wrap() at cipher_wrap.c:166 mbedtls_cipher_update() at cipher.c:611 gcm_mask() at gcm.c:546 mbedtls_gcm_update() at gcm.c:641 mbedtls_gcm_crypt_and_tag() at gcm.c:726 mbedtls_gcm_auth_decrypt() at gcm.c:753 mbedtls_psa_aead_decrypt() at psa_crypto_aead.c:270 psa_driver_wrapper_aead_decrypt() at psa_crypto_driver_wrappers.h:4,114 psa_aead_decrypt() at psa_crypto.c:5,023 mbedtls_ssl_decrypt_buf() at ssl_msg.c:1,625 ssl_prepare_record_content() at ssl_msg.c:4,093 ssl_get_next_record() at ssl_msg.c:5,068 mbedtls_ssl_read_record() at ssl_msg.c:4,323 mbedtls_ssl_read() at ssl_msg.c:5,983 <...more frames...> 下面是 SDK 25.12 的调用堆栈,其中没有mbedtls_use_psa_crypto定义的调用堆栈。在这个版本中, mbdtls_internal_aes_encrypt全部是 C 代码,没有硬件加速,也不涉及 PSA。 mbedtls_internal_aes_encrypt() at aes.c:899 mbedtls_aes_crypt_ecb() at aes.c:1,062 aes_crypt_ecb_wrap() at cipher_wrap.c:166 mbedtls_cipher_update() at cipher.c:611 gcm_mask() at gcm.c:546 mbedtls_gcm_update() at gcm.c:628 mbedtls_gcm_crypt_and_tag() at gcm.c:726 mbedtls_gcm_auth_decrypt() at gcm.c:753 mbedtls_cipher_aead_decrypt() at cipher.c:1,528 mbedtls_cipher_auth_decrypt_ext() at cipher.c:1,674 mbedtls_ssl_decrypt_buf() at ssl_msg.c:1,639 ssl_prepare_record_content() at ssl_msg.c:4,093 ssl_get_next_record() at ssl_msg.c:5,068 mbedtls_ssl_read_record() at ssl_msg.c:4,323 mbedtls_ssl_read() at ssl_msg.c:5,983 <...more frames...> 是否有计划在 mbedTLS 中恢复 RT685 HASHCRYPT 硬件加速?某些 PSA Crypto 驱动程序似乎未被执行。 谢谢! Re: RT685: SDK 25.12 no HASHCRYPT acceleration 嗨,埃德温、 我在 EVK 上重现了这个问题。我修改了两个样本,在其中添加了一个迭代 200 次的循环 mbedtls_gcm_self_test 并使用 RTC 时钟为整个执行过程计时。 evkmimxrt685_mbedtls_selftest_cm33 执行测试的时间为 1087ms 使用此调用栈: HASHCRYPT_AES_EncryptEcb() at fsl_hashcrypt.c:1,260 mbedtls_internal_aes_encrypt() at aes_alt.c:1,959 mbedtls_aes_crypt_ecb() at aes_alt.c:1,323 aes_crypt_ecb_wrap() at cipher_wrap.c:114 mbedtls_cipher_update() at cipher.c:521 mbedtls_gcm_starts() at gcm.c:294 mbedtls_gcm_crypt_and_tag() at gcm.c:452 mbedtls_gcm_self_test() at gcm.c:826 evkmimxrt685_mbedtls3x_psatest_cm33 执行测试的时间为 8990ms 使用此调用栈: mbedtls_internal_aes_encrypt() at aes.c:896 mbedtls_aes_crypt_ecb() at aes.c:1,062 aes_crypt_ecb_wrap() at cipher_wrap.c:166 mbedtls_cipher_update() at cipher.c:611 mbedtls_gcm_starts() at gcm.c:441 mbedtls_gcm_crypt_and_tag() at gcm.c:718 mbedtls_gcm_self_test() at gcm.c:1,075   evkmimxrt685_mbedtls3x_psatest_cm33 来自 SDK 25.12 的 mbedtls_psa_accel_key_type_aes 定义的测试执行时间为 8744ms 使用此 callstack: HASHCRYPT_AES_EncryptEcb() at fsl_hashcrypt.c:1,255 hashcrypt_cipher_encrypt() at mcux_psa_hashcrypt_common_cipher.c:187 psa_driver_wrapper_cipher_encrypt() at psa_crypto_driver_wrappers.h:2,353 psa_cipher_encrypt() at psa_crypto.c:4,766 mbedtls_block_cipher_encrypt() at block_cipher.c:177 mbedtls_gcm_starts() at gcm.c:439 mbedtls_gcm_crypt_and_tag() at gcm.c:718 mbedtls_gcm_self_test() at gcm.c:1,075 对示例的修改要点如下: BOARD_InitHardware(); test_rtc_init(); psa_crypto_init(); uint64_t ms_start = test_rtc_get_msecs(); for (int i = 0; i < 200; ++i) { PRINTF("test iteration %d\r\n", i+1); mbedtls_gcm_self_test(0); } uint64_t ms_end = test_rtc_get_msecs(); PRINTF("test time = %ums\r\n", (unsigned)(ms_end - ms_start)); ... 其中test_rtc_get_msecs使用亚秒精度返回当前 RTC 时间。 正如您所看到的,使用新的 SDK 加密 GCM/AES 的速度慢了约 8 倍。 如果您需要,我可以附上修改后的示例。 问候, Amilcar Re: RT685: SDK 25.12 no HASHCRYPT acceleration 嗨,埃德温, 我们已经阅读了迁移指南。不过,我们看不出不带 PSA 的 mbedTLS 2.x 或 mbedTLS 3.x 如何在此版本的 SDK 中进行硬件加速。由于 aes_alt.c 已被删除,而 HASHCRYPT 功能仅由 PSA 驱动程序支持。 我们的应用程序在使用 SDK 25.12 时一切正常,我们当然希望在连接时使用 TLS 1.3,但现在的情况会让我们的性能大打折扣。 我们将继续调查此事。我将修改其中一个示例,看看能否重现性能损失。 问候, Amilcar Re: RT685: SDK 25.12 no HASHCRYPT acceleration 你好,@hrc-amilcar、 感谢您耐心解答这个问题。我刚刚收到内部团队的回复,请参见下文。 从调用堆栈中我可以看到,您使用的是传统的 mbedtls_xxx 加密 API。事实上,它并没有加速。MbedTLS3.x推出了新的加密应用程序接口,它就是 PSA。mbedtls/docs/psa-transition.md at v3.6.5 - Mbed-TLS/mbedtls - GitHub而且它还被加速了。 MbedTLS4.x 进一步删除了传统加密 API。 我检查了 RT600 SDK 中的 psa_crypto_examples,通过定义PSA_CRYPTO_DRIVER_HASHCRYPT,HASHCRYPT硬件加速在默认情况下是启用的,这使得加密驱动程序封装器可以将加密计算卸载到硬件上。另一方面,MbedTLS3.x+ 更为复杂,也更符合 PSA API 规范,因此可能会出现某些用例性能较低的情况。对于 TLS,我认为非对称加密技术(CASPER 硬件 IP)会成为性能瓶颈,因为该 IP 只能支持少量加速,而且与 PSA API 不兼容,后者希望硬件 IP 实现整个算法。我们已尽全力至少加速了部分 ECC 操作(签名、验证),但其他操作(如 ECDHE 密钥交换过程中的密钥生成)可能会更糟。 现在,如果您能使用 PSA API 进行性能测量,并确认 PSA_CRYPTO_DRIVER_HASHCRYPT 已定义且调用栈使用了它,那将是一件好事。仅供参考:Hashcrypt本身没有提供AES-GCM加速,因此最好对AES-密码块链接(CBC)或AES-CTR进行基准测试,以查看硬件IP的实际收益。 BR, Edwin. Re: RT685: SDK 25.12 no HASHCRYPT acceleration 你好,@hrc-amilcar、 从mbedTLS 2.x(不含 PSA)迁移到 mbedTLS 3.x(含 PSA)必然会导致性能下降: " PSA 驱动程序接口仅部分实现。因此,编写驱动程序的交付内容以及将驱动程序与 Mbed TLS 集成的方法将根据所加速的操作而有所不同。"(https://mcuxpresso.nxp.com/mcuxsdk/latest/html/middleware/mbedtls3x/docs/psa-driver-example-and-guide.html) 目前,我所能推荐的最好方法是遵循如何正确从 2.x 迁移到 3.x 的指南:从 Mbed TLS 2.x 迁移到 Mbed TLS 3.0 - MCUXpresso SDK 文档 以及正确过渡到 PSA API 的指南:过渡到 PSA API - MCUXpresso SDK 文档 不便之处,敬请原谅。 BR, Edwin. Re: RT685: SDK 25.12 no HASHCRYPT acceleration 我在 mbedTLS 配置文件中定义了 MBEDTLS_PSA_ACCEL_KEY_TYPE_AES,现在它正在调用 ASHCRY PT,但是我们的 mbedtls_ssl_read 读取速度现在更慢了。我想知道是否还有其他缺失的定义,或者PSA层增加了额外的开销。   通过 TLS 插口从 WiFi 下载 4KB 数据包的速率: SDK 25.09:205KB/秒(没有 PSA 和 ksdk 端口文件的 mbedTLS 2.x) SDK 25.12:138KB/秒(不带 MBEDTLS_PSA_ACCEL_KEY_TYPE_AES) SDK 25.12:125KB/秒(使用 MBEDTLS_PSA_ACCEL_KEY_TYPE_AES 时) 下面是使用 MBEDTLS_PSA_ACCEL_KEY_TYPE_AES 的新调用栈: HASHCRYPT_AES_EncryptEcb() at fsl_hashcrypt.c:1,255 hashcrypt_cipher_encrypt() at mcux_psa_hashcrypt_common_cipher.c:203 psa_driver_wrapper_cipher_encrypt() at psa_crypto_driver_wrappers.h:2,353 psa_cipher_encrypt() at psa_crypto.c:4,766 mbedtls_block_cipher_encrypt() at block_cipher.c:177 gcm_mask() at gcm.c:543 mbedtls_gcm_update() at gcm.c:628 mbedtls_gcm_crypt_and_tag() at gcm.c:726 mbedtls_gcm_auth_decrypt() at gcm.c:753 mbedtls_psa_aead_decrypt() at psa_crypto_aead.c:270 psa_driver_wrapper_aead_decrypt() at psa_crypto_driver_wrappers.h:4,114 psa_aead_decrypt() at psa_crypto.c:5,023 mbedtls_ssl_decrypt_buf() at ssl_msg.c:1,625 ssl_prepare_record_content() at ssl_msg.c:4,093 ssl_get_next_record() at ssl_msg.c:5,068 mbedtls_ssl_read_record() at ssl_msg.c:4,323 mbedtls_ssl_read() at ssl_msg.c:5,983 <...more frames...> Re: RT685: SDK 25.12 no HASHCRYPT acceleration 你好,@hrc-amilcar、 更新 SDK 后,您是否做了任何更改?您在使用 SDK 示例代码时也看到了这种行为吗?你使用的是独立组网 \\(SA\\) IDE 还是 VS Code 扩展? BR, Edwin. Re: RT685: SDK 25.12 no HASHCRYPT acceleration 你好,@EdwinHz、 我们使用的是 MCUXpresso 集成开发环境。 更新 SDK 后无额外更改: 当我们更新 SDK 时,我们会重新运行 " SDK 管理 "-> " 刷新 SDK 元器件 " 来获取新的和更新的文件。 然后,我们比较 .cproject配置为已启用类似功能的样本之一(例如evkmimxrt685_wifi_wpa_supplicant_cm33) psa_crypto_driver_casper=1 psa_crypto_driver_hashcrypt=1 config_wpa_supp_crypto_mbedtls_psa=1 等等 我们使用默认的mcux_mbedtls_config.h作为主要的 mbedTLS 配置头文件,并使用与evkmimxrt685_wifi_wpa_supplicant_cm33示例中的wpa_supp_mbedtls_config .h几乎相同的用户配置文件。 我将尝试使用 mbedtls3x_examples,看看它们的表现如何。也许我们漏掉了一些定义。 我在浏览代码时注意到,也许需要定义MBEDTLS_BLOCK_CIPHER_C,以便加速 gcm 操作。 看起来头文件mbedtls3x/include/mbedtls/config_adjust_legacy_crypto.h对此负有责任,但由于某些原因最终没有定义该宏。 Re: RT685: SDK 25.12 no HASHCRYPT acceleration 为了他人的利益... 看来 来自 mbedTLS 3.x 的 mbedtls_xor 一次循环遍历 4 字节的数据,并调用 mbed tls_get_unaligned_uint32 和 mbedtls_put_unalign ed_uint32, 它们都使用 memcp y 来处理单个 uint32。 我认识到 MbedTLS 的作者正试图通过一次计算 异或 4 字节块(使用余数循环)来提高性能,但是对 memcpy 的完整调用实际上使代码变慢。 在对反汇编进行一些调查后,我发现我们的项目在编译时使用了 -fno-builtin,导致编译器无法内联小的 memcpys。 移除该选项后,HASHCRYPT 硬件不用于 AES-GCM 操作所造成的性能损失基本得以恢复。因此,我发布的示例执行时间从 8600 毫秒缩短到 2100 毫秒。还没有达到 mbedTLS 2.x + ksdk alt(1087ms)的水平。但修复后的性能已经足够好了。 -阿米尔卡
記事全体を表示
MPXV5004 Sensor Application question HI, I'm from a Commercial Glass & Dishwasher manufacture & we are looking at replacing our old diaphragm based pressure switches to the MPXV5004 pressure sensor with our control board, with reading the Datasheet it says: "Internal reliability and qualification test for dry air, and other media, are available from the factory. Contact the factory for information regarding media tolerance in your application". so my question is we can provide clean air to the sensor through an Air-Bell, but it wont be dry it will have around 60-70% humidity as we use hot water in the machines. will this affect the sensors reliability or longevity? If so, are there other sensors that could be used? or a recommended way that we could connect the tube from the Air-Bell to the pressure sensor?. Thanks Damien Pressure Sensors Re: MPXV5004 Sensor Application question Hello Damien, Thanks for using our community. You could protect the sensor using a high viscosity silicone. Please, take a look at the following thread: Re: 30% of MPXM2202GS failed within 2 months after installation -Josh
記事全体を表示
MMA9551 ファームウェアのアップグレードに失敗しました。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 私のボードには、mma9551 用のファームウェアがありません。これに基づいて、コマンドインタープリターを使用して、mma9551 に新しいバージョンをダウンロードします。フラッシュ保護解除モードに入った後、フラッシュを一括消去し、新しいバージョンでフラッシュを書き込みます。ただし、アップグレード プロセスは失敗します。書き込みフラッシュ応答エラー コードは 0xD0 です。リファレンスマニュアルを読んでみると、フラッシュにアクセスする権限がないことがわかりました。しかし、起動時にフラッシュ書き込みの失敗が発生しないのは非常に奇妙に思えます。いくつかのページの書き込みは成功しましたが、特定のページにアクセスする権限がないため、アップグレード プロセスが失敗しました。誰か何かアイデアを持っていますか? さらに奇妙なのは、ファームウェアを搭載した mma9551 を搭載したボードで新しいファームウェア バージョンをアップグレードする場合です。エラーもなく成功しました。 よろしくお願いします。 加速度センサ Re: MMA9551 upgrade firmware failed. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、レスリー。 MMA9551L ボードに適切な FW がまだフラッシュされていないことに驚きました。詳細を教えていただけますか。このボードは公式デモキット KITMMA9551LEVM からのものですか、それともテープとリールからのデバイスが搭載されているものですか。デバイス パッケージ上の完全なマーキングとは何ですか? MMA955xL デバイスには、それぞれのデフォルトの FW と一部のキャリブレーション パラメータが当社の生産ラインでロードされており、さらに、対応するフラッシュ セグメントが保護されていることに注意してください。 したがって、お客様が NXP 独自の FW のロードを処理することは推奨されません。 デバイスが最初から機能していなかった場合、デバイスを交換して、デフォルトの FW が適切にロードされなかった理由を調査できます。 よろしく、ジャック。
記事全体を表示
S32R45 SptEcsIsrCb エラー! アラームの原因を検索すると、「PDMA での AXI 読み取りエラー」が表示されます。このアラームが発生する原因は何でしょうか? SPT エラー キューがオーバーフローしました。最初の 10 件のエラーのみが報告されます。最後に実行されたカーネルを確認してください! SPT完了 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 SptEcsIsrCb エラー!、ステータス: 0x11005、エラー情報: 0x10000 RsdkSptRun が完了しました。SPT プロセッシングが完了しました。次のカーネルの準備ができました。 Re: S32R45 SptEcsIsrCb error! こんにちはピーター、 ご返信ありがとうございます。   あなたが挙げた理由に従い、私は特に以下の点に重点を置いてコードを注意深くチェックしました。   WR_5、問題は見つかりませんでした。さらに、SPT カーネル コードは変更していません。   コード初期リスト:   AppMemAllocBuffer ( pHeapMem 、 & gSdadcSampleBufferBufH [インデックス]、 sizeof ( uint16_t ) * RSDK_SPT_RANGE512_4CH_IN_BUF_SIZE 、                           RSDK_SPT_DATA_ADDR_ALIGN_BYTES 、 RSDK_OALMEM_CHUNK_ID_CBRAM );   RelocSptCode ( gSptModuleCodeRelocBufH . virtAddr 、 RsdkSptRange512smp128crp4ch 、 RSDK_SPT_GET_KERNEL_SIZE ( RsdkSptRange512smp128crp4ch ));   np = 0 ; sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ; sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ) gSdadcSampleBufferBufH [ 0 ]。 phyAddr ;   sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ; sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ) gRadarCubeResultsBufH 。 phyAddr ;   sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ; sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ( gFft512TwiddleFactorsBufH . phyAddr );    sprintf (ファイル名、 " %s% s " 、 FILE_IN_PATH 、 "fft512_twiddle_factors.dat" ); /* RSDKデータは、PPCアーキテクチャとの互換性のため、ビッグエンディアン形式でファイルに保存されます。エンディアンの変換は、ファイルへのデータの読み書き時にのみ行われます。プロセッシングフロー内での変換は必要ありません。*/   DbgReadFileConvert ( fileName 、 0 、 ( char * ) gFft512TwiddleFactorsBufH . virtAddr 、 gFft512TwiddleFactorsBufH . numBytes 、 ENDIAN_CHANGE 、 DATA_BUFF_IS_CACHED );           sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_ADDR ; sptContext 。 kernelParList [ np ++ ]。 paramValue = ( uintptr_t ) gFft512BlackmanWindowBufH 。 phyAddr ;   sprintf (ファイル名、 " %s% s " 、 FILE_IN_PATH 、 "fft512_win_blackman.dat" ); DbgReadFileConvert ( fileName 、 0 、 ( char * ) gFft512BlackmanWindowBufH . virtAddr 、 gFft512BlackmanWindowBufH . numBytes 、 ENDIAN_CHANGE 、 DATA_BUFF_IS_CACHED );   sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_VALUE ; sptContext . kernelParList [ np ++ ]. paramValue = 3 ; /* 出力シフトなし */ sptContext . kernelParList [ np ]. paramType= RSDK_SPT_PARAM_TYPE_LAST ;   印刷リスト: gSptModuleCodeRelocBufH.phyAddr: 0x34000000 gSdadcSampleBufferBufH[0].phyAddr: 0x28000000 gSdadcSampleBufferBufH[1].phyAddr: 0x28003000 gSdadcSampleBufferBufH[2].phyAddr: 0x28006000 gSdadcSampleBufferBufH[3].phyAddr: 0x28009000 gRadarCubeResultsBufH.phyAddr: 0x34002000 gFft512TwiddleFactorsBufH.phyAddr: 0x340bd000 gFft512BlackmanWindowBufH.phyAddr: 0x340bf000 Re: S32R45 SptEcsIsrCb error! こんにちは、 考えられる原因は次のとおりです: 1. SPT入力とS32DS入力の不一致 SPT カーネル入力が予期された S32DS 構成と一致しませんでした。 PDMA は、SPT カーネルの構成によって決定されたアドレスでメモリを読み取ります。バッファ サイズ、キューブ ベース アドレス、またはチャネル カウントが揃っていない場合、PDMA は無効または予期しないメモリ位置を読み取ろうとする可能性があります → AXI 読み取りエラー。   2. 作業レジスタ(WR_x)の設定が正しくないか破損している PDMA が無効または誤って構成されたバッファを指す作業レジスタを使用する場合、AXI ファブリックは不正な読み取り要求を受信し、バス エラーをトリガーします。 https://community.nxp.com/t5/Other-NXP-Products/SPT3-1-1024-128-16range-don-t-work/mp/1621567   3. 同期PDMA実行モードと非同期PDMA実行モード .sync → .async .syncでモードでは、PDMA は誤った構成 (バッファ ポインタ、依存関係など) により満たされない可能性のある条件を待機します。 これにより、エラー フラグが蓄積され、PDMA エンジンが無効な読み取りを繰り返し試行すると AXI エラーが発生する可能性があります。   4. データ幅またはフォーマットが間違っている(例:WR_16とWR_11) PDMA が 16 ビットの複合データを期待しているが、ターゲット レジスタ/バッファが異なる幅/レイアウトに設定されている場合、AXI 読み取りバーストが不整合になる可能性があり、プロトコル エラー → AXI 読み取りエラーが発生します。   5. AXIプロトコルレベルのエラー(一般的な原因) S32R45 に固有のものではありませんが、AXI 読み取りエラー メカニズムは普遍的に適用されます。 バースト長またはサイズが無効です マップされていないアドレスまたは保護されたアドレスからの読み取りの試み スレーブタイムアウトまたは応答しないターゲット アップストリームの問題による読み取り応答エラー(SLVERR または DECERR) PDMA が不正な AXI トランザクションを生成すると、AXI インターコネクトは SLVERR を返します。これは PDMA 読み取りエラーとして表示されます。 あなたのケースで最も可能性の高い原因 両方のログに基づくと、主な容疑者は次のとおりです。 間違ったWR_xレジスタ(特にWR_5 / WR_16の選択) 非常に一般的には誤って構成され、無効な AXI 読み取りにつながります。 SPTカーネル入力とS32DS入力の不一致 以前のケースでは、見落とされ、根本原因として検証されることがよくあります。 PDMA同期モードが依存関係のデッドロックを引き起こす .syncを切り替えてみる→ .asyncデバッグ用。 よろしくお願いいたします。 ピーター     Re: S32R45 SptEcsIsrCb error! こんにちはピーター、 レーダー フロントエンドの波形サンプリング ポイントの数を 2 倍にすると、エラーは発生しなくなりましたが、チャープ バッファのサイズは変更されていません。問題をさらに分析するのにご協力ください。どうもありがとうございます。 Re: S32R45 SptEcsIsrCb error! こんにちは、 シナリオにおける最も可能性の高い根本原因: カーネルの予想されるチャープピッチと実際のバッファレイアウト間のストライド/アライメントの不一致 - サンプルを 2 倍にするとバーストサイズが揃い、バグがマスクされます。 WR_x 選択 / データ幅の不一致 (実数 vs 複素数、16 ビット vs その他)。サンプル数が変化すると偶然に修正されます。 kernelParList 内のパラメータ順序/タイプの混同 (ADDR と VALUE) が、特定のサイズの場合にのみ発生します。ミラー スレッドには同様のパラメータ シーケンスが示されており、インデックスをスリップするのは簡単です。 WR 24ビットオフセットエッジは、2倍にすると異なるパッキング/レイアウトで消えます。 よろしくお願いいたします。 ピーター
記事全体を表示
install and updating the SDK for the S32K144 MCU I have installed the S32 Design Studio to create project from the SDK example for the S32K144 MCU i am not able to found the SDK folder to configure the example project i have installed the SDK for the S32 K144 Device below i have share my problem regarding images please refer  thank you in advance  Re: install and updating the SDK for the S32K144 MCU Hi Please install the other two packages, then you will find the S32K1 RTD. I remember that previously, I only needed to select one of them, and the S32K1 RTD-related dependency packages would be installed automatically. Please note that during the Christmas holiday period, our support response times may be longer than usual. In some cases, your request might be addressed after the New Year. Thank you for your understanding. Best Regards, Robin ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "ACCEPT AS SOLUTION" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. -------------------------------------------------------------------------------
記事全体を表示
i.MX RT1042 - 使用 lwIP 时 DTC RAM 溢出,将数据移至 OCRAM 后 DHCP 失败 你好,恩智浦社区、 我正在使用 MCUXpresso SDK 在 i.MX RT1042(Cortex-M7)上开发固件。我的应用程序由多个模块组成,我使用 lwIP 与以太网连接,并启用了 ping 功能。 初始问题 - DTC RAM 溢出 启用 lwIP 后,我发现即使其他内存区域未使用,DTC RAM 也会溢出。以下是该配置的内存使用情况: 内存区域 已用大小 区域大小%已用年龄 ------------------------------------------------------- BOARD_FLASH: 223652 B 8 MB 2.67% Sram_DTC: 141580 B 128 KB 108.02% sram_itc: 0 b 128 kb 0.00% sram_oc: 0 b 256 kb 0.00% board_sdram: 0 b 30 mb 0.00% ncache_region: 0 b 2 mb 0.00% 现阶段,我还需要添加更多的应用模块,但 DTC RAM 已经满了。 尝试的解决方案 - 将数据移至 OCRAM 为了减少 DTC RAM 的使用,我更改了全局数据放置配置,并修改了链接器脚本,将以下部分移入 OCRAM: *(DataQuickAccess) *(NonCacheable.init) *(不可缓存) 更改后,内存映射如下所示: 内存区域 已用大小 区域大小%已用年龄 ------------------------------------------------------- BOARD_FLASH: 223652 B 8 MB 2.67% Sram_DTC: 8KB 128KB 6.25% sram_itc: 0 b 128 kb 0.00% Sram_OC: 133388 B 256 KB 50.88% board_sdram: 0 b 30 mb 0.00% ncache_region: 0 b 2 mb 0.00% 在这种配置下,大多数模块都能正常工作,但 DHCP 无法获取 IP 地址,而以太网链接却能启动,应用程序的其他部分也能继续运行。 问题 对于使用 lwIP + 以太网的应用,在 i.MX RT1042 上处理高 DTC RAM 使用率的建议和正确方法是什么? 如何决定哪些数据或模块应存放在......? DTC RAM ITC RAM OCRAM NCACHE 地区 SDRAM 具体到 lwIP,哪些数据结构(pbufs、heap、netif、DMA 缓冲区、堆栈)必须保留在 DTC 或非高速缓存内存中才能正确运行? 将 lwIP 数据移至 OCRAM 时,DHCP 故障是否与高速缓存一致性、MPU 设置、对齐或非高速缓存要求有关? 如有任何指导、最佳实践或参考示例,将不胜感激。 顺祝商祺! i.MX RT105x Re: i.MX RT1042 – DTC RAM overflow with lwIP, DHCP fails after moving data to OCRAM 你好@Dkakadia、 感谢您对 NXP MIMXRT 系列的关注! DHCP 故障问题很可能与缓存一致性有关。在启用了数据缓存的情况下使用以太网 DMA 时,需要缓存一致性管理。对于 lwIP,当使用 OCRAM 作为主 RAM 时,建议将关键数据结构放在 SRAM_DTC 或其他非高速缓存区域。 您可以参考这位客户的帖子: https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/Problem-with-sample-lwip-and-OCRAM/td-p/985330 此外,您可以考虑配置 FlexRAM 以增加 DTCM 空间,而不是将所有内容直接传输到 OCRAM。请参阅此 AN: https://www.nxp.com/docs/en/application-note/AN12077.pdf 致以最诚挚的问候, Gavin Re: i.MX RT1042 – DTC RAM overflow with lwIP, DHCP fails after moving data to OCRAM 你好@Gavin_Jia 感谢您的回复和分享参考。 根据您的建议,我检查了缓存一致性方面的问题,并相应地更新了内存位置。有了这些更改,以太网 + lwIP 协议栈(包括 DHCP)现在可以正常工作了。 在我当前的产品设计中,未填充外部同步动态随机存取存储器(SDRAM),因此我从项目中移除了所有同步动态随机存取存储器(SDRAM)依赖关系。目前,我已在 OCRAM 中声明了 NCACHE 区域,并小心翼翼地将以太网 DMA 相关缓冲区和 lwIP 关键数据结构放入不可缓存内存中。 但是,随着我继续集成其他模块,我再次开始面临内存压力,主要是在内部 RAM 区域。该应用程序现在包括多个外围设备和中间件,例如: lwIP + 以太网、FlexPWM、SPI、UART、I2C 其他特定应用模块 由此,我想到了几个后续问题: 在使用以太网 + LwIP 和多个外设驱动器的 i.MX RT1042 上运行中等复杂的应用程序,实际上是否需要包括外部同步动态随机存取存储器(SDRAM),还是应该在仔细放置的情况下完全从内部存储器运行这样的应用程序? 在内存分区、缓存配置或 FlexRAM 配置方面,我是否可能遗漏了重要步骤或最佳实践,从而无法进一步优化内部内存的使用? 在非 SDRAM 设计中,推荐的长期策略是什么: 扩展应用功能 管理 lwIP 缓冲区、堆和任务栈 在添加更多模块时防止内存反复溢出 如果不使用同步动态随机存取存储器(SDRAM),这是否是预期的限制,或者是否建议进一步优化,任何指导都将非常有帮助。 再次感谢您的支持和真知灼见。 致以最诚挚的问候, Daksh Re: i.MX RT1042 – DTC RAM overflow with lwIP, DHCP fails after moving data to OCRAM 此外,当增加任何一个 DTCM/ITCM/OCRAM 超过 128KB 时,都会导致代码出现硬故障,文件中提到可以为任何部分分配更多大小,但要注意总大小,即 512KB。 Re: i.MX RT1042 – DTC RAM overflow with lwIP, DHCP fails after moving data to OCRAM "此外,您可以考虑配置 FlexRAM 以增加 DTCM 空间,而不是将所有内容直接传输到 OCRAM。请参阅此 AN: https://www.nxp.com/docs/en/application-note/AN12077.pdf" 该文件提到 ITCM 或 DTCM 可以配置为 0 KB(另见表 1 中显示的可能静态配置)。 但是,当我将 DTCM 配置为 0 而不增加/增加 ITCM 时,应用程序会崩溃。
記事全体を表示
S32 Design Studio 3.6.5 Release Announcement Product Release Announcement Analog & Automotive Embedded Systems S32 Design Studio 3.6.5 The Analog & Automotive Embedded Systems (AAES) - Software Development Tools Engineering Team at NXP Semiconductors is pleased to announce the release of the S32 Design Studio 3.6.5 with support for: AMCU AP RAS APN S32K3 Family S32G Family S32R41 Family S32J Family S32K1 Family S32ZE Family S32R45 Family   S32M2 Family S32N Family S32R47 Family       SAF8xxx Family   Major Features for S32 Design Studio 3.6.5 Installer S32 Design Studio 3.6.5 is delivered with all public NPI's in a single 2.63GB installer to improve first time user experience. Additional packages for alpha customers are available based on Flexera entitlement and can be installed on top of S32 Design Studio 3.6.5 using Extension and Updates.   Installer will require admin rights only when the user chooses to install components which need elevation (Visual Studio Redistributable or debugger drivers). If a user chooses a custom installation only with S32DS IDE and its components (no drivers) the installation will finish without admin rights. Platform IDE and UI Integrated Cody, the open-source Eclipse plugin from Sourcegraph, into S32 Design Studio. This plugin is installed by default, allowing users with a valid Cody license to log in directly within S32DS and access Generative AI features. Note: Users must agree to the Sourcegraph Terms of Service before using Cody. Enabled integration with the NXP Application Code Hub, allowing users to browse available examples and import them directly from the hub page into S32 Design Studio. Note: the application examples will be published soon on the Application Code Hub URL. Note: This image is taken from internal sources. The illustrated examples are currently under development and will be available soon. Extended the Quick Fix mechanism for the missing NPI and Real Time Drivers packages. Basically, an error message displays in the Problems view whenever the IDE identifies a missing package (build tool, NPI, RTD) associated with the current project. The Quick Fix automatically installs the missing package if it is available in the configured Update Sites. Note: not all scenarios are covered, there may be cases where the tool cannot determine if a package is missing. A new Recent tab has been added in S32DS Extensions and Updates to display the latest installed packages, providing a clear history of user actions related to package installations. In addition, the default sorting was changed in All tab to bring greater visibility to NXP packages. Added support for drag-and-drop of S32 Design Studio p2 update sites / installable packages into the S32DS Extensions & Updates window. Users can now simply drag the ZIP file into the window, and the package will be automatically inserted and selected, requiring only a click on Next to complete the installation. Significant improvements to Secure Debugging:  Added a dedicated Debug Card view that allows users to generate debug card binaries based on custom input. Implemented Challenge & Response functionality for Linux environment.  Enabled Secure Registry Key view for managing secure registry keys on Linux.  UI is aligned to the secure debugging functionality latest changes introduced by HSE2. Extended the S32 Debugger OS awareness support with FreeRTOS. OS threads are now visible in S32 Design Studio and user will be able to individually debug them. Extended the command line support to display OS threads and objects. Enable debug in low power mode with S32 Debugger for S32K3xx devices:  The debug session will recover after core exits low power or standby mode, allowing the user to continue application debugging. Debugging from the first instruction after low power exit is now possible by using this configuration command when starting the debug session: monitor template config :ccs:S32K3XX:SoC#0 6 1 Expanded the S32Trace debug-info parser to fully support DWARF-5, adding compatibility with projects using GCC 11.4 and newer. Major Features for NPIs S32N Family S32Flash Programmer improvements for erase and verify write operations on S32N5. S32G2/G3, S32J100, and SAF8xxx Families S32J100 development package is now public and delivered inside S32DS installer. Enabled debugging support for S32G2 devices on VDK R10. S32Flash Programmer enhancements for erase and verify write operations. Various bug fixes and improvements for arm cores and accelerators. This release is available for download on: S32 Design Studio 3.6.5 can be found on  nxp.com  Flexera catalogue S32 Design Studio for S32 Platform v.3.6 Target Audience: S32 Design Studio 3.6.5 and bundled NPIs releases are targeted for public audience. The Installation Procedure for Packages: Download S32 Design Studio v3.6.5, available on nxp.com and in Flexera catalogue S32 Design Studio for S32 Platform v.3.6. If you have any local admin restrictions(ex. Admin by Request) the installer will request elevation, alternatively you can use “Run as Administrator” to run the installer. Download any additional packages if it’s required. Start S32 Design Studio v3.6.5 and install the desired package. Go to  Help > S32DS Extensions and Updates. For additional packages, in the S32DS Extensions and Updates dialog box, drag the ZIP file into the window, and the package will be automatically inserted and selected, requiring only a click on Next to complete the installation, or click Add Update Sites. Navigate to the directory with the downloaded ZIP file. Choose it and click Open, then click OK. You will get back to S32DS Extensions and Updates and can use this dialog to select desired packages.​​ Technical Support: Please use the public community for general questions: https://community.nxp.com/community/s32/s32ds For internal packages please use INTERNAL S32DS NXP Community space:https://community.nxp.com/groups/internals32ds
記事全体を表示
K344 中心点対 PWM 中心点起動 ADC BCTU サンプリング https://community.nxp.com/t5/S32K-Knowledge-Base/RTD400-K344-Center-Aligned-PWM-Trigger-ADC-BCTU/ta-p/2034211に基づき、BCTU ウォーターマークをトリガーするのに 3 つの BCTU トリガー割り込みが必要な理由を知りたいです。割り込みを 1 回だけトリガーし、その後、割り込み内で PWM 周期の変更、ADC 値の読み取りなどを実行したいと考えています。EB MCAL 開発に基づいて、同じ機能を実現するための優れたソリューションやサンプルルーチンは何ですか? Re: K344中心对齐PWM中心点触发ADC BCTU采样 当社製品にご興味をお持ちいただき、また当社コミュニティに貢献していただき、ありがとうございます。 投稿に直接返信して、投稿の所有者からのフィードバックを得ることができます。 一方、単一の BCTU トリガーを使用した別のアプローチを参照することもできます。 S32M27x/S32K3 – eMIOS/BTCU/ADC/DMA – [RTD600] -> https://community.nxp.com/t5/S32M-Knowledge-Base/S32M27x-S32K3-eMIOS-BTCU-ADC-DMA-RTD600/ta-p/2155542 MCAL 実装については、ハードウェア抽象化レイヤーのADC から PWM の例を参照してください。 S32K3ページへ移動-> 設計リソース -> ソフトウェア -> S32K3リファレンスソフトウェア -> オートモーティブソフトウェア - S32K3 - ハードウェア抽象化レイヤー -> S32K3 HAL統合例 2025.07 次の ADC トリガーを実行します。 同時に、キャプチャされた ADC 値に応じてデューティ サイクルを更新します。 この情報が役に立つことを願います。 Re: K344中心对齐PWM中心点触发ADC BCTU采样 解決策をありがとうございます。複数のトリガー中断が発生する理由と、そのような中断を回避する方法を知りたいです。または、設定によってこの割り込みソースを無効にすることは可能ですか? Re: K344中心对齐PWM中心点触发ADC BCTU采样 こんにちは、 BCTU トリガー通知が有効になっている場合、BCTU が ADC をトリガーしたときに呼び出されます。例では、BCTU CL に 3 つの項目が含まれているため、ADC は入力 (eMIOS) トリガーごとに 3 回トリガーされます。 この通知を無効にするには、トリガー通知オプションに NULL を設定します。 BR、ペトル
記事全体を表示
i.MX6ULLのセカンダリブートがリセット後にハングする 私はeMMCを搭載したi.MX6ULLを持っており、AN13872ガイドのセクション13.2.2に従ってセカンダリブートをテストしようとしています。「セカンダリ ブートを使用したブート イメージの作成」 。 次のコマンドを使用してヘッダーを作成しました。 dd if=/dev/zero of=./header.bin bs=1K count=1 次に、 hexeditツールを使用して、オフセット0x208を0x00112233に変更し、 0x20Cを0に設定して、元の U-Boot がテスト目的でセカンダリ ブート イメージとして起動するSOにしました。 これは 16 進ダンプです: $ hexdump -C header.bin 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000200 00 00 00 00 00 00 00 00 33 22 11 00 00 00 00 00 |........3"......| 00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 次に、ヘッダーをシステムの U-Boot と連結しました。 cat header.bin u-boot-tagged.imx > u-boot-primary-secondary.imx 結果のファイルを SCP 経由でボードにコピーしました。 最後に、i.MX6 内部から、次のコマンドを使用してイメージを eMMC にフラッシュしました。 root@imx6ull:~# dd if=./u-boot-primary-secondary.imx of=/dev/mmcblk1 bs=512 skip=1 seek=1 結果の 16 進ダンプは次のとおりです。 root@imx6ull:~# hexdump -C /dev/mmcblk1 -n 1088 00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 2a 4a 6c 07 00 00 80 00 |........*Jl.....| 000001c0 01 40 0c 03 42 9f 00 20 00 00 e2 af 00 00 00 00 |[email protected].. ........| 000001d0 41 c0 83 03 e0 ff 00 e0 00 00 3e 70 1a 00 00 00 |A.........>p....| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 00 00 00 00 00 00 00 00 33 22 11 00 00 00 00 00 |........3"......| 00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00000410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00000420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 f0 40 |...............@| 00000430 cc 01 ec 04 02 0c 40 04 00 00 00 00 02 0c 40 68 |......@.......@h| 00000440 13.2.3節で説明したように、U-Bootからのセカンダリブートをテストするコマンドを実行すると、次のような結果が出ます: Hit any key to stop autoboot: 0 => mw.l 20D8044 40000000 => md.l 20D8044 1 020d8044: 40000000 ...@ => reset resetting ... しかし、この時点でシステムはハングします。 同じ U-Boot を 2 回連結し、それに応じてオフセット0x20Cの値を調整してみましたが、結果は変わりませんでした。これはこのテストの結果の 16 進ダンプです。 user@machine:~/linux-maker$ hexdump -C swu_singlecopy_rescue_imx6ull_emmc_20251128.sdcard -n 1072 00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 4e 58 99 cc 00 00 00 03 |........NX......| 000001c0 e0 ff 0c 03 e0 ff 00 20 03 00 00 c0 03 00 00 03 |....... ........| 000001d0 e0 ff 83 03 e0 ff 00 e0 06 00 00 40 1f 00 00 00 |...........@....| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 00 00 00 00 00 00 00 00 33 22 11 00 00 20 00 00 |........3"... ..| 00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00000410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00000420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 e8 40 |...............@| 00000430 user@machine:~/linux-maker$ hexdump -C swu_singlecopy_rescue_imx6ull_emmc_20251128.sdcard -n 1072 -s 0x400000 00400000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00400400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00400410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00400420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 e8 40 |...............@| 00400430 以下の投稿を検索して読みました。 https://community.nxp.com/t5/i-MX-Processors/iMX6SX-Redundant-Boot/mp/715959 https://community.nxp.com/t5/i-MX-Security/Secondary-Redundant-boot-in-i-MX-6-7-8M-Family-of-Applica... https://community.nxp.com/t5/i-MX-Security/BootROM-HABv4-Redundant-boot-support-is-not-triggered-whe... しかし、解決策は見つかりませんでした。 何が間違っているのでしょうか? Re: Secondary Boot on i.MX6ULL Hangs After Reset さらにいくつかのテストを実行したところ、i.MX6ULL が mmcblk1boot0 をプライマリ ブート パーティションとして使用していることがわかりました。実際、このパーティションを破損させようとすると、システムは起動に失敗します。 パーティションの内容は次のとおりです。 root@imx6ull:~# hexdump -C /dev/mmcblk1boot0 -n 4096 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 d1 00 20 40 00 00 80 87 00 00 00 00 2c f4 7f 87 |.. @........,...| 00000410 20 f4 7f 87 00 f4 7f 87 00 00 00 00 00 00 00 00 | ...............| 00000420 00 f0 7f 87 00 f0 09 00 00 00 00 00 d2 01 e8 40 |...............@| 00000430 cc 01 e4 04 02 0c 40 68 ff ff ff ff 02 0c 40 6c |......@h......@l| 00000440 ff ff ff ff 02 0c 40 70 ff ff ff ff 02 0c 40 74 |......@p......@t| 00000450 ff ff ff ff 02 0c 40 78 ff ff ff ff 02 0c 40 7c |......@x......@|| 00000460 ff ff ff ff 02 0c 40 80 ff ff ff ff 02 0e 04 b4 |......@.........| 00000470 00 0c 00 00 02 0e 04 ac 00 00 00 00 02 0e 02 7c |...............|| 00000480 00 00 00 30 02 0e 02 50 00 00 00 30 02 0e 02 4c |...0...P...0...L| 00000490 00 00 00 30 02 0e 04 90 00 00 00 30 02 0e 02 88 |...0.......0....| この領域にセカンダリベクターテーブル (SVT) を書き込もうとすると、システムが起動しなくなります。SO、SVT はどこに記述すればよいのでしょうか? 私はいつも uuu を使用してシステムをフラッシュしてきました。特に、イメージ全体をフラッシュする必要がある場合は、次のようにします。 uuu -b emmc_all U-Boot のみを更新する必要がある場合は、次のようにします。 uuu -b emmc mmcblk1boot0 パーティションを作成して書き込むのは uuu だと思います。ブート手順の他の部分も変更されている可能性がありますか? Re: Secondary Boot on i.MX6ULL Hangs After Reset あなたの説明と投稿された画像に基づくと、eMMC ユーザー パーティションが破損していますが、システムは引き続き起動できます。これは、i.MX6ULL のセカンダリ ブートに eMMC ブート パーティション (boot1 または boot 2) を使用していることを示します。専用のブート パーティションが必要な場合は、準備したイメージをそこに書き込む必要があります。もちろん、eMMC ブート パーティションは十分な大きさである必要があります。あるいは、Linux の u-boot コマンドまたは mmc ツールを使用して、ブート パーティションをユーザー パーティションに切り替えることもできます。 こちらはセカンダリブート用のコレクションです。 https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/iMX-secondary-boot-collection/ta-p/1916915 https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8MM-SDCARD-Secondary-Boot-Demo/ta-p/1500011で Windows と Linux の両方で実行できるスクリプトがあり、セカンダリ ブート イメージの作成に役立ちます。 試してみましたが、とても良いです。 soc_name: imx6(imx6ファミリ全体)、imx8mq、imx8mm Re: Secondary Boot on i.MX6ULL Hangs After Reset 奇妙なことに気付きました。次のコマンドでプライマリ イメージの IVT を破損させようとすると、 sudo dd if=/dev/zero of=/dev/mmcblk1 bs=1 seek=1024 count=32 && sync‍‍‍‍‍‍‍‍‍‍ セカンダリ U-Boot がなくてもシステムは起動します。 私が持っている mmc パーティションは次のとおりです。 root@imx6ull:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk1 179:0 0 58.2G 0 disk |-mmcblk1p1 179:1 0 120M 0 part /boot `-mmcblk1p2 179:2 0 1000M 0 part / mmcblk1boot0 179:8 0 4M 1 disk mmcblk1boot1 179:16 0 4M 1 disk U-Boot バイナリも mmcblk1boot0 に書き込まれているようです。 システムが実際に mmcblk1boot0 に保存されている U-Boot を使用していて、そこに SIT とセカンダリ U-Boot を書き込む必要がある可能性はありますか? @Bio_TICFSL 、この点について明確にしていただけますか? Re: Secondary Boot on i.MX6ULL Hangs After Reset 16 進ダンプを見ると、オフセット 0x208 を 0x00112233 に変更し、0x20C を 0 に設定していることがわかりますが、firstSectorNumber フィールドが正しくない可能性があります。このフィールドは、セカンダリ イメージが始まるセクターを指す必要があります。 このテストでは、手順全体を検証するために、プライマリ U-Boot をセカンダリ U-Boot として使用しようとしていたため、 firstSectorNumber を0 に設定しました。 私の投稿の最後の 16 進ダンプでは、代わりに 2 つの異なる U-Boot イメージ (プライマリとセカンダリ) を使用して、より標準的なテストを実行しました。そのCASE、 firstSectorNumberは0x2000に設定されました。これは、セカンダリ U-Boot が実際に始まるオフセットに対応します: 0x2000 * 512 (つまり、ブロック サイズ) + 1024 (つまり、MBR サイズ) = 0x400400 、投稿したリンクで説明されているとおりですが、システムはリセット後もハングしたままになります。 何か見逃しているのでしょうか? Ps: あなたが投稿したこのコマンドは imx8 専用であり、imx6 には対応していないと思います。 mw.l 0x30390098 0x40000000 Re: Secondary Boot on i.MX6ULL Hangs After Reset Hello この問題は、セカンダリ イメージ テーブル (SIT) 構成に関係しているようです。eMMC を使用して i.MX6ULL の冗長ブートを実装する場合、SIT の firstSectorNumber フィールドをプライマリ ブート イメージのサイズに応じて正しく設定する必要があります。 適切なセカンダリブートの実装: 1. SIT に以下の重要な値があることを確認します。 - タグ = 0x00112233 (正しく設定されています) - firstSectorNumber = プライマリイメージのアラインサイズ/512バイト - すべての予約フィールドが適切に設定されていることを確認する 2. セカンダリ イメージが 0x1000 境界でプライマリ イメージの後に正しく配置されていることを確認します。 3.イメージをフラッシュした後、次のコマンドを使用して PERSIST_SECONDARY_BOOT フラグを設定します。 「」 mw.l 0x30390098 0x40000000 「」 16 進ダンプを見ると、オフセット 0x208 を 0x00112233 に変更し、0x20C を 0 に設定していることがわかりますが、firstSectorNumber フィールドが正しくない可能性があります。このフィールドは、セカンダリ イメージが始まるセクターを指す必要があります。 プライマリ U-Boot イメージのサイズ (適切に調整) に基づいて firstSectorNumber を再計算し、セカンダリ ブート イメージが正しいオフセットに配置されていることを確認してください。セカンダリ イメージは、プライマリ イメージが終了した後のセクター境界から開始する必要があります。 冗長ブートの実装に関する詳細は、次のコミュニティドキュメントを参照してください。 https://community.nxp.com/t5/i-MX-Security/Secondary-Redundant-boot-in-i-MX-6-7-8M-Family-of-Application/ta-p/1117103 よろしくお願いします。 Re: Secondary Boot on i.MX6ULL Hangs After Reset   前述したように、セカンダリ ブートは使用パーティションだけでなくブート パーティションでも機能する必要があります。   eMMC ブート パーティションが十分な大きさの場合は、次の 2 つのコマンドを試して、セカンダリ ブートの flash.bin (flash_secondary_boot.bin) をブート パーティションに書き込むことができます。   uuu emmc uuu emmc [flash_secondary_boot.bin] 注: ここでのflash.binは通常使用するプライマリブートイメージのみです。uuuヘルプを確認してください。 uuu [-d -m -v -bmap -no-bmap] -b[run] arg... Run Built-in scripts emmc burn boot loader to eMMC boot partition arg0: _flash.bin bootloader arg1: _image[Optional] image burn to emmc, default is the same as bootloader   前に提供したリンクのスクリプトを使用して、セカンダリ ブート イメージを作成CAN。   プライマリ イメージを完全にゼロで構成されたファイルに置き換えることで、プライマリ イメージの破損をシミュレートCANできます。   https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8MM-SDCARD-Secondary-Boot-Demo/ta-p/ ...   https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/iMX-secondary-boot-collection/ta-p/19169 ... Re: Secondary Boot on i.MX6ULL Hangs After Reset @kawateb265 さんのご回答のおかげで、ようやく問題を解決できました。imx6 は boot0 パーティションから起動していました。ユーザー パーティションから起動するには、u-boot で次のコマンドを実行する必要がありました。 => mmc partconf 1 1 7 0 EXT_CSD[179], PARTITION_CONFIG: BOOT_ACK: 0x1 BOOT_PARTITION_ENABLE: 0x7 PARTITION_ACCESS: 0x0 ここで '0x7' はユーザー パーティションを有効にします。説明は次のとおりです: https://docs.u-boot.org/en/v2025.01/usage/cmd/mmc.html#:~:text=0x7,boot この変更を適用すると、「md.l 20D8044 1」によるテストは正常に動作し、リセット コマンド後にセカンダリ U-Boot が起動します。 Re: Secondary Boot on i.MX6ULL Hangs After Reset ご説明ありがとうございます。 私の場合、前のメッセージの lsblk 出力に示されているように、Yocto が自動的に作成したと思われる 2 つのブート パーティション、「mmcblk1boot0」と「mmcblk1boot1」があります。 スクリプトによって生成されたバイナリを mmcblk1boot0 に配置する必要がありますか? もしSOなら、mmcblk1boot1 の目的は何ですか? Re: Secondary Boot on i.MX6ULL Hangs After Reset コレクション全体を読むと、i.MX8QXP eMMC セカンダリ ブートの 2 つのブート パーティションが相互にバックアップされていることがわかります。ただし、i.MX8MM と iMX6 のブート パーティションは相互にバックアップされておらず、一方が独立しています。 https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/iMX-secondary-boot-collection/ta-p/1916915 https://community.nxp.com/t5/NXP-Tech-Blog/i-MX8QXP-eMMC-セカンダリブート/ba-p/1257704#M45
記事全体を表示
LPC5536 和 Hyperram 你好 我在 LPC5536JBD100 上配置 FLEXSPI 外设时遇到了难题;hyperram 芯片是 S27KS0642GABHV020。该系统位于自定义板上,我们已经成功地在其中集成了其他功能。 我受到 AN12239 的启发,它适用于不同的处理器,但以一种与我正在使用的芯片非常相似的芯片为例:在我看来,主要区别在于 S27KS0642 的新节点技术,它比应用程序节点中使用的 S27KS0641 更快,但时序图(因此虚拟周期)和命令是相同的。 另一个灵感来源是这篇文章 https://community.nxp.com/t5/MCX-Microcontrollers-Knowledge/MCX-N947-FlexSPI-Connecting-to-HyperRAM-Analysis-and/ta-p/1988799 这与我使用的处理器不同,但解释了配置数据结构中某些字段的含义。 我还看了示例 lpcxpresso55s36_flexspi_octal_polling_transfer 来比较 FlexSPI 配置(知道必须进行某些更改,因为它针对的是闪存设备)。 我的症状是,当我尝试读取供应商 ID 时,函数不返回 kStatus_Success(返回值为 7001)。 我检查了时钟是否已连接: CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 0U, true); /*!< Reset FLEXSPICLKDIV divider counter and halt it */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 2U, false); /*!< Set FLEXSPICLKDIV divider to value 2 */ CLOCK_AttachClk(kPLL0_to_FLEXSPI); /*!< Switch FLEXSPI to PLL0 */ 并通过图形用户界面配置了引脚 周波的配置方式为 int config_hr(void) { flexspi_config_t config; uint32_t tempCustomLUT[ARRAY_SIZE(customLUT)] = {0U}; /* Copy LUT information from flash region into RAM region, because flash will be reset and back to single mode; In lately time, LUT table assignment maybe failed after flash reset due to LUT read entry is application's required mode(such as octal DDR mode) and flash is being in single SDR mode, they don't matched. */ memcpy(tempCustomLUT, customLUT, sizeof(tempCustomLUT)); /* Get FLEXSPI default settings and configure the flexspi. */ FLEXSPI_GetDefaultConfig(&config); /* Init FLEXSPI. */ config.rxSampleClock = kFLEXSPI_ReadSampleClkExternalInputFromDqsPad;//kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;//kFLEXSPI_ReadSampleClkExternalInputFromDqsPad; //config.enableSckBDiffOpt = true; //config.enableCombination = true; config.ahbConfig.enableAHBPrefetch = true; config.ahbConfig.enableAHBBufferable = true; config.ahbConfig.enableAHBCachable = true; // config.enableDoze = false; FLEXSPI_Init(EXAMPLE_FLEXSPI, &config); /* Configure RAM settings according to serial RAM feature. */ FLEXSPI_SetFlashConfig(EXAMPLE_FLEXSPI, &deviceconfig, kFLEXSPI_PortA1); /* Update LUT table. */ FLEXSPI_UpdateLUT(EXAMPLE_FLEXSPI, 0, tempCustomLUT, ARRAY_SIZE(customLUT)); /* Do software reset. */ FLEXSPI_SoftwareReset(EXAMPLE_FLEXSPI); return 0; } 我检查过了,即使在读取供应商 ID 的函数中,我们使用的也是 A1 端口 status_t flexspi_hyper_ram_get_id(FLEXSPI_Type *base, uint32_t *vendorId) { flexspi_transfer_t flashXfer; status_t status; uint32_t id; /* Write data */ flashXfer.deviceAddress = 0x0U; flashXfer.port = kFLEXSPI_PortA1; flashXfer.cmdType = kFLEXSPI_Read; flashXfer.SeqNumber = 1; flashXfer.seqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_READREG; flashXfer.data = &id; flashXfer.dataSize = 4; status = FLEXSPI_TransferBlocking(base, &flashXfer); *vendorId = id & 0xffffU; return status; } flexspi_device_config_t 结构的初始化过程如下 flexspi_device_config_t deviceconfig = { .flexspiRootClk = 75000000, /* 75MHZ SPI serial clock */ .isSck2Enabled = false, .flashSize = FLASH_SIZE, .CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle, .CSInterval = 2, .CSHoldTime = 1, .CSSetupTime = 1, .dataValidTime = 1, .columnspace = 3, .enableWordAddress = true, .AWRSeqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA, .AWRSeqNumber = 1, .ARDSeqIndex =HYPERRAM_CMD_LUT_SEQ_IDX_READDATA, .ARDSeqNumber = 0, .AHBWriteWaitUnit = kFLEXSPI_AhbWriteWaitUnit2AhbCycle, .AHBWriteWaitInterval = 0, .enableWriteMask = true, }; LUT 值为 #define LATENCY (0x04) uint32_t customLUT[20] = { /* Read Data */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Data */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Read Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xE0,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x60,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), }; 这对我来说很有感知,因为我总共使用了 48 个地址位,8 个键盘上有 DDR 模式,命令是正确的。 我是不是漏掉了什么? Re: LPC5536 and Hyperram 你好 谢谢。 不,我配置了更多引脚,但截图拍得很差:我猜有 8 个数据引脚,一个 RWDS、一个 CS_n 和一对差分时钟引脚。 Re: LPC5536 and Hyperram 你好@img_gabrigob 关于引脚配置 您是否只配置了 5 个数据引脚? S27KS0642GABHV020 需要 8 个数据引脚。 BR 哈利 Re: LPC5536 and Hyperram 你好 谢谢。我给你回复了,但我想我做错了什么(第一次使用这个社区),回复直接转到了我的原帖。 Re: LPC5536 and Hyperram 你好@img_gabrigob 首先,我认为您可以检查硬件。 探测物理信号(示波器): 确认 CK 按您预期的速率切换,交易的 CS# 脉冲,当您触发信号 Read-ID 序列时,DQ [7:0]/RWDS 会显示活动。 并将 FlexSPI 串行时钟降低到较低的安全频率(例如20-25 MHz),同时进行调试。 那么我认为您可以参考这个 LUT。 /* Read Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xE0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x06), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x60, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x06), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 2] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), RT1064 HyperRAM 支持 S27KS0641 和 S27KS0642 - NXP Community BR 哈利 Re: LPC5536 and Hyperram 你好,@Harry_Zhang、 谢谢您! 我试着查看我的 LUT 与您链接的另一篇文章中用户使用的 LUT 之间是否存在任何差异,但即使在尝试调整延迟等待状态下的假人数量后,我还是遇到了同样的问题。 我不知道我是否在安装 IDE 时配置错误,但在 LPC5536 上,我似乎无法通过 flexspi_config_t 数据结构设置差分时钟(字段 enableSckBDiffOpt 位于禁用的 ifdef 中)。 我们在董事会采取了一些措施。CSN 和 CLK 信号处于激活状态。 我们使用两种压摆率(标准和高)来捕获时钟 时钟频率比我预想的要慢(我想我把它设置为 75MHz,这里是 75/2,而不是 150/2)。 数据和 RWDS 信号稳定在 0V。我们只是在数据信号上看到一个小故障(5 毫微秒)。 我还附上了从图形用户界面输出的 pin_mux 和 clock_config 文件。 请问您还有其他建议吗? 顺祝商祺! Re: LPC5536 and Hyperram 您好! 感谢您的回复 我再次检查了电路图,...我意识到 RESN 不受 FLEXspi 控制,因此我更改了软件,使其上升。 现在控制器可以工作了,我们还将 MCU 上的引脚配置为快速转换速率选项。 例如,这是 RWDS 与 CLK 的对比。 因此,问题在于 LUT 中的延迟值(使用您的链接进行更正)和 RESET。 我还有一些不明白的地方,即使这对这个项目并不重要,但可能对未来的应用有用:从时钟树中的配置来看,我期望 CLK 频率为 75MHz,但我测量的频率为 37.5MHz。 还有其他我错过的时钟分频器吗? 谢谢! 顺祝商祺! 加布里埃尔 Re: LPC5536 and Hyperram 你好@img_gabrigob 您能分享与 HyperRAM 的连接原理图吗? BR 哈利 Re: LPC5536 and Hyperram 你好@img_gabrigob 根据 LPC55S36 数据表。 时钟频率最高为 50M(DDR 模式)。 /* Flexspi frequency 150MHz / 3 = 50MHz */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 0U, true); /*!< Reset FLEXSPICLKDIV divider counter and halt it */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 3U, false); /*!< Set FLEXSPICLKDIV divider to value 3 */ CLOCK_AttachClk(kPLL0_to_FLEXSPI); /*!< Switch FLEXSPI to PLL0 */ BR 哈利
記事全体を表示
CLRC66301B 掉电模式仍消耗 2 mA 而不是 nA 您好,恩智浦社区 我正在使用 CLRC66301B NFC 读卡器IC 并尝试通过将 PDOWN 引脚设为高电平来激活掉电模式 (3.3)V),详见数据手册。但是,电流消耗保持在2 mA,而数据表显示掉电时电流消耗应在8 nA至40 nA之间。 设置详情: PDOWN 引脚:3.3 V(恒定高电平) VDDs:VDD(TX)、VDD(AUX)、VDD(MCU)电压均为 3.3 V 接口:I²C(测试期间空闲) XTAL:连接 27.12 MHz 晶体 当前测量期间无通信或活动 测量电流: ~2 mA 问题 1.在断言 PDOWN 之前是否需要对寄存器进行配置? 2。IRQ、XTAL、IFSEL 或其他 GPIO 能否阻止进入真正的掉电模式? 3.PDOWN 是否需要使用 VDD 或 RESET 进行额外的定时或排序? 如有任何见解或建议,我们将不胜感激。 谢谢! 乌玛桑卡尔 NFC 控制器解决方案 Re: CLRC66301B Power-Down Mode Still Consumes 2 mA Instead of nA 您好, 当您提到当 SDA 和 SCL 物理断开时电流消耗会降低时,是指您移除了该引脚上的所有连接(同时移除主机 MCU 和上拉电阻器),还是指这些线路仅与主机 MCU 断开? 另外,能否请您描述一下测量所用的方法、设备和测试点? Eduardo。 Re: CLRC66301B Power-Down Mode Still Consumes 2 mA Instead of nA 亲爱的恩智浦团队 我使用带有 CLRC66303B 芯片的官方 CLEV6630ARD 板进行了掉电电流测试。只有在进行任何 I²C 通信之前物理断开 SDA 和 SCL 时,电流才会达到 ~40 nA。如果使用一次 I²C,即使将 PDOWN 设为高电平,电流也会保持在 2 mA 以上。 请说明在进入 PDOWN 之前,I²C 线路应该做些什么?具体来说 在断言 PDOWN 之前,MCU 是否应将 SDA 和 SCL 设置为高阻抗(输入,无拉)? 之前的任何 I²C 通信是否会阻止芯片进入真正的硬掉电? 谢谢! Follow-Up: CLRC66303 – High Current in Hard Power-Down Mode (CLEV6630ARD-Based Design) 亲爱的恩智浦团队 我之前曾就 CLRC66301HN 的硬掉电电流提出过问题,你的回复建议迁移到 CLRC663 Plus 系列 (CLRC66303)。此后我改用 CLRC66303B,使用基于 CLEV6630ARD 参考设计的定制板,我想继续提供最新的测试结果。 你之前的回复侧重于 LPCD 行为和 AN11783,但这个问题仅涉及通过 PDOWN 引脚进行硬掉电,没有RF场或 LPCD 处于活动状态。 掉电电流测量 (CLRC66303B): > 当 PDOWN 处于低电平时(芯片处于活动状态,RF场 开启):~100 mA >当 PDOWN 为高电平且存在 I²C 上拉时:~1.2 mA >当 PDOWN 为高且 I²C 线路被驱动为低时: ~6.6 mA >当 PDOWN 为高电平且 I²C 线路在使用前已物理断开时:~40 nA 只有在进行任何 I²C 通信之前物理断开 SDA 和 SCL 连接时,芯片才会在 PDOWN 模式下消耗 ~40 nA 电流。如果只使用一次 I²C,则即使在 PDOWN 钳位高电平之后,电流仍保持高电平。 硬件设置摘要: 芯片:CLRC66303B,I²C 模式。 微控制器:TI CC2652R7,100 kHz I²C 电压:3.3 V 调节 上拉:SDA/SCL 上 4.7 kΩ 至 3.3 V 未使用的引脚:按照数据表拉动 未启用射频或 LPCD 功能 方案设计:基于 CLEV6630ARD(附后) 需要澄清的问题: 1.在 PDOWN 模式期间,SDA/SCL 是否内部偏置? 2。即使后来将PDOWN设置为高电平,之前的任何I²C活动是否会阻止真正的掉电? 3.在断言 PDOWN 之前,是否有必要将 MCU I²C 引脚设置为 Hi-Z(输入,无拉)? 4.是否有恩智浦推荐的方法,可在硬 PDOWN 模式下可靠地实现<100 nA,而无需物理断开 I²C 线路? 我们的目标是确保电池的使用寿命,并且必须实现数据手册中规定的低功耗性能。如果有任何专门关于 PDOWN 行为和 I²C 漏电流的指导或文档,我们将不胜感激。 附上示意图以供参考。 顺祝商祺! Umasankar C Re: CLRC66301B Power-Down Mode Still Consumes 2 mA Instead of nA 你好@Umasankarc 希望你一切顺利。 我知道你使用的是基于 CLRC66301HN(非增强版)的自定义板,对吗?如果是,请考虑我们建议改用 CLRC663 plus 系列 (CLRC66303)。 引脚 PDOWN 的高电平应启用硬掉电。数据手册中描述的掉电电流 (Ipd) 相当于 CLRC663 芯片中所有电源电流的总和;但是,嵌入在板中的外部元器件可能会消耗额外的功率。 AN11783 CLRC663 plus《电源卡检测》第 3.4 节中描述了一些低功耗设计建议。 Eduardo。
記事全体を表示
imx-smw ele バックエンドを複数のプロセスで同時に使用する プラットフォーム: iMX8ULP imx-smw: lf-6.6.52-2.2.0 imx-セキュア・エンクレーブ: lf-6.6.52-2.2.0 mbedts の暗号ドライバとして、imx-smw ライブラリによって公開されている PSA 暗号 API を使用しています。HSM ELE で秘密鍵を生成します。私たちのアプリケーションは、mbedtls で秘密鍵を不透明鍵としてロードして使用します。異なるプロセスで実行されている複数のアプリケーションは、同時に同じキーを使用できる必要があります。一例として、HSM でラップされたキーを秘密キーとして使用する Web サーバーが挙げられます。 私たちの知る限り、2 つの異なるプロセスが imx-smw ライブラリを使用して同時に同じキーを使用することはCANません。これは、各プロセスがキーにアクセスするために同じ (ele) キーストア サービスを開く必要があり、HSM ドキュメントに記載されているように、同じキーストアを同時に開くことができないためです。複数のプロセスが同じキーを同時に使用するCASEはサポートされていないようです。 この問題をどうしたら克服CANでしょうか? 考えられる解決策としては、imx-smw ライブラリの上にデーモンを作成し、キーにアクセスするための単一のエントリ ポイントを作成することです。しかし、もしかしたら私たちは何かを見逃しているのかもしれませんし、それに対処する別の方法があるかもしれません。 i.MX8ULP Security Re: use imx-smw ele backend in multiple processes simultaneously こんにちは@GiacomoDS このCASEについては社内チームと相談させていただきますが、その前にNXPについて名を教えていただけますか?プライバシーに関するCASEは、内部チケットを発行することもCAN。ここからアクセスして、NXP サポート プロフェッショナルによる機密のサポートを受けてください。 よろしくお願いします。 Harvey
記事全体を表示
S32K 示例 S32K1xx S32K144 示例 S32K144 CMP 轮询 S32DS2.0 示例 S32K144 验证后门访问密钥 S32DS1.3 示例 S32K144 FlexCAN0 RXFIFO DMA nonSDK S32DS13 示例 S32K144 PDB ADC 触发 DMA ISR S32DS 示例 S32K144 Flash RW simple S32DS 示例 S32K144 DMA 内存复制测试 S32DS S32K144 EEEPROM 使用示例 示例 S32K144 EEEPROM 使用 - 无 SDK 示例 S32K144 RTC VLPS 示例 S32K144 WDOG RCM 中断 示例 S32K144 SRAM ECC 注入  S32K144 RAM 保留示例 S32DS.R1 示例 S32K144 I2C主设备 MPL3115A2 S32DSR1_v3 示例S32K144 FlexCAN RXFIFO DMA S32DS.ARM.2018.R1  示例 S32K144_printf_implementation - S32DS_1.0 示例 S32K144 在 FreeRTOS 下使用 UART printf/scanf - S32DS 示例 使用 LPIT 定时器实现可配置周期函数调用的 S32K144 SDK 示例 S32K144 .noinit章节用法 示例 S32K144 PDB ADC DMA S32DS.ARM.2018.R1 示例 S32K144 RAM 自检简单 S32DS 2018.R1 示例 S32K144 位置无关代码  示例 S32K144 FlexCAN 虚拟网络停止模式测试 S32DS.ARM.2.2 示例 S32K144 LPIT DMA LPSPI 示例 S32K144 FlexCAN TX/RX/Error ISR 测试 S32DS2.2 示例 S32K144 FlexIO 空闲检测 S32DS2.2 S32K146 示例 S32K146 Set_whole_FlexRAM-as_RAM S32DS.ARM.2.2 S32K148 示例 S32K148 PDB0-PDB1 环 S32DS3.4 RTM4.0.3 示例 S32K148 PDB0-PDB1 环 DMA S32DS3.4 RTM4.0.3 示例 S32K148 GPIO 中断 S32K116 示例 S32K116 WDOG 快速测试 示例 S32K116 LPUART LIN 从机 TXRX ISR S32DS.ARM.2.2 示例 S32K116 FlexCAN PN 停止 S32DS.ARM.2.2 示例 S32K116 FlexCAN VLPR 测试 S32DS.ARM.2.2 S32K118 示例 S32K118-SRAM-keep_data_over_SW_reset v0_1 S32DS.ARM.2.2 S32K3xx S32K344 示例 S32K344 PIT BTCU ADC DMA DS3.4 RTD100   示例 S32K344 FlexCAN_Ip TX/RX/EnhanceRXFIFO 测试 S32DS3.4 RTD200   示例 Siul2_Port_Ip_Example_S32K344_ITCM_DTCM S32DS3.4RTD300   示例 S32K358 FlexCAN TXRX ISR S32DS35 RTD400/500    
記事全体を表示
PN7160 - RF 設定 GUI PN7160 RF 設定の基本的な GUI が利用可能です。添付ファイルをご覧ください。 この GUI は、PN7160 RF 設定のほとんどに対してNCIコマンドを生成できます。これは、ユーザーが適切な NCI コマンドを構築するのに役立つかもしれません。 現在、GUI は NXP ウェブページで利用可能です。 PN7160 RF 設定の基本的な GUI が利用可能です。 NFCフロントエンド・ソリューション
記事全体を表示
ST7701 驱动程序 Hello 我正在尝试与 ST7701 显示控制器通信。 是否有一些例子?如果可能的话,谁能分享一下? 我使用的是 i.MX RT1170 板。在 SDK 示例中,我找到了 HX8394、RM68191 和 RM68200 显示控制器的驱动程序。我想为 ST7701 找到类似的东西。 谁能帮帮我? 谢谢,并致以诚挚的问候、 弗朗切斯科-索利托 Re: ST7701 drivers 你好,@SolitoFrancesco、 目前,我们的 SDK 中没有任何针对ST7701 显示控制器 的驱动程序支持。 与该控制器的集成必须手动完成。 必须调整 LCDIF 模块的分辨率值、同步信号和时钟频率,以便与显示控制器兼容。如果使用 EVK,则可以使用 SDK 驱动程序并调整以下功能的值: BOARD_InitLcdifClock() BOARD_InitMipiDsiClock() BOARD_SetMipiDsiConfig() 这些函数以及同步值的宏都在 " display_support.c " 中引用文件,这是调整显示控制器支持时需要关注的主要文件。   另外,请务必阅读以下应用笔记,因为它详细介绍了液晶显示器设置的工作原理以及其他有用的注意事项:i.MX RT elcDIF RGB 模式用例 (nxp.com)   BR, Edwin. Re: ST7701 drivers 早上好 我按照显示器制造商和驱动程序制造商的指示,修改了你提到的文件。我可以通过 MIPI 对驱动寄存器进行写入和读取。我可以用示波器看到差分 MIPI 波形(也是在"配置" 阶段之后),但仍然无法在显示屏上看到任何东西。我正在使用恩智浦 SDK 中名为"mipi_dsi_compiance_test" 的演示示例。 您能提供更多帮助吗? 谢谢,并致以诚挚的问候、 弗朗切斯科-索利托 Re: ST7701 drivers 你好,@SolitoFrancesco、 您能在运行时调试代码吗?是否打印出任何错误信息?您在数据线上看到了哪些数据模式?这些模式是否与 readme.md 文件中描述的预期模式一致? BR, Edwin. Re: ST7701 drivers 你好 我也遇到了同样的情况(相同的驱动程序和分辨率,基础是在开发板上运行的测试示例)。控制器已配置好,我也可以读取状态(没有任何错误),DSI 线路上的数据也已存在,但屏幕上什么也没显示。 将 dsi_dpi_config 中的 videoMode 从 kDSI_DpiBurst 改为其他模式也没有效果。 看起来屏幕不接受视频流? Re: ST7701 drivers 你好示例项目在显示 DEMO_PANEL_RK055MHD091 时运行正常。然后,我切换到最终应用中必须使用的面板。它的分辨率不同(480x800),因此我调整了定义。然后,我更改了驱动程序(fsl .h和 .c文件),我就能与显示器通信了。我可以写入和回读寄存器。但在配置显示屏后,当示例项目开始发送图像缓冲区时,我能在示波器上看到 MIPI 波形,但显示屏上什么也看不到。假设显示屏没有损坏,因为我尝试通过专用命令打开所有像素,我可以看到屏幕完全白色。我不明白的是,问题是出在显示器的配置上,还是出在示例项目中我必须调整的其他地方。我联系了显示器制造商和控制器制造商,但我需要各方尽可能多的帮助。有可能为安装在显示器上的控制器获取 fsl 驱动程序吗?它是 Sitronix ST7701。请告诉我。谢谢并致以诚挚的问候,弗朗切斯科 Re: ST7701 drivers 您好,Rino 我正在对我的设置和您的设置进行比较(最后我会上传到这里)。 同时,我注意到我使用的是 ST7701,而你使用的可能是 ST7701S(后缀为 S)。我认为它们很相似,但我不确定。 我注意到,现在即使不进行任何初始化,显示屏也能正常工作。"开始时速度很慢," ,硬度也很低,但还是能用。然后,如果我只发送 0xE0 至 0xEF 的设置(ST7701 数据表中没有记录),显示器启动速度非常快,颜色也正确。似乎所有其他设置都没有必要(听起来很奇怪)。 让我们保持联系。完成后,我将与大家分享比较结果。 再次感谢您。 亲切的问候, Francesco Re: ST7701 drivers 你好,Rino 非常感谢你的建议。在我的应用中似乎也是如此。好极了我可能需要更好的设置,但现在我可以在屏幕上看到图像了。 如果可能的话,请与我分享您的配置,以便我与您的配置进行比较,更好地完善配置。如果我看到了不同的东西,我会在这里告诉你。 再次感谢您。您是如何设置 enableNonContinuousHsClk 的? 致以亲切的问候, Francesco Re: ST7701 drivers 你好,弗朗切斯科 、 我设法让显示屏正常工作。 在 DisplayTFT_SetMipiDsiConfig 函数中,添加一行内容: dsiConfig.enableNonContinuousHsClk= true; 例如,在这几行之后: DSI_GetDefaultConfig(&dsiConfig); dsiConfig.numLanes = DISPLAY_MIPI_DSI_LANE_NUM; dsiConfig.autoInsertEoTp= true; 假设你已经正确配置了显示 IC(如果有必要,我可以分享我的屏幕配置)和显示时钟(我的设置大约是 26MHz)。 致以最诚挚的问候,克里斯 Re: ST7701 drivers 你好 文件是根据 SDK 中的其他驱动程序创建的。 您还可以将延迟时间改为更短。 今天上午,我确认了配置顺序,并按照显示器制造商的建议做了一些更改,但没有进一步改善,于是我开始仔细研究 DSI 配置本身。我知道时钟很好,视频模式(突发模式)也是如此,所以剩下的唯一选择是 DSI 本身的选择。 熟悉(以及文档中的其他部分): https://docs.nxp.com/bundle/AN13573/page/topics/continuous_vs_non-continuous_clock.html BR, Chris Re: ST7701 drivers 你好,里诺 按照约定,请在附件中查看您和我的设置对比。我没有细说,但如果我或你会在差异中发现一些有趣的东西,请让我们继续写下去。 此致敬礼, 弗朗西斯科 Re: ST7701 drivers 你好,弗朗切斯科、 抱歉耽搁了。 我浏览了你的对比,发现了很多差异,部分原因是屏幕本身(我们有玻璃/触摸屏/屏幕三明治,对此进行了配置修复——或者至少供应商是这样解释的) 🙂 )。 有些设置(如功率控制)不是启动所必需的,而是为了提高质量(对比度/伽玛设置)。 有趣的是,无论我们是否运行"Sunlight Readable Enhancement" 这个东西,我想他们称之为 "阳光可读增强",都是必需的。根据这些数据,它可以自动设置最佳参数。如果它们不正确或缺失(默认值),则需要一段时间才能自动设置它们 -> 因此,正如你所注意到的,启动速度会很慢。 文档本身可能相当令人恼火,许多命令都没有文档说明,如果没有文档,往往无法完全启动屏幕。不只是这款机型,我在其他几款态龙机型上也遇到过这种情况。 亲切的问候, Chris
記事全体を表示
基于 RT1170 通过 USB DFU 更新固件 基于 RT1170 通过 USB DFU 更新固件 基于 RT1170 通过 USB DFU 更新固件 开发环境 准备dfu-util 准备dfu-util 的步骤 运行演示 使用 SDK 中的预建固件 使用自定义固件 无需借助外部编程工具即可在现场执行微控制器 (MCU) 固件升级是一项必要的功能。 对于支持 USB 设备控制器的 MCU,USB 设备固件更新 (DFU) 类提供了一种解决方案。USB_DFU 引导加载程序只需要一台 PC 和一根 USB 电缆。 RT系列也提供了此功能。以 RT1170 为例,SDK 中 USB 类下提供了一个 DFU 项目。该项目基于 MCUXpresso IDE。通过运行 SDK 中的 dev_dfu_freertos_cm7 项目,RT1170 将被枚举为 dfu 设备,并且在通过另一根 USB 电缆将其连接到主机 PC 后,用户可以使用“dfu-util”实用程序将固件下载到该设备。 开发环境 软件环境: SDK版本:2.15.000 IDE: MCUXpresso IDE 演示项目: dev_dfu_freertos_cm7 主机软件: dfu-util 下载链接: dfu-util 对于 Windows 64 位:下载dfu-util-0.9-win64.zip   硬件环境: 主板:RT1170-EVKB   Preparing dfu-util dfu-util用于将固件下载到 DFU 设备,但它不会将 CRC32 添加到固件中。由于 SDK 中的 DFU demo 会验证 CRC32,以确保写入 Flash 的固件没有位错误,因此需要修改dfu-util源代码。 准备dfu-util 的步骤 安装依赖项 sudo apt-get build-dep libusb-1.0-0 dfu-util sudo apt-get 安装 gcc-mingw-w64-x86-64 下载dfu-util和libusb源代码 git克隆https://git.code.sf.net/p/dfu-util/dfu-util git 克隆https://github.com/libusb/libusb.git 修改源代码中的 CRC 代码 修改dfu_file.c中的dfu_store_file函数,将CRC32添加到Firmware后缀。 /* 如果有后缀,则写入 */ 如果(写入后缀){ uint8_t dfusuffix[DFU_SUFFIX_LENGTH]; dfusuffix[0] = 文件->bcdDevice & 0xff; dfusuffix[1] = 文件->bcdDevice >> 8; dfusuffix[2] = 文件->idProduct & 0xff; dfusuffix[3] = 文件->idProduct >> 8; dfusuffix[4] = 文件->idVendor & 0xff; dfusuffix[5] = 文件->idVendor >> 8; dfusuffix[6] = 文件->bcdDFU & 0xff; dfusuffix[7] = 文件->bcdDFU >> 8; dfusuffix[8] = 'U'; dfusuffix[9] = 'F'; dfusuffix[10] = 'D'; dfusuffix[11] = DFU_SUFFIX_LENGTH; /*crc = dfu_file_write_crc(f, crc, dfusuffix, DFU_SUFFIX_LENGTH - 4);*/ dfusuffix[12] = crc; dfusuffix[13] = crc >> 8; dfusuffix[14] = crc >> 16; dfusuffix[15] = crc >> 24; crc = dfu_file_write_crc(f,crc,dfusuffix + 12, 4); }   构建libusb mkdir -p构建 cd libusb-1.0.24 ./autogen.sh PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig./configure --host=x86_64-w64-mingw32 --prefix=$PWD/../build 制作 进行安装 光盘 .. Build dfu-util cd dfu-util-0.11 ./autogen.sh PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig./configure --host=x86_64-w64-mingw32 --prefix=$PWD/../build 制作 进行安装 光盘 .. 完成这些步骤后,新构建的工具将位于/build/bin文件夹中。 打开 Windows 的 cmd。使用新的dfu-suffix.exe运行以下命令,CRC32 将添加到固件中。 dfu-suffix.1 exe -a你的固件 运行演示 使用 SDK 中的预建固件 SDK 提供了一个预编译的固件二进制文件 ( dev_hid_mouse_bm.bin ),其中已包含 CRC32 校验码。请按以下步骤操作: 使用 MCUXpresso IDE 将dev_dfu_freertos_cm7演示刷入 EVKB 板。   通过 USB 将开发板连接到主机 PC。 在 USB 设备描述符中,我们找到供应商 ID 和产品 ID:   运行以下命令下载固件: dfu-util.exe -d <你的视频:进程号> -D <你的固件> 下载后,DFU 演示将验证 CRC32 并在 RAM 中执行新的固件。该设备将被枚举为 USB 鼠标,在屏幕上以矩形图案移动。 使用自定义固件 使用自定义固件时,请确保图像加载到正确的地址(例如,0x10000)。如果偏移量不正确,即使 CRC 校验通过,DFU 演示也将无法加载固件。 构建和加载自定义固件: 将hello_world_cm7项目导入 MCUXpresso IDE。 在托管链接器脚本设置中,启用“将应用程序链接到 RAM”。 调整内存设置以匹配 DFU 项目要求,确保 ITCM 是第一个 RAM 区域。 构建项目并生成二进制文件。 使用修改后的dfu-util工具将 CRC32 附加到二进制文件并将其下载到开发板。验证自定义固件是否正确执行。 CRC 添加: 新固件加载成功: 中文版及演示版请见此链接: https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=803149&fromuid=3253523 动手实践培训
記事全体を表示