Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
同时使用 PCIe 和 USB3 时的 iMX8MP 带宽限制 你好 一位客户报告了使用 USB 3 摄像机时的带宽限制。在正常情况下,摄像头运行良好,但一旦开始向 NVMe PCIe 驱动器写入数据,流水线就会因带宽不足而崩溃。 他们进行了一项不同的测试,结果非常有趣。他们没有使用 USB3 摄像头,而是连接了一个 USB3 千兆以太网接口,并开始使用 iperf3 进行带宽测试。测试速度保持在约 900MB/s,直到他们开始使用 dd 向 NVMe 硬盘写入。当出现这种情况时,USB3 的带宽将降至每秒约 400MB。 这是预期行为吗? 我注意到 USB3 和 PCIe 都直接连接到 AXI 总线,这条总线上有 1Gb/s 的限制吗? 在将视频数据写入 NVMe 硬盘时,客户需要稳定的 USB3 带宽(至少足以持续收集帧)。 如有任何帮助,我们将不胜感激、 拉斐尔 Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 我进行了以下测试,以了解带宽降低的情况。我连接了一个 NVMe 磁盘并将其挂载在 /mnt,并通过电缆将一个 USB3 千兆以太网接口直接连接到我的机器。在不向磁盘写入数据的情况下启动 iperf3,输出结果如下: root@verdin-imx8mp-15207903:~# iperf3 -c 192.168.50.1 Connecting to host 192.168.50.1, port 5201 [ 5] local 192.168.50.58 port 42800 connected to 192.168.50.1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 113 MBytes 950 Mbits/sec 0 293 KBytes [ 5] 1.00-2.00 sec 112 MBytes 942 Mbits/sec 0 307 KBytes [ 5] 2.00-3.00 sec 112 MBytes 938 Mbits/sec 0 321 KBytes [ 5] 3.00-4.00 sec 112 MBytes 940 Mbits/sec 0 338 KBytes [ 5] 4.00-5.00 sec 112 MBytes 938 Mbits/sec 0 338 KBytes [ 5] 5.00-6.00 sec 112 MBytes 938 Mbits/sec 0 338 KBytes [ 5] 6.00-7.00 sec 112 MBytes 940 Mbits/sec 0 372 KBytes [ 5] 7.00-8.00 sec 112 MBytes 942 Mbits/sec 0 372 KBytes [ 5] 8.00-9.00 sec 113 MBytes 945 Mbits/sec 0 372 KBytes [ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec 0 372 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec 0 sender [ 5] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec receiver iperf Done. 现在,我在另一个终端上开始向 NVMe 磁盘写入数据: root@verdin-imx8mp-15207903:~# dd if=/dev/zero of=/mnt/bla bs=1M count=10000 10000+0 records in 10000+0 records out 10485760000 bytes (10 GB, 9.8 GiB) copied, 76.2779 s, 137 MB/s 同时,我再次启动 iperf3: root@verdin-imx8mp-15207903:~# iperf3 -c 192.168.50.1 -t 60 Connecting to host 192.168.50.1, port 5201 [ 5] local 192.168.50.58 port 59494 connected to 192.168.50.1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 54.8 MBytes 457 Mbits/sec 0 317 KBytes [ 5] 1.00-2.00 sec 1.38 MBytes 11.5 Mbits/sec 0 317 KBytes [ 5] 2.00-3.01 sec 2.00 MBytes 16.7 Mbits/sec 0 317 KBytes [ 5] 3.01-4.00 sec 1.38 MBytes 11.6 Mbits/sec 0 317 KBytes [ 5] 4.00-5.00 sec 1.88 MBytes 15.7 Mbits/sec 0 317 KBytes [ 5] 5.00-6.00 sec 112 MBytes 937 Mbits/sec 0 335 KBytes [ 5] 6.00-7.00 sec 112 MBytes 942 Mbits/sec 0 335 KBytes [ 5] 7.00-8.00 sec 15.0 MBytes 126 Mbits/sec 0 335 KBytes [ 5] 8.00-9.00 sec 1.38 MBytes 11.5 Mbits/sec 0 335 KBytes [ 5] 9.00-10.00 sec 1.62 MBytes 13.6 Mbits/sec 0 335 KBytes [ 5] 10.00-11.00 sec 1.88 MBytes 15.7 Mbits/sec 0 335 KBytes [ 5] 11.00-12.00 sec 71.9 MBytes 604 Mbits/sec 0 335 KBytes [ 5] 12.00-13.00 sec 113 MBytes 946 Mbits/sec 0 335 KBytes [ 5] 13.00-14.00 sec 65.1 MBytes 546 Mbits/sec 0 335 KBytes [ 5] 14.00-15.00 sec 47.9 MBytes 400 Mbits/sec 0 498 KBytes [ 5] 15.00-16.00 sec 37.2 MBytes 313 Mbits/sec 0 498 KBytes [ 5] 16.00-17.00 sec 39.6 MBytes 331 Mbits/sec 0 498 KBytes [ 5] 17.00-18.00 sec 45.6 MBytes 384 Mbits/sec 0 498 KBytes [ 5] 18.00-19.00 sec 30.0 MBytes 251 Mbits/sec 0 498 KBytes [ 5] 19.00-20.00 sec 1.38 MBytes 11.6 Mbits/sec 0 498 KBytes [ 5] 20.00-21.00 sec 2.00 MBytes 16.8 Mbits/sec 0 498 KBytes [ 5] 21.00-22.01 sec 2.00 MBytes 16.7 Mbits/sec 0 498 KBytes [ 5] 22.01-23.00 sec 14.4 MBytes 121 Mbits/sec 0 498 KBytes [ 5] 23.00-24.00 sec 113 MBytes 946 Mbits/sec 0 747 KBytes [ 5] 24.00-25.00 sec 113 MBytes 950 Mbits/sec 0 747 KBytes [ 5] 25.00-26.00 sec 40.6 MBytes 339 Mbits/sec 0 747 KBytes [ 5] 26.00-27.00 sec 48.1 MBytes 405 Mbits/sec 0 747 KBytes [ 5] 27.00-28.00 sec 25.6 MBytes 215 Mbits/sec 0 747 KBytes [ 5] 28.00-29.01 sec 46.9 MBytes 391 Mbits/sec 0 747 KBytes [ 5] 29.01-30.00 sec 42.4 MBytes 358 Mbits/sec 0 747 KBytes [ 5] 30.00-31.00 sec 29.1 MBytes 244 Mbits/sec 0 747 KBytes [ 5] 31.00-32.01 sec 2.75 MBytes 23.0 Mbits/sec 0 747 KBytes [ 5] 32.01-33.01 sec 1.00 MBytes 8.38 Mbits/sec 0 747 KBytes [ 5] 33.01-34.00 sec 1.50 MBytes 12.7 Mbits/sec 0 747 KBytes [ 5] 34.00-35.00 sec 18.1 MBytes 152 Mbits/sec 0 747 KBytes [ 5] 35.00-36.00 sec 112 MBytes 943 Mbits/sec 0 747 KBytes [ 5] 36.00-37.01 sec 111 MBytes 922 Mbits/sec 0 747 KBytes [ 5] 37.01-38.00 sec 1.62 MBytes 13.7 Mbits/sec 0 747 KBytes [ 5] 38.00-39.00 sec 1.62 MBytes 13.6 Mbits/sec 0 747 KBytes [ 5] 39.00-40.00 sec 1.50 MBytes 12.6 Mbits/sec 0 747 KBytes [ 5] 40.00-41.00 sec 1.38 MBytes 11.5 Mbits/sec 0 747 KBytes [ 5] 41.00-42.00 sec 94.1 MBytes 791 Mbits/sec 0 747 KBytes [ 5] 42.00-43.00 sec 112 MBytes 944 Mbits/sec 0 747 KBytes [ 5] 43.00-44.00 sec 40.5 MBytes 339 Mbits/sec 0 747 KBytes [ 5] 44.00-45.00 sec 1.62 MBytes 13.6 Mbits/sec 0 747 KBytes [ 5] 45.00-46.00 sec 2.88 MBytes 24.1 Mbits/sec 0 747 KBytes [ 5] 46.00-47.00 sec 1.38 MBytes 11.5 Mbits/sec 0 747 KBytes [ 5] 47.00-48.00 sec 54.2 MBytes 456 Mbits/sec 0 747 KBytes [ 5] 48.00-49.00 sec 112 MBytes 937 Mbits/sec 0 747 KBytes [ 5] 49.00-50.00 sec 97.6 MBytes 816 Mbits/sec 0 747 KBytes [ 5] 50.00-51.00 sec 1.38 MBytes 11.6 Mbits/sec 0 747 KBytes [ 5] 51.00-52.01 sec 1.50 MBytes 12.5 Mbits/sec 0 747 KBytes [ 5] 52.01-53.00 sec 1.75 MBytes 14.8 Mbits/sec 0 747 KBytes [ 5] 53.00-54.00 sec 1.38 MBytes 11.5 Mbits/sec 0 747 KBytes [ 5] 54.00-55.00 sec 108 MBytes 904 Mbits/sec 0 747 KBytes [ 5] 55.00-56.00 sec 113 MBytes 947 Mbits/sec 0 747 KBytes [ 5] 56.00-57.00 sec 22.6 MBytes 189 Mbits/sec 0 747 KBytes [ 5] 57.00-58.00 sec 1.38 MBytes 11.6 Mbits/sec 0 747 KBytes [ 5] 58.00-59.00 sec 1.38 MBytes 11.5 Mbits/sec 0 747 KBytes [ 5] 59.00-60.36 sec 2.75 MBytes 16.9 Mbits/sec 0 747 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.36 sec 2.21 GBytes 314 Mbits/sec 0 sender [ 5] 0.00-60.37 sec 2.20 GBytes 313 Mbits/sec receiver iperf Done. dd 写入完成后,以太网端口的带宽就会恢复到约 940Mbits/s。 我们的客户面临的问题略有不同。当它们开始写入 NVMe 磁盘时,由于带宽低,USB3 摄像机捕获失败。如果没有写入磁盘,也不会失败。 Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 你好 我没有任何记录表明我的团队以前见过这种行为。 AXI 总线不应限制在 1Gb/s 以内,因为只有一条 PCIe 线路将占用几乎所有的带宽。 能否详细介绍一下您的测试设置? 顺祝商祺! Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 你好 感谢您提供的信息,我将与内部团队分享这些信息,并尽快向您通报最新情况。 顺祝商祺! Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 另外,我还创建了一个 cgroup 设置,可以对写入 NVMe 磁盘的数据进行节流。看起来 USB3 和 PCIe 子系统在 SoC 内共享一条约 1Gb/s 的管道,因为结果非常直接。如果我增加节流量,USB3 就能立即获得更多带宽。 Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 你好 感谢您提供的信息。 据内部团队说,他们以前也做过类似的测试,但没有遇到问题。i.MX8MP 支持 USB 和 PCIE 端口同时运行。 你能提供电路板支持包版本吗,我会再试一次。 顺祝商祺! Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 我使用 Toradex 电路板支持包 7.4.0 进行了测试,它使用恩智浦下游内核 6.6.101。 传输同时进行,只是它们似乎在共享带宽。 Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 你好,我有最新消息。 我们的内部团队可以重现该问题: 我在 i.MX8MPEVK 上重现了这个问题。目前怀疑是 NOC 带宽造成的问题。 如果使用 eth0/eth1 进行同样的测试不能解决问题,因此不受 AXI 总线的限制。 使用 USB3.0 以太网进行测试: top - 12:36:31 up 43 min, 2 users, load average: 0.41, 0.23, 0.15 Tasks: 160 total, 4 running, 155 sleep, 1 d-sleep, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 7.9 sy, 0.0 ni, 53.5 id, 5.0 wa, 11.9 hi, 21.8 si, 0.0 st %Cpu1 : 2.0 us, 21.8 sy, 0.0 ni, 51.5 id, 20.8 wa, 3.0 hi, 1.0 si, 0.0 st %Cpu2 : 1.1 us, 22.1 sy, 0.0 ni, 50.5 id, 23.2 wa, 3.2 hi, 0.0 si, 0.0 st %Cpu3 : 0.0 us, 2.1 sy, 0.0 ni, 6.4 id, 0.0 wa, 12.8 hi, 78.7 si, 0.0 st MiB Mem : 5606.6 total, 5171.0 free, 403.9 used, 192.0 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 5202.7 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 34 root 20 0 0 0 0 R 38.8 0.0 0:38.37 ksoftirqd/3 1962 root 20 0 3304 2148 1124 D 32.9 0.0 0:03.39 dd 1959 root 20 0 17896 3360 2720 S 13.6 0.1 0:01.91 iperf3 748 parsec 20 0 279360 5148 4636 R 2.9 0.1 0:10.60 parsec 1963 root 20 0 7644 5072 2896 R 1.9 0.1 0:00.10 top 16 root 20 0 0 0 0 R 1.0 0.0 0:25.62 ksoftirqd/0 29 root 20 0 0 0 0 S 1.0 0.0 0:00.20 ksoftirqd/2 801 ntp 20 0 77012 4968 4200 S 1.0 0.1 0:00.23 ntpd 我们将继续在内部讨论这个问题。 顺祝商祺! Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 你好,@rbeims、 内部团队确认是带宽限制。 在这种情况下,可以尝试使用 CSI 接口摄像头。 顺便问一下,客户能否分享您的 CPU 负载信息? 顺祝商祺! Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 你好,@rbeims、 感谢您的更新。 能否请您分享一下 CPU 负载? 我会检查是否有办法对优先级进行收费。 致以最崇高的敬意 Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 你好 在 NOC 块中,PCIE 和 USB 是同一个块,在 doc 中,它们的优先级相同。因此,无法通过修改优先级来实现。 顺祝商祺! Re: iMX8MP bandwidth limitation with simultaneous PCIe and USB3 use 谢谢你的澄清!
查看全文
LPC5536とHyperram こんにちは、 LPC5536JBD100 上の FLEXSPI ペリフェラルの構成に苦労しています。HyperRAM チップは S27KS0642GABHV020 です。このシステムはカスタム ボード上にインストールされており、すでに他の機能も統合されています。 私は、別のプロセッサ用ですが、私が使用しているものと非常によく似たチップを例に挙げている AN12239 からインスピレーションを得ました。主な違いは、S27KS0642 の新しいテクノロジにあるように思われます。このテクノロジによって、アプリケーション ノードで使用されている S27KS0641 よりも高速になりますが、タイミング図 (SO ダミー サイクル) とコマンドは同じです。 もう一つのインスピレーションの源はこの記事です https://community.nxp.com/t5/MCX-マイクロコントローラ-ナレッジ/MCX-N947-FlexSPI-HyperRAMへの接続-分析-and/ta-p/1988799 これは私が使用しているプロセッサと同じではありませんが、構成データ構造内のいくつかのフィールドの意味を説明しています。 また、FlexSPI 構成を比較するために、lpcxpresso55s36_flexspi_octal_polling_transfer の例も調べました (フラッシュ デバイスをターゲットにしているため、何かを変更する必要があることはわかっています)。 私の症状は、ベンダー ID を読み取ろうとすると、関数が kStatus_Success を返さない (値 7001 を返す) ことです。 時計がコネクテッドされていることを確認しました。 CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 0U, true); /*!< Reset FLEXSPICLKDIV divider counter and halt it */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 2U, false); /*!< Set FLEXSPICLKDIV divider to value 2 */ CLOCK_AttachClk(kPLL0_to_FLEXSPI); /*!< Switch FLEXSPI to PLL0 */ ピンはGUIで設定されている 周辺機器の構成は次のように行われます int config_hr(void) { flexspi_config_t config; uint32_t tempCustomLUT[ARRAY_SIZE(customLUT)] = {0U}; /* Copy LUT information from flash region into RAM region, because flash will be reset and back to single mode; In lately time, LUT table assignment maybe failed after flash reset due to LUT read entry is application's required mode(such as octal DDR mode) and flash is being in single SDR mode, they don't matched. */ memcpy(tempCustomLUT, customLUT, sizeof(tempCustomLUT)); /* Get FLEXSPI default settings and configure the flexspi. */ FLEXSPI_GetDefaultConfig(&config); /* Init FLEXSPI. */ config.rxSampleClock = kFLEXSPI_ReadSampleClkExternalInputFromDqsPad;//kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;//kFLEXSPI_ReadSampleClkExternalInputFromDqsPad; //config.enableSckBDiffOpt = true; //config.enableCombination = true; config.ahbConfig.enableAHBPrefetch = true; config.ahbConfig.enableAHBBufferable = true; config.ahbConfig.enableAHBCachable = true; // config.enableDoze = false; FLEXSPI_Init(EXAMPLE_FLEXSPI, &config); /* Configure RAM settings according to serial RAM feature. */ FLEXSPI_SetFlashConfig(EXAMPLE_FLEXSPI, &deviceconfig, kFLEXSPI_PortA1); /* Update LUT table. */ FLEXSPI_UpdateLUT(EXAMPLE_FLEXSPI, 0, tempCustomLUT, ARRAY_SIZE(customLUT)); /* Do software reset. */ FLEXSPI_SoftwareReset(EXAMPLE_FLEXSPI); return 0; } ベンダーIDを読み取る関数でもポートA1を使用していることを確認しました status_t flexspi_hyper_ram_get_id(FLEXSPI_Type *base, uint32_t *vendorId) { flexspi_transfer_t flashXfer; status_t status; uint32_t id; /* Write data */ flashXfer.deviceAddress = 0x0U; flashXfer.port = kFLEXSPI_PortA1; flashXfer.cmdType = kFLEXSPI_Read; flashXfer.SeqNumber = 1; flashXfer.seqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_READREG; flashXfer.data = &id; flashXfer.dataSize = 4; status = FLEXSPI_TransferBlocking(base, &flashXfer); *vendorId = id & 0xffffU; return status; } flexspi_device_config_t構造体は次のように初期化されます。 flexspi_device_config_t deviceconfig = { .flexspiRootClk = 75000000, /* 75MHZ SPI serial clock */ .isSck2Enabled = false, .flashSize = FLASH_SIZE, .CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle, .CSInterval = 2, .CSHoldTime = 1, .CSSetupTime = 1, .dataValidTime = 1, .columnspace = 3, .enableWordAddress = true, .AWRSeqIndex = HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA, .AWRSeqNumber = 1, .ARDSeqIndex =HYPERRAM_CMD_LUT_SEQ_IDX_READDATA, .ARDSeqNumber = 0, .AHBWriteWaitUnit = kFLEXSPI_AhbWriteWaitUnit2AhbCycle, .AHBWriteWaitInterval = 0, .enableWriteMask = true, }; そしてLUTの値は #define LATENCY (0x04) uint32_t customLUT[20] = { /* Read Data */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Data */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Read Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xE0,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x60,kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, LATENCY), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), }; これは、合計 48 個のアドレス ビット、8 個のパッドの DDR モードを使用しており、コマンドが正しいため、私にとっては理にかなっています。 何か見逃しているものがあるでしょうか? Re: LPC5536 and Hyperram こんにちは、 ありがとうございます。 いいえ、より多くのピンを構成しましたが、スクリーンショットは非常に悪く撮られました。データの8つのピン、RWDS 1つ、CS_n 1つ、差動クロックのペアがあると思います。 Re: LPC5536 and Hyperram こんにちは@img_gabrigob ピン設定について。 5 つのデータ ピンを設定しましたか? S27KS0642GABHV020 には 8 つのデータピンが必要です。 BR ハリー Re: LPC5536 and Hyperram こんにちは、 ありがとう。私はあなたに返信しましたが、何か間違ったことをしたようで(このコミュニティを初めて使用しました)、返信は私の元の投稿に直接送信されました。 Re: LPC5536 and Hyperram こんにちは@img_gabrigob まず、ハードウェアをチェックしてみるといいとCANいます。 物理信号をプローブする(スコープ): CKが期待どおりのレートでトグルし、トランザクションのCS#パルスが発生し、読み取りIDシーケンスをトリガーしたときにDQ[7:0] / RWDSがアクティビティを示すことを確認します。 FlexSPIシリアルクロックを低い安全な周波数に下げる(例:デバッグ中は、CPU の速度を 20~25 MHz に保ちます。 それならこのLUTを参考にすればCANと思います。 /* Read Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xE0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x06), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_READREG + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write Register */ [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x60, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 1] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x06), [4 * HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG + 2] = FLEXSPI_LUT_SEQ( kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), RT1064 HyperRAM が S27KS0641 および S27KS0642 をサポート - NXP コミュニティ BR ハリー Re: LPC5536 and Hyperram こんにちは@Harry_Zhang 、 ありがとうございます! 私の LUT と、リンクされている他の投稿でユーザーが使用した LUT との間に違いがあるかどうかを確認しようとしましたが、レイテンシ待機状態のダミーの数を調整した後でも同じ問題が発生します。 IDEs インストールで何かを誤って構成したかどうかはわかりませんが、LPC5536 では flexspi_config_t データ構造から差動クロックを設定できないようです (フィールド enableSckBDiffOpt は無効な ifdef 内にあります)。 私たちはボード上でいくつかの対策を講じました。CSN および CLK 信号がアクティブです。 2つのスルーレートオプション(標準と高)でクロックをキャプチャしました。 クロック周波数は予想よりも遅いです (75MHz に設定したと思いますが、ここでは 150/2 ではなく 75/2 になっています)。 データおよびRWDS信号は0Vで安定します。データ信号にわずかなグリッチ(5ns)が見られるだけです グラフィカルユーザーインターフェースから出力される pin_mux ファイルと clock_config ファイルも添付します。 他に何かご提案はございますでしょうか? よろしくお願いいたします Re: LPC5536 and Hyperram こんにちは! 返信ありがとうございます 回路図を再度確認したところ…RESN は FLEXspi では制御されていないことに気づいたので、ソフトウェアを変更して上昇させました。 これでコントローラが動作するようになりました。MCU のピンも高速スルー レート オプションに設定されました。 これは、たとえば RWDS と CLK の比較です。 つまり、問題は LUT のレイテンシの値 (リンクで修正済み) とリセットでした。 これはこのプロジェクトの基本ではありませんが、FUTURE アプリケーションに役立つかもしれませんが、まだ理解していないことがあります。クロックツリーの設定から、CLKは75MHzになるはずですが、37.5MHzを計測しました。 他に見逃したクロック分周器はありますか? ありがとうございます よろしくお願いいたします。 ガブリエレ Re: LPC5536 and Hyperram こんにちは@img_gabrigob HyperRAM への回路図接続を共有していただけますか? BR ハリー Re: LPC5536 and Hyperram こんにちは@img_gabrigob LPC55S36 のデータシートによると。 クロックの最大周波数は50M(DDRモード)です。 /* Flexspi frequency 150MHz / 3 = 50MHz */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 0U, true); /*!< Reset FLEXSPICLKDIV divider counter and halt it */ CLOCK_SetClkDiv(kCLOCK_DivFlexSpiClk, 3U, false); /*!< Set FLEXSPICLKDIV divider to value 3 */ CLOCK_AttachClk(kPLL0_to_FLEXSPI); /*!< Switch FLEXSPI to PLL0 */ BR ハリー
查看全文
UJA1169AXF:为什么 CW 有时会等待第三个唤醒帧,而不是第二个? 你好 NXP 团队,我们有两批板使用相同的 UJA1169AXF 和相同的固件,但是在 CAN 唤醒后它们显示不同的 CW-Flag 时机:事件 板-A 序列 板-B 序列板 A 当发送第二个唤醒帧时,V1 升至 5 V,但寄存器 0x63 中的 CW 标志仍为 0。只有在第三个唤醒帧之后,CW 才变为 1。 板 B 有了第二个唤醒帧时,V1 上升到 5 V,CW 已经设置为 1;不需要第三帧。 你能解释一下哪些板载参数让 CW 位在某些板上等待额外的帧吗?它是否与 V1 上升时间、PNP 负载电流或控制内部 “已确认” 信号的另一个模拟阈值有关? 谢谢您的提示! 致以最诚挚的问候,赵光宇 Re: UJA1169AXF: Why does CW sometimes wait for the third wake-up frame instead of the second? 你好,赵先生、 您是否正在使用我们的一个或多个UJA1169Ax-EVB?如果是,请说明使用的是哪一种。 如果您使用自己的设计,请共享包含电压等级和部件值的示意图。 致以最崇高的敬意 约瑟夫 Re: UJA1169AXF: Why does CW sometimes wait for the third wake-up frame instead of the second? 你好,赵先生、 我需要联系应用工程师寻求建议。应用工程师总是需要以下信息。请与大家分享。如果可能,还请提供原理图。 客户:? 最终客户:? 最终应用: ? 国家: 中国中国 年产量:? 致以最崇高的敬意 约瑟夫 Re: UJA1169AXF: Why does CW sometimes wait for the third wake-up frame instead of the second? 你好,约瑟夫 首先,请帮助查看 V1 的波形, ,我需要与硬件工程师确认其余部分 2 帧 V1 : 3 帧 V1: 另外,请问 V1 的斜率会产生什么影响? 致以最崇高的敬意 赵 Re: UJA1169AXF: Why does CW sometimes wait for the third wake-up frame instead of the second? 你好,赵先生、 与典型的 CAN 显性/隐性转换相比,这些斜坡相对较慢。 效果 缓慢的斜率会增加 V1 在阈值区域的停留时间,这可能会导致阈值失调: 不确定的主导检测(设备等待更长的时间才能确认有效的主导状态)。 唤醒帧验证可能失败,尤其是在帧定时很紧的情况下。 如果斜率太低,内部滤波器可能会将边缘归类为噪声或不完整,从而迫使设备等待另一帧。 致以最崇高的敬意 约瑟夫 Re: UJA1169AXF: Why does CW sometimes wait for the third wake-up frame instead of the second? 你好,约瑟夫、 在我的波形图中,2 帧可以设置 SBC 的 CW,V1 的上升时间为 248us, 3 帧可以设置 SBC 的 CW(我认为这是有问题的),V1 的上升时间为 195us, 相反,慢一些是正常的 ,这似乎与您说的相反 另外,在 2 帧的情况下,睡眠时 V1 的电压不是 0V 是否与此有关? 致以最崇高的敬意 赵
查看全文
IMX219 カメラモジュール(Raspberry Pi5 互換)が FRDM-IMX8MPLUS で動作しない - ピン配置の互換性 NXPコミュニティの皆様、こんにちは。 私はインターフェースしようとしています IMX219 8MPカメラモジュール (Raspberry Pi 5用に設計) FRDM-IMX8MPLUSボード 問題が発生します。これがピン配列の非互換性の問題なのか、構成の問題なのかを理解したいと思います。 ハードウェアセットアップ ボード: FRDM-IMX8MPLUS(i.MX 8Mプラス) カメラ: IMX219 8MP、Raspberry Pi 5用22ピンFFCケーブル付き(AliExpressより: https://de.aliexpress.com/item/1005009258177201.html ) コネクタ: FRDMボード上のCSI1(J13) オペレーティングシステム: カーネル 6.6.36 を搭載した Yocto Linux 現在の状況 デバイスツリー構成: 元々の設定 &i2c2 住所付き 0x10 → エラー -6 (ENXIO) で失敗しました 変更する必要がある &i2c3 住所付き 0x1a I2C検出に基づく 問題: ドライバはI2Cアドレスに正常にバインドしましたが、IMX219チップIDを読み取ることができません ビデオデバイスが作成されていません (/dev/video* カメラには映らない) MIPI CSIデータレーンはI2C通信にもかかわらず動作しない可能性があります 質問 ピン配列の互換性: Raspberry Pi 5 22 ピン カメラ モジュールは、FRDM-IMX8MPLUS CSI コネクタ (J13/J14) と直接互換性がありますか?RPi5 と i.MX8MP では異なる 22 ピンのピン配置が使用されていることがわかりました。 電源ピンが逆になっているようです(RPi5:ピン1=GND、ピン22=3.3Vi.MX8MPとの違いは明らかです) データレーンのポジショニングは異なる場合があります I2Cピンのポジショニングが異なる I2Cバス マッピング: カメラが、予想される I2Cバス 1 (I2C2 コントローラ) ではなく、I2Cバス 2 (i2c-2 = I2C3 コントローラ) に表示されるのはなぜですか?どの CSI コネクタがどの I2C バスを使用するかを示すドキュメントはありますか? 代替住所: IMX219 の標準アドレスは 0x10 ですが、このモジュールは 0x1A で応答します。これは既知の変種ですか、それともピン配置の不一致によりアドレスシフトが発生しますか? 推奨される解決策: 私はすべきですか: カメラと FRDM ボードの間にピン再マッピング アダプターを使用しますか? i.MX8 プラットフォーム専用に設計された別の IMX219 モジュールを入手しますか? RPi5 互換カメラ用の特別な構成でデバイスツリーを変更しますか? デバイスツリーの抜粋   文章 &i2c3 { imx219: imx219@1a { compatible = "sony,imx219"; reg =<0x1a> �; clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>; assigned-clock-rates =;<24000000> // ... MIPI CSI 構成 }; }; その他の情報 CLKO2は24MHzで動作していることが確認された カメラモジュールに電源が入っています(I2C応答が表示されます) Yoctoの標準NXP Linux BSPを使用する FRDM-IMX8MPLUS で Raspberry Pi 5 対応カメラをうまく使用した方はいらっしゃいますか?ピン配列の互換性や推奨カメラモジュールに関するアドバイスがあれば、大変助かります。 参考情報: FRDM-IMX8MPLUS ユーザーマニュアル Raspberry Pi 5 カメラのピン配置: HackMDドキュメント ログ: root@imx8mpfrdm:~# dmesg | grep -i imx219 [ 0.000000] マシンモデル: NXP i.MX8MPlus FRDMボード(IMX219搭載) [ 0.076368] プラットフォーム 32e50000.csi:/soc@0/bus@30800000/i2c@30a30000/imx219@10 との依存関係サイクルを修正しました [ 8.531294] imx219 1-0010: 電源VANAが見つかりません。ダミーレギュレータを使用しています。 [ 8.538280] imx219 1-0010: 電源VDIGが見つかりません。ダミーレギュレータを使用しています。 [ 8.545630] imx219 1-0010: 供給VDDLが見つからないため、ダミーレギュレータを使用しています [ 8.559462] imx219 1-0010: レジスタ0x0000の読み取りエラー: -6 [ 8.564769] imx219 1-0010: チップID 219の読み取りに失敗しました ご回答をお待ちしています。 i.MX 8M | i.MX 8M ミニ | i.MX 8M ナノ マルチメディア Re: IMX219 Camera Module (Raspberry Pi5 Compatible) Not Working on FRDM-IMX8MPLUS - Pinout Compatibi こんにちは、 主な問題は、Raspberry Pi 5 カメラコネクタと i.MX8M Plus CSI コネクタ間のピン配置の不一致であるようです。どちらも 22 ピン FFC コネクタを使用しますが、ピン配置構成は異なります。 1.電源ピンが逆になっています(RPi5 のピン 1 は GND、ピン 22 は 3.3V ですが、i.MX8MP の配置は異なります) 2. データレーンの位置はプラットフォームによって異なる 3. I2Cピンの位置が異なる その理由は次のとおりです。 - IMX219は標準の0x10ではなくアドレス0x1Aで応答します - I2C通信は確認できるが、チップIDの読み取りに失敗している - I2C検出にもかかわらずビデオデバイスは作成されません i.MX8M Plus ボードの場合、I2C3 コントローラは CSI1 コネクタ (J13) に関連付けられているため、カメラが i2c-2 バス上に表示されます。 この問題を解決するには、いくつかのオプションがあります。 1. カメラとFRDMボードの間にピン再マッピングアダプタを使用して信号を正しく調整します。 2. Raspberry Piではなくi.MX8プラットフォーム用に特別に設計されたIMX219カメラモジュールを入手する 3. i.MX8M Plusプラットフォームで公式にサポートされているカメラの使用を検討してください 理論的には、Raspberry Pi カメラ モジュールを i.MX8 プロセッサとインターフェースすることは可能ですが (両方とも MIPI CSI2 仕様をサポートしているため)、ハードウェア実装の違いにより追加の適応が必要になることに注意してください。ドライバは I2C アドレスに正しくバインドされていますが、ピン配置の不一致により適切な通信に失敗しています。 よろしくお願いします。
查看全文
BFU660F 的 Spice 型号 您好, 能否提供 BFU660F 的香料型号? 谢谢! 约翰 Re: Spice Model for BFU660F 您好, ,我试图将此模型用于 Orcad PSpice,但似乎无法识别某些参数(例如:...M参数......),软件就会出错。请提供可在 orcad PSpice 中导入的 BFU660F 模型, ,谢谢您的支持 ,致以最诚挚的问候 Jonata Re: Spice Model for BFU660F 亲爱的艾丽卡 我想在 LTSPICE 中使用 2 发射器模型。 请发布 BFU660F 的 4 针型号。 顺祝商祺! 诹访仁 Re: Spice Model for BFU660F 嗨,艾丽卡、 谢谢你的香料模型。 您可以关闭此主题。 顺祝商祺! 约翰 Re: Spice Model for BFU660F 您好。 SPICE 模型附后。 希望对你有所帮助。 此致问候
查看全文
Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM Hello, At the AN4581 Application Note section 5.7 it is recommended to program the SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses to completely secure the device, but looking at both the IMX8MMRM and IMX8MMSRM, I wasn't able to find the exact location of those fuses (bank, word, bit). Where can I find this information? Thank you! Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM Hi @igorpadykov , I would appreciate if you could send me this information as well. Thanks in advance Dj Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM Hi, Would it be possible for you to send me this information as well? Also is this diifferent between an imx8m nano  and a mini? Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM We also would like to have this information. Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM hi @igorpadykov, I need information about the fuses for the imx8m mini. Could you be so kind to provide it to me? I need to disable the JTAG for security reasons. Best regrads, Julián Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM @igorpadykov could you also send me the info for the JTAG_HEO fuse? Thanks! Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM Can you also share this with me, please? Why isn't this just posted in a public app note, or the reference manual or security reference manual? Security through obscurity is not security. Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM Could you make this email public information? Why is this information not listed in the security reference manual? For the i.MX8M Nano this is listed in the security reference manual. But I cannot know whether the Mini uses the same fuses. Also, AN4581 also lists fuse DIR_BT_DIS to be of interest. But I cannot find any reference of it. Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM We also want to disable JTAG on the imx8m-mini and I couldn't find any info of about it in Reference Manual, Rev. 2, 08/2019 Chapter 6.2 Fusemap. Could you also point me into the right direction. Thank you! Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM Hi rodrigo_travess additional info were sent via mail. Best regards igor
查看全文
uboot - デバイスツリーバインディングとdm_gpio_lookup_name("x",&desc) imx91 ベースのプロジェクトでは、最初の GPIO を出力として定義することに行き詰まっています。 デバイス ツリーの例が説明されている投稿をいくつか読みましたが、まだ `-22` の戻り値が返されます。 デバイスツリーで定義: gpio_reset: gpio-reset { compatible = "gpio-reset"; pinctrl-names = "default"; reset-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; status = "okay"; label = "RSTO"; gpio-name = "RSTO"; line-name = "RSTO"; }; ここで、ラベリング、gpio-name、line-name を追加してみました。どれが必要かは分かりません。 そして機能的に static void board_gpio_init(void){ struct gpio_desc desc; int ret; /* De-assert RSTO */ ret = dm_gpio_lookup_name("RSTO", &desc); if (ret) { printf("%s lookup 'RSTO' failed ret = %d\n", __func__, ret); return; } ... } これは常に -22 を返し、最初に検索するピンになります。 そこで、LEDをベースにした実証済みのサンプルコードを試してみようと思いました。 gpio-leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio_led>; led-0 { gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; default-state = "on"; }; led-1 { gpios = <&gpio3 27 GPIO_ACTIVE_HIGH>; default-state = "on"; }; }; Then ret = dm_gpio_lookup_name("led-1", &desc); also returns -22 Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) OK。実際に利用可能なポートを見つけるには、次のように印刷するだけです。 len = uc_priv->bank_name ? strlen(uc_priv->bank_name) : 0; printf("%s: lookup %s\n", __func__,uc_priv->bank_name); if (!strncasecmp(name, uc_priv->bank_name, len)) { そして、コンソール上で使用可能かつ正しい名前を確認できるようになります。 ファイルの場所は `uboot/ドライバ/gpio/gpio-uclass.c` です Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) こんにちは@DavidFlir gpio-uclass.cの関数を参照することをお勧めします。 よろしくお願いします。 ダニエル Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) 返信ありがとうございます! 私は次の例に気づきました: https://github.com/nxp-imx/uboot-imx/blob/9383f8387dc76524524da69992db96c22195a57c/board/freescale/imx91_evk/imx91_evk.c#L305 ret = dm_gpio_lookup_name ( "adp5585-gpio4" 、 & exp_sel_desc ); これは「gpioX_Y」の他に許可されている形式のようです   それは次のように定義されます adp5585: io-expander@34 { compatible = "adi,adp5585-00", "adi,adp5585"; reg = <0x34>; #gpio-cells = <2>; gpio-controller; #pwm-cells = <3>; gpio-reserved-ranges = <5 1>; exp-sel-hog { gpio-hog; gpios = <4 GPIO_ACTIVE_HIGH>; output-low; }; では、構文がどのようになっているかを確認するにはどうすればよいでしょうか?たとえば、「_」または「-」で接続されていますか...? Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) こんにちは、デビッド: dm_gpio_lookup_name() 関数は、デバイス ツリーから gpio 名または行名を解析しません。「gpioX_Y」という形式のみ理解します。 XはGPIOコントローラです Yはピン番号です。 Linuxカーネル(U-BOOTではない)で作業している場合は、 構造体gpio_desc * rst_gpio ; rst_gpio = devm_gpiod_get ( & pdev ->dev , "reset" , GPIOD_OUT_LOW ) ; DTSで定義する リセット- gpios = < & gpio1 8 GPIO_ACTIVE_LOW > ; gpio -名前= "リセット" ; よろしくお願いします。 ダニエル Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) _defconfig設定が見つからないことが分かりました CONFIG_IMX_RGPIO2P=y   この設定で私は成功することができます ret = dm_gpio_lookup_name ( "gpio1_8" 、 & desc ); しかし、.dtsで定義された名前をどのようにCAN使用できるかはまだわかりません。このgpio1_8 の代わりにファイルを使用します。 `
查看全文
PCAL 6534 電源シーケンス 最初にオンにする必要がある電源は、VDD(P) または VDD(I2C_BUS) ですか? PCAL6534 には電源シーケンスが必要ですか? Re: PCAL 6534 Power sequence こんにちは、 正確なタイミングシーケンスは指定されていません。デザインで最初に VDD_I2C に電源を投入する場合は、I²C 通信を試行する前に、VDD_P が速やかに上昇し、POR しきい値に達することを確認してください。POR リセット遅延時間は、VDD_P がしきい値を超えてから約 1 µs であることに注意してください。SO、信頼性の高い動作を確保するには、VDD_P が安定した後、I²C トランザクションを開始する前に短い遅延 (数マイクロ秒など) を許可します。 BRs、トーマス Re: PCAL 6534 Power sequence タイミングを含む正確な電源シーケンスはありますか? 実際、デザイン上、VDD_I2C は VDD_P よりも先に電源が投入されます。 Re: PCAL 6534 Power sequence こんにちは、 VDD(P) は最初に電源を投入するか、少なくとも VDD(I2C_BUS) より遅くは投入しないでください。これにより、通信が開始される前に内部回路とレジスタが適切に初期化されます。 BRs、トーマス
查看全文
PWMキャプチャのプリスケーラ設定に関する問題 タコの外部周波数をキャプチャするために PWM 入力を使用しています。 標準設定ではすべて正常に動作しますが、初期化中にプリスケーラを適用すると pwmConfig.プリスケール= kPWM_Prescale_Divide_64 ; または設定することで void PWM_SetClockMode CVAL2とCVAL3の値は常に0x00であり、カウンタはカウントしていない 私の信号の周波数は200Hzです Re: Problems Setting Prescaler for PWM capture こんにちは、 私も同じ問題に遭遇しました。 4 つの PWM ペリフェラルのいずれかのクロック パースケーラを kPWM_Prescale_Divide_1 以外の値で設定すると、選択した PWM ペリフェラルのカウンターはまったく動作しません。 私はimxrt1062プロセッサとMCUXpresso IDE v11.9.1を使用しています。 できるだけ早くサポートしていただければ幸いです。 以下は、PWM ペリフェラルを設定および初期化するコードの一部です。 静的void pwm_init ( void ) { pwm_config_t pwmConfig; pwm_input_capture_param_tキャプチャ設定; pwm_fault_param_t障害構成; /* PWMのデフォルト設定を読み取る */ PWM_GetDefaultConfig(&pwmConfig); pwmConfig.clockSource = kPWM_BusClock ;​ pwmConfig.prescale = kPWM_Prescale_Divide_2 ;​ pwmConfig.pairOperation = kPWM_Independent ;​ pwmConfig.initializationControl = kPWM_Initialize_LocalSync ;​ pwmConfig. reloadLogic = kPWM_ReloadImmediate ; pwmConfig. reloadSelect = kPWM_LocalReload ; pwmConfig. reloadFrequency = kPWM_LoadEveryOportunity ; pwmConfig.forceTrigger = kPWM_Force_LocalSync ;​ pwmConfig.enableDebugMode = true; PWM_Init(PWM1_BASEADDR、 kPWM_Module_3 、&pwmConfig); PWM_Init(PWM2_BASEADDR、 kPWM_Module_3 、&pwmConfig); PWM_Init(PWM3_BASEADDR、 kPWM_Module_1 、&pwmConfig); PWM_Init(PWM4_BASEADDR、 kPWM_Module_1 、&pwmConfig); // 障害構成 PWM_FaultDefaultConfig(&faultConfig); /* PWM障害保護を設定します */ PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_0 、&faultConfig); PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_1 、&faultConfig); PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_2 、&faultConfig); PWM_SetupFaults(PWM1_BASEADDR、 kPWM_Fault_3 、&faultConfig); /* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */ PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_0 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_1 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_2 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM1_BASEADDR、 kPWM_Module_3 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); /* PWM障害保護を設定します */ PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_0 、&faultConfig); PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_1 、&faultConfig); PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_2 、&faultConfig); PWM_SetupFaults(PWM2_BASEADDR、 kPWM_Fault_3 、&faultConfig); /* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */ PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_0 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_1 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_2 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM2_BASEADDR、 kPWM_Module_3 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); /* PWM障害保護を設定します */ PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_0 、&faultConfig); PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_1 、&faultConfig); PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_2 、&faultConfig); PWM_SetupFaults(PWM3_BASEADDR、 kPWM_Fault_3 、&faultConfig); /* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */ PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_0 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_1 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_2 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM3_BASEADDR、 kPWM_Module_3 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); /* PWM障害保護を設定します */ PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_0 、&faultConfig); PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_1 、&faultConfig); PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_2 、&faultConfig); PWM_SetupFaults(PWM4_BASEADDR、 kPWM_Fault_3 、&faultConfig); /* サブモジュール0/1/2のPWM障害無効化マッピングを設定する */ PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_0 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_1 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_2 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); PWM_SetupFaultDisableMap(PWM4_BASEADDR、 kPWM_Module_3 、 kPWM_PwmA 、 kPWM_faultchannel_0 、 kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3 ); /* ワンショットポーリング用のPWMのキャプチャ入力を設定します */ キャプチャConfig.captureInputSel = true; キャプチャ構成。エッジ0 = kPWM_RiseAndFallEdge ; キャプチャーConfig.edge1 = kPWM_Disable ; キャプチャ設定。enableOneShotCapture = false; キャプチャ構成。edgeCompareValue = 1; PWM_SetupInputCapture(PWM1_BASEADDR、 kPWM_Module_3 、 kPWM_PwmA 、&captureConfig); PWM_SetupInputCapture(PWM2_BASEADDR、 kPWM_Module_3 、 kPWM_PwmA 、&captureConfig); PWM_SetupInputCapture(PWM3_BASEADDR、 kPWM_Module_1 、 kPWM_PwmA 、&captureConfig); PWM_SetupInputCapture(PWM4_BASEADDR、 kPWM_Module_1 、 kPWM_PwmA 、&captureConfig); PWM_SetPwmLdok(PWM1_BASEADDR、 kPWM_Control_Module_3 、true); PWM_SetPwmLdok(PWM2_BASEADDR、 kPWM_Control_Module_3 、true); PWM_SetPwmLdok(PWM3_BASEADDR、 kPWM_Control_Module_1 、true); PWM_SetPwmLdok(PWM4_BASEADDR、 kPWM_Control_Module_1 、true); PWM_StartTimer(PWM1_BASEADDR、 kPWM_Control_Module_3 ); PWM_StartTimer(PWM2_BASEADDR、 kPWM_Control_Module_3 ); PWM_StartTimer(PWM3_BASEADDR、 kPWM_Control_Module_1 ); PWM_StartTimer(PWM4_BASEADDR、 kPWM_Control_Module_1 ); }   Problems Setting the Prescaler for PWM capture こんにちは。元の投稿者と同じ問題が発生しました。仕切りコードを削除したり、仕切り1に設定したりするとカウンターは正常に動作しますが、仕切り2以上に設定するとカウンターが停止します。原因は何でしょうか? void Capture_config(void) { pwm_input_capture_param_t pwm_input_capture; gpio_pin_config_t PWM_pin_config; //初始化输入捕获管脚 IOMUXC_SetPinMux(PWM2_PWMA03_IOMUXC, 0U); //设置外部引脚的复用功能 IOMUXC_SetPinConfig(PWM2_PWMA03_IOMUXC, PWMC_INPUT_PAD_CONFIG_DATA); //设置引脚的 pad 属性 PWM_pin_config.direction = kGPIO_DigitalInput; PWM_pin_config.interruptMode = kGPIO_NoIntmode; GPIO_PinInit(PWM2_PWMA03_GPIO, PWM2_PWMA03_GPIO_PIN, &PWM_pin_config); //初始化输入捕获配置参数 pwm_input_capture.captureInputSel = false; pwm_input_capture.edge0 = kPWM_RisingEdge; //pwm_input_capture.edge1 = kPWM_FallingEdge; pwm_input_capture.enableOneShotCapture = false; //pwm_input_capture.edgeCompareValue = 10; //当captureInputSel为FALSE时,此处设值无意义 pwm_input_capture.fifoWatermark = 0; PWM_SetupInputCapture(PI_PWM_BASEADDR, kPWM_Module_3, kPWM_PwmA, &pwm_input_capture); //开启捕获中断 //set_IRQn_Priority(PWM2_3_IRQn,Group4_PreemptPriority_0, Group4_SubPriority_0);//设置中断优先级 //PWM_EnableInterrupts(PI_PWM_BASEADDR, kPWM_Module_3, kPWM_CaptureA0InterruptEnable| kPWM_CaptureA1InterruptEnable ); PWM_EnableInterrupts(PI_PWM_BASEADDR, kPWM_Module_3, kPWM_CaptureA0InterruptEnable ); EnableIRQ(PWM2_3_IRQn); } /** * @brief 初始化 PWM 配置参数 * @retval 无 */ void PWM_config(void) { pwm_config_t pwmConfig;//定义pwm 配置结构体 PWM_Deinit(PI_PWM_BASEADDR, kPWM_Module_3); /*设置AHB总线时钟和IP总线时钟*/ CLOCK_SetDiv(kCLOCK_IpgDiv, 0x3); /* Set IPG PODF to 3, divede by 4 */ /*设置pwm 错误输入为高电平,表示没有错误,只有当pwm 没有错误输入或者禁止错误检测才能正常输出pwm波*/ XBARA_Init(XBARA1); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1Fault0); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1Fault1); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1234Fault2); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1234Fault3); PWM_GetDefaultConfig(&pwmConfig); pwmConfig.reloadLogic = kPWM_ReloadPwmFullCycle; //新值在上一个pwm周期输出结束之后加载到缓冲寄存器中 pwmConfig.pairOperation = kPWM_Independent; // 工作在独立模式 pwmConfig.clockSource = kPWM_BusClock; pwmConfig.enableDebugMode = true; // 使能DebugMode pwmConfig.prescale = kPWM_Prescale_Divide_128; //1320000000/128/65535=16Hz=PWM最小频率 //初始化 PWM 并且判断初始化是否成功 if (PWM_Init(PI_PWM_BASEADDR, kPWM_Module_3, &pwmConfig) == kStatus_Fail) { PRINTF("PWM initialization failed\n"); } Capture_config(); PWM_SetPwmLdok(PI_PWM_BASEADDR,kPWM_Control_Module_3 , true); PWM_StartTimer(PI_PWM_BASEADDR, kPWM_Control_Module_3 ); } Re: Problems Setting Prescaler for PWM capture こんにちは@mexp2さん、 まず初めに、ご返答が遅くなりましたことをお詫び申し上げます。 念のため確認ですが、 kPWM_Prescale_Divide_128をどこに配置しているか教えてください。pwmConfig.prescale=kPWM_Prescale_Divide_128;と記述すると良いかもしれません。pwmConfig.pairOperation=kPWM_Independent の後;PWM_Init()の前。また、どのクロック ソースを使用していますか? 最後に、プリスケーラの値を 64 未満にしてみませんか? よろしくお願いいたします、ラウル。 Re: Problems Setting Prescaler for PWM capture imxRT1062をSDK v2.13.0で使用します。 /* Read the PWM default configuration */ PWM_GetDefaultConfig(&pwmConfig); pwmConfig.reloadLogic = kPWM_ReloadImmediate; pwmConfig.pairOperation = kPWM_Independent; pwmConfig.enableDebugMode = true; /* Init the pwm */ if( PWM_Init(TACHOPUMP_PERIPHERAL, TACHOPUMP_CHANNEL, &pwmConfig) == kStatus_Fail) { PRINTF("Can't initialize PWM\n"); return; } /* Configure the capture input of the PWM for one shot polling */ pwm_input_capture_param_t captureConfig; captureConfig.captureInputSel = false; captureConfig.edge0 = kPWM_RisingEdge; captureConfig.edge1 = kPWM_RisingEdge; captureConfig.enableOneShotCapture = true; PWM_SetupInputCapture(TACHOPUMP_PERIPHERAL, TACHOPUMP_CHANNEL, TACHOPUMP_SIGNAL, &captureConfig); PWM_SetPwmLdok(TACHOPUMP_PERIPHERAL, timerBitmask, true); PWM_StartTimer(TACHOPUMP_PERIPHERAL, timerBitmask); このコードではすべて期待通りに動作しますが、設定にプリスケーラを追加すると pwmConfig.prescale = kPWM_Prescale_Divide_128; カウンターはもうカウントしていない Re: Problems Setting Prescaler for PWM capture こんにちは@mexp2さん、 お元気でお過ごしでしょうか。 さらにデバッグするために使用する i.MX プロセッサを指定してください。 ありがとう、よろしく。 サンケト・パレック
查看全文
使用 usbdm 对 68HC912B32 编程 我正在尝试对一块装有这种芯片的旧板进行编程,但是对这个微控制器系列来说是全新的,所以不胜感激。 我下载并安装了 USBDM_4_12_1_340_Win.msi Windows 软件,并运行了"USBDM Memory Dump" 应用程序,转储了 68HC912B32 芯片上的闪存(地址范围 0x8000-0xFFFF)。 我还查看了"HCS12 Programmer" 或"Flash programmer" 应用程序,但其下拉菜单列表中没有 MC912B32 芯片。我还用 " Detect Chip " 按钮尝试了 " 设备选择 " 但它无法检测到我的芯片。 我不需要完整的开发环境/集成开发环境,只需要能够转储闪存、更换损坏的微控制器并用转储的程序对新微控制器进行编程。 这个 4 岁的https://community.nxp.com/t5/OSBDM-and-TBDML/program-the-HC12-B-Family-of-MCU/td-p/1324102这个问题很有趣,但并没有提供解决方案。 我的首选操作系统是 Linux 而不是 Windows,因此我非常乐意尝试基于 Linux 的解决方案。 对如何安装一个有效的编程环境有什么想法吗? 非常感谢 汤姆-克兰 Re: Programming a 68HC912B32 with usbdm 嗨,@pgo、 感谢您的跟进。我取得了一些进展。 Code Warrior 5.2 不支持 68HC912B32 的解决方案是安装 Code Warrior 5.1。这里建议https://community.nxp.com/t5/CodeWarrior-for-MCU/CodeWarrior-Development-Studio-for-HCS12-X-Microcontrollers/m-p/603056。 在 5.1 版中(见所附屏幕截图 Code-warrior2-run-as-administrator-MC68HC912B32+USBDM.jpg),MC68HC912B32 芯片已出现并可以选择。 但是,"连接 "下拉菜单中没有列出 USBDM 或 TBDML 选项。 在重新安装 Code Warrior 5.1 后,我重新安装了 USBDM 及其驱动程序,并将 USBDM 插入电脑。 为了检查 USBDM 未出现在 "代码勇士连接 "菜单中是否是因为 USBDM 不支持 68HC912B32,我尝试选择了 USBDM 支持的其他芯片。 我选择了 MC9S12A128B。 现在 “连接” 菜单增加了 3 个条目:" TBDML ", " HCS 串行监测 " & " USBDM "。请参阅所附屏幕截图 Code-warrior2-MC68HC9S12A128B+USBDM.jpg。 除了尝试修改 USBDM Tcl 代码以支持 68HC912B32 外,是否还有任何其他软件/硬件应用程序或其他选项可与 USBDM pod 一起使用以对该芯片进行编程? 如果没有,是否有其他支持 S/W 的硬件/软件选项可以让我对 68HC912B32 的闪存进行编程? 我的板只有用于调试/编程的 6 针 BDM 插槽 —— 所以必须假设制造商最初就是这样编程的,除非它是在焊接之前断路完成的,这似乎不太可能... 谢谢! 汤姆 Re: Programming a 68HC912B32 with usbdm 嗨,汤姆 很抱歉,我已经无法访问 Codewarrior(或 Windows!),因此无法亲自检查。 当我在恩智浦网站(https://www.nxp.com/products/68HC912B32)上搜索 68HC912B32 时,最终会找到您下载的 Codewarrior 版本,因此这似乎是正确的版本。 我不知道为什么 B32 没有出现。 对不起! Re: Programming a 68HC912B32 with usbdm 嗨,Pgo、 感谢您的跟进。 我已经部分拆解了之前转储的图像,所以应该可以拼凑出一个 .asm文件放入代码勇士项目中。 我找不到 Codewarrior 第 6 版的下载地址,但还是从https://www.nxp.com/design/design-center/software/development-software/codewarrior-development-tools/codewarrior-legacy/codewarrior-development-studio-for-hcs12x-microcontrollers-classic-ide-v5-2:CW-HCS12X下载了。 链接。 它被列为版本 5.2,重要的是,在 " 支持的设备 " 的 " Expand All " 复选框下列出了 68HC912B32。 安装 + 运行应用程序并检查版本号,显示的是 5.9 而不是 5.2。请参见所附截屏图片。 正在调用 " 启动对话框..." 和 " 创建新项目 " 提供了一个可选择芯片系列的弹出窗口。请参阅所附的截屏图片。 它只列出了 HCS12 & HCS12X 系列。 将这些节目扩展到家庭成员。请参阅所附的截屏图片。不出所料,其中没有 HCS912B32。 是我做错了什么,还是漏掉了什么显而易见的东西? 非常感谢 汤姆-克兰 Re: Programming a 68HC912B32 with usbdm 嗨,汤姆 很抱歉,USBDM 编程器不太可能适用于对您的芯片进行编程。 正如其他主题所指出的,这需要开发 TCL 脚本来完成基本工作(芯片启动、大量擦除等),并开发目标代码来完成块编程。 这是一项艰巨的工作,而且不能保证这种方法一定有效,因为 USBDM 采用的方法可能与早期的芯片不兼容。 可以使用位于 https://github.com/podonoghue/usbdm-eclipse-makefiles-build 的代表为 Linux 版本 USBDM。 我认为最好的办法是检查 Codewarrior V6(我认为)是否支持该芯片的 TBDML(USBDM 与之兼容)。 我不确定这是否允许独立编程,而不是从源代码进行调试开发。 仅适用于窗口。 再见
查看全文
S32K144コントローラのUART通信の問題について こんにちは 、 現在、プロジェクトに S32K144 コントローラを使用していますが、UART 受信に問題が発生しています。ブレークポイントがない場合、ソフトウェアは正常に実行され、UART はすべてのデータを適切に受信します。しかし、ブレークポイントが適用されると、UART 受信は行われなくなります。その間割り込みも発生しません。 使用コントローラ:S32K144 SDKスタック: LPUART2 この原因は何ですか、またこれを解決するにはどうすればよいですか? コールバック関数は以下のとおりです。 uint8_t 受信バイト = 0U; void vidRxUARTCallback(void *driverState, uart_event_t event, void *userData) { /* イベント情報タイプを確認する */ if (イベント情報 == UART_EVENT_RX_FULL) { LPUART_DRV_SetRxBuffer(INST_LPUART1, &rxbyte, 1U); } } Re: Regarding the UART communication issue in S32K144 controller こんにちは@Avinash_PAZHAMALAI 、 DATA レジスタからの RX データにはデバッガーからもアクセスでき、デバッガーは読み取り時に対応するフラグを自動的にクリアします。意図しないフラグのクリアを防ぐには、DATA レジスタにアクセスするすべてのレジスタまたはメモリ ビューが閉じられていることを確認します。 BR、ダニエル
查看全文
S32G2 上的 LLCE CAN 通信问题 - 发送/接收报文时偶尔出现故障 在开发过程中,LLCE CAN 模块遇到了一些问题: ​设备详情:​ 定制设计的硬件 CPU 型号:S32G274 RTD 版本:4.0.2 LLCE 版本: 1.0.8 ​问题 1.​ 一个通道能正确接收信息,但无法发送信息。只有重新启动后才能恢复正常运行。 使用 Lauterbach 调试时,函数 Can_43_LLCE_SendWritecmd 返回 CAN_BUSY。 通过强行修改 Can_au16TransmitHwObjectCen[x] 的值为非零值进行的进一步测试表明, Can_Llce_write 函数也返回 CAN_BUSY。 ​问题 2.​ 一个通道在发送和接收信息时都出现故障。需要重新启动才能恢复。 以下是通过 Can_Llce_ProcessErrorNotification 获得的错误信息: error->eNotifId:2 error->ErrorInfo->eModuleId:102 error->ErrorInfo->eErrorCode:7 我们希望得到解决这些问题的指导。谢谢! Re: LLCE CAN Communication Issue on S32G2 – Occasional Failures in Sending/Receiving Messages 嗨,zhuyz 感谢您的回复。 建议优先进行单通道测试,并尽可能延长向通道发送帧的时间间隔。 错误信息表示接收端已达到最大硬件对象数,即报文缓冲区已满,无法接收新报文。您可以尝试增加帧时间间隔并添加缓冲区进行测试。 BR 乔伊 Re: LLCE CAN Communication Issue on S32G2 – Occasional Failures in Sending/Receiving Messages 你好,Joey_z ,感谢您的跟进。 您可能没有看清楚我的问题--主要问题是出现问题后,我再也无法通过这个通道接收/发送信息,而不仅仅是偶尔掉帧。 根据我通过劳特巴赫获得的信息,我怀疑 LLCE 本身存在问题,而不是外部因素造成的。能否请您再次回顾一下我最初的问题? Re: LLCE CAN Communication Issue on S32G2 – Occasional Failures in Sending/Receiving Messages hi,zhuyz 感谢您的回复。 请尝试用这种方法测试您的问题。 1.尝试降低 CAN 负载,增加 CAN 帧的时间间隔,检查丢帧现象是否得到缓解。 2.尽量保持测试方法简单,优先考虑单通道测试和只发送或接收帧的测试。例如,首先测试有问题通道的发送功能。 3.你们的 CAN 测试设备是什么?请确保测试设备可靠。 希望这能帮到你。 BR 乔伊 Re: LLCE CAN Communication Issue on S32G2 – Occasional Failures in Sending/Receiving Messages 你好,Joey_z, 我没有用它来路由 CAN 帧,我只是用它来发送和接收 CAN 帧。 关于您提到的 CAN 环回模式,我前面提到的问题 1 就是用这种方法检测到的。 你的回答让我有点困惑。我希望您能提供一些故障排除方法和可能的原因。 因为对我来说,LLCE 是一个黑盒子,我目前没有能力继续排除故障。 Re: LLCE CAN Communication Issue on S32G2 – Occasional Failures in Sending/Receiving Messages 嗨,zhuyz 感谢您提供的信息。 路由 CAN 帧 "是指 LLCE 中的 CAN2CAN/CAN2ETH/ETH2CAN 功能。您使用过吗? 如果您只是使用 LLCE 发送和接收 CAN 帧,我建议您可以尝试使用 CAN 环回演示进行测试。您需要修改关联客户板的代码。 关于问题发生的概率相对较低,而且不是每次都能重现。 如果要进行接收帧然后在 CAN 信道中发送的测试,建议考虑接收和发送之间的间隔时间。 BR 乔伊 Re: LLCE CAN Communication Issue on S32G2 – Occasional Failures in Sending/Receiving Messages 你好,Joey_z ,感谢您的回复。 我没有使用 LLCE CAN 演示测试这个特定通道,因为在我的案例中,问题并不总是与固定通道相关联。此外,该问题出现的概率相对较低,而且并非每次都能重现。 关于问题 1,我正在使用它收发 CAN 报文。我不太清楚你说的 "路由 CAN 帧 "是什么意思。 所有 20 个通道都在使用,而且都在 M7-0 内核上运行。 Re: LLCE CAN Communication Issue on S32G2 – Occasional Failures in Sending/Receiving Messages hi,zhuyz 感谢您与我们合作。 您是否使用过 Can_Llce_DS_Can2Can_S32G274A_M7 的 LLCE CAN 演示来测试问题通道? 关于问题 1,您是用它来路由 CAN 帧还是只发送报文? 您使用的是哪个频道?您只在 S32G 上使用了 M 内核? BR 乔伊
查看全文
[S32G3] [BOSCH] XRDC 启动导致崩溃 客户:博世 XRDC init 正在触发崩溃,如果需要更多详细信息,请与我们联系 XRDC 版本:AR 版本 43。4.4.0(SW 版本 4.0.2) HSE FW 版本:22_2_62_0 RTD 模块:RM 客户代码: 在 M7 核心中 Xrdc_Ip_Init(&Xrdc_Config);最后在 Task_Init 中调用,其中 Xrdc_Config 来自 tresos 生成的文件 static const Xrdc_Ip_InstanceConfigType * const aXrdc_Config_Array[1] = {&Xrdc_Config_XRDC_INSTANCE0}; const Xrdc_Ip_ConfigType Xrdc_Config = { Xrdc_Ip_Config_XRDC_INSTANCE0 { aXrdc_Config_Array、 (uint32)1UL、 Xrdc_Instances_InUsed、 (uint32)1UL }; TASK(Task_Init) { 所有启动函数,例如 ADC、PFE Csm_Init(NULL_PTR); CryIf_Init(NULL_PTR); Crypto_Init(NULL_PTR); Xrdc_Ip_Init(&Xrdc_Config); 请帮助我找出客户所附代码(EB Tresos)中的问题。 谢谢! Dhvani Singhal 优先权:紧急 RTD Re: [S32G3] [BOSCH] XRDC init is causing a crash 你好,@DanNguyenDuy、 我将要求客户实施这种方法,并将配置文件发送给我。然后,我会将文件发送给你。 谢谢! Dhvani Singhal Re: [S32G3] [BOSCH] XRDC init is causing a crash 你好,@DhvaniSinghal、 RTD_RM_IM 文件中有一条关于 Rm_Init 的说明。在调用Xrdc_Ip_Init()之前是否调用了 Mcu_Init()? 如果您这样做了,能否将配置文件(.xdm 或 .arxml文件),请告诉我导致崩溃的 Xrdc_Ip_Init() 函数中的语句是什么? 在我看来,你应该在 Crypto_Init() 之前调用 Xrdc_Ip_Init()。 顺祝商祺! 丹 Re: [S32G3] [BOSCH] XRDC init is causing a crash 你好,@DanNguyenDuy、 客户提出了一些有关 XRDC 初始化的问题,具体如下: 在运行时动态附加或更改内核(M7 或 A53)的进程 ID (PID)的推荐方法是什么? XRDC 驱动程序仅在主机端可用。是否允许在 A53 端修改 XRDC 寄存器以附加 PID? 如果我们允许在运行时访问A53的XRDC寄存器,我们如何确保功能安全。 如果 A53 内核尝试访问 XRDC 封锁(即发生访问冲突),是否有 XRDC 状态寄存器或机制可由 M7 功能安全核心监测来调试此故障? 我们观察到,在 XRDC 出现故障后,XRDC DERLOCK 寄存器(功能域错误锁定)有时似乎无法正确更新。除了检查这个寄存器之外,我们还可以在 S32G3 的功能安全或网络安全模块中检查是否存在并记录了 XRDC 访问失败的确认? XRDC 限制在启动顺序的哪个特定时刻适用于 A53 内核? 在系统软件配置和锁定 XRDC 寄存器之前,A53 内核的默认 XRDC 策略(如默认 DID 分配和默认访问权限)是什么? 请帮助我回答上述问题。 谢谢并致以诚挚的问候 Dhvani Singhal Re: [S32G3] [BOSCH] XRDC init is causing a crash 嗨,@DhvaniSinghal、 问题 1: 1.1 可以。用户可从 A53 端调用 Xrdc_Ip_SetProcessID(),更新主控内核的 PID。 1.2 为确保运行时的安全访问,请配置 SEMA42 通道以实现互斥。这样可以防止同时访问,并保证对 XRDC 寄存器进行原子更新。 问题 2& 3:目前,Cortex-M7 没有检查 Cortex-A53 错误状态的机制。 问题 4& 5:有关这些问题,请联系 HSE 团队。 顺祝商祺! 丹 Re: [S32G3] [BOSCH] XRDC init is causing a crash 你好,@DanNguyenDuy、 客户尝试了您之前回复中提到的步骤,但仍然遇到错误。请在下方找到配置文件和代码片段以供参考。 在 crypto init 之前调用 Xrdc_Ip_Init 尝试通过在 rba_main 中调用 Rm_Init,在 Xrdc_Ip_Init 之前初始化 Rm_Init 观察到一旦在 Mcu_Init 之后添加 Rm_Init 就会崩溃 此致 Dhvani Singhal Re: [S32G3] [BOSCH] XRDC init is causing a crash 嗨,@DhvaniSinghal、 这是调用 Rm_Init 之前 Mcu 初始化的正确顺序。 另外,因为 Rm_Init() 将调用 Xrdc_Ip_Init()。因此,如果用户调用了 Rm_Init(),就不需要再调用 Xrdc_Ip_Init()。请从代码中删除 Rm_Init() 或 Xrdc_Ip_Init()。 顺祝商祺! 丹
查看全文
JTAG RT1176経由の非XIP このアプリケーションノート ( https://www.nxp.com/docs/en/application-note/AN14069.pdf ) によると、NON XIP イメージは UART および USB 経由の MCU ブート ユーティリティでのみロードできます。 MCUXpresso IDE 内で MCU リンクまたは Jlink を介して XIP イメージをフラッシュにロードする方法がないことを確認したいのですが。 MCU リンクを使用する必要がある場合、これらが以下の正しい UART ピンにルーティングされているかどうかを確認したいと思います。データシートにUSB経由でのブートのオプションが表示されません: https://www.nxp.com/docs/en/data-sheet/IMXRT1170AEC.pdf(見逃していたらごめんなさい)。USB 経由のブートは USB を同じ UART ピンに接続するだけであるとオンラインで言及しているものをいくつか見ました。 ありがとうございます アンテオ Re: NON XIP via JTAG RT1176 こんにちは@AnteoJ 、 NXP MIMXRTシリーズにご興味をお持ちいただきありがとうございます。 SD カードから起動されるような非 XIP イメージは、MCUBootUtility または NXP の公式 MCUXpresso Secure Provisioning ツールを使用してフラッシュする必要があります。 イメージが XIP の場合、JLink/DAP などのデバッガーでフラッシュするようにプログラムCAN。MCUXpressoIDE や他の IDEs でも簡単に実行できます。 RT1170-EVK/EVKB を使用している場合、ボード上に搭載デバッガーである MCU-Link があることがわかります。これにより、お客様は外部デバッガーを使用せずに、搭載デバッガーを介して直接プログラムをフラッシュし、デバッグすることができます。さらに、異なるファームウェアをプログラミングすることで、MCU-Link を JLink または CMSIS-DAP デバッガーに変更できます。 詳細については、EVK/EVKB ハードウェア回路図をCAN確認してください。 よろしくお願いします、 ギャビン
查看全文
S32K39-37-36におけるCoolFlux DSPの対象アプリケーション NXPについて: 大金半導体 お問い合わせ: Heedong Lee デバイス: S32K39-37-36 こんにちは、チームの皆さん お客様と私の理解では、S32K39-37-36 は安全な EV 制御アプリケーション用に設計されています。 - モータ制御(3相または6相モーター、Si IGBT/SiC/GaNトランジスタ) - 電力変換(DCDC、OBC) - バッテリー・マネジメントシステム(BMS)制御 - 車載制御ユニット(VCU)またはドメイン制御 特に、CoolFlux DSP は、モーター リゾルバ アプリケーション (S32K39-36) 用の FIR フィルタリング機能を実装し、SDADC からの生データを後処理し、構成されたサンプリング レートに従って最終サンプルを提供するように構築されています。 ただし、お客様は、CoolFlux DSP が次のアプリケーションでどのような役割を果たすことができるかを知りたいと考えています。 - 電力変換(DCDC、OBC) - バッテリー・マネジメントシステム(BMS)制御 - 車載制御ユニット(VCU)またはドメイン制御 また、アプリケーションで SDADC が使用されていない場合、CoolFlux DSP は他にどのような操作を実行できますか? ご協力をよろしくお願いいたします。 良い1日を! よろしくお願いします、 レオナルド クールフラックス 優先度: 高 Re: Target applications of CoolFlux DSP in S32K39-37-36 「CF」はCoolFluxの略で、 ペトル Re: Target applications of CoolFlux DSP in S32K39-37-36 フィードバックありがとうございます。 頭字語「CFSDADC」の「CF」はどういう意味ですか? Re: Target applications of CoolFlux DSP in S32K39-37-36 こんにちは、 Threadで述べたように、CoolFlux DSPの主な(そして唯一の)CASEは、モータ制御アプリケーションです。開発フェーズでは、他のユース CASE のサポートは要求されませんでした。その他の/新しいユースCASEの場合は、FW がそのまま他のユースCASEをサポートできるかどうかを確認するために分析を実行する必要があります。あるいは、何らかの変更が必要になるか、異なる機能を備えた異なるバージョンの FW が必要になる可能性があります。 2番目の質問に関して。SDADC 入力ストリームの代わりに、CFSDADC FW は DMA-WRITE バッファとクロックしきい値スケジューリング モードで動作 CAN。ただし、現時点で RTD ドライバがこれをサポートしているかどうかはわかりません。 一般に、CFSDADC FW は入力データ (SDADC または DMA-WRITE バッファ) の次のプロセッシングをサポートします。アップサンプリング、FIR フィルタリング、デシメーション、調整 (ゲインまたはオフセット)、IIR フィルタリング。 よろしくお願いします。 イインドリッヒ。
查看全文
S32G RDB3(M7コア)のSJA1110ポート1へのGMAC0 SGMIIリンクの設定方法 S32G399A-RDB3 評価ボードを使用しており、GMAC0 と SJA1110 イーサネット スイッチのポート 1 の間に SGMII リンクを確立したいと考えています。 SDKs で提供される RTD の例 (例: GMAC_Example_0) は、外部 PHY にコネクテッドするために GMAC0 を RGMII モードで構成する方法のみを示していますが、ポート 1 の SGMII 経由でコネクテッドされる SJA1110 スイッチと通信するために GMAC0 を SGMII モードで構成する方法は示されていません。 Cortex-M7 コアをターゲットにし、FreeRTOS + lwip + RTD を使用しています。 GMAC0が外部PHYでRGMIIモードで正常に動作することは既に確認済みであり、また、GMAC0 SGMIIリンクのSJA1110への動作はA53上でも確認済みであるが、我々のターゲットはM7コアである。 ご指導ありがとうございます。 Re: How to configure GMAC0 SGMII link to SJA1110 Port1 on S32G RDB3 (M7 core) ありがとう、この情報は役に立ちます。M7でGMACをSGMIIに設定する方法を理解することができました。 Re: How to configure GMAC0 SGMII link to SJA1110 Port1 on S32G RDB3 (M7 core) こんにちは@Terry_Huang 、 M7 の SGMII で GMAC を構成する例はありませんが、次のリファレンスをCAN。 u-boot ソース コード: u-boot は hwconfig の値に応じて SerDes モジュールを構成します。BSP マニュアルでCAN確認できます (例: BSP44)。 文字列が解析されレジスタが設定されると、次のソース コードをCAN確認できます。 serdes_hwconfig.c hwconfig_fixups.c 文字列がどのように解析され、構成が行われるかがわかりますが、u-boot にはかなりの数の SW レイヤーがあるため、これはかなり複雑になる可能性があります。 hwconfig を上記のいずれかの値に設定できます。質問に関連する部分は、serdes0 構成と SW の位置です。 hwconfig 変数が設定されたら、ボードをリセットして u-boot で停止し、md コマンドを使用して関連するレジスタを読み取ります。例: => setenv hwconfig "serdes0:mode=xpcs0&xpcs1,clock=ext,fmhz=100;xpcs0_0:speed=1G,an=0;xpcs0_1:speed=1G,an=0;serdes1:mode=xpcs0&xpcs1,clock=ext,fmhz=125;xpcs1_1:speed=1G" => saveenv Saving Environment to MMC... Writing to MMC(0)... OK => reset ... => printenv hwconfig hwconfig=serdes0:mode=xpcs0&xpcs1,clock=ext,fmhz=100;xpcs0_0:speed=1G,an=0;xpcs0_1:speed=1G,an=0;serdes1:mode=xpcs0&xpcs1,clock=ext,fmhz=125;xpcs1_1:speed=1G => md.l 0x4007C000 20 4007c000: 00000000 00000000 000000e7 00000001 ................ 4007c010: ffffffff 1fffffff 00007fff 00000000 ................ 4007c020: 00000000 00000000 00000000 00000000 ................ 4007c030: 00000000 00000000 00000000 00000000 ................ 4007c040: 00000000 00000000 00000000 00000000 ................ 4007c050: 00000000 00000000 00000000 00000000 ................ 4007c060: 00000000 00000000 00000000 00000000 ................ 4007c070: 00000000 00000000 00000000 00000000 ................ サンプルでは、hwconfig を設定し、変更を保存し、ボードをリセットして、GMAC の最初のレジスタ (このCASEは 20) を出力しました。xpcs コマンドを使用することもCANます。例: => xpcs xpcs - Utility command for SGMMI control Usage: xpcs list List all registered XPCS modules xpcs transit <1000M|2500M> Change serdes mode xpcs ss <10M|100M|1000M|2500M> Change speed and serdes mode when required xpcs an Auto-negotiation control xpcs an_auto Auto-negotiation control with automatic speed change xpcs lo PMA loopback enable/disable xpcs dump Dump XPCS indirect registers is obtained using 'xpcs list' command => xpcs list Registered XPCS instances: | ID | SerDes instance | XPCS | | 0 | serdes@40480000 | 1 | | 1 | serdes@40480000 | 0 | | 2 | serdes@44180000 | 1 | | 3 | serdes@44180000 | 0 | これは、S32G3 リファレンスマニュアル [ページ 2759、S32G3 リファレンスマニュアル、Rev. 4、02/2024] に従っています。 ご覧のとおり、モード 1 と 3 は GMAC を使用した SGMII をサポートしています。 各モジュールのレジスタに関する詳細については、 GMACリファレンス マニュアルとSerDesリファレンス マニュアルも参照してください。 S32G3リファレンスマニュアルの関連セクション: 第47章 ギガビットイーサネットメディアアクセスコントローラ(GMAC) 47.1.4SGMIIモードでGMACを実行するための前提条件 2 4.7.2.2.4 イーサネット(GMAC_0)SGMII設定(これはクロッキングに関連します) この情報の目的は、M7 から GMAC モジュールを構成するためのベースとして使用できるようにすることです。 他にご質問がございましたらお知らせください
查看全文
RW612 FlexSPI PORTB1 access I am using the RW612 chipset in external XIP mode, the code is running from the FlexSPI PortA1 and I am connecting a PSRAM (APS6404L) to the FlexSPI PortB1, I am using the SDK (25.06 Version) provided configuration to access the Port B1. When trying to read the PSRAM ID, I am not seeing any signal activities on the PortB1 (CLCK/CS). I removed the SPARM to be sure that these signals are not held by a defective part. is this related to the fact that the APS6404 doesn't use the DQS signal?  How I can configure the PortB1 to not use the DQS? knowing that  FLEXSPI_Init function can't be called after the FlexSPI is initialized for PortA1 access. Thanks for your help and time. Re: RW612 FlexSPI PORTB1 access Hello Roman, Thank you for your help, the issue was related to trying to configure the FlexSPI clock while the bus is running, I commented out the following lines: CLOCK_EnableClock(kCLOCK_Flexspi); BOARD_SetFlexspiClock(FLEXSPI, 5U, 3U); The FlexSPI Port B1 is running now, and I can use the AHB Cache to Write/Read from the PSRAM. Thanks for the help, much appreciated. Re: RW612 FlexSPI PORTB1 access Hello @khalidL. Did you define the PSRAM memory section in the MCU settings as shown in the image below? Please make sure to follow the steps provided in the Application Code Hub post of the project and let me know if the problem persists. Re: RW612 FlexSPI PORTB1 access Hello Roman, Thank you for your help and time, in the process of integrating the above example in my project I ran into the following issue, when I call the function "__RAMFUNC(SRAM) status_t BOARD_InitPsRam(void)" from my main the code crashes silently. Is there any other changes I need to do to my project to integrate the example other than changing the linker files (main_data.ldt, main_txt.ldt and noinit_noload_section.ldt) and copying the board.c file? I am thinking that the code crashes because the BOARD_InitPsRam wasn't correctly copyed to the RAM. Thanks again for your time and help.  Re: RW612 FlexSPI PORTB1 access The example works on my board, thank you very much for the help. Re: RW612 FlexSPI PORTB1 access Hello @khalidL , hope you're doing well. There is an example in Application Code Hub regarding XIP from external NOR flash, please help me by testing the sample from the link shared and let me know if it fits into your project requirements. In order to import the project to MCUXpresso IDE, click on "Import from Application Code Hub" option. (Note that SDK version 2.16.00 is required for this sample) Once in the Application Code Hub window search for the sample's name (XIP from external NOR flash and configuring external pSRAM using multiport FlexSPI module), select it and click on "Github link" and wait until the "Next >" button can be used. Once clicked on the "Next >" button, follow the steps to import the project from the git repository. Finally, when the project is available in your workspace you should be able to flash and test it on your setup. Let me know if this helps.
查看全文
Thread tech days.pdf
查看全文
eIQ Time Series Studioトレーニング:FRDM-MCXN947で時系列MLモデルを構築して実行する 機械学習(ML)がデータの発生源に近づく傾向が続いているのを受け、NXPのeIQ Time Series Studio(TSS)は、開発者がNXPマイクロコントローラに時系列モデルを直接ビルドし、トレーニングして展開するための強力で直感的な環境となります。 この2部構成の実践的トレーニング・シリーズは、FRDM-MCXN947開発ボードとML Vibro Sens Clickセンサ・ボードを使用した、データのインポートからモデルの展開に至る一連のワークフローについて説明する開発者向け教材です。 ラボ1:事前収集データによる分類 トレーニングの最初の部分では、ファンの状態の分類に関する例を交えて、eIQ Time Series Studioの基礎について学びます。以下は学習内容です。 TSSでサンプル・プロジェクトを試してみる。 3軸加速度センサから時系列データをインポートしてラベリングする。 分類モデルをトレーニングして、ファンの4つの状態(オン、オフ、詰まり、摩擦)を検出する。 混乱行列とエミュレーションを使用してモデルのパフォーマンスを評価する。 MCUXpresso IDEを使用してモデルをFRDM-MCXN947開発ボードに展開する。 このラボは、事前に収集されたデータを使用して迅速に開始し、モデル作成とデプロイメントのエンド・ツー・エンドのワークフローを理解するのに理想的です。 ラボ2:実際のセンサ・データによる異常検知 トレーニングの第2部では、ラボ1を土台にして、リアルタイム・データの収集と異常検知の方法について説明します。ML Vibro Sens Clickボードを使用して加速度センサ・データを収集し、そのデータでモデルをトレーニングして異常な振動を検出します。 以下は主な手順です。 TSSでデータ・ロギング・ユーティリティを使用して実際のセンサ・データを収集する。 データ運用ユーティリティを使用してデータセットをクリーンアップし、準備を整える。 カスタムデータを用いた異常検知モデルのトレーニング 。 FRDM-MCXN947ボードでシリアルターミナルインターフェースを使用してモデルを導入しテストする 。 このラボは、開発者独自の環境とセンサ設定に合わせたモデルの構築方法を示すもので、予知保全、振動モニタリング、インダストリアル異常検知などの用途に最適です。 eIQ Time Series Studioを選ぶ理由 NXPのeIQ Time Series Studioは、より広範なeIQツールキットの一部であり、時系列データアプリケーション専用に設計されています。それにより可能になるのは: 加速度センサなどのセンサから、時系列データセットをインポートし、ラベリングする。 組み込みシステム向けに最適化された古典的なMLアルゴリズムを使用してモデルをトレーニングする。 表示されないデータでモデルをテストし、パフォーマンスを検証する。 MCUXpresso IDEまたはVS Codeを使用して、NXPマイクロコントローラにシームレスにモデルを展開する。 トレーニング要件 ハードウェアセットアップ:FRDM-MCXN947ボードとML Vibro Sens Click、FXLS8974CF加速度センサを使用します。 ソフトウェア・ツール:eIQ Toolkit 1.15.1、MCUXpresso IDE v24、およびMCUXpresso SDK 25.03 for FRDM-MCXN947。 まとめ このトレーニングでは、FRDM-MCXN947で時系列データ用機械学習モデルをビルドするための実践的でアクセスしやすい方法を学びます。初心者から、実データでカスタム・モデルをビルドしてインダストリアル装置のモニタリング、異常検知、予知保全ソリューションの構築といった用途で使うなどさまざまな目的で、eIQ Time Series Studioはアイデアを実現するためのツールと知識を提供します。 NXPのeIQ Time Series Studioを使用して、時系列データ用の機械学習モデルをビルド・展開する方法を学びましょう。この2部構成のトレーニングでは、FRDM-MCXN947開発ボードでのファンの状態の分類方法と異常をリアルタイムに検知する方法を取りあげます。 FRDM-MCXN FRDMトレーニング ハンズオン・トレーニング MCU
查看全文
Installing a Zephyr SDK version The Zephyr SDK is a set of build tools for building Zephyr applications. It includes GCC and CMake, and each Zephyr release is tied to a specific Zephyr SDK version. This version is noted in the SDK_VERSION file in the Zephyr repository. Using the recommended Zephyr SDK version is important—mismatched versions can cause build errors. For example, Zephyr v4.1 specifies Zephyr SDK v0.17.0. If you use Zephyr SDK v0.17.2 (meant for Zephyr v4.2) with Zephyr v4.1, you’ll encounter build errors. If you need to build apps for Zephyr v4.1, install Zephyr SDK v0.17.0. You can install multiple Zephyr SDK versions and switch between them at build time (see instructions below). Full vs. Minimal Install Full Install: Includes all toolchains for every supported SoC architecture. Recommended for beginners but requires more disk space and download time. Minimal Install: Lets you choose only the toolchains you need. Saves space and time. For Minimal install, run the setup.cmd script to select which tools to install.  On NXP boards, select: Register Zephyr SDK CMake package Install host tools aarch64-zephyr-elf (64-bit ARM) arm-zephyr-eabi (32-bit ARM, including NXP MCUs) optional  xtensa-nxp… (Cadence Tensilica DSP cores) Installing Zephyr SDK These steps cover installing the Zephyr SDK using the MCUXpresso Installer, West from CLI, or manual download. Installing with MCUXpresso Installer The MCUXpresso Installer started supporting packs for Zephyr with Zephyr v4.2.  Each pack installs the matching Zephyr SDK version (e.g., v4.2 pack installs SDK v0.17.2).  This option Installs a minimal set of tools for NXP development. The MCUXpresso Installer does not support older Zephyr SDK versions. For v0.17.1 or earlier, use West or manual install. Installing with West CLI Zephyr Project added Zephyr SDK installation to West. For CLI, Activate your Python Virtual Environment, then run: west sdk install --version 0.17.0   If --version is omitted, West uses the version in the SDK_VERSION file of the Zephyr repo. By default, installs the Full package. For minimal, add -i . Installing by Manual Download Download the Zephyr SDK from the https://github.com/zephyrproject-rtos/sdk-ng/releases. Choose Full or Minimal for your host OS. Extract to your user folder (default location for West and MCUXpresso): Windows: C:\Users\ \zephyr-sdk-0.17.0 Ubuntu: /home/ /zephyr-sdk-0.17.0 Selecting Zephyr SDK Version Multiple Zephyr SDK versions can coexist. West uses the latest by default, but you can override it: VS Code: When importing examples, select the Zephyr SDK version in the wizard. CLI: Set the environment variable ZEPHYR_SDK_INSTALL_DIR  before building.  This command sets that variable in Ubuntu: export ZEPHYR_SDK_INSTALL_DIR="/home/ /zephyr-sdk-0.17.0" Or in Windows: set ZEPHYR_SDK_INSTALL_DIR= C:\Users\ \ zephyr-sdk-0.17.0   Return to Zephyr Knowledge Hub    
查看全文