Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
有关通过 RTD/MCAL 和 ICU 通知进行 IMCR 配置的问题 你好,团队 请问有关 S32K3 RTD MCAL 的问题如下? 我正在使用基于 Ip 演示的 MCAL 实现以下功能。 我发现有一点需要用 "IMCR81 "来配置 "0b0110",如下所示。 emios1_ch1<-> trgmux 如何通过 RTD 进行配置? 还是需要手动编码? 谢谢。 RTD 资料来源直接客户 来源:恩智浦内部来源:恩智浦内部 Re: Question about IMCR configuration by RTD/MCAL and ICU notification 你好@Luke_Chun、 我认为 RTD 驱动程序在配置中不支持这一点,因为端口驱动程序将支持可以连接到外部的焊盘。 不过,如果您只是想更改 IMCR81 的 SSS,我想您可以试试端口驱动程序中的这个功能: 顺祝商祺! Nhi Re: Question about IMCR configuration by RTD/MCAL and ICU notification 你好@Nhi_Nguyen 我指的是以下信息。 我没有将该引脚与 EMIOS 一起使用,我只将内部信号用于 TRGMUX 和 EMIOS。 我能再问一次检查的问题吗? 谢谢。 Re: Question about IMCR configuration by RTD/MCAL and ICU notification 你好@Luke_Chun、 IMCR81 是 PTA11。要将 PTA11 配置为 EMIOS1 通道 1,SSS 必须配置为 11。如果 SSS 为 110,则应为 LPSPI1_PCS0。如下所示: 顺祝商祺! Nhi Re: Question about IMCR configuration by RTD/MCAL and ICU notification 你好@Nhi_Nguyen 我能问一个关于功能的问题吗? 当基准设置为 NULL_PTR 时,引脚设置将不起作用。 是这样吗?   谢谢。   Re: Question about IMCR configuration by RTD/MCAL and ICU notification 你好@Luke_Chun、 通常,您必须配置与 IMCR 寄存器相对应的 MSCR 寄存器,以便输入。例如 例如,设置 EMIOS0 通道 9 的 PTA1 为输入,包括 2 个步骤:寄存器 MSCR1 设置输入或输出方向,寄存器 IMCR57 设置 SSS。 如果函数 Siul2_Port_Ip_SetInputBuffer() 中的 base = NULL_PTR,则忽略在 MSCR 中设置输入或输出的步骤。 顺祝商祺! Nhi
View full article
如何在 Linux 6.6.36 版上使用 Yocto 编译 Chromium 浏览器 我目前的平台是 IMX8MP,我下载了 Linux 版本 6.6.36 的 Yocto,但如何编译 Chromium 浏览器? 我在 `conf/local.conf` 中添加了 `IMAGE_INSTALL:append ="chromium-ozone-wayland"`、然后执行 `bitbake chromium-ozone-wayland`,结果出现以下错误。 回复: How to compile the Chromium browser using Yocto on Linux version 6.6.36 这里只有 6.1.36 版本、不是 6.6.36。我可以使用 6.1.36 编译 Chromium、但使用 6.6.36 版的 Yocto 无法运行。 https://github.com/nxp-imx/meta-imx/tree/scarthgap-6.6.36-2.1.0 我在这里拉了 yocto 回复: How to compile the Chromium browser using Yocto on Linux version 6.6.36 https://github.com/nxp-imx/meta-imx/tree/scarthgap-6.6.36-2.1.0 我在这里拉了 yocto 回复: How to compile the Chromium browser using Yocto on Linux version 6.6.36 你确定吗? 这里只有 6.1.36 版本、不是 6.6.36。我可以使用 6.1.36 编译 Chromium、但使用 6.6.36 版的 Yocto 无法运行。 回复: How to compile the Chromium browser using Yocto on Linux version 6.6.36 你好 1. 使用正确的清单初始化仓库: ``` repo init -u https://github.com/nxp-imx/imx-manifest-b imx-linux-mickledore-m imx-6.6.36-2.2.xml ````2. 同步仓库: ``` repo sync ``` 3. 设置编译环境: ``` MACHINE=imx8MP-LPDDR4-EVK DISTRO=发行版。 source ./imx-setup-release.sh-b build_im x8mp ```4. 将以下行添加到 `conf/local.conf` 中,将 Chromium 添加到你的图像中: ``` IMAGE_INSTALL:append = " chromium-ozone-wayland" ``` 5. 使用包含 Chromium 的镜像版本: ``` bitbake imx-image-multimedia ``` 或者,你可以只构建 Chromium 代码包: ``` bitbake chromium-ozone-wayland ``` ## 重要注意事项: - 使用 `DISTRO=fsl-imx-wayland` 代替 `fsl-imx-xwayland` 以正确实现 Chromium - 应使用恩智浦 Yocto 中提供的默认 chromium 层,而非手动下载 meta-chromium - 如果你在现有版本中遇到版本问题,请使用 `bitbake -f chromium-ozone-wayland` 强制重建 - Chromium 不适用于 `core-image-minimal`;请使用更完整的镜像,如 `imx-image-multimedia` 或 `imx-image-full` 此配置应能解决你在 IMX8MP 平台上使用 Chromium 浏览器时遇到的编译错误。 此致问候 回复: How to compile the Chromium browser using Yocto on Linux version 6.6.36 设置 `CORE_IMAGE_EXTRA_INSTALL +="chromium-ozone-wayland"` 会导致以下错误:
View full article
如果不在 SJA1110DEL 上使用 LOC_WAKE_IN 和 WAKE_IN_OUT 可以保持浮空状态吗? 如果它们不能浮空,我应该把它们绑在一起然后拉到 VDD33_AO 还是 GND?谢谢。   SJA1110 以太网 开关 Re: Can I leave LOC_WAKE_IN and WAKE_IN_OUT floating if not used on SJA1110DEL? 你好@peter123、 未使用的 WAKE_IN_OUT 可以保持浮空状态。 未使用的 LOC_WAKE_IN 应通过 VSS 连接,例如4.7k 下拉。 顺祝商祺! 帕维尔
View full article
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
S32K3 FPUのINFとNaNの例外 こんにちは、 S32K314 チップ上の FPU に例外を設定しようとしていますが、特定のCASEをキャッチする方法がわかりません。 1) オーバーフローと、INF になる操作をキャッチしようとしています。ただし、INF が入力の 1 つである場合、出力は INF に設定されますが、フラグは設定されません。例外を使用して、入力の 1 つとして INF を持つ操作をキャッチするにはどうすればよいですか。 2) 例外を使用して、すべての NaN (Quiet と Signaling の両方) をキャッチしようとしています。明らかに SNaN をキャッチ CAN ますが、例外を使用して QNaN をキャッチ CAN するにはどうすればよいでしょうか?SO、すべての NaN を SNaN にするにはどうすればよいでしょうか。あるいは、すべての NaN をキャッチできるようにするにはどうすればよいでしょうか。 ありがとう、 ジョン Re: S32K3 FPU Exceptions for INF and NaN 1) 入力として INF を使用すると、IEEE-754 に従って有効とみなされるため、IOC またはオーバーフローは発生しません。 INF では無効な操作が行われる可能性があります: INF − INF → 無効、結果 = NaN (IOC セット)。 INF × 0 → 無効、結果 = NaN (IOC セット)。 2) QNaN は例外を発生せず、黙って伝播します。SNaN のみが無効な演算条件を発生させます。
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
Zephyr:ZephyrのMCUからDSPを起動する こんにちは。現在、RT595 と Zephyr RTOS を使用したプロジェクトに取り組んでおり、MCU から DSP を起動する方法を知りたいです。ドキュメント (IMXRT595-EVK-UG) のセクション 4.7 によると、IDEs で DSP_IMAGE_COPY_TO_RAM=1 を設定することで、「一度プログラムすれば、Arm コアが自動的に DSP を起動する」ことが可能になるそうです。プロジェクトが Zephyr ビルド システムに完全に移行したので、DSP アプリケーションを起動するための具体的な手順と、その構成方法を知りたいと思います。助けてくれてありがとう。 評価ボード Re: Zephyr:Booting DSP from MCU in Zephyr @jingqi 一般的な手順: ZephyrプロジェクトでMCUからDSPを起動するには、まずXtensa XplorerでDSPバイナリをビルドし、次にそのバイナリをCMakeでZephyrビルドに統合し、最後に  BOARD_DSP_Init()  アプリケーションから起動シーケンスを処理する関数を削除します。 移行を完了するには、公式ドキュメント (MCUXpresso + EVK) を使用して機能を完成させ、Zephry を開発する能力が必要です。 参照: 1. DSPファームウェアの構築: Xplorer for EVK入門 MIMXRT595通常、dsp_text_release.bin や dsp_data_release.bin などの 2 つの出力ファイルが生成されます。これらはCortex-M33コアがDSPのRAMにロードするファームウェアイメージです。 2. DSPバイナリをZephyrビルドに統合します。 Zephyr ビルド システムでは、これらのバイナリ ファイルを Cortex-M33 アプリケーションに明示的に含める必要があります。これは、Zephyr アプリケーションの CMakeLists.txt ファイルを変更することで実行できます。最終的なファームウェア イメージ内の既知の場所にファイルを配置するには、Zephyr のビルド システム機能 (zephyr_file_copy など、またはバイナリ BLOB として定義する) を使用する必要がある場合があります。 3. i.MX RT595用のMCUXpresso SDKは、DSPライフサイクルを管理するためのドライバ( fsl_dsp.c / .h )を提供します。NXPデバイス用のZephyrにはこのSDKが含まれているため、これらの関数をZephyrアプリケーションコードから直接呼び出すことができます。詳細は、「Getting Started with Xplorer for EVK-」の「3.3 DSPコアの初期化」 MIMXRT595
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
S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi support, Customer shared that they have an issue where when called sCheck_ExecuteStartupTests() at start up after that it jump to Hard Fault Exception when it executes ECC Test. Could you help to check this point ? MCU: S32K314 Safety_SW Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi @marcuslim , for each sCheck tests there is mandatory to follow all conditions as described in sCheck UM chapter:  L1 CACHE ECC Tests In this case most likely there is wrong placement of the memory section and appropriate MPU setup, this is important for proper execution of this test. For more details please refer to the sCheck UM chapter:  Memory Allocation (placement into  the sections with correct Cacheable or Non-cacheable MPU attributes is essential) and also you can explore linker file and MPU setup in the SAF Demo example. Kind Regards, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, Cusotmer replaced sCheck_ExecuteRuntimeTests() with sCheck_ExecuteStartupTests() in the NXP example and encountered a similar error. Could you please clarify exactly where I can check this? Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi @marcuslim  No, you can't use sCheck startup tests by replacing it in a loop dedicated for runtime tests. Startup tests are supposed to be executed only once at the very beginning of application startup process. Moreover, K314 is not supported in SAF Demo Example, so if you have reused some linker file it will most likely not follow memory map for K314 device and need to be updated. SAF is not easy to integrate and requires really to study very well sCheck manual and understand SW safety concept. Kind Regards, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, The customer feedback: However, we are currently encountering issues related to ECC checking. As you may have noticed, similar ECC check problems also appear in the NXP example. Integrating the SAF package is quite challenging, and therefore we would appreciate support from NXP specialists in this matter. Could you please advise on the specific linker-related points or requirements that we need to follow and verify in order to properly integrate ECC checking? Thank you in advance for your assistance. Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Marcus, all information should be clear from sCheck UM, at least I usually don't have these kind of questions, so SAF team assumed sCheck UM is clear in this matter. Could you ask customer what exactly is not clear from sCheck UM so we can improve? Thanks, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, The customer moved *(.ramcode_no_cacheable) from int_sram_no_cacheable to int_sram and it worked correctly.  Feel free to comment if any. According to Table 55. MemMap sections present in the sCheck module, the following sections must be placed in specific flash regions: s32_saf_const_flash_0 → Code Flash Memory 0 s32_saf_const_flash_1 → Code Flash Memory 1 s32_saf_const_flash_2 → Code Flash Memory 2 s32_saf_const_flash_3 → Code Flash Memory 3 However, in my system I am using A/B Swap, so at any given time only Flash 0 and Flash 1 are active/used by the application. Placing s32_saf_const_flash_2 and s32_saf_const_flash_3 in the remaining flash blocks may interfere with the unused flash regions (e.g., reserved for the other bank or OTA updates). My questions are: Is there a way to configure sCheck so that it only performs tests on Flash 0 and Flash 1? Or, is there a safe method to test all four flash blocks (Flash 0–3) without affecting the content of the inactive bank used by A/B Swap? Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, On top of the questions from the last post, Customer shared that after executing the sCheck_ExecuteStartupTests and sCheck_ExecuteRuntimeTests, the system consistently reports the same set of ECC-related errors: SCHECK_ERR_DCACHE_ECC_CM7_0 SCHECK_ERR_ICACHE_ECC_CM7_0 SCHECK_ERR_ITCM_M7_0_ECC SCHECK_ERR_DTCM_M7_0_ECC These errors occur repeatedly and consistently during every test execution. Could you please support us in investigating and identifying the root cause of this behavior? Regard, Marcus Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi @marcuslim  I think there is common root cause. The memory sections need to be placed correctly with cacheable/non-cacheable MPU attributes and that HFNMIENA bit mention in previous post can also cause trouble. Kind Regards, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi @marcuslim , that is probably some coincidence that moving  *(.ramcode_no_cacheable) from int_sram_no_cacheable to int_sram worked. I suspect here if customer has set HFNMIENA = 0, that could cause a trouble when exception is triggered.  Please could you check what is that value of MPU_CTRL.HFNMIENA If it is zero, following fix has been made for upcoming 1.0.6 release: [ASFT-19327] [sCheck] Arm M7 HFNMIA not supported - NXP JIRA sCheck Flash test can't be reduced just to Flash_0 and Flash_1, but there has been made change for upcoming 1.0.6 release where you don't need to put specififc flash memory sections into the linker file rather it will use configured flash addresses where the content of the address will be not modified, that could solve also the issue for the A/B swap customers. https://jira.sw.nxp.com/browse/ASFT-19738 Kind Regards, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, The customer has tried relocating *(.ramcode_no_cacheable) to int_sram_no_cacheable instead of int_sram , and has also set HFNMIENA = 0.  In addition, the MPU has been properly configured to allow code execution from the non-cacheable RAM region.  After further investigation, it is observed that within sCheck_Tcm_RunEccTest , the functions  sCheck_Tcm_MemTestEccCorrError and sCheck_Tcm_MemTestUncorrError are executed. Both of these functions call sCheck_ErrRead(pParams, &result). However, while sCheck_Tcm_MemTestEccCorrError completes successfully, sCheck_Tcm_MemTestUncorrError triggers a HardFault when calling sCheck_ErrRead(pParams, &result) (point 1 in the attached image), and the system subsequently gets stuck in a BusFault handler (point 2 in the attached image). Could you please help investigate this point? Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi @marcuslim , Sorry I was wrong, correct setting with SAF release you have shall be HFNMIENA = 1 to avoid changing MPU settings in the exception which could further cause some changes in cache flushed afterwards. That would explain why TCM correctable was passing but Uncorrectable not, as it is using exception to test proper reaction. Kind Regards, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, The customer feedback: >>>>>>>> After configuring HFNMIENA = 1, I observed that sCheck_ExecuteStartupTests() operates correctly. At this point, I no longer observe any ECC-related errors. I will perform additional stress testing to further verify this behavior. However, when sCheck_ExecuteRuntimeTests() is invoked and subsequently calls sCheck_Tcm_MemTestUncorrError(), the system triggers a UsageFault exception with the INVSTATE (Invalid State) flag set. Could you please advise whether there are any design differences or specific usage conditions between sCheck_ExecuteStartupTests() and sCheck_ExecuteRuntimeTests() that could lead to this behavior? Regards, Marcus Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hello @marcuslim , if FPU is enabled, that might indicate protentional issue we need to investigate further. Could you try to disable FPU and perform the test again? What is the result now? With FPU enabled could you within the exception track within Watch window these variables: sCheck_ErrRead_ExceptionContext.bAbortFlag sCheck_DetectedFaults[0] and paste the screenshot again? What is configured reaction for FCCU NCF_2 channel? Kind Regards, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, Please find here the information requested: Point 1: disable FPU - same error. Point 2: Enable FPU Point 3: FCCU NCF_2  reaction Regards, Marcus Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Marcus, the latest screenshots show that it generates memory manage fault, not usage fault (as in original post). So, I think we need to clarify which is the exception we are facing. Please check/share MPU configuration. Can you check if the exception is cause by "LDRD R0,R1,[R1]\n" instruction from sCheck_Lib_ARMv7M.c or some other instruction? Kind Regards, Radoslav Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi Radoslav, Attached is customer's MPU configuration and linker file. He would like us to review them. Regards, Marcus Re: S32K3 SAF - sCheck_ExecuteStartupTests run to HardFault Execption Hi @marcuslim , I see they have reused MPU config from RTD example SystemInit(). Please be aware this is just stub from RTD which is not validated and might be not sufficient even for some RTD drivers let alone for SAF. Similarly for the linker file, I can see origins from RTD linker file with additional SAF and SCST memory sections. For the MPU config I strongly recommend to use RTD Platform plugin to configure MPU. In SAF Demo example we also have example MPU configuration for K344 (not for K314, but it's just about modifying correct memory size for TCM). But it's also just example code (stub) for SAF Demo setup, not validated deliverable. As per AI their MPU config should represent this setup: Region RBAR Address Size Type / Cache Policy Shareable Access Notes 0 0x00000000 Covers entire address space (RASR = 0x1004003F ) Strongly ordered, no cache Yes No Access Background region blocking everything 1 __INT_ITCM_START From linker Normal, no cache No RW/RW ITCM for CM7 2 __ROM_CODE_START From linker Normal, WB/WA (inner & outer) No RO/RO Main program flash 3 __ROM_DATA_START From linker Normal, WB/WA Yes RO/RO Data flash 4 0x1B000000 8 KB ( 0x160B0019 ) Normal, WB/WA Yes RO/RO UTEST area 5 __INT_DTCM_START From linker Normal, no cache No RW/RW DTCM for CM7 6 __INT_SRAM_START Size from linker ( __RAM_CACHEABLE_SIZE ) Normal, WB/WA No RW/RW Cacheable SRAM (subregions 6 and 7 disabled) 7 __RAM_NO_CACHEABLE_START From linker Normal, no cache Yes RW/RW Non‑cacheable RAM region 8 __RAM_SHAREABLE_START From linker Normal, no cache Yes RW/RW Shareable RAM 9 0x40000000 6 MB Strongly ordered, no cache Yes RW/RW AIPS0–2 peripheral space (subregions 6/7 disabled) 10 0x40600000 Disabled for S32K314 — — — AIPS3; active only on S32K39x 11 0x67000000 128 MB Strongly ordered Yes RW/RW QSPI RX 12 0x68000000 128 MB Normal, WB/WA No RW/RW QSPI AHB mapped region 13 0xE0000000 Default ARM PPB size Strongly ordered Yes RW/RW Private Peripheral Bus (SCB, NVIC, etc.) 14 __ROM_CODE_START + 0x400000 0 for S32K314 — — — Additional program flash (only valid for other derivatives) 15 0x44000000 0 for S32K314 — — — ACE region active only on S32K388 and this is MPU config from SAF Demo example for K344: Briefly comparing these two MPU configs + Linker files can see just: - wrong placement for these memory sections:  *(.s32_saf_const_flash_1) *(.s32_saf_const_flash_2) *(.s32_saf_const_flash_3) *(.s32_saf_const_flash_4) *(.s32_saf_const_flash_5) - Can't see Executable attribute for Non-Cacheable SRAM, but this is not required by sCheck, it's probably redundant attribute in SAF example MPU setup - considering customer is running OS, I'd expect some specific MPU setting and memory sections required by the OS and their application (it's just guess, not saying this can be root cause of some issues) Anyway, customer should follow SAF User manuals and RTD manuals, chapter "Memory Allocation" for proper MPU and linker file setup, reusing stubs from NXP examples is not a good practice.  And especially when OS running during sCheck tests also following sCheck chapter " Exclusive Areas to be defined in the BSW Scheduler" is requested. Similar Exclusive areas are in eMcem and RTD drivers. Kind Regards, Radoslav
View full article
IMX8mp mipi dsi コマンドモード こんにちは、 当社には、iMX8MP を搭載したカスタム ボードと、CH13721C コントローラを搭載した AMOLED ディスプレイがあります。ビデオ モードは動作していますが、コマンド モードを使用し、ディスプレイ コントローラ の内部フレーム バッファーを使用してディスプレイに静止画像を表示したいと考えています。 iMX8mp のリファレンス・マニュアルの表 13-26 には、コマンド モードを動作させるための初期化シーケンスが記載されていますが、動作させることができません。コマンド モードを完全に活用する Linux ドライバも見つかりません。 どのようなご助力も大歓迎です。 Re: IMX8mp mipi dsi in command mode こんにちは、 これについては、Linux ドライバを参照してください。 https://github.com/nxp-imx/linux-imx/blob/lf-6.12.y/drivers/video/fbdev/mxc/mipi_dsi.c#L472 よろしくお願いいたします。 アルド。 Re: IMX8mp mipi dsi in command mode ご返信ありがとうございます! mipi_dsi.cで使用されているレジスタはiMX8MPのものと同じですか? DSIM_RGB_STATUS のビット 31 を設定してコマンド モードがアクティブになると、CPU の内部バス (S-i80) が FIFO に書き込むと理解してよろしいでしょうか? さらに詳しい情報が必要な場合はお知らせください。 Re: IMX8mp mipi dsi in command mode こんにちは、 正しく理解しました。この正しいガイダンスを共有していただき、ありがとうございます。 Re: IMX8mp mipi dsi in command mode こんにちは、 それはiMX8MPプロセッサ用の実装リレーですか? Re: IMX8mp mipi dsi in command mode IMX8MP プロセッサのコマンド モードを構成する方法がわかりません。 DSI_CONFIG レジスタのビット 25 (ビデオ モード) がクリアされ、DSI_MDRESOL レジスタのビット 31 が設定されている場合、FIFO からは何も転送されず、ディスプレイへのコマンドも転送されません。ビット 31 をクリアすると、コマンドは送信できますが、画像データは転送されません。 助けてください Re: IMX8mp mipi dsi in command mode コマンド モードのガイドに従うと、mipi インターフェースはビデオ モードを使用しているときのみディスプレイにデータを送信します。 IMX8MP のサポートを実装した Samsung ドライバーがあります (samsung-dsim.c)。 コマンド モードを使用する場合、これがより良い選択肢でしょうか?
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
i.MXデータシートにおけるNVCCの意味 こんにちは、 i.MX データシートを確認していると、NVCC_* で始まるピン名が頻繁に表示されます。 NVCC の意味を説明していただけますか? また、名前に NVCC が含まれるピンにはどのような意味があるのでしょうか? 再開まで今しばらくお待ちください。 よろしくお願いいたします。 Re: Meaning of NVCC in i.MX Datasheet どの製品を指しているのでしょうか? NVCC は「Nominal Voltage Common Collector」の略で、NVCC_* ピンは I/O パッドのグループ (GPIO、UART、SPI など) に電圧を供給する電源ピンです。 NVCC_SD などは、SD カード インターフェース ピンに電力を供給します。 Re: Meaning of NVCC in i.MX Datasheet こんにちは、リタさん。 ご説明ありがとうございます。私が言及していた製品は i.MX93 です。 NVCC は公称電圧共通コレクタの略語であり、NVCC_* ピンは GPIO、UART、SPI などの特定の I/O グループに電圧を供給する電源ピンであることを理解しています。NVCC_SD が SD カード インターフェース に電力を供給する例は非常に役に立ちました。 サポートありがとうございます。 よろしくお願いします、 トカト Re: Meaning of NVCC in i.MX Datasheet こんにちは@tkato 、 どういたしまして。 ご質問がございましたら、新しいThreadを作成してお気軽にお問い合わせください。 良い一日をお過ごしください よろしくお願いいたします。 リタ
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