Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
Debian flexbuildのコンパイル中にWifi Configsがコンパイルされない 6.6.52 カーネルに基づく Debian 12 で Wi-Fi をテストしたいと思います。 このコマンド connmanctl を実行した後、wifi を有効にすると、wifi が利用できないことが表示されます。 fexbuild から Linux ソースをコピーし、スタンドアロン 方法をコンパイルしました。 スタンドアロンでコンパイルされた.configとの違いは以下の通りです。および Debian でコンパイルされた .config。 スタンドアロンでコンパイルされた.configにはWiFi関連の設定が含まれていますが、flexbuildでコンパイルされた.configには設定が含まれていません その理由は何でしょうか。 Debianでimx8mpのWi-Fiをテストする方法 Re: Wifi Configs not compiling during debian flexbuild compilation 親愛なる@Neha_V様、 i.MX8MP-evk のデフォルトの debain 12 システムは、ドキュメントに記載されている NXP Wi-Fi をサポートしています。 https://www.nxp.com/docs/en/ユーザーガイド/UG10155-Debian-24.12.pdf どの Wi-Fi チップがサポートされているかは、/lib/firmware/nxp フォルダー内の対応するファームウェアでCAN確認できます。Wi-Fi ドライバは複数の Wi-Fi チップをサポートしており、ドライバをロードするときに、Wi-Fi ID に応じて正しいファームウェアがロードされます。 よろしくお願いします! よろしくお願いいたします。 魏東
View full article
VPU v4l2 ドライバ ERESTARTSYS 処理 私は i.MX8MP プロセッサを使用しており、ビデオプロセッシングユニット (VPU) を使用してビデオをエンコードしています。 v4l2 ドライバがユーザー空間の vsidaemon にコマンドを送信し、応答を待機しているときに、Linux シグナルが発行されると、v4l2 ドライバが vsidaemon を停止し、ユーザー空間アプリがビデオのエンコードを続行するために v4l2 デバイスを閉じて再度開く必要があるという問題を発見しました。 具体的には、v4l2ドライバの次の行は、`wait_event_interruptible()`を使用してvsidaemonからの応答を待機します。 Linux-imx/ドライバ/mxc/hantro_v4l2/vsi-v4l2daemon.c at lf-6.12.y · nxp-imx/Linux-imx · GitHub Linux シグナルが発行された場合 (良性または悪性)、`wait_event_interruptible()` は -ERESTARTSYS を返し、これにより `vsi_v4l2_sendcmd` 関数が呼び出されて -ERESTARTSYS が返され、これにより `vsiv4l2_execcmd()` 関数が呼び出されてコンテキスト エラーが設定されます ( https://github.com/nxp-imx/linux-imx/blob/be78e49cb4339fd38c9a40019df49b72fbb8bcb7/drivers/mxc/hantro_v4l2/vsi-v4l2daemon.c#L557 )。 その結果、v4l2 ドライバへの次の `ioctl()` 呼び出しによって vsidaemon が閉じられます。 Re: VPU v4l2 driver ERESTARTSYS handling 迅速なご返信ありがとうございます。`wait_event_interruptible()` を再試行するようにドライバを変更します。 Re: VPU v4l2 driver ERESTARTSYS handling こんにちは、 VPU v4l2 ドライバで発生している問題は、ドライバでの Linux シグナル処理の実装方法に関連しています。ドライバ コードで `wait_event_interruptible()` が使用される場合、待機中にシグナルを受信すると `-ERESTARTSYS` を返すように設計されています。これは標準的な Linux カーネルの動作です。 現在の実装では、v4l2 ドライバが vsidaemon からの応答を待機しているときにシグナルが待機プロセスを中断すると、ドライバはシステム コールを単純に再開するのではなく、エラー状態を設定します。これにより、次の `ioctl()` 呼び出しで vsidaemon が閉じられるため、v4l2 デバイスを閉じて再度開く必要があります。 これはドライバの既知の問題です。ドライバは、`-ERESTARTSYS` CASE を別の方法で処理するように変更できます。たとえば、vsidaemon を閉じることになるコンテキスト エラーを設定するのではなく、待機を再開したり、回復メカニズムを実装したりすることができます。 ドライバを変更せずに回避策が必要な場合は、次の操作を実行できます。 1. VPUとやりとりする際の重要なセクションでは、アプリケーション内の信号をブロックまたは処理します。 2. アプリケーションに回復ロジックを実装して、この状態を検出し、デバイスを自動的に再起動します。 永続的な修正を行うには、vsidaemon が閉じられないような方法で、`wait_event_interruptible()` からの `-ERESTARTSYS` 戻り値を適切に処理するようにドライバ コードを変更する必要があります。 よろしくお願いします。
View full article
如何在使用 PEMicro JTAG 调试 i.MX RT1064 时查看 printf 输出(无 USB-OTG 或 UART 连接 大家好 我之前通过 USB-OTG 端口调试 i.MX RT1064 应用程序,该端口提供了一个虚拟 COM 端口,允许我在串行终端上查看 PRINTF() 输出,而无需使用 UART 引脚。 最近,我改用 MCUXpresso IDE 中的PEMicro JTAG进行调试,但现在无法查看任何控制台输出。我尝试使用SWO/ITM 打印查看器,但没有出现任何输出。我还查找了半托管选项,但使用 PEMicro 时,MCUXpresso IDE 的项目设置中不存在这些选项。 我的问题: 在 i.MX RT1064 上通过 PEMicro JTAG 调试时,有什么纯软件方法可以在不连接外部 UART 硬件的情况下查看 printf 控制台输出? 如何通过查看调试控制台来调试我的代码? Re: How to view printf output while debugging i.MX RT1064 using PEMicro JTAG (no USB-OTG or UART con 你好@shreya1、 感谢您对 NXP MIMXRT 系列的关注! 首先,你最初使用 USB-OTG CDC 虚拟串行端口的方法是可行的。如果您想使用 SWO/ITM,请参阅以下应用笔记: https://www.nxp.com/docs/en/application-note/AN13234.pdf 它提到 此外,在 MCUXpresso 集成开发环境中使用 Semihosting 也同样有效。除此之外,如果你使用的是 jLink,可以考虑 RTT;如果你只需要监测变量而不打印日志,可以考虑 FreeMaster。 致以最诚挚的问候, Gavin
View full article
从连接集线器的单个 USB-C 端口启动 i.MX8mm 时出现问题 大家好, 我们在基于 i.MX8MM EVK 设计的基于 i.MX8MM 的板上遇到了问题。 我们只做了很小的改动,但其中一个改动是,我们使用了一个 USB-C 连接器来连接电源和数据,而不是 EVK 上的两个 USB-C 连接器。 我们发现,启动标准的 Yocto 镜像在 Linux 内核启动大约 2.5 秒后会进入 RESET。 我在论坛上发现了这个讨论,并实施了这些修补程序 https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX8MP-USB-PD-realized/ta-p/1531209 通过这些更改,我可以直接通过 USB-C 电缆为板供电,然后它就可以启动了。 但是,当我将集线器连接到板并通过 USB-C 电缆为该集线器(以及板)供电时,它会再次启动大约 2.5 秒,然后在没有警告的情况下 RESET。 一次好的启动(直接连接 USB-C)看起来像这样 ``` [2.556356] tcpci 1-0050:设置电压/限流 0 mV 0 mA [2.556364] tcpci 1-0050:极性 0 [2.557998] tcpci 1-0050:请求复用器状态 0,子角色 0,方向 0 [2.559340] tcpci 1-0050:状态更改无效_状态-> SNK_UNATTACHED [2.559685] 随机:快速初始化完成 [2.560044] tcpci 1-0050:CC1:0 -> 0,CC2:0-> 0 [状态 SNK_UNATTACH, 极性 0,断开连接] [2.560050] tcpci 1-0050:1-0050:已注册 [2.568676] imx6q-pcie 33800000.pcie:链接 [2.570054] ALSA 设备清单:[2.570058] #0: imx-Sony Philips数字接口格式(SPDIF) [2.570060] #1: imx-audio-micfil [2.570063] #2: bt-sco-audio [2.570063]: bt-sco-audio [2.570063]: bt-s co-audio [2.57[ 570065] #3: wm8524-audio [2.575605] tcp ci 1-0050:设置电压/限流 0 mV 0 m A [2.633046] tcpci 1-0050:极性 0 [2.641245] tcpci 1- 0050:请求多路复用器状态 0,子角色 0,方向 0 [2.650541] tcpci 1-0050:cc: =0 [2.654583] tcpci 1-0050:待处理状态更改 PORT_RESET-> PORT_RESET_WAIT_OFF @ 100 毫秒 [2.665982] tcpci 1-0050:CC1:0 -> 0,CC2:0-> 0 [状态 PORT_RESET,极性 0,已断开连接] [2.677471] imx6q-pcie 33800000.pcie:Lin k up [2.681841] imx6q-pcie 33800000.pcie:Link up,Gen2 [2.762788] tcpci 1-0050:状态更改 PORT_RESET-> PORT_RESET_WAIT_OFF [延迟 100 毫秒] [2.770991] tcpci 1-0050:待处理状态更改 PORT_RESET_WAIT_OFF-> SNK_UNATTACKED @ 920 毫秒 [2.793168] imx6q-pcie 33800000.pcie:PCI 主机桥 到总线 0000:00 [2.799538] pci_bus 0000:00:根总线资源 [总线 00-ff] [2.805062] pci_bus 0000:00:根总线资源 [io 0x0000-0xfff] [2.811270] pci_bus 00 00:00:根总线资源 [mem 0x18000000-0x1ffff] [2.818215] pci 0000:00:00 .0:[16c3:abcd] 类型 01 类 0x060400 [2.824248] pci 0000:00:00.0:reg 0x10:[mem 0x00000000-0x000ffff] [2.830657] pci 0000:00:00.0:reg 0x00000000-0x0000fff 首选项] [2.837395] pci 0000:00.0:reg 0x00000000-0x0000fff 首选项] pci 0000:00:00.0:支持 D1 [2.841409] pci 0000:00:00.0:D0 D1 支持 PME# d3Hot d3Cold [2.849459] pci 0000:01:00.0:[8086:2725] type 00 class 0x028000 [2.855560] pci 0000:01:00.0:reg 0x0000:00.0:[mem 0x0000:00.0 0000-0x00003fff 64 位] [2.862716] pci 0000:01:00.0:D0 支持 PME# d3Hot d3Cold [2.883328] pci 0000:00:00.0:BAR 0:已分配 [mem 0x18000000-0x180ffff] [2.890136] pci 0000:00:00.0:BAR 14:已分配 [mem 0x1800000000-0x180ffff] [2.890136] pci 0000:00:00.0:BAR 14:已分配 [mem 0x1800000 00 -0x180fff] [2.890136 -0x181ffff] [2.897058] pci 0000:00:00.0:BAR 6:已分配 [mem 0x18200000-0x1820fff 首选项] [2.904310] pci 0000:01:00.0:BAR 0:已分配 [mem 0x18100000-0x18103fff 64 位] [2.91 1985] pci 0000:00:00.0:PCI 总线到 [总线 01-ff] [2.99] 17348] pci 0000:00:00.0:桥接窗口 [mem 0x18100000-0x181ffff] [2.924572] pcieport 0000:00:00.0:PME:使用 IRQ 238 发信号 [2.940737] 释放未使用的内核内存:26752K [2.945478] 将 /init 作为初始进程运行 启动版本 249.7+ [3.411637] zram0:检测到的容量从 0 更改为 1022136320 [3.699966] tcpci 1-0050:状态更改 PORT_RESET_WAIT_OFF-> SNK_UNATTACHED [延迟 920 毫秒] [3.708526] tcpci 1-0050:启动 切换 [3.726094] tcpci 1-0050:CC1:0-> 0,CC2:0-> 3 [状态切换,极性 0,已连接] [3.734375] tcpci 1-0050:状态更改切换-> SNK_ATTACH_WAIT [3.740568] tcpci 1-0050:待处理状态更改 SNK_ATTACH_WAIT-> SNK_DEBOUNCED @ 200 毫秒 [3. 949095] tcpci 1-0050:状态更改 SNK_ATTACH_WAIT-> SNK _ 已解除 [延迟 200 毫秒] [3.957228] tcpci 1-0050:状态更改 SNK_DEBOUNCED-> SNK_ATTACHED [3.9 63593] tcpci 1-0050:cc: =2 [3.968654] tcpci 1-0050:请求复用器状态 1、子角色 2、方向 2 [3.988963]] tcpci 1-0050:状态更改 SNK _ATTACHED-> SNK_STARTUP [3.995180] tcpci 1-0050:状态更改 SNK_START UP- > SNK_DISCOVERY [4.001457] tcpci 1-0050:设置电压/限流 5000 mV 0 mA [4.007822] tcpci 1-0050:vbus=0 充电:=1 [4.0 12902] tcpci 1-0050:状态更改 SNK_DISCOVERY-> SNK_WAIT_CAPABILITIES [4.020374] tcpci 1-0050:待定状态更改 SNK_WAIT_CAPBILITIES 能力-> SOFT_RESET_SEND @ 310 毫秒 [4.029911] tcpci 1-0050:CC1:0- > 0,CC2:3-> 3 [状态 SNK_WAIT_CAPABILITIES,极性 1,已连接] [4.339236] tcpci 1-0050:状态更改 SNK_WAIT_CAPBILITIES-> SOFT_RESET_SEND [延迟 310 毫秒] [4.348059] tcpci 1-0050:PD TX 完成,状态:2 [ 4.370056] tcpci 1-0050:状态更改 SOFT_RESET_SEND-> HARD_RESET_SEND [4. 376867] tcpci 1-0050:PD TX,类型:0x5 [4.389564] tcpci 1-0050:PD TX 完成,状态:0 [4.394785] tcpci 1-0050:状态更改 HARD_RESET_SEND-> HARD_RESET_START [4.403601] tcpci 1-0050: 状态更改 HARD_RESET_START-> SNK_HARD_RESET_SINK_OFF [4. 411196] tcpci 1-0050:vconn:=0 [4.414978] tcpci 1-0050:请求 mux 状态 1、子角色 2、方向 2 [4.422366] tcpci 1-0050:待处理状态更改 SNK_HARD_RESET_SINK_OFF -> SNK_HARD_RESET_SINK_ON @ 650 毫秒 [5.082397] tcpci 1-0050:状态更改 SNK_HARD_RESET_SINK_OFF-> SNK_HARD_RESET_SINK_ON [延迟 650 毫秒] [5.093960] tcpci 1-0050:状态更改 SNK_HARD_RESET_SINK_ON-> SNK_ STARTUP [5.101032] tcpci 1 -0050:状态更改 SNK_STARTUP-> SNK_DISCOVERY [5.107311] tcpci 1-0050:设置电压/限流 5000 mV 0 mA [5.113688] tcpci 1-0050: 状态更改 SNK_RESET_SEND-> SNK_WAIT_CAPABILITIES [5.121577] tcpci 1-0050:待处理状态更改 SNK_WAIT_CAPABILITIES-> HARD_RESET_SEND @ 310 ms [5.440826] tcpci 1-0050:状态更改 SNK_WAIT_CAPABILITIES- > HARD_RESET_SEND [延迟 310 毫秒] [5.449649] tcpci 1-0050:PD TX,类型:0x5 [5.462207] tcpci 1-0050:PD TX 完成,状态: 0 [5.467402] tcpci 1-0050:状态更改 HARD_RESET_SEND-> HARD_RESET_START [5.480229] tcpci 1-0050:状态改变 HARD_RESET_START-> SNK_HARD_RESET_SINK_OFF [5.487814] tcpci 1-0050:vconn: =0 [5.492528] tcpci 1-0050:请求多路复用器状态 1、子角色 2、方向 2 [5.500184] tcpci 1-0050: 待处理状态更改 SNK_HARD_RESET_SINK_OFF-> SNK_HARD_HARD_OFF RESET_SINK_ON @ 650 毫秒 [6.160197] tcpci 1-0050:状态更改 SNK_HARD_RESET_SINK_OFF -> SNK_HARD_RESET_SINK_ON [延迟 650 毫秒] [6. 170998] tcpci 1-0050:状态更改 SNK_HARD_RESET_SINK_ON-> SNK_STARTUP [6.178058] tcpci 1-0050:状态更改 SNK_STARTUP-> SNK_DISCOVERY [6.184330] tcpci [6.184330] tcpci [6. 184330] tcpci 1-0050:设置电压/限流 5000 mV 0 mA [6.190694] tcpci 1-0050:状态变化 SNK_DISCOVERY-> SNK_WAIT_CAPABILITIES [6.1994 32] tcpci 1-0050:待定状态更改 SNK_W AIT_CAPABILITIES- > SNK_READY @ 310 毫秒 [6.518144] tcpci 1-0050:状态更改 SNK_WAIT_CAPABILITION S-> SNK_READY [延迟 310 毫秒] ``` 启动不良(通过 USB 集线器)看起来像这样 ``` [2.573714] tcpci 1-0050:设置限流 0 mV 0 mA [2.588084] tcpci 1-0050:极性 0 [2.593368] random:快速初始化完成 [2.597157] tcpci 1-0050:请求复用器状态 0,usb-角色 0,方向 0 [2.606898] tcpci 1-0050:状态更改 INVALID_STATE -> SNK_UNATTACHED [2.614139] tcpci 1-0050:CC1:0 -> 4,CC2:0 -> 0 [状态 SNK_UNATTACHED,极性 0,已连接] [2.622935] tcpci 1-0050:状态更改 SNK_UNATTACHED -> SNK_ATTACH_WAIT [2.629648] tcpci 1-0050:状态更改 SNK_ATTACH_WAIT -> PORT_RESET [2.636015] tcpci 1-0050:1-0050:已注册 [2.645016] tcpci 1-0050:设置限流 0 mV 0 mA [2.649889] ALSA 设备列表: [2.651137] tcpci 1-0050:极性 0 [2.654108] #0:Sony Philips数字接口格式(SPDIF) [2.659325] tcpci 1-0050:请求复用器状态 0,usb-角色 0,方向 0 [2.660491] #1:imx-audio-micfil [2.667628] imx6q-pcie 33800000.pcie:链路已建立 [2.670836] #2:bt-sco-audio [2.675197] imx6q-pcie 33800000.pcie:链路已建立,Gen2 [2.678253] #3:wm8524-audio [2.687083] tcpci 1-0050:cc:=0 [2.691422] tcpci 1-0050:待处理状态更改 PORT_RESET -> PORT_RESET_WAIT_OFF @ 100 毫秒 [2.699612] tcpci 1-0050:状态更改 PORT_RESET -> PORT_RESET_WAIT_OFF [延迟 100 毫秒] [2.707795] tcpci 1-0050:0 U-Boot SPL 2021.04-imx_v2021.04_5.10.35_2.0.0+g3463140881 (2021 年 6 月 8 日 - 01:39:44 +0000) ``` 感觉就像检测到 USB 集线器会导致一些 " RESET " 代码流,从而导致电源中断,但这只是我目前的猜测。 这已经成为一个真正的时间池,因此非常希望得到任何帮助和建议,以推进我们的工作。 谢谢& ,谨致问候、 亚历克斯 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux Yocto Project Re: Problem booting i.MX8MM from single USB-C port with hub attached 你找到解决办法了吗? 我一直在追踪一个类似的问题,但进展甚微。
View full article
HVBMS s32k358 プロジェクト こんにちは: 現在、s32k358 プラットフォームをベースにした BMS システムの開発に取り組んでいます。開発にあたっては、すでに「HvBms800_774_772_TPL_Bring_Up」のソースコードを参照しています。 元のコードと NXP の EVB に戻り、このプロジェクトを使用して NXP RD-K358BMU ボードで実行すると、システムを約 30 分から 1 時間実行した後に GeneralError がエラーを返すことがわかりました。エラーは常に「ERROR_CMU_READ_MEASUREMENTS_SME3_ERROR」などの SL レイヤー部分に関連します。 SL 部分のないプロジェクトやソースコードを公開するものがあるかどうか知りたいです。問題が分からないからです。本当にNXPの助けが必要です。よろしくお願いします。 よろしくお願いします。 BR、ビルウェン Re: HVBMS s32k358 project こんにちは: NXP サンプル プロジェクト「 HvBms800_774_772_TPL_Bring_Up 」の添付ファイルを更新しました。 よろしくお願いします。 BR、ビルウェン Re: HVBMS s32k358 project こんにちは、BillWenさん。 HVBMS チームからのフィードバックは次のとおりです。 Bms SL デモ部分内には、デモ SW の実稼働使用を防ぐために、使用回数を制限するカウンターがあります。この機能は、2021 年の最初のリリース以来、当社のソフトウェアに含まれています。 SO、これを回避するために、お客様はプレミアムを購入する必要があります。これが当社のソフトウェアの意図した動作です。 そうでない場合は、TD 抽出を独自に処理する必要があります。 よろしくお願いします、 ロビン --------------------------------------------------------------------------------- 注記: - この投稿があなたの質問への回答である場合は、「解決策として承認」ボタンをクリックしてください。ありがとう! - Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。 後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。 ---------------------------------------------------------------------------------
View full article
AES-128-GCM 支持 / S32K1xx& MPC5606 示例代码 你好,我 可以看看恩智浦是否为 MPC5606 或 S32K1xx 设备提供任何 AES-128-GCM 示例代码或参考实现吗? 如果有,能否分享示例项目、API 使用指南或相关文档? 谢谢! Re: AES-128-GCM Support / Sample Code for S32K1xx & MPC5606 你好@Chandler_L MPC5606 不包括网络安全模块。S32K1 设备采用 cSec 模块,该模块是根据 SHE 规范实现的;因此,不支持 GCM 模式。 唯一的选择是使用软件库,如 wolfSSL、Mbed TLS 或其他类似解决方案。这些图书馆不是我们的产品,因此请参阅其官方在线资源了解更多信息。 问候, Lukas
View full article
イーサネットコントローラ用のRAM こんにちは。SOC の eTSEC イーサネット コントローラに使用できる RAM の数についての情報を探しています。この詳細が見つかりません。 よろしくお願い申し上げます。 BR /クリス Re: RAM for Ethernet controllers MPU の部品番号とソフトウェア バージョンを教えていただけますか? ありがとうございます。 Re: RAM for Ethernet controllers eTSEC コントローラに関する次のドキュメントを見つけました:拡張トリプルスピード イーサネット コントローラ (eTSEC) の使用探している情報は 18 ページにありますか、それともこの TX/RX キャッシュはドライバまたは TCP/IP スタック内のバッファーを参照しているのでしょうか? 前もって感謝します /クリス Re: RAM for Ethernet controllers こんにちは。これらの正確な数値をどこで入手できるかわかりません。これは e500 コアを搭載した MPC8540 PowerQUICCIII であることはわかっています。もう 1 つの疑問は、イーサネット フレームが TCP/IP スタックに渡されるイーサネット コントローラと MPU の間にメモリがあるかどうかです。どちらが大幅に大きいでしょうか?それとも、これは通常の RAM ですでに発生しているのでしょうか? どうもありがとうございます /クリス Re: RAM for Ethernet controllers 申し訳ございませんが、なぜご返信ができなかったのか分かりません。 MPC8540は製造中止になっており、それに関連する質問はサポートされていません。 通常、MPU にはプログラムを実行するための外部 RAM があります。 MPC8540 であれば、外部 DDR がある可能性があります。 よろしくお願いします。
View full article
UJA1169ATK/F 可以唤醒虚假触发信号(选择性唤醒) 您好, 我用 CW 估算 UJA1169 中的 CAN 是否会醒来。但是,在使用WAKE引脚时,它有时会由任何帧触发信号。 我写 1 来清除状态标志 -- CW berore 使 UJA1169 进入休眠状态。 我启用了部分联网(CWE = 1、CPNC = 1、PNDM = 0 和 CPNS = 1、PNCOK = 1)。有效 WUF 为 400h 至 47Fh。 ID register & mask registerID 寄存器& 屏蔽寄存器 当 UJA1169 处于休眠状态时,非 400h~47Fh 的标准帧 ID 不会唤醒 CAN(CW = 0)。 但是,如果我们使用 WAKE 引脚使 UJA1169 从睡眠模式唤醒。CAN 总线上没有 ID 为 400H~47fH 的帧,只有一些其他帧(例如ID1D0~3AE)退出。但 CW 有时会改为 1。 CW = 1, RSS =4CW = 1,RSS =4 我使用 WAKE 引脚唤醒,然后获取 CW 和 RSS 的值。日志显示 RSS = 4(睡眠模式下通过 WAKE 引脚唤醒)。但有时 CW = 1。 我想知道当 UJA1169 通过 WAKE 引脚唤醒时,为什么任何帧(不仅是专用的唤醒帧)都会使 CW = 1。它是错误触发的吗? Re: UJA1169ATK/F CAN wake up spurious triggering(selective wake up) 嗨,亲爱的恩智浦同事: 在睡眠模式下醒来后,V1 会升起,我可以问一下这两个事件之间的延迟时间吗? 非常、非常、非常感谢!![玫瑰][玫瑰] Re: UJA1169ATK/F CAN wake up spurious triggering(selective wake up) 嗨,拉里、 我并不完全理解您所面临的问题,我建议您仔细查看 WAKE 引脚的功能说明,以确保您正确使用了该引脚。 BRs, Tomas
View full article
功能从待机模式 RESET 后进行唤醒源识别。 你好,恩智浦、 我正在开发睡眠唤醒应用程序。并为待机唤醒配置了唤醒睡眠配置。 我的问题是从待机唤醒中RESET功能后如何知道唤醒源? Re: Wakeup Source Recognition after function reset from standby mode. 你好,@aryandis、 唤醒后,可以通过读取 WISR/WISR_64 寄存器来确定是哪个源导致了唤醒。您无需将这些值保存到待机 RAM 或使用快速退出待机,因为退出待机后这些值将保持不变。 如果上一次 RESET 为待机退出或其他任何 RESET(硬件、软件、WDG 等...),则返回 Mcu_GetResetReason(),但是没有用于唤醒源的 API。 对于读取寄存器,只需确保主例程在保存寄存器之前不清除寄存器,并牢记如果使用下降沿,则必须启用垫保持(请参阅本社区帖子):已解决:S32K312 从快速待机模式唤醒后 WISR_64 不正确 - NXP 社区)。 您可以参考社区提供的低功耗示例: S32K3 电源管理单元 AN 和演示-恩智浦社区 [RTD400 & 500 MCAL & IP] S32K3 电源管理单元 AN 和演示-恩智浦社区 MCAL 层还提供报告唤醒源的 eCUM 模块,但是,RTD 软件包仅为 eCUM 提供存根文件,目的是将它们用作参考,可以根据应用程序需求进行修改/ 替换。 致以最诚挚的问候, Julián Re: Wakeup Source Recognition after function reset from standby mode. 因为我使用的是 Autosar 堆栈,需要有唤醒源 ID。 功能RESET后如何配置 WISR/WISR_64 值以保存在备用功能域上? 请问如何配置? Re: Wakeup Source Recognition after function reset from standby mode. 你好,@aryandis、 是的,这将调用Wkpu_Ip_GetInputState(),如果相应的 WKPU 通道已设置,则返回 TRUE,然后清除标志。 唤醒(待机退出)后,NVIC 寄存器将 RESET 为默认值(禁用所有外设中断),但是 WKPU 寄存器的值和先前状态仍然保留。因此,在唤醒后,如果调用 Platform 函数启用唤醒中断(为 WKPU_IRQn 配置 NVIC_ISER),那么程序将跳转到唤醒中断函数,从而可以确定发生唤醒的源。 如果在唤醒后的运行模式下没有调用 Platform 函数启用唤醒中断,则可以调用 Wkpu_Ip_GetInputState() 函数来确定唤醒源。 您也可以在唤醒后直接读取寄存器。 致以最诚挚的问候, Julián Re: Wakeup Source Recognition after function reset from standby mode. 好的,有一个疑问。 我启用了 EcuM 模块并在 EcuM_CheckWakeup () 中调用了 Icu_Checkwakeup ()。但是问题在于,当发生 ICU 唤醒事件时,我们无法触发 EcuM_CheckWakeup 。(因为频道状态为 “正在运行”,不允许调用 EcuM_CheckWakeup ()) 我应该如何触发 EcuM_CheckWakeup()? 我能否将同一唤醒引脚作为 ISR,然后调用 EcuM_CheckWakeup()->Icu_CheckWakeup(),并将 Bit 状态设为 WAKEUP_STATE -> 调用 EcuM_SerWakeupEvent()? 如果我可以做 ISR,那么我如何做甘蔗? Re: Wakeup Source Recognition after function reset from standby mode. 你好,@aryandis、 对不起,你是对的。 调用 Icu_Init() 函数会在调用 Platform 函数之前清除中断标志,并将当前模式更改为 ICU_NORMAL_MODE。因此,不能在调用 Platform 函数之前调用 Icu_Init()。这似乎是驱动程序的限制。让我问问内部团队的反馈意见。 此外,Icu_GetInputState() 函数内部使用了全局变量,这些变量需要通过 Icu_Init() 函数进行初始化。在这种情况下,我认为可以调用 Wkpu_Ip_GetInputState() 函数来检查和清除 WISR 或 WISR_64 的状态,或者直接读取它们。 致以最诚挚的问候, Julián Re: Wakeup Source Recognition after function reset from standby mode. 我调试过同样的问题,发现没有调用 ECUM_CheckWakeup 是因为 ICU_currentMode 因为 ICU_NORMAL_MODE 在待机唤醒以进行热RESET后 ICU_NORMAL_MODE 设置为 Icu_Init 的开头。 如何在唤醒后调用 EcuM_Cehckwakeup? Re: Wakeup Source Recognition after function reset from standby mode. 你好,Julian_AragonM,请与我们团队讨论一下 Icu_Init() 在待机唤醒后将当前模式更改为 ICU_NORMAL_MODE 的问题,我该如何避免这种情况? Re: Wakeup Source Recognition after function reset from standby mode. 唤醒源正常工作,唤醒后会出现 Icu_ReportEvent,但由于 Icu_CuurentMode varaible 从 Icu_Init()初始化为 ICU_NORMAL_MODE,EcuM_CheckWakeup 没有调用。 EcuM_CheckWakeup 正在被 Icu_ReportwakeupAndOverFlow ICU 驱动程序调用。 由于 Icu_ReportwakeupAndOverFlow 对 ICU_MODE_SLEEP 宏的变量 Icu_CuurentMode 进行了条件检查。 Re: Wakeup Source Recognition after function reset from standby mode. 你好@aryandis..、 Icu 正常模式不应阻止为唤醒源提供服务。能否共享 Icu 阻止 EcuM 检查唤醒的代码部分?我可以看到Icu_CheckWakeup()调用它与 ICU 模式无关。 我也收到了内部团队的回复: 1.如您所知,Icu 模块不提供可以直接在 MCAL 层检查唤醒源的功能。Icu 将向 EcuM 模块传输唤醒源信息,该模块将检查唤醒源。在 RTD 驱动程序中,EcuM 是一个短截线模块,目的是将它们用作参考,可以根据应用程序需求进行修改/替换。 您可以查看ECU 状态管理器的规范: 2.在 Icu 配置中,当用户启用"IcuWkpuStandbyWakeSupport" 时,Icu_Init() 不会清除 WISR 标志。 在您的项目中,要检查 Wkpu_Ip 层中的唤醒源,可以参考以下代码: 在 Icu_Init() 之前调用Platform_Init(NULL_PTR);时,我发现 WISR 标志不知为何被擦除了。因此,我在 Icu_Init() 函数之后调用了这个函数。 致以最诚挚的问候, Julián Re: Wakeup Source Recognition after function reset from standby mode. 是 正确。而且 ICU_CheckWakeup() 将从我映射过的 ECUM_CheckWakeup 中调用。而且 ECUM_CheckWakeup 是从 RTD 中的 ICU_ReportWakeupAndOverflow API 调用的,它有条件检查睡眠模式。ECUM_CheckWakeup 如何在没有睡眠模式的情况下触发信号。 还是应该从 ISR 调用 EcuM_Checkwakeup? 这是 RTD 3.0.0 的快照 Re: Wakeup Source Recognition after function reset from standby mode. 你好,@aryandis、 Icu_CheckWakeup() 是 AUTOSAR ICU 的公共 API,用于在唤醒后调用(通常由 EcuM 调用),让 ICU 验证源,然后通知 EcuM 源是否有效。这并不取决于驱动程序是否处于睡眠模式。 Icu_ReportWakeupAndOverflow() 是 RTD 和非 AUTOSAR 的内部功能,它捆绑了从中断上下文立即报告唤醒(和任何溢出)的逻辑。   我建议在唤醒后,让 Icu_Init() 设置 NORMAL(确保 WKPU 标志通过 IcuWkpuStandbyWakeupSupport = true 保持不变),然后调用 Icu_CheckWakeup(),并使用映射的 EcuM 唤醒源。即使 Icu_CurrentMode 为 NORMAL,也能正常工作。   致以最诚挚的问候, Julián Re: Wakeup Source Recognition after function reset from standby mode. 你好,@aryandis、 在我看来,有两种选择: 1.在退出待机后、EcuM 状态机进入运行前调用 EcuM_Checkwakeup()。这将在待机期间处理唤醒源。如果唤醒源有效,则 ECU 返回运行状态。 这可以在《ECU 状态管理器规范》中找到: 2.通过 ISR 上下文调用它,它将立即为唤醒源提供服务。 致以最诚挚的问候, Julián
View full article
S32M276 问题 我正在制作一个使用 [S32M276] 集成电路的样品。我为角度传感器设置了 48 针_VDE。根据数据手册,VDDE 的最大输出电流为 30mA,而角度传感器的最大供电电流为 2.5mA。如果设置了过流检测启用,VDDE 引脚将不会输出 5V。您能给我一些关于这个问题的提示吗? 相关电路如下,以供参考。您的建议中的耦合电容值是多少 > 硬件设计手册中没有推荐值。我在此设计中使用了 4u7 MLCC。 Re: S32M276 questions 感谢您关注我们的产品并为我们的社区做出贡献。 参考手册的 78.4.3 VDDE 作为电源部分提供了有关您的问题的更多详细信息。 能否请您确认,您是否遵循了这些步骤? 如果问题仍然存在,请分享您的项目,以便我们使用 S32M27XEVB 进行测试。 希望这些信息对您有所帮助。 回复: S32M276 questions 嗨,里奥、 非常感谢您的宝贵意见。我向软件工程师证实,他按照参考手册中的78.4.3 VDDE为VDDE做了设置,并确认过流事件发生在启动之后。遗憾的是,由于保密原因,我无法发送整个项目的原理图,但 VDDE(48 引脚)的相关电路非常简单,如前所述,48 引脚上有一个 4.7uF MLCC,角度传感器(TLE5501)的电源有 2*100nF MLCC。 我们的软件工程师给了我一个 test-FW,让我测试浪涌电流(100 毫秒延时以启用过流功能)。 我确认了 HW 级的浪涌电流,VDDE 的浪涌电流为 1.03A,持续时间为 30us。 当地的恩智浦技术支持人员告诉我,VDDE 源自 VDD,如果 VDD 已经滤波,则无需为 VDDE 安装更多 MLCC。 我查看了角度传感器 - TLE5501 的数据表,建议使用 100nF*2 耦合 MLCC,需要保留。 于是我取出 4.7uF 再次测试,结果显示是这样、 1 时,过流标志仍设置为 100nF*2 状态。 2、浪涌电流约为 21.7 毫安,持续时间为 20 毫秒。 以下是我的问题、 1,您推荐的耦合电容值是多少?是否有可能移除 48 引脚附近的 4.7uF 电容,只保留角度传感器的 2*100nF 电容? 2, VDDE 输出的浪涌电流阈值是多少?在 2*100nF 状态下,21.7mA 电流是否会导致 VDDE 过流?从硬件角度看,该值不超过 30mA 的最大输出值,应该不会对 MCU 造成损害。 如果有任何不清楚的地方,随时通知我。谢谢,祝您愉快。 致以最诚挚的问候,特德 回复: S32M276 questions 又见面了 如需保密协助(如原理图审查),请通过以下方式提交工作单: -> 支持 关于 VDDE 的推荐电容值,AN14116 中没有说明,但建议使用 < 1uF 以避免出现高电流峰值。 VDDE 上允许的最大持续电流(@ 电源 = 5 V)为 30mA。 过电流检测阈值为 175mA。 另一方面,VDD_AE10 或 VDD_HV_A 不应用于外部负载。相反,您可以使用 VDDE。 如果问题仍然存在,请提交示意图审查。 希望这能解决您的问题。 回复: S32M276 questions 嗨,里奥、 非常感谢你们的大力支持。我已经将原理图与提交的票据一起发送给您了,您收到了吗?请你们帮忙审查一下。 回到 48pin-VDDE 的话题,如前所述,我去掉了 4.7uF MLCC,只保留了 100nF*2,测试结果显示浪涌电流约为 1.06A,持续时间为 1us。仍然超过 175mA 过电流检测阈值,因此将导致过电流事件。 *测试 FW 是在 VDDE 命令接通后 100 毫秒延时启动过流功能。 虽然浪涌电流能量很低,但我还是想向您确认一下,它是否会损坏 S32M276-IC 的内部开关? 如果没有影响,我想使用外部 MLCC 100nF*2 作为硬件解决方案来制作 VDDE、 与 FW 解决方案一起,在下一版本中,过流功能在 VDDE 命令接通后延迟 100 毫秒激活。 回复: S32M276 questions 我提交的部分浪涌电流数据有误,在此深表歉意。VDDE 的浪涌电流校正如下: 1、根据原理图,当 VDDE 外接 4.7uF+100nF*2 时,浪涌电流约为 1.31A,持续 20us。 2、去掉 4.7uF,只保留用于角度传感器的 100nF*2 耦合 MLCC,浪涌电流约为 1.06A,持续时间为 1us。 3、移除所有外部 MLCC,则浪涌电流约为 21.7mA,持续 20ns。 1 和 2 的浪涌电流远大于 30mA(VDDE 的最大输出电流),它将触发信号过流事件。>> 因此,我在 100 毫秒后启动过流功能的条件下进行了测试。 而对于 3,低于 30mA,则不会导致过流。 VDDE 源自 VDD,而根据设计准则,VDD 已经有足够的 MLCC,所以我可以去掉 4.7uF MLCC 吗? 此外,根据角度传感器的数据手册,其电源引脚应安装 100nF*2 耦合 MLCC。那么问题来了,如果我可以选择状态 2(100nF*2),那么 1.06A 1us 的浪涌电流是否会对 SOC 造成损坏? 如果没有损坏,我可以设置过流功能延迟,以激活 VDDE 过流功能。 我刚刚想出了这个话题的另一个解决方案,使用VDDE作为角度传感器的最初目的是为了电源模式。系统要求 ECU 的静态电流应低于 100uA。我确认 S32M276 IC 可以在深睡眠模式下实现这一功能,如下表所示。我想问一下,是否可以将角度传感器的电源从 VDDDE 切换到 VDD_AE10 或 VDD_HV-A?我想知道更改后是否会影响深度睡眠电流值,并满足系统 100uA 以下的要求。 期待您的答复,并提前向您表示感谢。 回复: S32M276 questions 收到示意图。 请给我更多的时间来了解内部对您问题的反馈,以便我给您一个合适的答复。 我们感谢您的耐心和理解。 回复: S32M276 questions 你好,@Ted_Qiao、 感谢您的耐心等待。目前,我的同事 Leo 正在休假,我将暂时接手这个案子。以下是内部团队的反馈意见: 建议尝试使用两个 10nF 电容,而不是 100nF。它太大而不会造成高浪涌电流;这可能会触发信号关机。如果传感器设备的电源足够稳定,我们可以拆下盖子以避免如此大的涌入。 另一方面,您可以尝试将 PMC 电压改为 3.3V,看看浪涌情况如何。也就是说,先用 3.3V 对电容预充电,然后再改用 5V。 根据数据手册,VDDE 过流最大阈值为 175mA,因此 1A 的阈值过大。 致以最诚挚的问候, Julián 回复: S32M276 questions 非常感谢您的友好回复。我仍然坚持根据角度传感器数据表使用 2*100nF MLCC。那么,VDDE 引脚 1.06A 持续 1us 的浪涌电流是否会损坏 MCU? 回复: S32M276 questions 你好,@Ted_Qiao、 根据数据手册,VDDE 过流最大阈值为 175mA,因此 1A 的阈值过大。 尽管这是一个非常短暂的脉冲,但重复的事件可能会给内部开关带来压力,并对其产生长时间影响,并且容易触发信号过流事件。 如前所述,内部团队的建议是将 PMC 电压改为 3.3V,看看浪涌情况如何;先用 3.3V 对电容预充电,然后再改为 5V。评估需要数据。 致以最诚挚的问候, Julián
View full article
使用 Arduino Portenta x8 进行 SWD 位操作 你好, 我一直在成功地使用搭载树莓派 3 和 OpenOCD 的 Blinkinlabs JTAG Hat 来调试设备。我按照他们的 github 上的例子进行了设置。 我现在正在尝试在 Arduino Portenta X8(带有 Hat Carrier)上使用它,我为它创建了一个自定义 sysfsgpio 配置: 适配器驱动程序 sysfsgpio sysfsgpio_s wd_nums 162 166 sysfsgpio_srst_num 188 有了这个设置,我可以在直接连接 Portenta 的 GP IO 时刷新目标设备。 但是,在通过 JTAG Hat 进行路由时我会得到: 错误:连接 DP 时出错:无法读取 IDR 我认为问题出 在 swdio_dir 引脚上,而 sysfsgpio 不支持这个引脚 。 是否有与恩智浦 i.MX8 mini 兼容的适配器/驱动器,可以控制 SWD 方向引脚? 谢谢您的帮助。 谨致问候 Aditi Verma
View full article
SPI总线概述(日语博客) 0. 目录 目录 什么是SPI? 1.1 历史和规格 1.2 控制器/目标或主节点/子节点(子节点) 物理/电气特性 2.1 信号线数量:信号名称 2.2 推挽式。不传输时处于高阻抗状态 2.3 时钟频率 协议 3.1 模式 3.2 数据传输 连接拓扑 4.1 并行连接和带片选功能的菊花链连接 参考资料 1. 什么是SPI? 1.1 历史和规格 SPI总线是由美国摩托罗拉公司(现为恩智浦半导体公司)提出的一种串行总线规范。该规范据称于20世纪80年代中期制定。SPI代表“串行外设接口”,最初开发为一种用于连接处理器和外围芯片的四线串行总线。三线SPI总线也作为衍生规范存在,但最初的四线系统才是基础。 SPI 通信方法有多种变体,例如信号极性和数据同步时序设置,因此在使用时需要注意这一点。 与 I²C 类似,SPI 也用于在芯片之间交换数据,但两者各有优缺点,如[表 1] 所示。 SPI 适用于需要更快数据传输的应用。这是由于其电气规格不同:I²C 使用开漏驱动信号,而 SPI 使用推挽驱动信号,因此更容易实现更高的传输速度。此外,在数据传输速度方面,SPI 的特点是能够执行全双工通信,从而允许同时进行发送和接收。 另一方面,SPI也存在一些缺点。传输数据长度和时钟极性是针对每个目标设备单独指定的,这使得混合连接多种类型的设备变得困难。此外,连接多个相同类型的设备时,每个设备都需要一个片选信号,这会增加信号线的数量;而且,在级联设备时,数据传输长度也必须进行调整。   I²C SPI 行数 2 数据来源:SDA 时钟:SCL 4 数据:SDO、SDI(MOSI、MISO) 时钟:SCLK 芯片选择:CS 速度 约400kHz 根据模式不同,频率分别为 1MHz、3.4MHz 或 5MHz。 几百千赫兹到几十兆赫兹 沟通方向 双向半双工 双向全双工 连接方式 多点(并行) 多个控制器与多个目标 并行或菊花链式单控制器对多个目标 信号驱动 明渠 (需要上拉电阻) 推拉 表1:I²C和SPI的比较   1.2 控制器/目标或主节点/子节点(子节点) 在SPI协议中,数据传输也是以主从关系进行的。过去常用“主设备”和“从设备”这两个术语,但现在已改为“控制器”和“目标设备”。 它们也被称为主节点/子节点(简称“子节点”),保留了之前角色名称中的首字母“M/S”。从现在开始,本博客将特意使用“主节点/子节点”(简称“子节点”)这一术语。 在SPI协议中,不能存在多个主设备。通信始终发生在单个主设备和一个或多个目标设备之间。 2. 物理/电气特性 2.1 信号线数量:信号名称 SPI总线是一种四线同步串行接口。同步串行接口是一种利用其中一条信号线作为时钟信号,与时钟信号同步发送和接收数据的方法。 数据信号线有两条。一条用于主设备到子设备的数据传输,另一条用于子设备到主设备的数据传输。还有一条是片选信号。SPI 协议本身没有指定传输目标地址的方法。因此,片选信号用于指定目标设备[图 1]。 信号名称可能有多种叫法。以下是OSHWA使用的信号名称: SDO :数据输出 SDI :数据输入 SCK :串行时钟 CS :芯片选择:CS 在上述示例中,SDO 和 SDI 的名称是根据每个芯片上的数据输入/输出方向来命名的。在这种情况下,引脚名称很明确,但难以区分主输出和子输出之间的信号方向。 相反,电路图等中通常使用以下信号名称。本博客将遵循这些术语。 MOSI :主输出到子输出的数据(主输出 子输入) MISO :从子系统到主系统的数据(主系统输入/子系统输出) SCLK :串行时钟 CS :芯片选择:CS 在这些信号中,只有MISO信号是从子系统发往主系统的信号,其余信号都是从主系统发往子系统的信号。通信过程中信号方向保持不变。 图 1:控制器和目标。信号名称 例如,当通信只是单向进行时,为了节省信号数量,可以省略其中一条数据线。 还有一些目标设备支持时分复用传输和接收,从而只需使用一条数据线。在这种情况下,在主侧,MOSI/MISO 通过电阻短路以合并信号。 2.2 推挽式。不传输时处于高阻抗状态 信号以推挽方式输出。当没有数据传输时,MOSI 和 MISO 输出端处于高阻抗状态。这样做是为了防止多个子节点并联连接时相互干扰。 信号电压由子节点设备决定,因此必须进行相应的调整。如果主节点和子节点之间的电压不同,则需要进行电压转换。 2.3 时钟频率 关于时钟频率没有具体规定。通常使用数百 kHz 到数 MHz 范围内的时钟频率,上限由子节点器件的规格决定。需要高速数据传输的应用可能会使用数十 MHz 的时钟频率。此外,在存储器件和其他应用中,也有使用多条 MOSI 和 MISO 数据线来提高传输速率的例子。 3. 协议 数据传输协议没有严格的规定,每个子节点设备都可以自由选择协议。主微控制器具有支持各种子节点设备的设置。 基本的传输过程始于将连接到目标子节点的 CS 信号置位。当 CS 信号置空时,传输结束。CS 信号通过低电平和高电平信号置位和置空,但极性由子节点设备的规格决定。许多设备使用最高有效位 (MSB) 在前进行数据位排序,但也存在例外情况。此外,传输单元的位数也没有具体规定。我见过一些解释说传输单元是 2 到 16 位,但这并不准确,因为有些子节点使用更大的位长度作为传输单元(例如,64 位)。 3.1 模式 SPI 具有称为“模式”的设置,指的是时钟极性和边沿选择的组合,共有四种模式,每种模式有两种设置[图 2]。 时钟极性是一个名为CPOL 的设置,它决定在没有数据传输时 SCLK 是低电平还是高电平。在主电路中,将其设置为 0 会将其设置为低电平,设置为 1 则会将其设置为高电平。边沿选择(相位)称为CPHA 。此设置决定数据是在第一个时钟边沿还是第二个时钟边沿被锁存(接收)。设置为 0 选择第一个边沿,设置为 1 选择第二个边沿。CPOL 和 CPHA 有时可以组合使用,以表示模式 0 到 3 [表 2]。 另外,请注意,还有一些子节点的片选极性相反。 图 2:模式(CPOL、CPHA)     中央警察 CPHA 模式=0 0 0 模式=1 0 1 模式=2 1 0 模式=3 1 1 表 2:模式和 CPOL、CPHA 什么是“锁存数据的边缘”? 数据的发送和接收与时钟同步,但数据会在时钟的上升沿或下降沿发生变化。图 3 显示了数据在下降沿发生变化的示例。主节点的 MOSI 输出和子节点的 MISO 输出会随着主节点 SCLK 输出的下降沿而变化。下一个数据会在下一个下降沿发生变化,但在此之前,状态保持稳定。时钟的上升沿恰好出现在这段时间内,因此数据会根据这个时间点相互捕获。这就是所谓的“锁存边沿”。 图 3:数据(MOSI/MISO)和时钟(SCLK)同步 3.2 数据传输 片选信号置位后,数据会与时钟同步发送和接收。当子节点接收到自身的片选信号置位时,它会与时钟同步接收和输出数据。 图 4 展示了一个 SPI 数据传输示例。数据根据时钟信号进行交换,同时 CS 信号保持有效。熟悉逻辑电路的人会发现,这是通过一个简单的移位寄存器电路实现的。 图 4:SPI 传输示例   4. 连接拓扑 4.1 并行连接和带片选功能的菊花链连接 如图 5 所示,多个子节点连接在一起。每个子节点都提供一个片选信号,通信通过每个信号指定发送方和接收方来实现。或者,为了减少片选信号的数量,可以使用菊花链连接,并将子节点视为一个具有扩展比特长度的单个子节点来进行通信(如图 6 所示)。 如前所述,将多种类型的子节点连接到同一SPI总线时必须格外小心。正如前文所述,它们的“模式”、片选极性和数据位长度可能不同。因此,每次与每个子节点通信时,您可能都需要切换设置或在硬件中进行调整。 图 5:并联连接   图 6:菊花链连接 5. 参考资料 OSHWA 角色和信号名称[英文] 关于“SPI”的维基百科页面:本博客中的信号名称和主节点/子节点名称均基于此描述。 Interface 2024 年 3 月刊(CQ Publishing) :专题文章“从零开始的串行通信 [使用 Pico 进行 UART/I2C/SPI 通信]” NXP 系统管理 I²C、I3C、SPI 选择器指南 NXP社区博客:I3C:下一代串行总线 NXP社区博客:I²C总线概述 [本文最初发表于《Interface》杂志2024年3月刊(CQ Publishing出版),标题为“从零开始构建I2C和SPI ④……SPI通信标准”,第71-73页。本文摘录并修订了其中解释通信规范的部分。] 更改历史记录: 2025年2月3日:第一版 2025-02-25:在“5. 参考资料”部分添加了“NXP 系统管理 I²C、I3C、SPI 选择器指南”的链接。 2025-05-01:更正了目录(删除了项目),更正了第 2.2 节中的项目名称。 2026-07-24:修复了“2.1 信号线数量:信号名称”和“5. 参考资料”中指向“OSHWA 角色名称和信号名称”的损坏链接。 ========================= 我们目前无法回复此帖子“评论”部分的评论。 对于由此造成的不便,我们深表歉意。如有任何疑问,请参阅“ NXP技术问题-如何联系我们(日语博客) ”。 (如果您已经是恩智浦的分销商或与恩智浦有合作关系,您可以直接询问负责人。) SPI总线用于微控制器/处理器与外围设备之间的通信。 虽然这种串行总线应用非常广泛,但我还是想借此机会简要介绍一下它的起源。 通信标准 界面 日本博客
View full article
恩智浦汽车加速度计基础知识 第 4 部分 - ASIC 基础知识(日语博客) 上次,我们详细解释了G细胞MEMS。 在第四部分中,我想讨论一下如何使用 ASIC 将这种 G 型 MEMS 的电容器电容作为信号进行处理的机制。 从G-cell MEMS中提取加速度信息 让我们来看看如何从 G 单元 MEMS 中提取加速度信息。 首先,回顾一下。在之前对G-cell MEMS的解释中,我们提到过可移动板的运动取决于所施加的加速度。 G型电池可以看作是一个可变电容器,其电容值随可移动极板的移动而变化。该电容值代表了电流加速度。 现在,ASIC 的任务是从 G 单元中提取信号。 ASIC代表专用集成电路,这里使用的 ASIC 是一种专门用于控制 MEMS 和处理测量数据信号的半导体集成电路。 如上图所示,G 单元的输出按顺序进行处理,形成 MCU(微控制器)可以轻松处理的数据。 1. 积分器 CV 转换 ・CV(电容到电压)转换模块的功能是将G单元(电容器)的电容值(=加速度值)转换为电压值。 在早期产品中,校正处理采用模拟值,但近年来,利用数字计算实现高精度校正处理已成为可能。因此,电压值通过模数转换器 (AD) 和积分器转换为数字值。由于这是 ASIC 的入口,因此也称为前端。 2. 收益 - 加速度值被放大,以便在后续阶段进行校正处理。 3. 过滤器 - 使用带通滤波器去除不必要的信号分量和噪声。 4. 温度补偿和增益 - 设备温度变化会导致检测值出现误差,因此需要进行校正。 此外,由于各种因素,施加的加速度和检测到的加速度并非线性对应关系。对此进行了校正,使其呈线性关系。 ・此外,根据应用情况调整输出值分辨率。 5. 输出 通过到目前为止的处理,我们已经获得了一个干净的加速值,然后将其转换为适合 SPI 等通信接口的格式,并从设备输出。 ---------------------------------------------------------------------- 以下是每个模块的更多详细信息。 首先,让我解释一下最左边的入口部分(称为前端)。 前端 积分器 CV 转换 上图显示了 G 细胞 MEMS 中发生的效应。 在此,G-cell 可变电容器在 ASIC 的控制下进行充电和放电。 这种充电和放电过程是通过一种称为开关电容器电路的功能来实现的。 这里有一个充电开关和一个放电开关,其中一个始终处于断开状态,另一个始终处于闭合状态。该开关快速切换以输出电荷。 通过积分,可以得到与加速度等效的电压值。 上图摘自NXLS9XXX 系列数据手册,其中标有 CV 转换的部分负责将 G 电池容量转换为电压。 可以直接输出电压值,但最好进行校正以使测量值更加准确。 在较老的传感器中,校正是使用模拟电路进行的,但现在数字处理已成为常态,因此校正是在 AD 转换之后进行的。 NXLS9XXX 系列采用 Σ-Δ(也称为 Δ-Σ)AD 转换器。 Sigma-delta ADC 具有多项优势,最显著的优势是抗锯齿和过采样带来的分辨率提升。 到目前为止的 CV 转换和 AD 转换称为调制器。 由于加速度值是以数字值的形式获得的,因此现在更容易纠正错误、进行滤波,并更改输出格式以适应应用程序。 后端 接下来,我们将解释纠错过程。 理想情况下,当输入“1G”时,测量输出应为“1G”。但实际上,由于各种因素的影响,输出值可能会出现偏差,例如“0.9G”。因此,需要进行校正,使输出值达到1G。 偏移量和灵敏度 加速度传感器最重要的输出特性是其偏移精度和灵敏度。 偏移误差也称为偏差或偏差,其结果值大于或小于施加的加速度。 灵敏度又称比例因子,是施加加速度与输出加速度值的斜率。 平均值 如果噪声导致数值看起来比实际值大或小,可以使用平均值来消除这些变化并获得实际值。 然而,它的缺点是需要多个样本,这可能会很耗时,但通常可以通过使用高速计算来克服这个问题。 非线性合成 施加的加速度和检测到的加速度并非线性对应关系。 这主要是由于 G 型电池 MEMS 的特性(变形、形状)造成的。 ASIC 具有加速值和校正值的数据库,用于进行校正。 温度补偿 随着器件温度的变化,其输出特性可能会发生变化。 具体来说,温度变化会导致构成加速度传感器的组件膨胀和收缩,从而导致 G-Cell MEMS 变形,进而产生这种效果。 该ASIC芯片内置温度传感器,可通过参考当前温度和校正值的数据库进行校正。 输出缩放 取决于用户的使用方式, a) 何时需要更宽的加速度检测范围 b) 当需要更高分辨率时 因此,对加速度检测范围的要求可能会有所不同。 在上图中,左侧显示了用法 a),其设置为在 120 G 时输出 2047 LSB,从而可以测量尽可能大的施加加速度。 另一方面,在右侧的图中,使用了方法 b),在 80 G 时输出 2047 LSB,从而可以检测到施加加速度的最小差异。 根据应用程序改变加速值分配的过程称为缩放。 这是通过ASIC内部简单的位移操作实现的。 输出格式 经过校正处理后,加速度检测值的精度已得到提升,并通过与用户所用MCU兼容的通信接口输出。以下通信方式主要用于汽车加速度传感器。 直接连接到MCU(微控制器)时 直到2008年左右,许多用户仍然偏爱模拟输出,但数字输出已逐渐成为主流。对于数字输出而言,SPI接口常用于汽车领域,而I2C接口则常用于消费领域。 模拟电压值 SPI I2C NXP 的某些产品允许用户随时更改通信方式。 当传感器放置在远离MCU的位置时 当使用加速度传感器检测车辆碰撞时,传感器通常安装在车门或保险杠等位置,以便立即检测到碰撞。然而,接收测量结果的微控制器(MCU)无法承受200G的冲击力,因此通常将其放置在车辆相对安全的中心位置,导致传感器与MCU之间距离较大。在这种距离下,由于抗噪性问题,SPI或I2C通信无法安全进行。另一方面,CAN(控制器局域网)成本过高。此外,由于需要在车内铺设长线,线材的重量也不容忽视。因此,人们开发了专门用于碰撞检测的通信方法。 DSI3 PSI5 NXP是这两个规范制定组织的成员, NXP的一些产品也允许用户随时切换通信方式。 手臂 安全气囊意外弹出是一个重大问题,因为它可能导致乘客受伤。 通常情况下,MCU 会根据加速度传感器的测量值来决定是否展开安全气囊。 此外,加速度传感器本身具有碰撞检测功能,通过将MCU的结果与加速度传感器的结果进行比较,可以更精确地进行碰撞检测(冗余)。 该安全功能利用加速度传感器本身来检测碰撞,称为 ARM(意思是“准备就绪!”)。 通过一次性编程 (OTP) 设置选项 ASIC 具有一次写入(非易失性)存储区域,可以将管理信息和配置写入该区域。 以前,通过向保险丝阵列施加高电压来熔断保险丝并写入设置。 目前主流方法是将设置写入 Flash 并锁定,使其无法被覆盖。 镜像注册 当加速度计启动时,它会将 OTP 存储器的内容复制到镜像寄存器(RAM)中,并参考该镜像寄存器的值来执行加速度值校正处理和功能设置。 如果用户在开发过程中想要测试某个功能,或者想要使用与 OTP 内存内容不同的设置进行操作,他们可以通过重写镜像寄存器的内容来临时更改到所需的设置。 但是,一旦断电,设置将恢复到初始设置,即 OTP 寄存器设置。 至此,我们对加速度传感器专用集成电路(ASIC)的解释就结束了。 下次我想谈谈包装和组装。 参考信息 恩智浦加速度计网页 NXLS9XXXX 数据手册(PDF 版本) ========================= 我们目前无法回复此帖子“评论”部分的评论。 由此给您带来的不便,我们深表歉意。如有任何疑问,请联系您的恩智浦经销商或直接联系恩智浦公司。 本页概述了恩智浦汽车加速度传感器的原理、特性和应用。 在上一篇文章中,我们解释了G细胞MEMS。 在第四部分中,我想讨论一下如何使用 ASIC 将这种 G 型 MEMS 的电容器电容作为信号进行处理的机制。 传感器 日本博客
View full article
i.MX8MP - 在 V4L2 和 OpenGL 之间共享 G2D 缓冲区时的性能问题 您好, ,当从 V4L2 直接向 OpenGL(GPU GC7000UL)共享高分辨率(4048 x 3040 : 12 MP)的 G2D 缓冲区时,我遇到了一个问题。 下面是我的应用程序的伪代码。 我正在分配 g2d_buffers(4048x3040,YUYV)并保存文件描述符。 struct g2d_buf *_srcBuf = g2d_alloc(4048 * 3040 * 2, true); // cacheable int g2d_src_buf_fds = g2d_buf_export_fd(&_srcBuf); 然后我使用这个 g2d 文件描述符使用 V4L2 从摄像机设备获取视频帧。 struct v4l2_buffer buf; buf.memory = V4L2_MEMORY_DMABUF; buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.m.fd = g2d_src_buf_fds; [...] ioctl(cam->fd, VIDIOC_QBUF, &buf); [...] ioctl(cam->fd, VIDIOC_DQBUF, &buf); // DMA sync operations struct dma_buf_sync sync = { 0 }; sync.flags = DMA_BUF_SYNC_START; ioctl(buf_fd, DMA_BUF_IOCTL_SYNC, &sync); sync.flags = DMA_BUF_SYNC_END ; ioctl(buf_fd, DMA_BUF_IOCTL_SYNC, &sync); 在 OpenGL 方面,我们使用 Vivante 扩展连接到 G2D 缓冲区。 p_glTexDirectVIVMap( GL_TEXTURE_2D, 4048, 3040, GL_VIV_YUY2, &_srcBuf->buf_vaddr, // virtual address (void **)&_srcBuf->buf_paddr // physical address ); 工作流程运行正常,因为我们可以在 OpenGL 输出端以正确的帧频(30FPS,即摄像机的帧频)显示图像,但只能在低分辨率(例如 800x600)下显示。 如果我们将分辨率提高到 1200 万像素,就会发现帧速率慢慢下降(当我们使用 4048 x 3040 的全分辨率:1200 万像素时,帧速率下降到 19FPS)。 您对如何共享高分辨率的 g2d 缓冲区有什么建议吗? 谢谢您的帮助。 Re: i.MX8MP - Performance issue when sharing G2D buffers between V4L2 and OpenGL 如果可以帮助某人,我们找到的解决方案是使用 G2D 设备将图像从 GPU 3D 复制到 CPU。 我们的输油管道现在 : V4L2 -> GPU 3D :使用 DMA 缓冲区传输数据 在 G2D 缓冲区中进行 GPU 3D 渲染 G2D -> CPU:我们使用 g2d_copy 在 CPU 中获取数据 使用此管道,我们可以捕获 1200 万像素的视频,并以 30FPS 的速度对其进行处理。 Re: i.MX8MP - Performance issue when sharing G2D buffers between V4L2 and OpenGL 很抱歉这么晚才回复您。 我们的性能问题似乎与使用 glReadPixels 函数将图像从 GPU 传输到 CPU 的过程有关。 我们可以通过使用 eglSwapBuffers 来改进这一过程,从而解决性能问题。 iMX8MP 上有这方面的信息或特殊方法吗? Re: i.MX8MP - Performance issue when sharing G2D buffers between V4L2 and OpenGL 您好, 对于 2D 32K x 32K 坐标系,但缓冲区取决于 RAM,所以应该没有问题。因此,请将您的应用程序代码发送给我们,以便在此重现并进行检查。 此致 Re: i.MX8MP - Performance issue when sharing G2D buffers between V4L2 and OpenGL 谢谢您的回答。我使用的是 i.MX8MP。 如果没有限制,您是否有一些关于如何正确操作的建议?我们认为,4048x3040(1200 万像素)的分辨率可能有点过高,一些内部传输(DMA 或非 DMA)可能会导致我们注意到的帧速率下降。 Re: i.MX8MP - Performance issue when sharing G2D buffers between V4L2 and OpenGL 你好 你在使用什么设备? 使用 i.MX6 时,会出现一些与您的应用程序有关的问题,但使用 i.MX8 就不会出现这些问题。 此致
View full article
NXPの機能安全サポート こんにちは。こんにちは。 当社は、S32K3 シリーズマイクロコントローラをベースに機能安全製品を設計しています。これについては技術的なサポートが必要です。NXP インドおよび米国の SME に接続してください。 Re: NXP support on Functional safety こんにちは@sutrai_ravi_kさん、 新しいサポート チケット (730126) が作成され、NXP インド チームに転送されました。 彼らはあなたに直接連絡します。 よろしくお願いいたします。 ダニエル
View full article
如何在 i.MX RT1050 上从多个启动地址运行同一个启动加载程序? 嗨,恩智浦社区、 我正在开发一个i.MX RT1050项目,其单个引导加载程序目前位于闪存中的 0x60000000。我希望能够在运行时选择启动加载程序从哪个起始地址运行,本质上是从两个不同的位置(例如,出厂启动模式和工作启动模式)执行相同的引导加载程序。 限制和设置: 闪存中只有一个引导程序映像。 我想在运行时从RAM 中运行它,以选择不同的起始地址。 引导加载程序目前与位置无关 (PIC)。 我已经分配了足够的 RAM(0x80000000,大小为 2 MB)来容纳引导加载程序。 我知道有这样一种做法: 将启动加载程序从闪存复制到 RAM。 将 SCB->VTOR 设置为新的 RAM 位置。 将 MSP 设置为新引导加载程序的堆栈指针。 跳转到 RAM 中的 RESET 处理程序。 我的问题是 如果 i.MX RT1050没有编译成 PIC,能否安全地从 RAM 执行引导加载程序? 要使引导加载程序与位置无关,需要做哪些修改? 是否有为固件插槽实施运行时可选择引导加载程序启动地址的最佳实践? 任何指导、示例或参考都会非常有帮助。 启动 ROM | 启动配置 | 闪存 核心与内存 MCXC Re: How to run the same bootloader from multiple start addresses on i.MX RT1050? 你好@sachin13t、 请查看以下可能对你有用的链接:在 i.MX RT10xx 系列上实现第二个引导加载程序 + master 上的 sbl/元器件/secure/semifunc/hab_rvt.c · nxp-mcux presso /sb l · GitHub 有关位置无关代码的更多信息,可以参考以下链接:适用于 ARM Cortex-M 的带有 GCC 的 位置独立代码 | Eclipse 上的 MCU。 BR, IsaulO.
View full article
🚀 Kinara 2025 年第三季度非官方内部代码包版本 嗨,团队、 🎉 好消息 2025年第三季度的Kinara内部版本现已上线,可以进行测试!这是你在正式版本之前亲身体验最新代码包的机会。 📦可用套餐: ⚡ rt-sdk-ara2 🕵🏼 yolov8n-gstreamer-ara2 🗨️ llm-edge-studio 📸 llava-at-edge 🎥 qwen2.5-vl-gradio 🔗 在此处访问所有软件包:Kinara Q3 套餐文件夹 🧪 这个版本是关于什么的? 这是一份非官方的内部版本🚫仅供测试 基于Kinara SDK r1.2.1 版本 重点验证第三季度形象 将 仅在 SDK r1.3.0 和电路板支持包。 6.12.32_2.1.0 的正式版本之前 支持 🧰 主要功能 ✅ 包含 FFMPEG,无需手动版本! 🎥 ✅ 测试板:i.MX 8MP FRDM ✅ 您还可以在以下设备上试用:i.MX 95 FRDM& i.MX MR FRDM ✅ 官方版本将支持上面提到的所有 3 个板 🤝想要投稿? 如果您有支持 FFMPEG 的i.MX 95 FRDM或i.MX MR FRDM图像,请告诉我!我将上传它们,以便其他人也能使用它们 🙌 🛠️ 发现问题? 通过 JIRA 提交票单: 🔗 MICRSE JIRA 板 元器件:K-NPU: 受让方:Juan Jorge Mendoza🙋‍♂️ ⏳提醒您 如果你遇到任何问题,请随时报告——或者等待下一个正式版本即将发布! 🚀 感谢您的支持,祝您测试愉快!🧪 欢迎所有反馈意见!☺️
View full article
动态调整 RT1176 音频 PLL 分母是否安全? 大家好, 我有一个 RT1176 应用程序,需要通过 SAI 输出音频并定期(~8kHz)调整音频时钟,以使系统与另一个设备保持同步。 从音频 PLL 计时并调整音频 PLL 分母如下似乎工作正常,且不会干扰 I2S 输出: ANATOP_AI_Write(kAI_Itf_Audio, kAI_PLLAUDIO_CTRL3, pllValue); 在参考手册(P.1421)中,关于音频/视频PLL,它指出: 它们不需要精确/恒定的频率,并且可以作为动态频率缩放过程的一部分进行更改 然而 第 1422 页上写道: 请注意,PFD 不仅能够实现比 PLL 更快的频率变化,而且还允许安全地“动态”更改配置,而无需经过输出时钟禁用/启用过程。 第 1423 页的图 14-8 显示音频 PLL 没有 PFD。 NXP 能否确认使用 ANATOP API 动态调整音频 PLL 是否安全(如我上面所示),或者我是否需要使用带有 PFD 的 SYS PLL 之一来驱动音频时钟? 非常感谢, 马特   回复:动态调整 RT1176 音频 PLL 分母安全吗? 嗯,这是个好消息,谢谢你告诉我!我猜参考手册将会更新,因为它们现在有相互矛盾的信息。 回复:动态调整 RT1176 音频 PLL 分母安全吗? 撞 回复:动态调整 RT1176 音频 PLL 分母安全吗? 看起来系统 PFD 的 DIV 字段为 13-35,而 MULT 始终为 18。 这远不如音频PLL灵活,所以不是一个替代解决方案,除非,我是不是漏掉了什么?看来我们不能使用系统PLL PDF。 你说这是‘最佳选择’,还有其他选择吗?我的问题仍然存在,是否可以动态调整音频 PLL,或者绝对不推荐这样做? 谢谢! 回复:动态调整 RT1176 音频 PLL 分母安全吗? 嗨,丹尼尔, 是的,对于我们来说,对此有一个明确的答案很重要。 谢谢,马特 回复:动态调整 RT1176 音频 PLL 分母安全吗? 感谢 Daniel 的快速回复。 是的,在我使用逻辑分析仪捕获 SAI 输出并使用ANATOP_AI_Write(kAI_Itf_Audio, kAI_PLLAUDIO_CTRL3, pllValue) 调整音频 PLL 的基本测试中,我看到时钟在 48kHz 1 帧内发生变化,并且没有任何有问题的伪影。我想知道我是否很幸运,或者这是否是硬件的完全有效的使用。 据推测,如果音频 PLL 被重新初始化或完全禁用,这会干扰音频输出吗?鉴于我们需要每秒执行约 8000 次,因此它需要是一种符合规格且经过充分测试的方法。 我也会调查 SYS_PLL PFD,但在我们致力于硬件设计之前,最好能得到一个明确的答案。 非常感谢, 马特
View full article
カードエミュレーション PN7160 シリアル番号 こんにちは、 現在、ESP32 にコネクテッドされた PN7160 を使用したカード エミュレーションに取り組んでいます。 PN7160 を Android NFCリーダ (NFC ツールを使用) にタップすると、エミュレートされたカードが検出されます。ただし、最初のバイトは常に 08 ですが、それ以外はタップごとに UID が変わることに気付きました。 私が観察したUIDの例: 08467004 0886036e 08c7351f 0831fb0d ... 私の質問は次のとおりです: PN7160 でカード エミュレーション モードを使用する場合、完全にカスタマイズされた静的 UID (たとえば、「0456789A」のような固定 4 バイト UID) を構成することは可能ですか? ご意見やご指導をいただければ幸いです。 通信と制御(I3C | I2C | SPI | FlexCAN | イーサネット | FlexIO) Re: CARD emulation PN7160 Serial number こんにちは@EduardoZamoraさん、 ご説明いただき、NXP_HCE_RNDM_UID_ENB 構成を教えていただき、誠にありがとうございます。これにより、テスト中に観察された動作が明確になります。 サポートありがとうございます! よろしくお願いします、 AWN Re: CARD emulation PN7160 Serial number こんにちは、 @awnさん あなたの調子が良いといいのですが。 カード エミュレーション モードでは、UID はランダムな数字になるCANがあり、1 バイトのみが固定されます。この構成では、RF オフ -> RF オンの遷移が発生するたびに (各タップごとに) UID が変更されます。 詳細については、 PN7160/PN7220 構成ファイルのセクション 5.8 NXP_HCE_RNDM_UID_ENBを確認することをお勧めします。 よろしくお願いいたします。 エドゥアルド。
View full article
RT1170 双映像支持(wi/ROM API)详解 哦,只是为了好玩别忘了执行环境是 SPI 或非 Flash XIP。 有没有人真正做到了这一点? Re: RT1170 dual image support wi/ROM API's explained for real 嗨,迭戈; 为什么 Hello World 版本 4 和 5 选择 " SPI 或非-简化 " 但版本 6 必须选择 " SPI 或非-Complete FCB "? 谢谢! 荣 Re: RT1170 dual image support wi/ROM API's explained for real 你好@Littell 谢谢您的答复! 恐怕我没有这样的实施步骤,但就我的理解而言,你的想法很有意思。 我还没有测试过重新启动来执行版本号更高的更新映像。我认为这是最关键的一步。由于您可以实现自定义的接收和写入映像的方式,因此这似乎与 bootROM 的双启动功能无关。另外,在执行图像时写入取决于闪存的特性,请查看此应用笔记 AN12564 在 i.MX RT 系列上实现 RWW 以供参考 迪亚戈 Re: RT1170 dual image support wi/ROM API's explained for real 不,除了提供下载图像的实体外,图像更新不能涉及任何外部实体。 可以这样想,在配置了双映像的 XPI SPI 或非 Flash 上: == > == > 我不知道怎样才能说得更清楚或更简单。 Re: RT1170 dual image support wi/ROM API's explained for real 你好@Littell 谢谢您的答复! 我知道你在参考用更新的版本(比如 OTA)更新镜像。如果没有,请告诉我。 在这种情况下,我们将手动启动 MCU 进入串行下载器模式,并通过 SPT 对图像进行编程(它在低级别上实现 BLHOST)。我认为,如果你需要某种自动化。有一种原始而简单的方案,您需要从 SW 重新唤起引导加载器(这是可能的,使用 runBootloader() API),然后通过 BLHOST 发送新映像,并使用不同的 SW 版本,以受益于双映像功能。 要获得更复杂的方法,我建议查看我们的 SBL 参考项目和文档。SBL 用户指南详细介绍了双镜像的使用情况,但在这里我们并没有使用 ROM 引导加载器。 迪亚戈 Re: RT1170 dual image support wi/ROM API's explained for real 在 SPI 或非 闪存上使用 XIP 时,使用新映像对 SPI 或非 闪存进行编程,然后重新启动到该映像中,需要执行哪些步骤? Re: RT1170 dual image support wi/ROM API's explained for real 你好@Littell 感谢您的快速反馈和兴趣!我也非常感谢你们的耐心和帮助。我将等待您的进一步评论。 另外,您能否进一步解释一下执行环境的机械化? 迪亚戈 Re: RT1170 dual image support wi/ROM API's explained for real 我一定会仔细检查。 乍一看,这似乎与我对图像版本行为的理解一致。 一读笔记 在"项目创建步骤中,","L" 和"H" 是后缀,而不是前缀。 " 启动映像标准 " 表中似乎没有解决两个映像版本相同的情况。 "冗余" 和"双图像" 的概念需要大力澄清。 我的 EVKB 的引导 ROM 版本是 K3.0.1。 我使用 RT1170 参考手册第 10.13.1 节中的信息提取了它。 这是很好的信息,可惜我费了好大劲才得到。 但这只是我们面临的总体问题的一部分:应用程序的执行环境是来自SPI 或非 Flash的XIP。我们项目的一个关键功能取决于能否下载新映像并对 Flash 进行编程,然后重新启动进入该映像。 如何在这种执行环境中实现机械化? Re: RT1170 dual image support wi/ROM API's explained for real 你好@Littell 首先,本主题仍在论证中,因此请不要将其视为正式文件。正如你们已经看到的,我们仍然没有英文版的官方文档,但我们正在努力。感谢您的关注,并对给您带来的不便深表歉意。如果您遇到任何问题或发现任何不一致的地方,请看一下下面的内容,并告诉我您的反馈意见。 我用 i.MX RT1170 EVKB 和 mcuxPresso 安全配置工具 v9 对此进行了测试。 引导 ROM 在其中发挥着重要作用。在开始之前,请检查您的引导 ROM 版本。下面是如何操作的快照。 我的 RT1170 包含一个 T2.0.0 版本的引导 ROM。请帮我将 MCU 设置为串行下载模式,并调用下面的命令来检查你的 MCU。 blhost u VID,PID -- get-property 24 command. 如果您有更旧或不同版本的启动程序,请告诉我。 准备工作: 1 下载并安装最新版本的 MCUXpresso 安全配置工具。 2 对 EVK 闪存进行大规模擦除。使用 MCUXpresso IDE 可以轻松完成大规模擦除。 项目创建步骤: 导入 Hello word 演示,并添加图像 L 前缀。项目名称为 Hell_word_ImageL。 在演示源代码中打印 "Hello word from image L"。 导入 Hello word 演示,并添加图像 H 前缀。项目名称为 Hell_word_ImageH。 在演示源代码中打印 "Hello word from image H"。 删除每个项目的 XIP_BOOT_HEADER_ENABLE=0。 编译每个项目。 安全配置工具步骤: 为 RT1170 创建一个新的 SPT 工作区。 点击双映像启动按钮,选择目标图像 0 和图像 1,然后放置 0x0040_0000 的图像偏移量 当该工具检测到我们需要烧毁 0xC80 熔丝以控制给定的偏移量时,OTP 配置将变为红色。 将 RT1170 设置为串行下载器模式并测试连接,例如通过 USB。 打开 OTP 配置并读取当前处理器熔丝。 找到熔丝 0xC80,该工具将显示所需值和当前值。如果需要,点击修复选项,然后点击确定。 然后,您会看到 OTP 配置变为绿色。 提供图像 L 作为源图像,并设置图像版本为 0x5。这是一个版本号示例。. 注:在此设置下,SPT 将把图像版本 5 和同一图像分别写入 0x3000_2000 和 0x3040_0000 的图像 L 和图像 H 地址空间。 版本并写入镜像。 这样,图像 L 将被写入内存,但却是两次,因为图像 L 将被写入图像 H 的偏移量和空间。这被视为冗余启动。 将 MCU 设置为内部启动并在控制台中检查映像 L 是否启动,使用串行终端。 提供现在的图像 H 作为源图像,并设置图像版本为 0x6。 点击双映像启动并选择映像 1。 这样,SPT 将只写入图像 H(或图像 1)的偏移量和空间 将弹出警告,通过为图像 H 创建所需的自定义 FCB 来解决警告。单击 FlexSPI NOR-简化按钮并创建 FCB。 注意:我们在 SPT 中发现了一个错误:当通过 " convert to FCB " 按钮创建 FCB 区块时,FCB 周围的区域会被擦除。擦除区域的大小取决于最小的可擦除内存块。这可能会删除在 RT10xx/RT11xx 设备的 FCB 封锁之后立即放置的用户数据或图像版本。此错误的解决方案已为 SPT v10 准备好了。如果你看到任何奇怪的行为评论,请再次写下图片 L 和图片 H。 版本和写入图像 H. 检查图像 H 是否启动。 继续进行测试,用不同的有效版本号对 H 和 L 进行编程。应启动更高有效版本的映像。 下图显示了启动不同应用程序的能力。 根据我的测试,我可以定义以下内容: 下表显示了将两个映像编程到闪存中时的启动映像标准。 L 图像版本 H 图像版本 启动映像标准 启动类型 有效 有效 bootROM 将使用更高的有效版本号启动映像。 Dual image boot 0xFFFF_FFFFF 有效 bootRom 将首先启动映像 L。 冗余启动 有效 0xFFFF_FFFF bootRom 将首先启动映像 L。 冗余启动 无效 有效 bootROM 将仅使用有效的映像版本启动映像。 冗余启动 有效 无效 bootROM 将仅使用有效的映像版本启动映像。 冗余启动 其中: L :当闪存中有两个图像时,L 图像是位于闪存最低物理地址的图像。考虑一个位于 0x3000_0000 的图像和另一个位于 0x3040_000 的图像,L 是位于 0x3000_0000 的图像。 H:当闪存中有两个图像时,H 图像是位于闪存最高物理地址上的图像。考虑一个位于 0x3000_0000 的图像和另一个位于 0x3040_000 的图像,H 是位于 0x3040_0000 的图像。 图像版本:是一个四字节的标签。前两个不太重要的字节代表真实图像版本(范围从 0x0000 到 FFFF),接下来的两个更重要的字节代表两个真实图像版本字节的反向值。 有效或有效的图像版本:是实际版本号字节和反向值字节匹配的图像版本。例如,0xFFFE_0001,其中 0001 是实际版本号,0xFFFE 是 0x0001 的倒数。 无效或无效的图像版本 :是实际版本号字节和反向值字节不匹配的图像版本,例如:0x0000_0001。 0xFFFF_FFF:这是一种特殊情况,其中所有四个字节都包含 F,它也被视为有效的版本号。Is 是一个特殊的版本值,可用于测试冗余启动。 冗余启动:如果满足以下条件,bootROM 将始终尝试启动第一个映像 L: 闪存中有两个图像(图像 L 和图像 H)。 熔丝 0xC80 [23:16] 值不同于零。 图像 L 包含有效的版本号或相当于 0xFFFF_FFFF。 如果不满足上述条件,或者映像 L 启动失败,bootROM 将尝试启动映像 H。 双启动 :如果满足以下条件,bootROM 将始终选择首先启动版本号最高的映像。 闪存中有两个图像(图像 L 和图像 H)。 熔丝 0xC80 [23:16] 值不同于零。 图像 L 包含的有效版本号不同于 0xFFFF_FFFF。 图像 H 包含的有效版本号不同于 0xFFFF_FFFF。 如果不满足上述条件,或者所选映像启动失败,bootROM 将尝试从另一个映像启动,执行冗余启动。 希望能对您有所帮助、 迪亚戈
View full article