Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
如何确认 HSE FW 的真伪 现在,我使用了NXP工程师提供的“HseLib_HseFwInstall”软件来安装HSE固件。 我们的客户提出了一个问题:如何确认 HSE 固件的真伪,因为他认为 HSE 固件本身没有任何签名。这很容易。 屏幕截图 2026-09-17 182416.png屏幕截图2026-09-17 182416.png被篡改。 谁能告诉我 HSE FW 是否有网络安全措施来确认 HSE FW 的真实性? Re: How to confirm HSE FW authenticity 或许您可以创建一个新的工单: https://www.nxp.com/support/support:SUPPORTHOME HSE 文件属于安全文件,因此除非您之前已经操作过,否则需要遵循以下步骤: https://www.nxp.com/docs/en/user-guide/nxp-secure-access-rights-registration.pdf 我们可以一起做一些演示。 Re: How to confirm HSE FW authenticity 感谢您回答这个问题。请问我该如何找到关于这些内容的参考资料?我在《RM758222-HSE-B 固件参考手册 - V2.2》中还没有注意到这些内容。 Re: How to confirm HSE FW authenticity 您好, HSE固件确实受到保护——它不是普通的未签名二进制文件。 固件镜像在分发前由 NXP 进行加密和签名。 NXP 在制造过程中将ROM 密钥预先编程到 HSE 子系统中(硬件信任根)。这些密钥永远无法从外部获取。 安装过程中,片上安全 BAF会使用这些 ROM 密钥来验证映像,然后再将其写入闪存。篡改过的图片会被拒绝。 结论是:如果没有 NXP 的私钥,就不可能安装修改过的 HSE 固件。信任源于硅谷。
View full article
S32DS license expiring Hi, when I open my S32DS I get following message:   S32 Design Studio for ARM ActivationId: 8AEC-51FD-AB5B-6A4D Evaluation Days: 9 Feature Version: 2.2 Feature Status: Evaluation (9 days) what do I have to do to extend my license?  Best regards Sandra Re: S32DS license expiring Hello, I have notified admin to prolong your license. Best regards, Peter Re: S32DS license expiring Hello, You license is now extended to 2030. Best regards, Peter Re: S32DS license expiring Hello, I could not active the S32DS, because the issue of picture, could you help me how to solve this problem? HelenLi_0-1778831877838.pngHelenLi_0-1778831877838.pngHelenLi_0-1778831877838.pngHelenLi_0-1778831877838.png Re: S32DS license expiring Help! My S32DS IDE  license is about to expire. Could you please help me extend its usage period? Thank you ! license : 1A99 90A8 2F06 339B Re: S32DS license expiring Hello: ActivationId: 04E9-8F5A-8B1F-F9C8 The license validity period needs to be extended. Re: S32DS license expiring Hello! My S32DS IDE license is about to expire. Could you please help me extend its usage period? Thank you ! license : EA09-8465-A8E8-F07B Re: S32DS license expiring Hi Peter, My S32DS v3.5 license expired. Could you help extend it to Sep 16,2030? Fulfillment ID: 113445398 Machine ID: A5883F5CCBF60C6BECC55C5A0CC9D1C68DA192AD Activation code: A060-A074-B014-D67C License page shows "Returning this license is not allowed", no EXTEND button. Screenshot attached. Thank you!
View full article
LPUART1 TX FIFO Failed Hi all, I'm working with an S32K311 and a custom bare-metal driver for two LPUART instances configured identically (115200 8N1, TX/RX FIFO enabled, same init sequence). LPUART0 works perfectly with both TX and RX FIFOs enabled. LPUART1 does not: TX: a single write to DATA (or a single push while FIFO[TXFE]=1) results in the same byte being physically transmitted 3 times on the TX pin. This is not garbage/noise — it's the exact byte I wrote, repeated 3 times back-to-back. Verified with an oscilloscope/logic analyzer on the TX pin (GPIO71). RX: reception does not behave correctly while the RX FIFO is enabled on this instance either (no usable data comes back), unlike LPUART0. What I've already ruled out / verified: Baud rate / clock is correct: I do not see corrupted or misaligned characters, only the correct byte value duplicated 3 times, which points away from an oversampling/BAUD (OSR/SBR) miscalculation. Clock gating is enabled for both instances: the MC_ME peripheral clock request is enabled for LPUART0 and LPUART1 in the same way (same partition, sequential request IDs), and LPUART0 with the identical code path works fine. Workarounds found by trial and error: Disabling the TX FIFO (FIFO[TXFE]=0) on LPUART1 fixes the transmit issue (single frame per write, using STAT[TDRE] instead of WATER[TXCOUNT] for flow control). Leaving the RX FIFO enabled (FIFO[RXFE]=1) is required for RX to work on LPUART1 at all. So the only configuration that works on LPUART1 is: TX FIFO disabled, RX FIFO enabled — which is the opposite of LPUART0 (where both FIFOs enabled work fine), and obviously reduces TX throughput/burst capability. Questions: Is there a known erratum for the S32K311 LPUART1 instance (or a specific LPUART instance limitation) related to the TX FIFO causing duplicated frames? Is there any additional register/bit (beyond FIFO[TXFE], WATER, BAUD[TDMAE]) that needs different handling specifically for LPUART1 vs LPUART0 on this device? Has anyone else observed this same "byte transmitted 3 times when TX FIFO is enabled" behavior on a specific LPUART instance rather than all instances uniformly? Any pointers to the errata sheet, silicon revision notes, or a known workaround explanation would be greatly appreciated. Re: LPUART1 TX FIFO Failed Hi @ijm1, I have seen unpredictable behavior in hardware modules when the ratios between clock domain frequencies do not match any of the supported clock options. The system clock must always be configured according to one of the valid clocking options listed in the RM. The key requirement is that the ratios between the clocks remain exactly as defined. As stated under Table 151 (For S32K312, S32K311, and S32K310) in the RM: "…any clock frequency selected must adhere to the same clock divider ratios shown in System clocking configurations." Could you please verify this first? Regards, Daniel
View full article
LPUART1 TX FIFO が失敗しました こんにちは、皆さん。 私はS32K311とカスタムベアメタルドライバーを使い、2つのLPUARTインスタンスを同一設定(115200 8N1、TX/RX FIFO有効、同じinitシーケンス)で使っています。LPUART0は、TX FIFOとRX FIFOの両方が有効になっている場合でも完全に動作します。LPUART1 は以下を行いません: TX: DATAへの1回の書き込み(またはFIFO[TXFE]=1の間の1回のプッシュ)により、同じバイトがTXピンで物理的に3回送信されます。これはゴミデータやノイズではありません。私が書き込んだバイトが、3回連続して繰り返されたものです。TXピン(GPIO71)をオシロスコープ/ロジックアナライザで検証しました。 RX: このインスタンスでも、LPUART0とは異なり、RX FIFOが有効になっている間は受信が正しく動作しません(使用可能なデータが返ってきません)。 既に除外/確認済みであること: ボーレート/クロックは正しいです。文字の破損や位置ずれは見られず、正しいバイト値が3回重複しているだけです。これは、オーバーサンプリング/ボーレート(OSR/SBR)の計算ミスではないことを示しています。 クロックゲーティングは両方のインスタンスで有効化されており、MC_ME周辺クロック要求は同じ方法でLPUART0とLPUART1で有効化され(同じパーティション、逐次リクエストID)、同じコードパスのLPUART0も問題なく動作します。 試行錯誤で見つけた回避策: LPUART1でTX FIFO(FIFO[TXFE]=0)を無効にすると送信の問題(書き込み1フレーム、流量制御にWATER[TXCOUNT]の代わりにSTAT[TDRE]を使用)が解決します。 LPUART1でRXを動作させるには、RX FIFOを有効にしておく(FIFO[RXFE]=1)必要があります。 LPUART1で動作する唯一の構成は、TX FIFOを無効にし、RX FIFOを有効にすることです。これはLPUART0(両方のFIFOを有効にして問題なく動作)とは逆で、明らかにTXスループットやバースト能力を低下させます。 質問: S32K311 LPUART1インスタンス(または特定のLPUARTインスタンスの制限事項)において、TX FIFOが原因でフレームが重複するという既知の不具合はありますか? このデバイスでLPUART1とLPUART0ごとに異なる扱いが必要な追加のレジスタやビット(FIFO[TXFE]、WATER、BAUD[TDMAE])はありますか? TX FIFOが有効になっているときに、すべてのLPUARTインスタンスではなく、特定のインスタンスで「バイトが3回送信される」という同じ動作を確認した人はいますか? 正誤表、シリコン改訂ノート、または既知の回避策の説明に関する情報があれば、大変ありがたいです。 Re: LPUART1 TX FIFO Failed こんにちは、 @ijm1 さん。 クロックドメイン周波数の比率がサポートされているクロックオプションのいずれとも一致しない場合、ハードウェアモジュールで予測不能な動作が発生するのを確認しました。システムクロックは、RMに記載されている有効なクロックオプションのいずれかに従って常に設定する必要があります。 重要な要件は、時計間の比率が定義されたとおりに正確に維持されることです。 RMの表151(S32K312、S32K311、およびS32K310の場合)に記載されているとおりです。 「…選択されたクロック周波数は、システムクロック構成に示されているクロック分周比と同じ比率に従わなければなりません。」 まず確認してもらえますか? よろしくお願いいたします。 ダニエル
View full article
How to confirm HSE FW authenticity Now,I Used  “HseLib_HseFwInstall”software witch is supply by NXP engineer to install HSE FW。 Our customer raise a question: how to confirm HSE FW authenticity, because he think HSE FW itself don't have any signature,.it is easy 屏幕截图 2026-09-17 182416.png屏幕截图 2026-09-17 182416.pngto be tampered. Who can tell me HSE FW weather have some security scheme to comfirm HSE FW authenticity? Re: How to confirm HSE FW authenticity Possibly you could create new ticket: https://www.nxp.com/support/support:SUPPORTHOME HSE documents are secure files, so following procedure is needed to follow unless you have already done it before: https://www.nxp.com/docs/en/user-guide/nxp-secure-access-rights-registration.pdf We could possibly share some presentation. Re: How to confirm HSE FW authenticity Thank you for answer this question.Could you tell me how can I find these reference about these contents.In I haven't noticed these contents yet. Re: How to confirm HSE FW authenticity Hi, HSE FW is indeed protected — it is not plain unsigned binary. The FW image is encrypted and signed by NXP before distribution. NXP pre-programs ROM keys into the HSE subsystem during manufacturing (hardware Root of Trust). These keys are never accessible externally. During installation, the on-chip Secure BAF uses those ROM keys to authenticate the image before writing it to flash. A tampered image is rejected. Bottom line: without NXP's private signing key, it is impossible to install a modified HSE FW. The trust is rooted in silicon.
View full article
セカンダリがDPDKプールからmbuffを割り当てるのに失敗しました こんにちは、皆さん。 使用機器:LX2160 LSDK 2108 メイン MCファームウェアバージョン:10.32.0 DPDKバージョン:dpdk_19_11_tags_LSDK20.04-isc-09 プライマリ ( DPDK ) プロセス: [ rte_pktmbuf_pool_create("dlmempool", ] を使用して mbuff プールを作成します。 セカンダリ(DPDK)プロセス:API [ rte_pktmbuf_alloc(mempool) ]を使用してmbuffを割り当てるのに失敗しました セカンダリーでは、mempoolが正しいとわかります。ムバフは満杯です。rte_pktmbuf_alloc を使用した最初の mbuff 割り当て時にエラーが発生します。 これに対する解決策はありますか?ありがとう。 Re: Secondary failed allocate mbuff from DPDK Pool ありがとうございます。これらのオプションを試してみて、明日までにご報告します。 Re: Secondary failed allocate mbuff from DPDK Pool こんにちは、 セカンダリプロセスは、プライマリプロセスと同じ仮想アドレスにhugepagesをマッピングする必要があります。ASLRが有効な場合、セカンダリはmempoolポインタを別の仮想アドレスに解決するため、最初の割り当てが失敗します。 echo 0 > /proc/sys/kernel/randomize_va_space   プライマリプロセスまたはセカンダリプロセスを起動する前に、これを実行してください。 2. 十分なDPMCPオブジェクトを用意する プロセスの総数(プライマリプロセス+セカンダリプロセス)と同じ数のDPMCPオブジェクトを作成します。プライマリ1個とセカンダリ1個の場合、少なくとも2個のDMPCPが必要です。 export DPMCP_COUNT=3 # for 1 Primary + 2 Secondary (always provision +1 as buffer) ./dynamic_dpl.sh dpmac.X 3. 十分なDPIOオブジェクトを用意する 各プロセスにはそれぞれ専用のDPIOポータルが必要です。その式は次のとおりです。 (総プロセス数)×(プロセスあたりのコア数+プロセスあたりの追加コア数1) 例えば、プライマリ1(2コア)+ 1セカンダリ(2コア)= 最低9DPIOの場合。 export DPIO_COUNT=20 # set generously 4. セカンダリデバイスを正しくブラックリスト/ホワイトリストに登録する 二次プロセスは、I/O デバイス (dpni、dpbp、dpcon、dpseci) を再初期化してはなりません。セカンダリ側で初期化する必要があるのは、 dpio と dpmcp のみである。正しいブラックリストフラグを渡してください。 # Secondary process example — blacklist all dpni/dpbp/dpcon, allow only dpio + dpmcp ./your_secondary_app --proc-type=secondary \ -b fslmc:dpni.X \ -b fslmc:dpbp.X \ -b fslmc:dpcon.X \ -- [app args]   または、セカンダリに割り当てられているdpioおよびdpmcpオブジェクトのみを明示的にホワイトリストに登録します。 ./your_secondary_app --proc-type=secondary \ -w fslmc:dpio.Y \ -w fslmc:dpmcp.Z \ -- [app args] 5. --proc-type=secondary EAL引数を使用する セカンダリが正しいEALフラグで起動されていることを確認してください。 ./your_secondary_app -c -n 1 --proc-type=secondary ...   あるいは --proc-type=auto を使ってDPDKを自動検出させるのも良いでしょう。 6. セカンダリでMempoolルックアップを確認する セカンダリでは、 rte_pktmbuf_pool_create 再度呼び出さないでください。代わりに、プライマリによって作成された既存のプールを検索してください。 // In secondary process: struct rte_mempool *mempool = rte_mempool_lookup("dlmempool"); if (mempool == NULL) { // Error: pool not found — ASLR or hugepage mapping issue } struct rte_mbuf *m = rte_pktmbuf_alloc(mempool);     rte_mempool_lookup が有効な非NULLポインタを返しても rte_pktmbuf_alloc がNULLを返す場合、問題はほぼ間違いなくDPIOポータルがセカンダリのスレッド/コアに対して初期化されていないことです。   よろしくお願いします。 Re: Secondary failed allocate mbuff from DPDK Pool 迅速な解決策を提供してくれた@Bio_TICFSLに感謝します。
View full article
Opinions on "Smart Energy" solar I had some door knocker salesmen around today from Smart Energy wanting to talk about solar panels. I'm interested in solar but don't have the funds to invest up front and they said something about a govt funded scheme with $0 upfront. Naturally I'm very sceptical. Would love to hear from anyone who has dealt with them. Re: Opinions on "Smart Energy" solar Hello, Sometimes a "$0 upfront" pitch actually means a third-party company puts panels on your roof for free, but they own the system. You don't get the clean energy equity, and instead, you are locked into a long-term contract (often 20 to 25 years) buying the power they generate. These can make selling your home complicated later. Best Regards
View full article
T1042NXE BSDL file Hello, i'm looking for the BSDL file for this component : T1042NXE7PQB BGA780 Can you send me the file ? Thanks Re: T1042NXE BSDL file Hello, The BSDL file for your component T1042NXE7PQB is covered by the T1040/T1042 combined BSDL file (filename: T1040_and_T1042_1.1.bsdl ). This single file is suitable for both the T1040 and T1042 processors. How to Download The file is available directly on the NXP product page under Design Resources → Design Files → Models: BSDL file for T1040/42 — Download (Account Required) File code: T1040-T1042-BSDL Revision: R1A (Feb 20, 2019) Size: 110.13 KB Regards
View full article
S32K31XEVB-Q100FlexCAN0 — 环回功能正常,但使用外部 CANoe 工具时无法接收信号。 板: S32K311-EVB 模块: FlexCAN0 工具:通过 J8 连接器连接的 Vector CANoe 调试探针: J-Link 我正在使用 FlexCAN0 在 S32K311-EVB 上实现 CAN 协议。 环回模式测试(正常): 我首先在内部环回模式下实现了 FlexCAN0 并进行了测试。这成功了——发送的消息通过我的“void CanIf_RxIndication(const Can_HwType* Mailbox, const PduInfoType* PduInfoPtr )”正确接收。 处理功能,确认我的基本 FlexCAN0 配置(时钟设置、位定时、消息缓冲区初始化)运行正常。 外部通信测试(失败): 然后我开始测试外部CAN通信: 在引脚配置中配置 PTA6 和 PTA7 引脚。 通过J8连接器将 Vector CANoe 连接到电路板。 在 CANoe 配置中,我取消勾选了“CAN 环回模式”。 连接12伏适配器 CANoe 开始传输——CANoe 显示正在发送 CAN 帧。 然而,在 S32K311 端,没有任何信号被接收——CanIf_RxIndication (在环回模式下正常工作的同一函数)从未被调用/触发信号。 我使用 Segger RTT Viewer 通过 JTAG 进行调试。 配置 Sami2098_0-1789478804307.pngSami2098_0-1789478804307.pngSami2098_0-1789478804307.png Sami2098_1-1789478831337.pngSami2098_1-1789478831337.pngSami2098_1-1789478831337.png Sami2098_2-1789478911944.pngSami2098_2-1789478911944.pngSami2098_2-1789478911944.png Sami2098_3-1789478932611.pngSami2098_3-1789478932611.pngSami2098_3-1789478932611.png 此致。   Re: S32K31XEVB-Q100FlexCAN0 — Loopback works fine, but no reception with external CANoe Tool 你好@Sami2098 , 请问您目前使用的是哪个RTD版本? 我们社区里有一些例子可以作为参考: 回复:S32K311 的 CAN 示例 - NXP 社区 示例 S32K312 CAN 发送和接收,使用轮询模式 DS3.5 RTD300 [RTD600 MCAL & IP] S32K3X4EVB - T172 FlexCAN 示例(中断/轮询) FlexCAN配置整体看起来没问题。请确认 PTA6/7 是否分别配置为输入和输出,并且您确实调用了 Siul2_Port_Ip_Init() API 来初始化端口? Julin_AragnM_2-1789514266922.pngJulin_AragnM_2-1789514266922.pngJulin_AragnM_2-1789514266922.pngJulin_AragnM_2-1789514266922.png 由于您使用的是 S32K1XEVB,使用的收发器是 FS23,当 FS23 处于调试模式时,CAN 收发器默认设置为运行模式,因此无需设置 CAN_MODE = 0b1x。 我还建议检查 S32K311<->CANoe 之间配置的比特率和采样点是否相同。 最后,如果您有逻辑分析仪或示波器,能否分享一下CANTXD、CANRXD、CANH 和 CANL 信号? 此致, 朱利安 Re: S32K31XEVB-Q100FlexCAN0 — Loopback works fine, but no reception with external CANoe Tool 你好Julián_AragónM 谢谢你调查此事。我找到了根本原因——实际上是我这边的CANoe 通道总线配置问题,而不是 S32K311 CAN 驱动程序配置问题。修正 CANoe Vector 配置后,接收功能现在正常了。 后续问题: 我目前运行的波特率为500 kbps ,我知道如果我切换到不同的波特率(例如125 kbps ),则需要重新计算几个相关参数——例如预分频器、传播段、相位段 1、相位段 2 和重新同步跳转宽度——以保持相对于 CAN 外设时钟的正确位时序和采样点。 请问谁能提供一份参考资料/指南文件,解释以下内容: 这些位定时参数(预分频器、Prop Seg、PS1、PS2、SJW)如何与不同的目标波特率相关以及如何针对不同的目标波特率进行推导。 汽车/工业环境中不同波特率的推荐采样点范围。 任何与S32K3xx FlexCAN MCAL (AUTOSAR)配置工具(用于位时序计算)相关的 NXP 官方应用笔记或参考资料。 我正在使用AUTOSAR 模式下的 MCAL 层(用于 Can 驱动程序配置的 S32 配置工具),因此,如果能提供与此配置流程(而不是单独的寄存器级 FlexCAN 编程)相一致的指南,将会特别有帮助。 感谢您事先的指导。 Re: S32K31XEVB-Q100FlexCAN0 — Loopback works fine, but no reception with external CANoe Tool 你好@Sami2098 , 1.S32K3XX 参考手册 Rev. 12 中的第 73.3.10.8 章(协议定时)解释了位定时配置及其各种参数。 2. 这实际上取决于您的应用和配置;但是,标称比特率包括 125 kbps、250 kbps 和 500 kbps。 3. 您可以参考我们的FlexCAN 位时序计算表。您还可以参考S32K3XX FlexCAN 和 RTD 培训幻灯片。 此致, 朱利安
View full article
ガイダンスを求めています: OP-TEE 環境で se05x_Minimal が失敗します こんにちは、NXPコミュニティの皆さん、 ターゲットボード上でLinuxをOP-TEEで動se05x_Minimalかそうとしています。 このコミュニティ投稿( Plug and Trust MWをOP-TEEに統合する方法)で推奨されている解決策に従って、それに応じた環境を構築しました。 特に、ステップ2では、「CAAMを有効にする」を有効にせずに設定を構成しました。 この構成の結果、SE05xに接続されたI2CバスはOP-TEE(Secure World)によって管理され、標準的なLinuxのI2Cデバイスノード/dev/i2c-1はNormal World(Linux)では表示・利用できません。 Linuxユーザー空間コンソールから直接「./se05x_Minimal」を実行すると、以下のエラーが発生します: App :INFO :Running ./se05x_Minimal App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. App :INFO :PlugAndTrust_v04.07.01_20250519 App :INFO :Using default PlatfSCP03 keys. You can use keys from file using ENV=EX_SSS_BOOT_SCP03_PATH smCom :ERROR:opening failed... Failed to open the i2c bus: No such file or directory smCom :INFO :Pass i2c device address in the format : . smCom :INFO :Example ./example /dev/i2c-1:0x48 OR ./example /dev/i2c-1 smCom :ERROR:phPalEse_i2c_open_and_configure Failed retry smCom :ERROR:I2C init Failed: retval d smCom :ERROR:phPalEse_Init Failed smCom :ERROR: Failed to create physical connection with ESE sss :ERROR:SM_I2CConnect Failed. Status 7012 App :ERROR:sss_session_open failed App :ERROR:ex_sss_session_open Failed App :ERROR:!ERROR! ret != 0. 環境およびハードウェアセットアップ:評価ボード:MCIMX8M-WEVK(i.MX 8M デュアル/クアッド) セキュアエレメントボード:OM-SE051ARD セキュアエレメント:SE05x(Plug & Trust MW v04.07.01) OS:Linux(ノーマルワールド)+ OP-TEE(セキュアワールド) ミドルウェアオプション(CMake):-DPTMW_Host=iMXLinux、-DPTMW_SMCOM=T1oI2C 注:Linuxカーネル空間のダイレクトI2C(/dev/i2c-1)が有効se05x_Minimalなら問題なく動作します。 smComは、もはやノーマルワールド環境には存在しない物理的なLinux I2Cデバイス(/dev/i2c-X)をまだ開こうとしているようです。 この環境で正常に動作させるために、何をすべきか、何を修正すべきか指示se05x_Minimal教えていただけますか? SE050 Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment @Kan_Li 詳細な説明とC言語のサンプルコードをありがとうございました。 ご指導に従い、標準のPKCS#11 API(libckteec.so.0)を用いて、オプション1(OP-TEE独占I2Cセットアップ)でCアプリケーションを実装しました。 鍵生成、AESの暗号化/復号、RSA署名/検証、RSA暗号化/復号を含むすべての操作が、期待通りに完全に動作しています。 この問題解決へのサポートに感謝いたします。 Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment こんにちは、 @Uc_S さん。 これは非常に優れた、そして重要な質問です。簡潔に答えると次のようになります。 オプション1(OP-TEE専用I2C)では、Plug & Trust MW SSS APIはLinuxユーザースペースから直接使用できません。 libckteec.so を介して標準の PKCS#11 C API を使用する必要があります。 以下に、必要なすべての操作に関する詳細な説明と完全なC言語のコードサンプルを示します。 なぜこの構成ではSSS APIを使えないのか Plug & Trust MW SSS API ( sss_session_open 、 sss_key_store_set_key 、 sss_asymmetric_sign_digest など) は、SE051 と通信するためにトランスポート層に依存しています。サポートされているすべてのトランスポート( T1oI2C 、 JRCP_V1_AM など)は最終的にLinux I2Cアクセスかプロキシサーバーを必要としますが、OP-TEEがI2Cバスを独占的に所有している場合、どちらも利用できません。 OP-TEE排他設定における正しいパスは次のとおりです。 Your C App → PKCS#11 C API (cryptoki.h) → libckteec.so → OP-TEE PKCS#11 TA → SE051 libckteec optee-client が提供するもので、OP-TEE PKCS#11 TAをバックエンドとしてCryptokiインターフェースを実装しています。TAはさらにOP-TEEのネイティブI2Cドライバを介して暗号処理をSE051にルーティングします。 必須ヘッダーとリンク #include /* 標準の Cryptoki ヘッダー — optee-client または OpenSC から */ コンパイルとリンク: gcc -o my_app my_app.c-ldl # または直接リンクしてください: gcc -o my_app my_app.c/usr/lib/libckteec.so.0 実行時に、動的ロードを使用する場合はモジュールパスを設定します。 #define PKCS11_MODULE "/usr/lib/libckteec.so.0" 初期化とトークン設定(起動時に一度だけ呼び出してください) #include #include #include #define CHECK_RV(RV、メッセージ)\ もし((RV)!= CKR_OK) { fprintf(stderr, "%s failed: 0x%lX\n", (msg), (rv)); goto cleanup; } /* ユーザーPIN — pkcs11-tool --init-pin */ static CK_UTF8CHAR user_pin[] = "1234"; 静的CK_ULONG user_pin_len = 4; CK_FUNCTION_LIST *p11 = NULL;/* グローバル関数リストポインタ */ CK_SESSION_HANDLE セッション = CK_INVALID_HANDLE; int pkcs11_init(void) { CK_RV rv; CK_ULONG slot_count = 0; CK_SLOT_ID slot_id; CK_SLOT_ID slot_list[8]; /* 関数リストの読み込み — 動的リンクを使用する場合、 C_GetFunctionList() */ rv = C_Initialize(NULL_PTR); CHECK_RV(rv, "C_Initialize"); /* 利用可能なスロットを獲得 */ rv = C_GetSlotList(CK_TRUE, NULL_PTR, &slot_count); CHECK_RV(rv, "C_GetSlotList (count)"); rv = C_GetSlotList(CK_TRUE, slot_list, &slot_count); CHECK_RV(rv, "C_GetSlotList"); slot_id = slot_list[0];/* 用途 最初のスロット — OP-TEE PKCS#11 TA */ /* 読み書きセッションを開く */ rv = C_OpenSession(slot_id, CKF_SERIAL_SESSION |CKF_RW_SESSION, NULL_PTR, NULL_PTR, &session); CHECK_RV(rv, "C_OpenSession"); /* 通常ユーザーとしてログイン */ rv = C_Login(session, CKU_USER, user_pin, user_pin_len); CHECK_RV(rv、「C_Login」); 0を返す; クリーンアップ: 返却 -1; } void pkcs11_cleanup(void) { C_Logout(セッション); C_CloseSession(セッション); C_Finalize(NULL_PTR); } 操作1:RSA鍵ペアを生成し、SE051に保存する int generate_rsa_keypair(CK_OBJECT_HANDLE *pub_key, CK_OBJECT_HANDLE *priv_key) ヤージュ CK_RV rv; CK_MECHANISM mech = { CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0 }; CK_ULONG キービット数 = 2048; CK_BYTE pub_exponent[] = { 0x01, 0x00, 0x01 }; /* 65537 */ CK_BBOOL ck_true = CK_TRUE; CK_BBOOL ck_false = CK_FALSE; /* SE051 NVMに保存されるキーID — 一意の4バイトIDを選択してください */ CK_BYTE key_id[] = { 0x10, 0x10, 0x10, 0x10 }; CK_ATTRIBUTE pub_tmpl[] = { { CKA_MODULUS_BITS, &key_bits, sizeof(key_bits) }, { CKA_PUBLIC_EXPONENT, pub_exponent, sizeof(pub_exponent) }, { CKA_VERIFY, &ck_true, sizeof(ck_true) }, { CKA_ENCRYPT, &ck_true, sizeof(ck_true) }, { CKA_TOKEN, &ck_true, sizeof(ck_true) }, { CKA_ID、key_id、sizeof(key_id) }、 }; CK_ATTRIBUTE priv_tmpl[] = { { CKA_SIGN, &ck_true, sizeof(ck_true) }, { CKA_DECRYPT, &ck_true, sizeof(ck_true) }, { CKA_TOKEN, &ck_true, sizeof(ck_true) }, { CKA_SENSITIVE, &ck_true, sizeof(ck_true) }, { CKA_EXTRACTABLE, &ck_false, sizeof(ck_false) }, { CKA_ID、key_id、sizeof(key_id) }、 }; rv = C_GenerateKeyPair(session, &mech, pub_tmpl、sizeof(pub_tmpl) / sizeof(pub_tmpl[0])、 priv_tmpl、sizeof(priv_tmpl) / sizeof(priv_tmpl[0])、 公開鍵、秘密鍵); CHECK_RV(rv, "C_GenerateKeyPair"); printf("RSA-2048キーペアが生成されました。秘密鍵はSE051 NVMに保存されます。\n"); 0を返す。 掃除: -1を返す。 } 操作2:SE051でAESキーとストアを生成する int generate_aes_key(CK_OBJECT_HANDLE *aes_key) { CK_RV rv; CK_MECHANISM mech = { CKM_AES_KEY_GEN, NULL_PTR, 0 }; CK_ULONG key_len = 32;/* 256ビットAES */ CK_BBOOL ck_true = CK_TRUE; CK_BBOOL ck_false = CK_FALSE; CK_BYTE key_id[] = { 0x20, 0x00, 0x00, 0x01 }; CK_ATTRIBUTE aes_tmpl[] = { { CKA_VALUE_LEN, &key_len, sizeof(key_len) }, { CKA_ENCRYPT, &ck_true, sizeof(ck_true) }, { CKA_DECRYPT, &ck_true, sizeof(ck_true) }, { CKA_TOKEN, &ck_true, sizeof(ck_true) }, { CKA_SENSITIVE, &ck_true, sizeof(ck_true) }, { CKA_EXTRACTABLE, &ck_false, sizeof(ck_false) }, { CKA_ID, key_id, sizeof(key_id) }, }; rv = C_GenerateKey(セッション、&mech、 aes_tmpl、sizeof(aes_tmpl) / sizeof(aes_tmpl[0]), aes_key); CHECK_RV(rv、「C_GenerateKey (AES)」)); printf("AES-256キーがSE051で生成・保存される");0を返す。 掃除: -1を返す。 } 操作3および4:AES-CBC暗号化/復号 int aes_encrypt(CK_OBJECT_HANDLE aes_key, const CK_BYTE *plaintext, CK_ULONG plaintext_len, CK_BYTE *暗号文、CK_ULONG *暗号文の長さ) ヤージュ CK_RV rv; CK_BYTE iv[16] = { 0 }; /* 例:すべてゼロのIV。本番環境ではランダムなIVを使用してください */ CK_MECHANISM mech = { CKM_AES_CBC_PAD, iv, sizeof(iv) }; rv = C_EncryptInit(session, &mech, aes_key); CHECK_RV(rv, "C_EncryptInit"); rv = C_Encrypt(session, (CK_BYTE *)plaintext, plaintext_len, 暗号文、暗号文の長さ); CHECK_RV(rv, "C_Encrypt"); 0を返す。 掃除: -1を返す。 } int aes_decrypt(CK_OBJECT_HANDLE aes_key, const CK_BYTE *ciphertext、CK_ULONG ciphertext_len、 CK_BYTE *プレーンテキスト、CK_ULONG *プレーンテキスト長) ヤージュ CK_RV rv; CK_BYTE iv[16] = { 0 }; /* 暗号化に使用されるIVと一致する必要があります */ CK_MECHANISM mech = { CKM_AES_CBC_PAD, iv, sizeof(iv) }; rv = C_DecryptInit(session, &mech, aes_key); CHECK_RV(rv, "C_DecryptInit"); rv = C_Decrypt(session, (CK_BYTE *)ciphertext, ciphertext_len, プレーンテキスト、プレーンテキストの長さ); CHECK_RV(rv, "C_Decrypt"); 0を返す。 掃除: -1を返す。 } 操作5および6:RSA署名(秘密鍵はSE051に保存)および検証 int rsa_sign(CK_OBJECT_HANDLE priv_key, const CK_BYTE *data, CK_ULONG data_len, CK_BYTE *署名、CK_ULONG *署名長) ヤージュ CK_RV rv; /* SHA256-PKCS1v1.5 — SE051 は内部で SHA-256 ダイジェストを計算してから署名します */ CK_MECHANISM mech = { CKM_SHA256_RSA_PKCS, NULL_PTR, 0 }; rv = C_SignInit(session, &mech, priv_key); CHECK_RV(rv, "C_SignInit"); rv = C_Sign(session, (CK_BYTE *)data, data_len, signature, sig_len); CHECK_RV(rv, "C_Sign"); printf("RSA署名が生成されました(%luバイト)。秘密鍵はSE051から一度も出ていません。*sig_len); 0を返す。 掃除: -1を返す。 } int rsa_verify(CK_OBJECT_HANDLE pub_key, const CK_BYTE *data, CK_ULONG data_len, const CK_BYTE *signature, CK_ULONG sig_len) ヤージュ CK_RV rv; CK_MECHANISM mech = { CKM_SHA256_RSA_PKCS, NULL_PTR, 0 }; rv = C_VerifyInit(session, &mech, pub_key); CHECK_RV(rv, "C_VerifyInit"); rv = C_Verify(session, (CK_BYTE *)data, data_len, (CK_BYTE *)署名、sig_len); if (rv == CKR_OK) { printf("署名検証:成功\n"); 0を返す。 } else if (rv == CKR_SIGNATURE_INVALID) { printf("署名検証: 無効\n"); 1を返す。 } CHECK_RV(rv, "C_Verify"); 掃除: -1を返す。 } 操作7と8:RSA暗号化/復号 int rsa_encrypt(CK_OBJECT_HANDLE pub_key, const CK_BYTE は *平文、CK_ULONG plaintext_len、 CK_BYTE *暗号文、CK_ULONG *ciphertext_len) { CK_RV rv; /* RSA-OAEP with SHA-256 — 新規設計にはPKCS1 v1.5より推奨 */ CK_RSA_PKCS_OAEP_PARAMS oaep_params = { .hashAlg= CKM_SHA256、 .mgf= CKG_MGF1_SHA256、 。ソース= CKZ_DATA_SPECIFIED、 .pSourceData= NULL、 .ulSourceDataLen= 0 }; CK_MECHANISM mech = { CKM_RSA_PKCS_OAEP, &oaep_params, sizeof(oaep_params) }; rv = C_EncryptInit(session, &mech, pub_key); CHECK_RV(rv, "C_EncryptInit (RSA-OAEP)"); rv = C_Encrypt(session, (CK_BYTE *)plaintext, plaintext_len, 暗号文、暗号文の長さ); CHECK_RV(rv, "C_Encrypt (RSA-OAEP)"); 0を返す。 掃除: -1を返す。 } int rsa_decrypt(CK_OBJECT_HANDLE priv_key, const CK_BYTE *ciphertext、CK_ULONG ciphertext_len、 CK_BYTE *プレーンテキスト、CK_ULONG *プレーンテキスト長) ヤージュ CK_RV rv; CK_RSA_PKCS_OAEP_PARAMS oaep_params = { .hashAlg= CKM_SHA256、 .mgf= CKG_MGF1_SHA256、 。ソース= CKZ_DATA_SPECIFIED、 .pSourceData= NULL、 .ulSourceDataLen= 0 }; CK_MECHANISM mech = { CKM_RSA_PKCS_OAEP, &oaep_params, sizeof(oaep_params) }; rv = C_DecryptInit(session, &mech, priv_key); CHECK_RV(rv, "C_DecryptInit (RSA-OAEP)"); rv = C_Decrypt(session, (CK_BYTE *)ciphertext, ciphertext_len, プレーンテキスト、プレーンテキストの長さ); CHECK_RV(rv, "C_Decrypt (RSA-OAEP)"); printf("RSA復号化が完了しました。秘密鍵はSE051から一度も出ていません。\n");0を返す。 掃除: -1を返す。 } 既存キーへのアクセス(再生成なし) 鍵が以前に生成され、SE051に保存されている場合は、 C_GenerateKey を再度呼び出すことなく、CKA_IDを使用して鍵を取得します。 int find_key_by_id(CK_BYTE *key_id, CK_ULONG key_id_len, CK_OBJECT_CLASS obj_class、 CK_OBJECT_HANDLE *ハンドル) ヤージュ CK_RV rv; CK_ULONG obj_count = 0; CK_ATTRIBUTE search_tmpl[] = { { CKA_CLASS, &obj_class, sizeof(obj_class) }, { CKA_ID、key_id、key_id_len }、 }; rv = C_FindObjectsInit(session, search_tmpl, sizeof(search_tmpl) / sizeof(search_tmpl[0])); CHECK_RV(rv, "C_FindObjectsInit"); rv = C_FindObjects(session, handle, 1, &obj_count); CHECK_RV(rv, "C_FindObjects"); C_FindObjectsFinal(session); if (obj_count == 0) { fprintf(stderr, "キーがSE051で見つかりません\n"); -1を返す。 } 0を返す。 掃除: C_FindObjectsFinal(session); -1を返す。 } 使用例: CK_OBJECT_HANDLE プライベートキー; CK_BYTE key_id[] = { 0x10, 0x10, 0x10, 0x10 }; CK_OBJECT_CLASS priv_class = CKO_PRIVATE_KEY; find_key_by_id(key_id, sizeof(key_id), priv_class, &priv_key); 対応メカニズム(OP-TEE PKCS#11 TA + SE051で検証済み) 動作 機構定数 備考 RSA鍵生成 CKM_RSA_PKCS_KEY_PAIR_GEN 256~4096ビット AESキー生成 CKM_AES_KEY_GEN 16バイトまたは32バイト RSA署名/検証 CKM_SHA256_RSA_PKCS PKCS#1 v1.5 RSA署名/検証(PSS) CKM_SHA256_RSA_PKCS_PSS PSSパディング RSA暗号化/復号化 CKM_RSA_PKCS_OAEP OAEP推奨 RSA暗号化/復号化 CKM_RSA_PKCS PKCS#1 v1.5 AESの暗号化/復号 CKM_AES_CBC_PAD CBCとPKCS#7 AESの暗号化/復号 CKM_AES_CBC パディングなしのCBC AESの暗号化/復号 CKM_AES_CTR CTRモード ECC署名/検証 CKM_ECDSA_SHA256 160~521ビット ECDHの主要合意 CKM_ECDH1_DERIVE   SSS APIはそもそも使えますか? はい、ただし共 存環境(オプション2 )でのみ、LinuxがI2Cバスにアクセスできる場合(つまり lf-6.12.y-i2c-disabled-se050 DTSパッチが適用されていない場合)。その場合、AN13030セクション3.3に説明されているSSS APIをLinuxから直接利用できます。 オプション1(OP-TEE専用)を選択すると、上記のCryptoki/PKCS#11 C APIがLinuxユーザースペースからの正確かつ唯一サポートされている経路です。 参照 AN13030 Rev. 2.4、セクション3.3 — SSS APIの完全リファレンス(共存/非OP-TEEビルド用) OP-TEE PKCS#11 TAテストスイート(pkcs11_1000.c): optee-test/host/xtest/pkcs11_1000.c — Cryptoki のすべての操作に関する包括的な C 言語の例 NXP GitHub: se05x-pkcs11 — NXPのPKCS#11スタンドアロンライブラリ(OP-TEE以外のビルドでは libckteec.so 代替として使用可能)   お役に立てば幸いです。   すてきな一日を、 カン ------------------------------------------------------------------------------- 注記: この投稿があなたの質問への回答になっている場合は、「正解としてマーク」ボタンをクリックしてください。ありがとうございます! - 前回の投稿から7週間Threadをフォローしており、その後の返信は無視しています もし後で関連する質問があれば、新しいThreadを開き、閉じたThreadを参照してください。 ------------------------------------------------------------------------------- Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment @Kan_Li 分かりやすく詳細なご説明をありがとうございました。 現在、将来の開発段階に応じてオプション1かオプション2の使用を検討しています(例:初期テスト・評価にオプション2、本番にオプション1を使う)。 オプション1(OP-TEE PKCS#11 TA)についてですが、C言語でのアプリケーション開発に関する質問があります。 オプション1に従って、鍵の保存、署名/署名生成、署名検証、暗号化/復号化などの暗号化操作をCプログラムで実装する場合、どの方法を採用すべきでしょうか? 標準的なPKCS#11 API(例:C_Initialize、C_CreateObject、C_SignInit、C_Sign、C_VerifyInit、C_Verifyなど)をOP-TEEのPKCS#11ライブラリ(libckteec.so)経由で直接呼び出すCプログラムを書くべきでしょうか? あるいは、この設定でもPlug & Trust MW SSS API(sss_key_store_set_key、sss_asymmetric_sign_digest、sss_asymmetric_verify_digest、sss_cipher_updateなど)を使用することは可能/推奨されますか? もしPKCS#11 APIが必要な場合、Cで libckteec.so を呼び出すための簡単なサンプルコードや参考ガイドを教えていただけますか? Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment こんにちは、 @Uc_S さん、 詳細な報告をありがとうございました。根本原因は明確で、なぜこうなるのか、そしてどんな選択肢があるのかを正確に説明します。 根本的な原因 se05x_Minimal -DPTMW_SMCOM=T1oI2C で構築されました。これにより、smComレイヤーはセッションオープン時に物理的なLinux I2Cデバイスノード( /dev/i2c-X )を開くよう指示されます。 lf-6.12.y-i2c-disabled-se050 DTSパッチ(統合ガイドのステップ1)を適用したため、Linux Normal WorldではそのI2Cコントローラが無効化されており、デバイスノード自体が存在しません。OP-TEEは CFG_IMX_I2C=y を通じてI2Cバスを独占的に所有しており、Linuxはそれを認識したり開いたりできません。 これは意図的なもので 、DTSパッチがOP-TEEにSE051への独占的かつ無競争のアクセス権を与えるものです。 T1oI2C で構築された se05x_Minimal バイナリは、この構成と根本的に互換性がありません。 あなたの2つの選択肢 ✅ オプション1 — OP-TEE PKCS#11 TAを使用する(生産用途に推奨) これはOP-TEE独占セットアップにおけるLinuxユーザースペースの意図パスです。 se05x_Minimal を実行する代わりに、 pkcs11-tool またはOpenSSLと libckteec.so (OP-TEE PKCS#11 TAライブラリ)を使用してください。TAは内部的にSE051を暗号バックエンドとして、OP-TEEのネイティブI2Cドライバを介して使用しています。 SE051がPKCS#11経由で到達可能であることを簡単に検証します。 # List available PKCS#11 slots — SE051 should appear pkcs11-tool --module /usr/lib/libckteec.so.0 --list-slots # Get a random number from SE051 via OP-TEE pkcs11-tool --module /usr/lib/libckteec.so.0 --generate-random 16 | xxd スロットとランダムなバイト列が表示されている場合、SE051はOP-TEEを介して完全にアクセス可能です。 se05x_Minimal を実行する必要はありません。PKCS#11 TAが既に提供している機能と重複しています。 ✅ オプション2 — 共存環境の構築(開発/テストに推奨) Linuxユーザースペースから se05x_Minimal やその他のPlug & Trust MWデモを実行する必要がある場合は、Linux DTSがI2Cを有効にしたまま共 存する環境 (つまり、I2C無効のDTSパッチを適用 しない )を用いてください。 手順: ステップ1 — 通常世界でI2Cを有効にし続けるためにLinux DTSを元に戻す lf-6.12.y-i2c-disabled-se050 パッチなしで、未改変のLinux DTSから imx8mq-evk.dtb (または同等のもの)を構築しましょう。SE051のI2CコントローラノードはLinux上で有効化されたままである必要があります。 ステップ2 — 既存のcmakeフラグは変更しない 現在のcmakeの設定は共存環境において正しいです。 cmake -S . -B ./build/ -DPTMW_Applet=SE05X_C -DPTMW_SE05X_Ver=07_02 -DPTMW_Host=iMXLinux -DPTMW_SMCOM=T1oI2C -DPTMW_HostCrypto=OPENSSL -DPTMW_RTOS=Default -DPTMW_mbedTLS_ALT=None -DPTMW_SCP=SCP03_SSS -DPTMW_SE05X_Auth=PlatfSCP03 -DPTMW_Log=Silent -DCMAKE_BUILD_TYPE=Release -DPTMW_OpenSSL=3_0 -DPTMW_SE_RESET_LOGIC=1 ステップ3 — 実行前にI2Cポートを設定する export EX_SSS_BOOT_SSS_PORT=/dev/i2c-1 ./se05x_Minimal トレードオフ: このモードでは、OP-TEEとLinuxの両方がSE051へのI2Cバスを共有します。OP-TEEはRSA/ECCオフロードに使っています。LinuxはMWデモに使っています。同時アクセスは仲裁されず、負荷時にAPDUの衝突が発生することがあります。開発用途には許容範囲内だが、製品版での使用は推奨しない。 概要 オプション I2C DTS se05x_ミニマル OP-TEE限定 おすすめ対象 PKCS#11 TA ( libckteec.so ) ディセーブルされる ❌ 不要 ✅ はい 量産 共存(T1oI2C) イネーブル ✅ 作品 ⚠️ 共有I2C 開発/テスト 統合ガイドに関する説明 あなたが参照したコミュニティ投稿(ステップ2 - CAAMなし)では、OP-TEEがI2Cを独占的に所有するように設定されています。そのガイドに示されたLinux側のMWコンパイル( T1oI2C 付き)は、OP-TEEモードに切り替える前の 初期検証ステップ として意図されており、OP-TEE専用のI2Cセットアップと併用するものではありません。 OP-TEEがI2Cを独占的に所有すると、正しいLinuxユーザースペースインターフェースは OP-TEE PKCS#11 TAであり、Plug & Trust MW SSS APIデモ自体ではありません。 どの選択肢があなたのユースケースに合っているか教えていただければ、さらなるアドバイスを提供できます。 すてきな一日を、 カン ------------------------------------------------------------------------------- 注記: この投稿があなたの質問への回答になっている場合は、「正解としてマーク」ボタンをクリックしてください。ありがとうございます! - 前回の投稿から7週間Threadをフォローしており、その後の返信は無視しています もし後で関連する質問があれば、新しいThreadを開き、閉じたThreadを参照してください。 -------------------------------------------------------------------------------
View full article
使用 s32k144 MBD 工具箱进行 I2C 读写 你好, 我正在使用 s32k144 从外部 EEPROM 读取和写入数据。我将在下面附上模型。我可以写入数据,但读取操作返回 255+NACK 作为输出。我是不是漏掉了什么? Sriram_0-1737789999186.pngSriram_0-1737789999186.png Sriram_1-1737790013461.pngSriram_1-1737790013461.png 是否有办法在 I2Cmaster 模块中指定 EEPROM 的寄存器地址? Sriram_2-1737790096449.pngSriram_2-1737790096449.png 各位能帮我解决这个问题吗? 谢谢 Re: I2C read and write using s32k144 MBD toolbox 您好, 我也遇到了同样的问题,在使用S32K144作为主设备, ST M24C04 EEPROM作为从设备进行 I2C 通信时,出现了问题。 由于你们使用的是相同的微控制器和 EEPROM,我想确认一下你们是否找到了解决方案。如果您已经解决了这个问题,能否分享一下解决方案或者告诉我是什么方法解决了这个问题? 提前感谢您的帮助。 Re: I2C read and write using s32k144 MBD toolbox 我使用的是 M24C02-DRE EEPROM
View full article
S32 设计工作室安装问题 我在使用 S32 设计工作室 (V3.6.4) 时遇到问题。安装。安装开始后,安装进度条立即停止显示,但我看不到任何已安装的应用程序。 请指导我如何解决这个问题。 系统配置为:Windows 11,16GB 内存,1TB 固态硬盘。请注意,该系统遵循我公司的IT政策。 Re: S32 Design Studio Installation Issue 请查看下方所需的日志文件。 我们尝试安装两次,但都失败了。 Re: S32 Design Studio Installation Issue 嗨@ashutoshsahu 能否请您提供一下安装日志文件(.log)?它应该位于: C:\NXP\S32DS.3.6.4\_S32Design Studio for S32 Platform 3.6.4_installation\Logs BR,VaneB Re: S32 Design Studio Installation Issue 嗨@ashutoshsahu 我已查看安装日志,并发现安装程序尝试运行 powershell -ExecutionPolicy Bypass -File parallel.ps1 时出现一个重要错误: “此程序已被组策略阻止。”如需更多信息,请联系您的系统管理员。 根据此错误,建议您与 IT 团队核实,确认是否存在任何网络安全策略、组策略限制、防火墙规则或代理设置阻止 PowerShell 脚本正常运行。
View full article
i.MX8DXL CAAM COVER 对 P-384 私钥/黑斑用例的限制 您好,NXP团队: 我们正在评估 i.MX8DXL CAAM 对 ECDSA P-384 黑键/blob 的支持情况。 观察到的结果 P-256 从外部提供的明文 P-256 私钥开始: 明文密钥 → 封面 → 黑键斑点 从黑斑中恢复黑键 ECDSA 签名/核实 结果:通过 P-384(CAAM 生成的黑键) 生成 ECDSA 私钥,颜色为 KEY_COLOR_BLACK 无需 COVER 操作即可从私钥生成黑块 从黑斑中恢复黑键 ECDSA 签名/核实 结果:通过 P-384(外部明文私钥) 从外部提供的明文 P-384 私钥(48 字节)开始: 明文密钥 → 封面 → 黑键斑点 从黑斑中恢复黑键 ECDSA 签名/核实 结果:失败 补充观察 我们在NXP的补丁中注意到以下注释: https://github.com/nxp-imx-support/imx_sec_apps/blob/master/caam-ecdsa-blackkey/patch/0002-caam-black-key-blob-feature.patch /* * KEY 命令似乎限制为 32 字节,因此我们应该使用加载方式。 * 改为使用最多可加载 64 字节的命令。 * * TODO:KEY 命令表明它应该能够加载更大的密钥。 * 小于 32 字节,但实际上行不通 * * TODO:LOAD 命令表明它应该能够加载最多 96 个文件 * 字节键在实践中不起作用,并且限制为 64 字节。 */ 我们观察到了类似的行为。 使用 LOAD 命令而不是 KEY 命令,我们可以处理大于 32 字节的密钥,包括 48 字节的 P-384 私钥。 然而,这并不能解决上述问题。虽然可以将密钥覆盖并存储在一个块状物中,但恢复后的黑密钥不能成功用于 ECDSA 签名/验证。   我们的疑问: CAAM COVER 操作对于大于 32 字节的 ECC 私钥是否存在任何已知限制? 通过 COVER 导入外部 P-384 明文私钥,然后将其用作 ECDSA 黑密钥,这是否是支持的用例? 观察到的这种现象是否是由于 CAAM 硬件限制造成的? 是否有推荐的 CAAM 方法可以导入外部生成的 P-384 明文私钥并将其用作 ECDSA 操作的黑密钥? 任何指导都将不胜感激。 谢谢,并致以最诚挚的问候! 霍詹姆斯。 Re: i.MX8DXL CAAM COVER limitation for P-384 private key / black blob use case 补充说明:   我们关注的重点不仅限于 ECDSA 用例。   即使通过 COVER 导入外部 P-384 私钥不是 ECDSA 支持的工作流程,我们仍然想了解 COVER 操作本身的局限性。   在我们的应用中,COVER 操作不仅可以用于保护 ECDSA 私钥,还可以用于保护一般敏感数据。因此,支持大于 32 字节的有效载荷大小是一个重要的考虑因素。 根据我们的测试,使用 LOAD 命令变通方法可以处理大于 32 字节的有效载荷。小于约 80 字节的有效载荷似乎可以正常工作,而更大的有效载荷则表现出不稳定的行为。我们想了解这些观察结果反映的是 CAAM 的实际局限性还是实施问题。 NXP能否也澄清一下,COVER 操作本身是否存在任何已记录的大小限制,而与 ECDSA 用例无关?   谢谢! Re: i.MX8DXL CAAM COVER limitation for P-384 private key / black blob use case 我们需要搭建测试CAAM功能的环境。一旦有了结果,我们会立即通知您。 Re: i.MX8DXL CAAM COVER limitation for P-384 private key / black blob use case 王一平您好, 谢谢回复。 >>对于这一部分,您观察到了什么CAAM错误? >>请提供错误代码? 我们对所有与 ECDSA 相关的操作都使用以下代码补丁: " https://github.com/nxp-imx-support/imx_sec_apps/blob/master/caam-ecdsa-blackkey/patch/0001-linux-imx-4.14.78_1.0.0_ga-ecdsa-primitives-using-caam.patch " 当调用 caam_ecdsa_verify() 进行签名验证时, 它返回“ECDSA_VERIFY_FAIL (0)”。 仅当使用“P-384(外部明文私钥)”时才会出现错误。 >> 应用笔记“AN12838-使用 CAAM 安全密钥加强公钥密码学”描述了使用黑密钥的 ECDSA 签名演示,您是否正在使用类似的实现进行测试? 对于我们成功的案例,是的,它们很相似。 但对于我们失败的案例“P-384(外部明文私钥)”, 情况略有不同:密钥来自外部。 顺祝商祺! Re: i.MX8DXL CAAM COVER limitation for P-384 private key / black blob use case “明文密钥 → 封面 → 黑键斑点 从黑斑中恢复黑键 ECDSA 签名/核实 结果:失败 在这一部分,你观察到了什么CAAM错误?能否提供错误代码?应用笔记“AN12838-使用 CAAM 安全密钥加强公钥密码学”描述了使用黑密钥的 ECDSA 签名演示,您是否正在使用类似的实现进行测试?谢谢。 关于KEY命令的限制,目前仍在调查中。
View full article
NXP S32k118 I2C emulation Hello, I am evaluating an approach to drive 10 identical-address I2C slaves simultaneously from an S32K118 (Q48) master without using an I2C multiplexer. My plan is to emulate 10 parallel I2C buses by using a hardware timer to generate the clock, combined with DMA transfers to simultaneously update 10 GPIO pins on the same port. Could you help confirm if the S32K118’s DMA and timer peripherals support triggering port-wide GPIO updates in this manner? Are there any hardware limitations or edge cases I should be aware of with this architecture? Best regards, Re: NXP S32k118 I2C emulation Hi @Luke_John, Yes, this architecture does fundamentally support. Refer to S32K1xx Series Reference Manual, Rev. 14: Section 13.3.1 GPIO register descriptions. As you can see, all the GPIO ports are accessible from 32bit registers. Section 17.4.1 "Using the GPIO ports to drive or sample waveforms By configuring the DMA to transfer data to one or more GPIO ports, it is possible to create complex waveforms using tabular data stored in on-chip memory. Conversely, using the DMA to periodically transfer data from one or more GPIO ports, it is possible to sample complex waveforms and store the results in tabular form in on-chip memory." The DMA tranfers can be triggered by a timer through DMAMUX, TRGMUX. Crossbar must be programmed to round-robin arbitration (configuring MCM_CPCR[CBRR] as '1') for seamless DMA transfers. Regards, Daniel
View full article
寻求指导:se05x_Minimal 在 OP-TEE 环境中失败 NXP社区的各位朋友,大家好! 我正在尝试在运行 Linux 和 OP-TEE 的目标板上运行 se05x_Minimal。 根据这篇社区帖子(如何将 Plug and Trust MW 集成到 OP-TEE 中)中推荐的解决方案,我们相应地构建了环境。 具体来说,对于步骤 2,我们在配置设置时没有启用“保持 CAAM 启用”选项。 由于这种配置,连接到 SE05x 的 I2C 总线由 OP-TEE(安全世界)管理,标准的 Linux I2C 设备节点 /dev/i2c-1 在普通世界(Linux)中不可见/不可用。 当直接从 Linux 用户空间控制台执行 `./se05x_Minimal` 时,会遇到以下错误: App :INFO :Running ./se05x_Minimal App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. App :INFO :PlugAndTrust_v04.07.01_20250519 App :INFO :Using default PlatfSCP03 keys. You can use keys from file using ENV=EX_SSS_BOOT_SCP03_PATH smCom :ERROR:opening failed... Failed to open the i2c bus: No such file or directory smCom :INFO :Pass i2c device address in the format : . smCom :INFO :Example ./example /dev/i2c-1:0x48 OR ./example /dev/i2c-1 smCom :ERROR:phPalEse_i2c_open_and_configure Failed retry smCom :ERROR:I2C init Failed: retval d smCom :ERROR:phPalEse_Init Failed smCom :ERROR: Failed to create physical connection with ESE sss :ERROR:SM_I2CConnect Failed. Status 7012 App :ERROR:sss_session_open failed App :ERROR:ex_sss_session_open Failed App :ERROR:!ERROR! ret != 0. 环境及硬件设置:评估板:MCIMX8M-WEVK(i.MX 8M 双核/四核) 安全元件板:OM-SE051ARD 安全元件:SE05x(Plug & Trust MW v04.07.01) 操作系统:Linux(普通环境)+ OP-TEE(安全环境) 中间件选项(CMake):-DPTMW_Host=iMXLinux,-DPTMW_SMCOM=T1oI2C 注意:如果启用了 Linux 内核空间直接 I2C (/dev/i2c-1),则 se05x_Minimal 可以正常工作。 smCom 似乎仍在尝试打开物理 Linux I2C 设备 (/dev/i2c-X),该设备在我们的正常世界环境中已不存在。 请问能否提供一些说明,告诉我们需要进行哪些操作或修改,才能使 se05x_Minimal 在此设置下成功运行? SE050 Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment @Kan_Li 非常感谢您的详细解释和提供的C代码示例。 按照您的指导,我们使用标准 PKCS#11 API (libckteec.so.0) 在选项 1 (OP-TEE 独占 I2C 设置) 下实现了一个 C 应用程序。 所有操作——包括密钥生成、AES 加密/解密、RSA 签名/验证和 RSA 加密/解密——现在都完全按预期运行。 感谢您对解决此问题的支持。 Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment 嗨@Uc_S , 这是一个非常好的重要问题。简而言之: 在选项 1(OP-TEE 专用 I2C)中,Plug & Trust MW SSS API 不能直接从 Linux 用户空间使用。您必须通过 libckteec.so 使用标准的 PKCS#11 C API。 下面提供了所有必要操作的详细说明和完整的 C 代码示例。 为什么在此设置中无法使用 SSS API Plug & Trust MW SSS API( sss_session_open 、 sss_key_store_set_key 、 sss_asymmetric_sign_digest 等)依赖于传输层与 SE051 通信。所有受支持的传输( T1oI2C 、 JRCP_V1_AM 等)最终都需要 Linux I2C 访问或代理服务器——当 OP-TEE 独占 I2C 总线时,这两者都不可用。 OP-TEE 独占设置中的正确路径是: Your C App → PKCS#11 C API (cryptoki.h) → libckteec.so → OP-TEE PKCS#11 TA → SE051 libckteec 由 optee-client 提供,并以 OP-TEE PKCS#11 TA 作为其后端实现 Cryptoki 接口。TA 进而通过 OP-TEE 的原生 I2C 驱动程序将加密操作路由到 SE051。 必需的标头和链接 #include /* 标准 Cryptoki 标头 — 来自 optee-client 或 OpenSC */ 编译和链接: gcc -o my_app my_app.c-ldl 或者直接链接: gcc -o my_app my_app.c/usr/lib/libckteec.so.0 如果使用动态加载,则在运行时设置模块路径: #define PKCS11_MODULE "/usr/lib/libckteec.so.0" 初始化和令牌设置(启动时调用一次) #include #include #include #define CHECK_RV(rv, msg) \ 如果 ((rv) != CKR_OK) { fprintf(stderr, "%s 失败:0x%lX\n", (msg), (rv)); goto cleanup; } /* 用户 PIN 码 — 必须与使用 pkcs11-tool --init-pin 设置的 PIN 码一致 */ static CK_UTF8CHAR user_pin[] = "1234"; 静态CK_ULONG user_pin_len = 4; CK_FUNCTION_LIST *p11 = NULL; /* 全局函数列表指针 */ CK_SESSION_HANDLE session = CK_INVALID_HANDLE; int pkcs11_init(void) { CK_RV rv; CK_ULONG slot_count = 0; CK_SLOT_ID 插槽 ID; CK_SLOT_ID slot_list[8]; /* 加载函数列表 — 如果使用动态链接,请使用 C_GetFunctionList() */ rv = C_Initialize(NULL_PTR); CHECK_RV(rv, "C_Initialize"); /* 获取可用槽位 */ rv = C_GetSlotList(CK_TRUE, NULL_PTR, &slot_count); CHECK_RV(rv, "C_GetSlotList (count)"); rv = C_GetSlotList(CK_TRUE, slot_list, &slot_count); CHECK_RV(rv, "C_GetSlotList"); slot_id = slot_list[0]; /* 使用第一个槽位 — OP-TEE PKCS#11 TA */ /* 打开读写会话 */ rv = C_OpenSession(slot_id, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR、NULL_PTR、&session); CHECK_RV(rv, "C_OpenSession"); /* 以普通用户身份登录 */ rv = C_Login(session, CKU_USER, user_pin, user_pin_len); CHECK_RV(rv, "C_Login"); 返回 0; 清理: 返回 -1; } void pkcs11_cleanup(void) { C_Logout(session); C_CloseSession(session); C_Finalize(NULL_PTR); } 操作 1:生成 RSA 密钥对并存储在 SE051 中 int generate_rsa_keypair(CK_OBJECT_HANDLE *pub_key, CK_OBJECT_HANDLE *priv_key) { CK_RV rv; CK_MECHANISM mech = { CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0 }; CK_ULONG 密钥位数 = 2048; CK_BYTE pub_exponent[] = { 0x01, 0x00, 0x01 }; /* 65537 */ CK_BBOOL ck_true = CK_TRUE; CK_BBOOL ck_false = CK_FALSE; /* 密钥 ID 存储在 SE051 NVM 中 — 选择一个唯一的 4 字节 ID */ CK_BYTE key_id[] = { 0x10, 0x10, 0x10, 0x10 }; CK_ATTRIBUTE pub_tmpl[] = { { CKA_MODULUS_BITS, &key_bits, sizeof(key_bits) }, { CKA_PUBLIC_EXPONENT, pub_exponent, sizeof(pub_exponent) }, { CKA_VERIFY, &ck_true, sizeof(ck_true) }, { CKA_ENCRYPT, &ck_true, sizeof(ck_true) }, { CKA_TOKEN, &ck_true, sizeof(ck_true) }, { CKA_ID, key_id, sizeof(key_id) }, }; CK_ATTRIBUTE priv_tmpl[] = { { CKA_SIGN, &ck_true, sizeof(ck_true) }, { CKA_DECRYPT, &ck_true, sizeof(ck_true) }, { CKA_TOKEN, &ck_true, sizeof(ck_true) }, { CKA_SENSITIVE, &ck_true, sizeof(ck_true) }, { CKA_EXTRACTABLE, &ck_false, sizeof(ck_false) }, { CKA_ID, key_id, sizeof(key_id) }, }; rv = C_GenerateKeyPair(session, &mech, pub_tmpl,sizeof(pub_tmpl) / sizeof(pub_tmpl[0]), priv_tmpl, sizeof(priv_tmpl) / sizeof(priv_tmpl[0]), 公钥,私钥); CHECK_RV(rv, "C_GenerateKeyPair"); printf("RSA-2048 密钥对已生成。私钥保存在 SE051 NVM 中。\n"); 返回 0; 清理: 返回 -1; } 操作 2:生成 AES 密钥并存储在 SE051 中 int generate_aes_key(CK_OBJECT_HANDLE *aes_key) { CK_RV rv; CK_MECHANISM mech = { CKM_AES_KEY_GEN, NULL_PTR, 0 }; CK_ULONG key_len = 32; /* 256 位 AES */ CK_BBOOL ck_true = CK_TRUE; CK_BBOOL ck_false = CK_FALSE; CK_BYTE key_id[] = { 0x20, 0x00, 0x00, 0x01 }; CK_ATTRIBUTE aes_tmpl[] = { { CKA_VALUE_LEN, &key_len, sizeof(key_len) }, { CKA_ENCRYPT, &ck_true, sizeof(ck_true) }, { CKA_DECRYPT, &ck_true, sizeof(ck_true) }, { CKA_TOKEN, &ck_true, sizeof(ck_true) }, { CKA_SENSITIVE, &ck_true, sizeof(ck_true) }, { CKA_EXTRACTABLE, &ck_false, sizeof(ck_false) }, { CKA_ID, key_id, sizeof(key_id) }, }; rv = C_GenerateKey(session, &mech, aes_tmpl,sizeof(aes_tmpl) / sizeof(aes_tmpl[0]), aes_key); CHECK_RV(rv, "C_GenerateKey (AES)"); printf("AES-256密钥已生成并存储在SE051中。\n");返回 0; 清理: 返回 -1; } 操作 3 和 4:AES-密码块链接(CBC) 加密/解密 int aes_encrypt(CK_OBJECT_HANDLE aes_key, const CK_BYTE *plaintext, CK_ULONG plaintext_len, CK_BYTE *密文,CK_ULONG *密文长度) { CK_RV rv; CK_BYTE iv[16] = { 0 }; /* 示例:全零 IV;生产环境中使用随机 IV */ CK_MECHANISM mech = { CKM_AES_CBC_PAD, iv, sizeof(iv) }; rv = C_EncryptInit(session, &mech, aes_key); CHECK_RV(rv, "C_EncryptInit"); rv = C_Encrypt(session, (CK_BYTE *)plaintext, plaintext_len, 密文,密文长度); CHECK_RV(rv, "C_Encrypt"); 返回 0; 清理: 返回 -1; } int aes_decrypt(CK_OBJECT_HANDLE aes_key, const CK_BYTE *ciphertext, CK_ULONG ciphertext_len, CK_BYTE *plaintext, CK_ULONG *plaintext_len) { CK_RV rv; CK_BYTE iv[16] = { 0 }; /* 必须与加密所用的 IV 匹配 */ CK_MECHANISM mech = { CKM_AES_CBC_PAD, iv, sizeof(iv) }; rv = C_DecryptInit(session, &mech, aes_key); CHECK_RV(rv, "C_DecryptInit"); rv = C_Decrypt(session, (CK_BYTE *)ciphertext, ciphertext_len, 纯文本,纯文本长度); CHECK_RV(rv, "C_Decrypt"); 返回 0; 清理: 返回 -1; } 操作 5 和 6:RSA 签名(私钥保留在 SE051 中)和验证 int rsa_sign(CK_OBJECT_HANDLE priv_key, const CK_BYTE *data, CK_ULONG data_len, CK_BYTE *签名,CK_ULONG *签名长度) { CK_RV rv; /* 安全散列算法(SHA)256-PKCS1v1.5 — SE051 在内部计算 安全散列算法(SHA)-256 摘要,然后进行签名 */ CK_MECHANISM mech = { CKM_SHA256_RSA_PKCS, NULL_PTR, 0 }; rv = C_SignInit(session, &mech, priv_key); CHECK_RV(rv, "C_SignInit"); rv = C_Sign(session, (CK_BYTE *)data, data_len, signature, sig_len); CHECK_RV(rv, "C_Sign"); printf("RSA 签名已生成(%lu 字节)。私钥从未离开过 SE051。\n",*sig_len); 返回 0; 清理: 返回 -1; } int rsa_verify(CK_OBJECT_HANDLE pub_key, const CK_BYTE *data, CK_ULONG data_len, const CK_BYTE *signature, CK_ULONG sig_len) { CK_RV rv; CK_MECHANISM mech = { CKM_SHA256_RSA_PKCS, NULL_PTR, 0 }; rv = C_VerifyInit(session, &mech, pub_key); CHECK_RV(rv, "C_VerifyInit"); rv = C_Verify(session, (CK_BYTE *)data, data_len, (CK_BYTE *)签名,sig_len); 如果 (rv == CKR_OK) { printf("签名验证:成功\n"); 返回 0; } 否则如果 (rv == CKR_SIGNATURE_INVALID) { printf("签名验证:无效\n"); 返回 1; } CHECK_RV(rv, "C_Verify"); 清理: 返回 -1; } 操作 7 和 8:RSA 加密/解密 int rsa_encrypt(CK_OBJECT_HANDLE pub_key, const CK_BYTE *plaintext, CK_ULONG plaintext_len, CK_BYTE *密文,CK_ULONG *密文长度) { CK_RV rv; /* RSA-OAEP with SHA-256 — 建议在新设计中使用,而非 PKCS1 v1.5 */ CK_RSA_PKCS_OAEP_PARAMS oaep_params = { .hashAlg= CKM_SHA256, .mgf= CKG_MGF1_SHA256, 。来源= CKZ_DATA_SPECIFIED, .pSourceData= NULL, .ulSourceDataLen= 0 }; CK_MECHANISM mech = { CKM_RSA_PKCS_OAEP, &oaep_params, sizeof(oaep_params) }; rv = C_EncryptInit(session, &mech, pub_key); CHECK_RV(rv, "C_EncryptInit (RSA-OAEP)"); rv = C_Encrypt(session, (CK_BYTE *)plaintext, plaintext_len, 密文,密文长度); CHECK_RV(rv, "C_Encrypt (RSA-OAEP)"); 返回 0; 清理: 返回 -1; } int rsa_decrypt(CK_OBJECT_HANDLE priv_key, const CK_BYTE *ciphertext, CK_ULONG ciphertext_len, CK_BYTE *plaintext, CK_ULONG *plaintext_len) { CK_RV rv; CK_RSA_PKCS_OAEP_PARAMS oaep_params = { .hashAlg= CKM_SHA256, .mgf= CKG_MGF1_SHA256, 。来源= CKZ_DATA_SPECIFIED, .pSourceData= NULL, .ulSourceDataLen= 0 }; CK_MECHANISM mech = { CKM_RSA_PKCS_OAEP, &oaep_params, sizeof(oaep_params) }; rv = C_DecryptInit(session, &mech, priv_key); CHECK_RV(rv, "C_DecryptInit (RSA-OAEP)"); rv = C_Decrypt(session, (CK_BYTE *)ciphertext, ciphertext_len, 纯文本,纯文本长度); CHECK_RV(rv, "C_Decrypt (RSA-OAEP)"); printf("RSA 解密完成。"私钥从未离开 SE051。\n");返回 0; 清理: 返回 -1; } 访问现有密钥(无需重新生成) 如果密钥之前已生成并存储在 SE051 中,则通过 CKA_ID 检索该密钥,而无需再次调用 C_GenerateKey : int find_key_by_id(CK_BYTE *key_id, CK_ULONG key_id_len, CK_OBJECT_CLASS obj_class, CK_OBJECT_HANDLE *handle) { CK_RV rv; CK_ULONG obj_count = 0; CK_ATTRIBUTE search_tmpl[] = { { CKA_CLASS, &obj_class, sizeof(obj_class) }, { CKA_ID, key_id, key_id_len }, }; rv = C_FindObjectsInit(session, search_tmpl, sizeof(search_tmpl) / sizeof(search_tmpl[0])); CHECK_RV(rv, "C_FindObjectsInit"); rv = C_FindObjects(session, handle, 1, &obj_count); CHECK_RV(rv, "C_FindObjects"); C_FindObjectsFinal(session); 如果 (obj_count == 0) { fprintf(stderr, "在 SE051 中未找到密钥\n"); 返回 -1; } 返回 0; 清理: C_FindObjectsFinal(session); 返回 -1; } 使用示例: CK_OBJECT_HANDLE priv_key; CK_BYTE key_id[] = { 0x10, 0x10, 0x10, 0x10 }; CK_OBJECT_CLASS priv_class = CKO_PRIVATE_KEY; find_key_by_id(key_id, sizeof(key_id), priv_class, &priv_key); 支持的机制(已在 OP-TEE PKCS#11 TA + SE051 上验证) Operation 机制常数 说明 RSA密钥生成 CKM_RSA_PKCS_KEY_PAIR_GEN 256–4096 位 AES密钥生成 CKM_AES_KEY_GEN 16 或 32 字节 RSA签名/验证 CKM_SHA256_RSA_PKCS PKCS#1 v1.5 RSA 签名/验证 (PSS) CKM_SHA256_RSA_PKCS_PSS PSS 填充 RSA 加密/解密 CKM_RSA_PKCS_OAEP OAEP推荐 RSA 加密/解密 CKM_RSA_PKCS PKCS#1 v1.5 AES 加密/解密 CKM_AES_CBC_PAD 密码块链接\(CBC\) 与 PKCS#7 AES 加密/解密 CKM_AES_CBC 无衬垫的密码块链接(CBC) AES 加密/解密 CKM_AES_CTR CTR模式 ECC签名/验证 CKM_ECDSA_SHA256 160–521 位 ECDH关键协议 CKM_ECDH1_DERIVE   SSS API 还能继续使用吗? 是的——但仅限于共存设置(选项 2) ,其中 Linux 仍然可以访问 I2C 总线(即,尚未应用 lf-6.12.y-i2c-disabled-se050 DTS 补丁)。在这种情况下,您可以直接从 Linux 使用 AN13030 第 3.3 节中描述的 SSS API。 如果您选择选项 1(OP-TEE 专属),则上面显示的 Cryptoki/PKCS#11 C API 是 Linux 用户空间中正确且唯一支持的路径。 参考 AN13030 Rev. 2.4,第 3.3 节 — 完整的 SSS API 参考(适用于共存/非 OP-TEE 构建) OP-TEE PKCS#11 TA 测试套件 (pkcs11_1000.c): optee-test/host/xtest/pkcs11_1000.c — 所有 Cryptoki 操作的完整 C 示例 NXP GitHub: se05x-pkcs11 — NXP 的 PKCS#11 独立组网 (SA) 库(非 OP-TEE 版本的 libckteec.so 替代方案)   希望对您有所帮助。   祝你有美好的一天, 坎 ------------------------------------------------------------------------------- 笔记: - 如果此回复解答了您的问题,请点击“标记为正确答案”按钮。谢谢你! - 我们会持续关注帖子,从最后一条回复发出后持续7周,之后的回复将被忽略。 如果您之后有相关问题,请另开新帖并引用已关闭的帖子。 ------------------------------------------------------------------------------- Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment @Kan_Li 非常感谢您清晰详细的解释。 我们目前正在考虑根据未来发展的阶段选择方案 1 或方案 2(例如,使用方案 2 进行初步测试/评估,使用方案 1 进行生产)。 关于选项 1(OP-TEE PKCS#11 TA),我们有一个关于 C 语言应用程序开发的问题。 如果要在方案 1 下用 C 程序实现密钥存储、签名/签名生成、签名验证和加密/解密等加密操作,我们应该采取哪种方法? 我们是否应该编写一个 C 程序,通过 OP-TEE PKCS#11 库 (libckteec.so) 直接调用标准 PKCS#11 API(例如 C_Initialize、C_CreateObject、C_SignInit、C_Sign、C_VerifyInit、C_Verify 等)? 或者,在这种设置下是否仍然可以/建议使用 Plug & Trust MW SSS API(例如 sss_key_store_set_key、sss_asymmetric_sign_digest、sss_asymmetric_verify_digest、sss_cipher_update 等)? 如果需要使用 PKCS#11 API,能否提供一个简单的示例代码或参考指南,说明如何在 C 语言中调用 libckteec.so? Re: Seeking guidance: se05x_Minimal fails in OP-TEE environment 嗨@Uc_S , 感谢您提供的详细报告。根本原因很明确,我可以详细解释为什么会发生这种情况以及你有哪些选择。 根本原因 se05x_Minimal 由 -DPTMW_SMCOM=T1oI2C 构建。这告诉 smCom 层在会话打开时打开一个物理 Linux I2C 设备节点 ( /dev/i2c-X )。由于您应用了 lf-6.12.y-i2c-disabled-se050 DTS 补丁(集成指南的步骤 1),该 I2C 控制器在 Linux 正常世界中被禁用——设备节点根本不存在。OP-TEE 通过 CFG_IMX_I2C=y 独家拥有 I2C 总线,Linux 无法看到或打开它。 这是有意为之——DTS 补丁使 OP-TEE 能够独占、不受竞争地访问 SE051。使用 T1oI2C 构建的 se05x_Minimal 二进制文件与此配置根本不兼容。 你的两个选择 ✅ 方案 1 — 使用 OP-TEE PKCS#11 TA(推荐用于生产) 这是 OP-TEE 独占设置中预期的 Linux 用户空间路径。不要运行 se05x_Minimal ,而是使用 pkcs11-tool 或 OpenSSL 和 libckteec.so (OP-TEE PKCS#11 TA 库)。TA 内部使用 SE051 作为其加密后端,通过 OP-TEE 的原生 I2C 驱动程序。 快速验证 SE051 是否可通过 PKCS#11 访问: # List available PKCS#11 slots — SE051 should appear pkcs11-tool --module /usr/lib/libckteec.so.0 --list-slots # Get a random number from SE051 via OP-TEE pkcs11-tool --module /usr/lib/libckteec.so.0 --generate-random 16 | xxd 如果看到一个插槽和随机字节,则 SE051 可通过 OP-TEE 完全访问。无需运行 se05x_Minimal – 它重复了 PKCS#11 TA 已经提供的功能。 ✅ 选项 2 — 共存设置(推荐用于开发/测试) 如果您需要从 Linux 用户空间运行 se05x_Minimal 和其他 Plug & Trust MW 演示程序,请使用共存设置,其中 Linux DTS 仍然启用 I2C(即,不要应用禁用 I2C 的 DTS 补丁)。 步骤: 步骤 1 — 恢复 Linux DTS 以在普通世界中保持 I2C 启用状态 从未经修改的Linux DTS(不带 lf-6.12.y-i2c-disabled-se050 补丁)构建您的 imx8mq-evk.dtb (或等效版本)。SE051 的 I2C 控制器节点必须在 Linux 系统中保持启用状态。 步骤 2 — 保持现有 CMake 标志不变 您当前的 cmake 配置对于共存模式是正确的: cmake -S . -B ./build/ -DPTMW_Applet=SE05X_C -DPTMW_SE05X_Ver=07_02 -DPTMW_Host=iMXLinux -DPTMW_SMCOM=T1oI2C -DPTMW_HostCrypto=OPENSSL -DPTMW_RTOS=Default -DPTMW_mbedTLS_ALT=None -DPTMW_SCP=SCP03_SSS -DPTMW_SE05X_Auth=PlatfSCP03 -DPTMW_Log=Silent -DCMAKE_BUILD_TYPE=Release -DPTMW_OpenSSL=3_0 -DPTMW_SE_RESET_LOGIC=1 步骤 3 — 运行前设置 I2C 端口 export EX_SSS_BOOT_SSS_PORT=/dev/i2c-1 ./se05x_Minimal 权衡:在这种模式下,OP-TEE 和 Linux 都共享到 SE051 的 I2C 总线。OP-TEE 将其用于 RSA/ECC 卸载;Linux 将其用于 MW 演示。并发访问不进行仲裁,这可能导致负载过高时发生 APDU 冲突。适用于开发,但不建议用于生产。 摘要 选项 I2C DTS se05x_Minimal OP-TEE独家 推荐用于 PKCS#11 TA ( libckteec.so ) 禁用 ❌ 不需要 ✅ 是 已量产 共存(T1oI2C) 已启用 ✅ 作品 ⚠️ 共享 I2C 开发/测试 关于集成指南的说明 您引用的社区帖子(步骤 2 — 不使用 CAAM)将 OP-TEE 配置为独占 I2C。该指南中显示的 Linux 端 MW 编译(带有 T1oI2C )旨在用于切换到 OP-TEE 模式之前的初始验证步骤,而不是与 OP-TEE 专用 I2C 设置一起使用。 一旦 OP-TEE 完全拥有 I2C,正确的 Linux 用户空间接口就是OP-TEE PKCS#11 TA ,而不是 Plug & Trust MW SSS API 演示。 请与我们联系哪个选项最符合您的使用场景,我们将提供进一步的指导。 祝你有美好的一天, 坎 ------------------------------------------------------------------------------- 笔记: - 如果此回复解答了您的问题,请点击“标记为正确答案”按钮。谢谢你! - 我们会持续关注帖子,从最后一条回复发出后持续7周,之后的回复将被忽略。 如果您之后有相关问题,请另开新帖并引用已关闭的帖子。 -------------------------------------------------------------------------------
View full article
S32 Design Studio インストールの問題 S32 Design Studio(バージョン3.6.4)で問題が発生しています。インストール。インストール開始すると進行状況バーはすぐに終了しますが、インストールされたアプリケーションは見えませんでした。 この問題を解決する方法についてご指導ください。 システム仕様は、Windows 11、16GB RAM、1TB SSDです。このシステムは当社のITポリシーの対象です。 Re: S32 Design Studio Installation Issue 以下に、ご依頼いただいたログファイルを示します。 インストールを2回試みましたが、成功しませんでした。 Re: S32 Design Studio Installation Issue こんにちは@ashutoshsahu インストールログファイル(.log)を共有してもらえますか?それは以下の場所にあります: C:\NXP\S32DS.3.6.4\_S32S32プラットフォーム用Design Studio 3.6.4_installation\Logs BR、VaneB Re: S32 Design Studio Installation Issue こんにちは@ashutoshsahu インストールログを確認したところ、インストーラーが powershell -ExecutionPolicy Bypass -File parallel.ps1 を実行しようとした際に発生した重要なエラーが判明しました。 「このプログラムはグループポリシーによってブロックされています。詳細については、システム管理者にお問い合わせください。」 このエラーを踏まえ、セキュリティポリシー、グループポリシーの制限、ファイアウォールルール、プロキシ設定などでPowerShellスクリプトが正しく動作しない可能性がないか、ITチームに確認する価値があります。
View full article
S32DS for ARM 2018.R1 debug Problem S32DS for ARM 2018.R1 have a problem when I debug S32K146 chip, As follow: Could not determine GDB version after sending: D:\S32DS\eclipse\../Cross_Tools/gcc-arm-none-eabi-4_9/bin/arm-none-eabi-gdb --version, response: But, Jlink can cnonect and erase and program chip. Now, I do not debug using S32DS for ARM 2018.R1, Please help me, Thanks! Re: S32DS for ARM 2018.R1 debug Problem Hi@lyz I didn't quite understand your question. Could you post a screenshot of the error?
View full article
SC18IM704 does not work Hi everyone! I used STM32F407 for UART communication with SC18IM704 chip. The UART peripheral of STM32 successfully sent data to tx, but there was no feedback from SC18IM704 on rx.when board is power on.UART baud rate is 9600 bit/s. The schematic diagram of the board is shown in the figure. 3046B74B-E9DE-4e11-8E23-9134E0817F20.png3046B74B-E9DE-4e11-8E23-9134E0817F20.png3046B74B-E9DE-4e11-8E23-9134E0817F20.png I use the Read version function ID command of SC18IM704 .shown in the figure SDS1204X_HD_JPG_1.jpgSDS1204X_HD_JPG_1.jpgSDS1204X_HD_JPG_1.jpg No data feedback provided of SC18IM704 I2C uart Re: SC18IM704 does not work Hi,  according to the SC18IM704 datasheet, after power up the SC18IM704 send two bytes to the host. Do you receive these two bytes after power up?  JozefKozon_0-1779954086888.pngJozefKozon_0-1779954086888.pngJozefKozon_0-1779954086888.png If you are not receiving these two bytes, please check if the RESET pin is high. Please remove the 10k pull-up resistors on the TX and RX lines. Only the RX pin requires pull-up resistor and only if you want to keep the SC18IM704 in Deep Power-down mode. Otherwise no pull-up resistors should be on the TX and RX lines. With Best Regards, Jozef Re: SC18IM704 does not work Hello,  thank you for confirmation. Please remove the R106 resistor, to disconnect the TX pin from your MCU. To make sure, that the TX pin is floating (not held high by your MCU). Then power up the SC18IM704 and measure the TX pin on the SC18IM704 with an oscilloscope to look for the "OK", the two bytes 0x4F and 0x4B.  If you still don't see the "OK" please conduct the reset with the RESET pin.  1. Watch TX with oscilloscope 2. Hold RESET LOW (GND) for ~10 ms 3. Release to HIGH 4. See if the "OK" appears   With Best Regards, Jozef Re: SC18IM704 does not work hello Jozef: I check the RESET pin of SC18IM704 is high(3.3V) by oscilloscope.after power up the SC18IM704. I not find the two bytes('OK') by oscilloscope. I removed the 10k pull-up resistors on the TX and RX lines. I use four SC18IM704 chips ,and the situation is the same. I don't know how to solve this problem,please help me. Re: SC18IM704 does not work Hi, I am running into similar issue, did remove the Rx and Tx resistors, but still now showing ok. What are some common next step to trouble shoot, or if there is a recommended design that I can look into. Re: SC18IM704 does not work I am facing the same issue. I built a board using SC18IM704 a few years ago, and it worked correctly. However, when I recently built the same board again, I encountered a problem where it does not work at all. Specifically, sending a reset signal to the reset pin yields no acknowledgment(OK). Furthermore, sending commands to the RX pin results in no response—neither the version information nor I2C commands work.  Since I had an older lots on hand, I tried swapping it in, and it operated normally. It appears there is a major issue with the IC itself in specific lots. Please share the problematic lots in this thread. -Work 18IM704 355.101 ZXD23 13 18IM704 355.101 ZXD23 25 18IM704 355.103 ZXD22 32 -Not Work 18IM704 265.102 ZXD21 35
View full article
MIMXRT700 EVK Battery Connection and External Power Up Clarification Hi Team, We are currently working on the MIMXRT700 EVK and need clarification regarding battery connection and external board power-up. We observed that the PMIC IC has a VBAT input, but we are unable to identify the exact connector/header on the EVK where a battery can be connected directly. Could you please help us with the following: Please point us to the official battery connector/header available on the RT700 EVK. Exact connector/header location on the board Supported battery type/specification Recommended connector/part number We would also like to understand the correct procedure to power up the RT700 EVK using an external power adapter while still supporting flashing and debugging. Currently, we are powering and debugging the board through the USB debug port. We want to know: What changes/setup are required when powering the board externally for battery and adapter Whether flashing and debugging through USB/J-Link will continue to work in this setup. Thanks & Regards, Suhas Evaluation Board Re: MIMXRT700 EVK Battery Connection and External Power Up Clarification Hi @suhas1503 , Thanks for your interest in NXP MIMXRT series! The PMIC supports battery power, but on the EVK, it is set to DNP by default. You can locate J37 on the schematic. A detailed description can be found in the “MIMXRT700-EVK Board User Manual[UM12188]”. Please take a look. Gavin_Jia_0-1779932324256.pngGavin_Jia_0-1779932324256.png Gavin_Jia_1-1779932333707.pngGavin_Jia_1-1779932333707.png For the RT700, there is no specific requirement regarding the choice of battery for the PMIC; you can select one based on the PCA9422 datasheet. In addition, the RT700-EVK supports powered by an external power adapter and supports a 5V power supply. It is connected via J45, and the power source is selected by shorting pins 1 and 2 on J2. The details is in “MIMXRT700-EVK Board User Manual[UM12188]” Section 2.2 . The on-board debugger continues to function normally when powered by an external power source. Best regards, Gavin Re: MIMXRT700 EVK Battery Connection and External Power Up Clarification Hi, I am using the MIMXRT700-EVK with a Murata 2EL M.2 module connected to the M.2 socket on the RT700-EVK. I am testing different examples from the MCUXpresso SDK. Hardware setup: - Board: MIMXRT700-EVK - M.2 module: Murata 2EL M.2 module - Murata 2EL module is connected to the M.2 socket - Power is supplied through JP37 using a battery - MCUXpresso SDK: SDK_26_03_00_MIMXRT700-EVK Observed behavior: When the RT700-EVK is powered through JP37 using a battery: 1. The hello_world example works correctly. 2. The xaf_record example works correctly. 3. The edgefast_bluetooth_examples/peripheral_ht example builds and flashes successfully, but the application fails during runtime initialization. The UART log is: BLE Peripheral HT demo start... [sdio] Error: Card initialization failed [wifi_io] Error: SDIO driver init failed. ASSERT ERROR " API_SUCCESS == result ": file "middleware/wireless/ethermind/port/pal/mcux/bluetooth/controller/controller_wifi_nxp.c" Line "120" However, when I use the same edgefast_bluetooth_examples/peripheral_ht example with the J54 USB debug port and J45 port with the adapter, the example works correctly. Therefore, the EdgeFast Bluetooth example works correctly with the J54/J45 configuration but fails when the board is powered through JP37 using a battery. The hello_world and xaf_record examples work correctly with the JP37 battery configuration. Expected behavior: I expect the edgefast_bluetooth_examples/peripheral_ht example to initialize the Bluetooth controller successfully when the RT700-EVK is powered through JP37 using a battery and the Murata 2EL M.2 module is connected. Questions: 1. Is the JP37 power configuration supported for running the EdgeFast Bluetooth examples with the Murata 2EL M.2 module? 2. Does the Murata 2EL M.2 module require any additional jumper, switch, or power configuration when JP37 is used with a battery? 3. Why does the application report the following errors when using the JP37 battery configuration? [sdio] Error: Card initialization failed [wifi_io] Error: SDIO driver init failed. 4. Is there any required power sequencing or M.2 power-enable configuration for the wireless module when using battery power through JP37? 5. Is there a recommended RT700-EVK jumper and power configuration for using the Murata 2EL M.2 module with the EdgeFast Bluetooth examples and battery power? Please let me know if you need any additional information, such as the complete UART log, jumper configuration, SDK configuration, schematic details, or power measurements. Thank you.
View full article
S32K31XEVB-Q100FlexCAN0 — ループバックは正常に動作しますが、外部CANoeツールでは受信できません。 ボード: S32K311-EVB モジュール: FlexCAN0 ツール: J8コネクタで接続されたベクターCANoe デバッグプローブ: Jリンク 私はFlexCAN0を使ってS32K311-EVBでCANプロトコルを実装しています。 ループバックモードテスト(動作確認済み): 私はまず、FlexCAN0を内部ループバックモードで実装し、テストしました。これはうまくいきました。送信されたメッセージは、私の「void CanIf_RxIndication(const Can_HwType* Mailbox, const PduInfoType* PduInfoPtr )」を通じて正しく受信されました。 処理機能により、FlexCAN0の基本設定(クロック設定、ビットタイミング、メッセージバッファ初期化)が正しく機能していることを確認します。 外部コミュニケーションテスト(効果なし): 次に外部CAN通信のテストに移りました: ピン構成でPTA6とPTA7のピンを設定してください。 J8コネクターでVector CANoeをボードに接続しました。 CANoe構成では、私は チェックされていない「CAN Loopback Mode」 12Vアダプターを取り付ける CANoeの送信を開始しました — CANoeはCANフレームを送信していることを示しています。 しかし、S32K311側では何も受信されず、 CanIf_RxIndication (ループバックモードでは正しく動作していた同じ関数)は呼び出されたりトリガーされたりしません。 デバッグには、JTAG を使用した Segger RTT Viewer を使用しています。 設定 Sami2098_0-1789478804307.pngSami2098_0-1789478804307.pngSami2098_0-1789478804307.png Sami2098_1-1789478831337.pngSami2098_1-1789478831337.pngSami2098_1-1789478831337.png Sami2098_2-1789478911944.pngSami2098_2-1789478911944.pngSami2098_2-1789478911944.png Sami2098_3-1789478932611.pngSami2098_3-1789478932611.pngSami2098_3-1789478932611.png よろしくお願いします。   Re: S32K31XEVB-Q100FlexCAN0 — Loopback works fine, but no reception with external CANoe Tool こんにちは、 @Sami2098 さん。 現在使っているRTDバージョンを教えてもらえますか? 私たちのコミュニティには参考にできるいくつかの例があります: Re: S32K311のCAN例 - NXPコミュニティ ポーリングモードDS3.5 RTD300を使用したS32K312 CAN送受信の例 [RTD600 MCAL & IP] S32K3X4EVB-T172 FlexCAN 割り込みのサンプル / ポーリング FlexCANの設定は全体的に問題なさそうです。PTA6/7がそれぞれ入力と出力として設定されていること、そして実際にSiul2_Port_Ip_Init()APIを呼び出してポートの初期化をしているのか確認できますか? Julin_AragnM_2-1789514266922.pngJulin_AragnM_2-1789514266922.pngJulin_AragnM_2-1789514266922.pngJulin_AragnM_2-1789514266922.png S32K1XEVBを使っている場合、使用されているトランシーバはFS23で、FS23がデバッグモードの場合、CANトランシーバはデフォルトでアクティブモードに設定されているため、CAN_MODE = 0b1xを設定する必要はありません。 S32K311<->CANoeの間で設定されているビットレートとサンプリングポイントが同じであることを確認することもお勧めします。 最後に、もしロジックアナライザーやオシロスコープをお持ちなら、CANTXD、CANRXD、CANH、CANLの信号を共有してもらえますか? よろしくお願いします、 ジュリアン Re: S32K31XEVB-Q100FlexCAN0 — Loopback works fine, but no reception with external CANoe Tool こんにちは、 Julián_AragónMさん。 調べていただきありがとうございます。原因は、実は CANoeのチャネルバス設定の問題 で、S32K311 CANドライバの設定の問題ではありませんでした。CANoe Vectorの設定を修正したところ、受信は正常に動作するようになりました。 追加の質問: 現在は 500 kbpsで動作しており、異なるボーレート(例: 125 kbps)に切り替えると、正しいビットタイミングとCAN周辺クロックに対するサンプルポイントを維持するために、プリスケーラ、伝播セグメント、位相セグメント1、フェーズセグメント2、リシンクジャンプ幅など、いくつかの依存パラメータを再計算する必要があると理解しています。 誰か、 以下の説明書や参考資料 を教えてもらえますか? これらのビットタイミングパラメータ(プリスケーラ、プロップセグメント、PS1、PS2、SJW)が、異なる目標ボーレートとどのように関連し、どのように導出されるか。 オートモーティブ・インダストリアルの文脈で異なるボーレートに対する推奨サンプルポイント範囲。 ビットタイミング計算用の S32K3xx FlexCAN MCAL(AUTOSAR) 構成ツールに関する公式のNXPアプリケーションノートや参考文献など、いかなるものもご存知。 私は MCALレイヤーをAUTOSARモード (S32 Configuration Tool for Canドライバー設定)で使っているので、この設定フローに合わせたガイド(レジスタレベルのFlexCANプログラミングだけでなく)が特に助かります。 ご指導ありがとうございます。 Re: S32K31XEVB-Q100FlexCAN0 — Loopback works fine, but no reception with external CANoe Tool こんにちは、 @Sami2098 さん。 1.リファレンスマニュアルRev. 12の73.3.10.8章(プロトコルタイミング)S32K3XXビットタイミングの設定とその各種パラメータが説明されています。 2. これはアプリケーションや構成によります。ただし、標準ビットレートには125 kbps、250 kbps、500 kbpsがあります。 3. FlexCANビットタイミング計算シートを参照してください。また、RTDトレーニングのシルデスと連携したS32K3XX FlexCANも参照できます。 よろしくお願いします、 ジュリアン
View full article