Multi Source Translation Content

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Multi Source Translation Content

讨论

排序依据:
如何在使用 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
查看全文
从连接集线器的单个 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 你找到解决办法了吗? 我一直在追踪一个类似的问题,但进展甚微。
查看全文
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
查看全文
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を参照してください。 ---------------------------------------------------------------------------------
查看全文
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
查看全文
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)。 コマンド モードを使用する場合、これがより良い選択肢でしょうか?
查看全文
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
查看全文
イーサネットコントローラ用の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 がある可能性があります。 よろしくお願いします。
查看全文
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
查看全文
i.MX6DL PCIe x1 Gen1 リンクトレーニング障害 カーネル 5.10.235 を実行している i.MX6DL を使用しており、PCIe Gen1 リンク トレーニングの問題が発生しています。ログには、リンク トレーニングが完了しないこと、つまりリンクが継続的に再トレーニングされていることが示されています。Debug0 レジスタは、リンクが安定していないことを示しており、何かが再トレーニングをトリガーしていることを示しています。 観測されたLTSSM遷移: L0 → S_POLL_CONFIG → S_RCVRY_RCVRCFG → S_CFG_LINKWD_START → S_POLL_CONFIG また、pci-imx6.c と pci-imx6.c の両方がロードされているにもかかわらず、LnkCap レジスタの値が(電源投入サイクルごとに)変化していることにも気付きました。および pcie-designware.cGen1 のリンクを明示的に構成します。このレジスタを変更する他のものは何でしょうか? 例: CASE 1: 0x1ffc07c = 値 0x0011cc12 LnkCap: ポート #0、速度 5GT/s、幅 x1、ASPM L0s/L1、終了レイテンシ L0s <1us、L1 <8us LnkCtl2: ターゲットリンク速度 2.5GT/s CASE 2: 0x1ffc07c = 値 0x00100001 LnkCap: ポート #0、速度 2.5GT/s、幅 x1、ASPM L0s/L1、終了レイテンシ L0s <1us、L1 無制限 LnkCtl2: ターゲットリンク速度 2.5GT/s さらに、スクランブラーを無効にすると、リンクが安定するようです。 devmem2 0x1ffc710 w 0x00010122 以下の情報を探しています: 1.最初に L0 に到達した後、リンクの再トレーニングをトリガーするものは何ですか? 2. 他にどのような HW/SW 部分が LnkCap を変更する可能性がありますか? 詳細については文書を添付します。 Re: i.MX6DL PCIe x1 Gen1 Link Training Failure こんにちは、 1. L0 状態に到達した後にリンクの再トレーニングをトリガーする可能性のあるものについて: - PCIeレーンの信号整合性の問題によりリンクが不安定になる可能性がある - PCIe PHYに影響を与える電源の変動やノイズ - PCIeリファレンスクロックのクロックジッタまたは不安定性 - PCIeトレースのインピーダンスまたは長さのマッチングに関連するハードウェアデザインの問題 - 不要な再トレーニングを開始する可能性のあるソフトウェア/ドライバのバグ 2. 変動するLnkCapレジスタ値の場合: - レジスタはハードウェア初期化シーケンスとソフトウェアドライバの両方で変更できる - i.MX6 PCIe実装では、pci-imx6.cおよび pcie-designware.cリンクパラメータの設定を試みる - リンク機能のネゴシエーションはトレーニング中に行われ、エンドポイントデバイスからの報告に基づいて値が調整される可能性があります。 スクランブラーを無効にするとリンクが安定するという観察結果 (devmem2 0x1ffc710 w 0x00010122) は、潜在的な信号整合性またはクロックの問題を示唆しています。これは、i.MX6 プラットフォーム上の PCIe リンクの安定性の問題がハードウェアの調整によって解決された以前のCASEと一致しています。 i.MX6DL プラットフォーム専用の詳細な PCIe SERDES 設定情報が記載されているアプリケーション ノート AN4784「i.MX 6Dual/6Quad および i.MX 6Solo/6DualLite の PCIe 認証ガイド」を確認することをお勧めします。このドキュメントでは、断続的なリンク トレーニングの障害を解決するのに役立つ包括的な PCIe 認定ガイダンスを提供します。 特定の継続的な再トレーニングの問題については、次の点を考慮してください。 - PCIeリファレンスクロック信号の品質とジッタの検証 - PCBデザインにおけるトレース長のマッチングをチェック - PCIeレーンの適切な終端とインピーダンスを確認する - 負荷条件下でのパワーレールの安定性の検査 表示されている LnkCap レジスタの変更は、初期化シーケンス中のハードウェア レベルのレジスタ アクセスに関連している可能性があり、PHY キャリブレーションの変動の影響を受ける可能性があります。 よろしくお願いします。 Re: i.MX6DL PCIe x1 Gen1 Link Training Failure さらに詳細を追加します。 以下の観察結果に基づくと、スクランブラーが無効になっている場合、Gen1 リンクは安定しています。ホストが Gen2 を試行しないように、Gen1 のみでトレーニングするように強制する方法はありますか? * LnkCap is 5GT/s root# lspci -s 00:00.0 -vv |grep LnkCap LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 root# devmem2 0x1ffc07c /dev/mem opened. Memory mapped at address 0xb6f5c000. Read at address 0x01FFC07C (0xb6f5c07c): 0x0011CC12 <<< gen2 root# ltssm_debug.sh |grep curr LTSSM current state | 0x7 | S_CFG_LINKWD_START LTSSM current state | 0x11 | S_L0 LTSSM current state | 0x7 | S_CFG_LINKWD_START LTSSM current state | 0xf | S_RCVRY_RCVRCFG * Setting Lnkcap to gen1 but value is getting overwritten root# devmem2 0x1ffc07c w 0x00100011 root# devmem2 0x1ffc07c /dev/mem opened. Memory mapped at address 0xb6fb1000. Read at address 0x01FFC07C (0xb6fb107c): 0x0011CC12 root# ltssm_debug.sh |grep curr LTSSM current state | 0x7 | S_CFG_LINKWD_START LTSSM current state | 0xf | S_RCVRY_RCVRCFG LTSSM current state | 0x7 | S_CFG_LINKWD_START * Disable scrambler root# devmem2 0x1ffc710 w 0x00010122 root# devmem2 0x1ffc710 /dev/mem opened. Memory mapped at address 0xb6f66000. Read at address 0x01FFC710 (0xb6f66710): 0x00010122 * LnkCap was set to Gen1 again, and the value remains stable. root# devmem2 0x1ffc07c w 0x00100011 root# devmem2 0x1ffc07c /dev/mem opened. Memory mapped at address 0xb6f0a000. Read at address 0x01FFC07C (0xb6f0a07c): 0x00100011 * Gen1 changes reflected here root# lspci -s 00:00.0 -vv |grep LnkCap LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM not supported root:~# ltssm_debug.sh |grep curr LTSSM current state | 0x11 | S_L0 LTSSM current state | 0x11 | S_L0 Link stable. よろしくお願いします。 Re: i.MX6DL PCIe x1 Gen1 Link Training Failure こんにちは、 ヒントを提供していただきありがとうございます。 ただし、リンク速度を Gen1 に強制する場合、どのようなシナリオでハードウェアはリンク機能をGen2 としてアドバタイズし、 ASPM 関連のオプションも有効にCANのでしょうか? たとえば、次のようになります。 LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <8us トレーニング シーケンスでは、 5 GT/sと自律変更 TS1も確認されています。 リンクを Gen2 でトレーニングする必要はありません。 TS1/TS2のログを添付します。 よろしくお願いします。
查看全文
功能从待机模式 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
查看全文
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
查看全文
使用 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
查看全文
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总线用于微控制器/处理器与外围设备之间的通信。 虽然这种串行总线应用非常广泛,但我还是想借此机会简要介绍一下它的起源。 通信标准 界面 日本博客
查看全文
恩智浦汽车加速度计基础知识 第 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 的电容器电容作为信号进行处理的机制。 传感器 日本博客
查看全文
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 就不会出现这些问题。 此致
查看全文
S32K324 HSEファームウェアをインストールするにはどうすればいいですか? S32K324 用に開発中ですが、S32K324 用の HSE ファームウェアをインストールするためのソフトウェア プロジェクトはどこにありますか? Re: S32K324 HSE固件如何安装? Hi S32K3 Standard Software > Automotive SW - S32K3 - HSE Firmware > S32K344 HSE FW 0.2.40.0 SR Release からダウンロード してください 。注: このリリースでは、S32K344、S32K324、および S32K314 がサポートされています。このHSE_DEMOAPP_S32K3XX_0_2_40_0.exeは、S32K311 HSE FW 0.2.40.0 RTM リリースにあります。 ローダーバッハをお持ちでなく、PEMicroまたはJ-Linkデバッガーのみをお持ちの場合は、 ダウンロードしてくださいS32K3_HSE_DemoExamples。HSE ファームウェアのインストールの説明を参照することをお勧めします。 リソースが限られているため、現在、gmail.com や qq.com などの一般的なメールアカウントからメールを書いているお客様はサポートできません。NXPと連絡を取るときは、会社のメールアドレスを使用して、それに応じて質問に優先順位を付けることができるようにしてください。ご理解のほどよろしくお願いいたします。 よろしくお願いいたします ロビン ------------------------------------------------------------------------------- 手記: - この記事があなたの疑問に答えたら、「正解をマーク」ボタンをクリックしてください。ありがとうございます! - 最後の投稿から7週間スレッドをフォローしていますが、その後の返信は無視されます 新しいスレッドを開き、後で関連する質問がある場合は、閉じたスレッドを参照してください。 -------------------------------------------------------------------------------
查看全文
UTEST(DCF)からHSEライフサイクル情報を取得する方法 現在は EOL 段階にあり、S/W 以外でメモリを読み取る方法はありません。 現在、S32K3 シリーズ MCU に取り組んでおり、HSE ライフサイクル (LC) 情報がどのように保存されるかを理解するために UTEST メモリ領域を調査しています。 以下の文書を確認しました。 RM758223-HSE-B ファームウェアリファレンスマニュアル v2.3 S32K312_HSE_サービス_API_リファレンス_マニュアル.pdf AN13388_S32K3 メモリーズガイド S32K3xx_DCF_クライアント.xlsx ただし、公開ドキュメントには次の内容が記載されていません。 1. UTEST のどの DCF フィールドが HSE ライフサイクル (LC) の状態を表しますか。 2. 生の UTEST 値 (例: 0x1b0000040) が標準の HSE ライフサイクル コード (例: 0x04 CUST_DEL、0x08 OEM_PROD、0x10 IN_FIELD) にどのようにマッピングされるか。 3. HSE Get Attribute サービスを使用せずに UTEST から LC を直接読み取る公式の方法があるかどうか。 UTEST/DCF に保存されている LC 情報を正式に解釈する方法を明確にしていただけますか? 再開まで今しばらくお待ちください。   Re: How to obtain HSE Lifecycle information from UTEST (DCF) ここに注意してください: https://community.nxp.com/t5/S32K/S32K312-read-lifecycle-from-UTEST/mp/1982203 また、あなたの質問に対して私は次のことを付け加えたいと思います。 1、2) 明らかに公開文書化されていないようですが、DCM レジスタを確認すると、DCMLCC で現在の LC をチェックでき、DCMLCS はセクション 37.2.6 LC で説明されている LC スロットからの値を反映します。 レジスタ: 37.3.3LCおよびLC制御(DCMLCC)、37.3.4LCスキャンステータス(DCMLCS) 3) 上記のThreadで回答しました。
查看全文
NXPの機能安全サポート こんにちは。こんにちは。 当社は、S32K3 シリーズマイクロコントローラをベースに機能安全製品を設計しています。これについては技術的なサポートが必要です。NXP インドおよび米国の SME に接続してください。 Re: NXP support on Functional safety こんにちは@sutrai_ravi_kさん、 新しいサポート チケット (730126) が作成され、NXP インド チームに転送されました。 彼らはあなたに直接連絡します。 よろしくお願いいたします。 ダニエル
查看全文
如何在 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.
查看全文