Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
从 S1L 更新 S1L <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 如果您的 FDI 板上已经有S1L ,您可以按照以下步骤更新到S1L的早期版本或更高版本。此过程不应用于更新块 0 中的 kickstart 加载程序。 步骤 1:启动系统至S1L提示符。准备好S1L的更新版本。 第 2 步:在S1L提示符下,键入“load term raw 0x90000000”以启动新图像的S1L中的二进制接收。在您的终端程序上,将S1L文件(即 s1l_from_kick_gnu.bin)作为二进制文件发送到开发板。 步骤 3:传输完成后,向主板发送中断以返回提示。在TeraTerm中,可以从控制菜单或按 ALT-B 发送中断。 步骤4:擦除FLASH中用于S1L存储的块。这些是块 1 至 24。要非常小心,不要擦除用于 klickstart 加载程序的块 0。可以使用“erase 1 24”命令来擦除块。 步骤 5:将加载的S1L图像写入从块 1 开始的S1L区域。S1L图像通常在 56K 到 80K 之间,因此它很容易容纳在 1 个块中。命令“write 0x90000000 64 64”将执行此操作。写入命令占用扇区(而不是块) - 扇区 64 是块 1 的起始位置。 步骤 6:重置电路板以验证S1L图像是否已更新。 整个序列如下所示。您可以通过检查 S1L 启动时的构建日期来查看正在运行的不同版本的 S1L 。 FDI3250 快速启动 v1.00 NAND闪存初始化 正在运行第 1 阶段加载器... Future Designs, Inc. DK-xTS-LPC3250 板 构建日期:2010年9月10日 10:12:22 自动启动正在进行中,按任意键停止 linux>加载术语原始 0x90000000 开始终端下载,发送中断停止 文件加载成功 Linux>擦除 1 24 操作将覆盖引导加载程序 - 确定吗?(是/否): 起始块擦除 linux>写入 0x90000000 64 64 Linux>FDI3250 Kickstart v1.00 NAND闪存初始化 正在运行第 1 阶段加载器... 使用默认系统配置 Future Designs, Inc. DK-xTS-LPC3250 板 构建日期:2010年9月13日 11:20:12 FDI3250
查看全文
S32K 示例 S32K1xx S32K144 示例 S32K144 CMP 轮询 S32DS2.0 示例 S32K144 验证后门访问密钥 S32DS1.3 示例 S32K144 FlexCAN0 RXFIFO DMA nonSDK S32DS13 示例 S32K144 PDB ADC 触发 DMA ISR S32DS 示例 S32K144 Flash RW simple S32DS 示例 S32K144 DMA 内存复制测试 S32DS S32K144 EEEPROM 使用示例 示例 S32K144 EEEPROM 使用 - 无 SDK 示例 S32K144 RTC VLPS 示例 S32K144 WDOG RCM 中断 示例 S32K144 SRAM ECC 注入  S32K144 RAM 保留示例 S32DS.R1 示例 S32K144 I2C主设备 MPL3115A2 S32DSR1_v3 示例S32K144 FlexCAN RXFIFO DMA S32DS.ARM.2018.R1  示例 S32K144_printf_implementation - S32DS_1.0 示例 S32K144 在 FreeRTOS 下使用 UART printf/scanf - S32DS 示例 使用 LPIT 定时器实现可配置周期函数调用的 S32K144 SDK 示例 S32K144 .noinit章节用法 示例 S32K144 PDB ADC DMA S32DS.ARM.2018.R1 示例 S32K144 RAM 自检简单 S32DS 2018.R1 示例 S32K144 位置无关代码  示例 S32K144 FlexCAN 虚拟网络停止模式测试 S32DS.ARM.2.2 示例 S32K144 LPIT DMA LPSPI 示例 S32K144 FlexCAN TX/RX/Error ISR 测试 S32DS2.2 示例 S32K144 FlexIO 空闲检测 S32DS2.2 S32K146 示例 S32K146 Set_whole_FlexRAM-as_RAM S32DS.ARM.2.2 S32K148 示例 S32K148 PDB0-PDB1 环 S32DS3.4 RTM4.0.3 示例 S32K148 PDB0-PDB1 环 DMA S32DS3.4 RTM4.0.3 示例 S32K148 GPIO 中断 S32K116 示例 S32K116 WDOG 快速测试 示例 S32K116 LPUART LIN 从机 TXRX ISR S32DS.ARM.2.2 示例 S32K116 FlexCAN PN 停止 S32DS.ARM.2.2 示例 S32K116 FlexCAN VLPR 测试 S32DS.ARM.2.2 S32K118 示例 S32K118-SRAM-keep_data_over_SW_reset v0_1 S32DS.ARM.2.2 S32K3xx S32K344 示例 S32K344 PIT BTCU ADC DMA DS3.4 RTD100   示例 S32K344 FlexCAN_Ip TX/RX/EnhanceRXFIFO 测试 S32DS3.4 RTD200   示例 Siul2_Port_Ip_Example_S32K344_ITCM_DTCM S32DS3.4RTD300   示例 S32K358 FlexCAN TXRX ISR S32DS35 RTD400/500    
查看全文
用于 PHY 寄存器操作的以太网工具 大多数以太网 PHY 支持多功能,并提供更灵活的配置能力,通过配置其寄存器可对时序进行微调或启用功能。以太网 PHY 寄存器工具提供了一种通过 MDC/MDIO 接口简单读写 PHY 寄存器的方法。这有助于开发或问题调试。  工业控制
查看全文
DDR4 calibration issues on LS1046 custom board Good day! We are trying to bring up our custom LS1046-based board up and stucked with DDR4 calibration procedure. SPD data of the modules is red successfully, calibration process starts successfully too, but after that it fails with this reason(log from CodeWarrior 😞  ############################### Run 1 Result for: wrlvl_searcher  ###################################### Test result: [ ============================================================ Updated: WRLVL_CNTL = 0x8655F605, WRLVL_CNTL_2 = 0x00000000, WRLVL_CNTL_3 = 0x00000000, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F60A, WRLVL_CNTL_2 = 0x0B0B0C0F, WRLVL_CNTL_3 = 0x0F10110D, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F60A, WRLVL_CNTL_2 = 0x0B0B0C0F, WRLVL_CNTL_3 = 0x0F101115, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F60A, WRLVL_CNTL_2 = 0x0B0B0C0F, WRLVL_CNTL_3 = 0x0F10111D, SDRAM_CLK_CNTL = 0x02800000 Write Leveling start values are correct and require no further modification, but the test failed due to other issues. Most common failure causes: -incorrect values configured in DDR4 DQn_MAP registers -incorrect ODT values -incorrect driver strength selected -incorrect timing values selected for Timing Configuration 0 properties (TIMING_CFG_0 register) < > {{Write Leveling start values are correct and require no further modification, but the test failed due to other issues.}} Err. capture registers: 0xE20, 0xDEADBEEF 0xE24, 0xDEADBEEF 0xE28, 0x00000000 0xE40, 0x00000000 0xE44, 0x00000000 0xE48, 0x0000001D 0xE4C, 0x60FF2001 0xE50, 0x00001FC0 0xE54, 0x00000000 0xE58, 0x00010000  ############################################ DQ mapping seems to be OK - we have 1:1 mapping from CPU to DDR slot, so we use DQ mappings from DDR module SPD without changing. What can be the problem?  Re: DDR4 calibration issues on LS1046 custom board Is there available RCW on the customer board? Has the ASLEEP led turned on and off? What's the frequency of the DDR clock? Thanks Re: DDR4 calibration issues on LS1046 custom board DDR calibration is performed using a hardcoded RCW. System clock - 100 MHz  DDR bus clock - 800 MHz, DDR data rate - 1600 mt/s Memory module - non-ECC. One interesting thing - from timer to time the 1 st stage of calibration (wrtlvl search) is successfully passed. For example: Test result: [ ================================================= Updated: WRLVL_CNTL = 0x8655F605, WRLVL_CNTL_2 = 0x00000000, WRLVL_CNTL_3 = 0x00000000, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F609, WRLVL_CNTL_2 = 0x0A0B0C0E, WRLVL_CNTL_3 = 0x0F10110D, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F609, WRLVL_CNTL_2 = 0x0A0B0C0E, WRLVL_CNTL_3 = 0x0F101115, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F609, WRLVL_CNTL_2 = 0x0A0B0C0F, WRLVL_CNTL_3 = 0x0F10111D, SDRAM_CLK_CNTL = 0x02800000 < > Err.capture registers: 0xE20, 0x00000000 0xE24, 0x00000000 0xE28,0x00000000 0xE40,0x00000000 0xE44,0x00000000 0xE48, 0x0000001D 0xE4C, 0x00000000 0xE50,0x00000000 0xE54,0x00000000 0xE58, 0x00010000 Dump: 0xF00,0x00000000 0xF04, 0x00000002 0xF08, 0x0000000F 0xF0C,0x14000C20 0xF10, 0x00000000 0xF14, 0x00000000 0xF18, 0x00000000 0xF1C, 0x00000000 0xF20, 0x00000000 0xF24, 0x2F003000 0xF28, 0x32003400 0xF2C, 0x39003B00 0xF30, 0x3C003E00 0xF34, 0x00005000 0xF38, 0x00000000 0xF3C, 0x00000000 0xF40, 0x00000000 0xF44, 0x00000000 0xF48, 0x00000001 0xF4C, 0xD4000000 0xF50, 0x13001500 0xF54, 0x17001900 0xF58, 0x1D001F00 0xF5C, 0x21002200 0xF60, 0x3A000000 0xF64, 0x00009000 0xF68, 0x00000020 0xF6C, 0x00000000 0xF70, 0x0070006F 0xF74, 0x00000000 0xF78, 0x00000000 0xF7C, 0x00000000 0xF80, 0x00000000 0xF84, 0x00000000 0xF88, 0x00000000 0xF8C, 0x00000000 0xF90, 0x00000000 0xF94, 0x80000000 0xF98, 0x00000000 0xF9C, 0x34043104 0xFA0, 0x35043304 0xFA4, 0x31043304 0xFA8, 0x2F043104 0xFAC, 0x04040000 0xFB0, 0x00000003 0xFB4, 0x1F1E1F21 0xFB8, 0x1E1C1F1D 0xFBC, 0x1F1B1D1E 0xFC0, 0x1C1B1C1C 0xFC4, 0x1F1E1F22 0xFC8, 0x1F1F2120 0xFCC, 0x1F1E1F20 0xFD0, 0x1C1D201F 0xFD4, 0x1F1B1B1E 0xFD8, 0x1F1D1E1C 0xFDC, 0x1F1F1D1F 0xFE0, 0x1F1D1E1C 0xFE4, 0x1F1C191A 0xFE8, 0x1C1D1C1A 0xFEC, 0x1F1E1C1E 0xFF0, 0x1E1F1E1A 0xFF4, 0x1F1F1F1F 0xFF8, 0x1F1F1F1F 0xFFC, 0x1F000000 Data: 0x00000009 0x0000000a 0x0000000b 0x0000000c 0x0000000f 0x0000000f 0x00000010 0x00000011 0x0000001d   Just after that I start calibration process again(without any changes in settings) and get a fail: ########## Result for: wrlvl_searcher ######  Test result: [ Updated: WRLVL_CNTL = 0x8655F605, WRLVL_CNTL_2 = 0x00000000, WRLVL_CNTL_3 = 0x00000000, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F609, WRLVL_CNTL_2 = 0x0A0B0C0E, WRLVL_CNTL_3 = 0x0F10110D, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F609, WRLVL_CNTL_2 = 0x0A0B0C0E, WRLVL_CNTL_3 = 0x0F101115, SDRAM_CLK_CNTL = 0x02800000 ============================================================ Updated: WRLVL_CNTL = 0x8655F609, WRLVL_CNTL_2 = 0x0A0B0C0E, WRLVL_CNTL_3 = 0x0F10111D, SDRAM_CLK_CNTL = 0x02800000 Write Leveling start values are correct and require no further modification, but the test failed due to other issues. Most common failure causes:   - incorrect values configured in DDR4 DQn_MAP registers  - incorrect ODT values  - incorrect driver strength selected  - incorrect timing values selected for Timing Configuration 0 properties (TIMING_CFG_0 register) < > {{Write Leveling start values are correct and require no further modification, but the test failed due to other issues.}} Err. capture registers: 0xE20, 0xDEADBEEF     0xE24, 0xDEADBEEF     0xE28, 0x00000000     0xE40, 0x00000000      0xE44, 0x00000000     0xE48, 0x0000001D     0xE4C, 0x60FF2001     0xE50, 0x00001FC0      0xE54, 0x00000000     0xE58, 0x00010000      Dump: 0xF00, 0x00000000     0xF04, 0x00000002     0xF08, 0x0000000E     0xF0C, 0x14000C20      0xF10, 0x00000000     0xF14, 0x00000000     0xF18, 0x00000000     0xF1C, 0x00000000      0xF20, 0x00000000     0xF24, 0x2F003100     0xF28, 0x33003400     0xF2C, 0x3A003A00      0xF30, 0x3C003E00     0xF34, 0x00005000     0xF38, 0x00000000     0xF3C, 0x00000000      0xF40, 0x00000000     0xF44, 0x00000000     0xF48, 0x00000001     0xF4C, 0xD4000000      0xF50, 0x13001500     0xF54, 0x17001900     0xF58, 0x1D001F00     0xF5C, 0x21002200      0xF60, 0x3A000000     0xF64, 0x00009000     0xF68, 0x00000020     0xF6C, 0x00000000      0xF70, 0x0070006F     0xF74, 0x00000000     0xF78, 0x00000000     0xF7C, 0x00000000      0xF80, 0x00000000     0xF84, 0x00000000     0xF88, 0x00000000     0xF8C, 0x00000000      0xF90, 0x00000000     0xF94, 0x80000000     0xF98, 0x00000000     0xF9C, 0x31022F02      0xFA0, 0x33023102     0xFA4, 0x30023102     0xFA8, 0x2E022F02     0xFAC, 0x02020000      0xFB0, 0x10000003     0xFB4, 0x46444650     0xFB8, 0x45445142     0xFBC, 0x51445052      0xFC0, 0x46454544     0xFC4, 0x45434651     0xFC8, 0x44455045     0xFCC, 0x46455051      0xFD0, 0x45455146     0xFD4, 0x52505052     0xFD8, 0x52505246     0xFDC, 0x50464546      0xFE0, 0x51465042     0xFE4, 0x53464650     0xFE8, 0x52515145     0xFEC, 0x50454546      0xFF0, 0x45505142     0xFF4, 0x46464646     0xFF8, 0x52515350     0xFFC, 0x00000000        Data:  0x00000009 0x0000000a 0x0000000b 0x0000000c 0x0000000e 0x0000000f 0x00000010 0x00000011 0x00000025  ######################################################## Also I' ve noticed that Lane 8 is probed during calibration process, despite to that fact that ddr module is non-ecc and ecc is disabled in project settings.   Re: DDR4 calibration issues on LS1046 custom board 1.The QCVS does not support hardcoded RCW official, valid RCW has to be presented in the RCW source flash or SD card. Would you kindly program the RCW into the flash first, and then do the QCVS DDR validation. 2.Run the command below in the CCS: (bin) 42 % delete all (bin) 43 % config cc cwtap (bin) 44 % show cc (bin) 45 % ccs::config_chain {ls1043a dap sap2} (bin) 46 % display ::ccs::get_config_chain (bin) 47 % ccs::reset_to_debug Send the logs to me. 3.would you kindly share the schematics and confirm the layout follow the AN5097, Hardware and Layout Design Considerations for DDR4 SDRAM Memory Interfaces Thanks Re: DDR4 calibration issues on LS1046 custom board The problem was solved by updating to new version of QCVS(4.27.0)
查看全文
How to enable LVDS panel at uboot on iMX8M PLUS Hi, NXP Support Specialist. We're currently working on enabling an LVDS display in L6.12.20 yocto for an IMX8MP custom board. The LVDS display works well in kernel but uboot doesn't display logo, so we follow this website (https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/Add-i-MX8MP-LVDS-driver-in-uboot/ta-p/1434826) to add patch to uboot 2025.04 and still cannot display. Is there any advices or patch for L6.12.20 yocto bsp? The attachments below are current uboot log we get and dm tree. Graphics & Display Linux Re: How to enable LVDS panel at uboot on iMX8M PLUS Thank you for reply and suggestion, we can see the uboot logo now! Re: How to enable LVDS panel at uboot on iMX8M PLUS Hi @Mikw  Please make sure that you have defined the display timing in simple_panel.c if you are referring the 0001-L6.1.55-Add-i.MX8MP-LVDS-panel-demo.patch. The uboot log you provided shows that the ldb driver can't decode display timing. Best Regards, Zhiming
查看全文
CAN based WakeUp Transrecevier TJA1465 Hi  I am using TJA1465 CAN SIC transceiver with partial networking for CAN Based Wake up i have configure this with 500kbs bitrate and ID 0x18ff21b1 for CAN wake up using partial networking using SPI. But transreceiver wake ups for other bitrate also which is not configured in the Partial networking data rate and filter configuration register (address 031h). why does transreciever wake up for bitrate also other than configured.  below is the sample code   static void tja1465_configure_can_wakeup_ext_dlc0(void) { uint8_t mode_stat,sys_stat; printf("CAN Wakeup Config Enter \n" ); tja1465_read(REG_MODE_STATUS, &mode_stat); printf("Mode Status (0x070) = 0x%02X (%s)\n",mode_stat, mode_str(mode_stat)); tja1465_write(0x031, 0x14); /* WUF ID = 0x18FF21B1 *//*0x18FF0180* MASK 0x0000304D*/ tja1465_write(0x020, 0xB1); tja1465_write(0x021, 0x21); tja1465_write(0x022, 0xFF); tja1465_write(0x023, 0x18); /* WUF ID mask (match full 29-bit ID) */ tja1465_write(0x024, 0x00); tja1465_write(0x025, 0x00); tja1465_write(0x026, 0x00); tja1465_write(0x027, 0x00); tja1465_write(0x028, 0x05); tja1465_write(0x029, 0x00); tja1465_write(0x02A, 0x00); tja1465_write(0x02B, 0x00); tja1465_write(0x02C, 0x00); tja1465_write(0x02D, 0x00); tja1465_write(0x02E, 0x00); tja1465_write(0x02F, 0x00); tja1465_write(0x030, 0xC8); tja1465_write(0x011, 0x00); tja1465_write( 0x060, 0xFF); tja1465_write( 0x061, 0xFF); tja1465_write( 0x062, 0x04); tja1465_write(0x032, 0x03); uint8_t pn_status_reg; tja1465_read(0x073, &pn_status_reg); tja1465_read(0x071, &sys_stat); printf("PN Status (0x073) = 0x%02X (CPNS: %s),CPNERRS :0x%02X\n", pn_status_reg, (pn_status_reg & 0x20) ? "OK" : "Error",(pn_status_reg & 0x40)); printf("System Status(0x071) = 0x%02X\n", sys_stat); tja1465_write(REG_MODE_CTRL, MODE_SLEEP); usleep(3000); tja1465_read(REG_MODE_STATUS, &mode_stat); printf("Mode Status (0x070) = 0x%02X (%s)\n", mode_stat, mode_str(mode_stat)); tja1465_read(REG_SYS_STATUS, &sys_stat); printf("System Status(0x071) = 0x%02X\n", sys_stat); printf("CAN Wakeup Config Exit \n" ); } Re: CAN based WakeUp Transrecevier TJA1465 Hello Vivekananda Good day! I'm going to run tests to find the error and I'll get back to you as soon as I have an answer. Have a great day and best of luck. Re: CAN based WakeUp Transrecevier TJA1465 Hello Vivekananda Can you clarify what they mean with below green sentence on ‘other bitrates’, is this about CAN FD frames? But transreceiver wake ups for other bitrate also which is not configured in the Partial networking data rate and filter configuration register (address 031h). If it’s indeed CAN FD frames, then after the wake-up please check if PNFDER =1. If so, try changing below yellow line to: tja1465_write(0x032, 0x07). This will set PNECC = 1 and CAN FD frames would not increase the error counter anymore, PNFDER should stay 0 and the device does not wake up. The Application Notes (AN14388, which can be downloaded on our page) are showing an example SPI sequence for a PN configuration for your reference (section 4.2, pages 23-24). Please take a look. I hope this information has helped you, please let me know if you need help with anything else. Have a great day and best of luck.
查看全文
CAN UDSアップデートのためのS32K144統合ブートローダ構成 こんにちは、 私は、S32 Design Studio を使用して、S32K144 EVB 上の NXP Unified Bootloader ソース コードを操作しています。私の目的は、MCU にブートローダを統合し、UDS を使用して CAN 経由でアプリケーション ファームウェアを更新することです。ブートローダーをフラッシュする前に、ソース ファイルまたは構成を変更する必要があるかどうかを確認したいと思います。たとえば、CAN ID やボーレートなどの CAN パラメータを設定したり、S32K144 EVB の HAL/ドライバー移植ファイルを変更したりしますか?または、ブートローダーを何も変更せずにそのまま EVB にフラッシュして評価することはできますか? ブートローダをプログラミングした後、それが正しく実行されていることを確認し、CAN 経由でアプリケーションのフラッシュをテストしたいと思います。ブートローダ モードを強制する方法、ブートローダの実行を確認する方法 (UART ログ、CAN 応答、デバッガなど経由)、ブートローダがアプリケーションにジャンプする方法など、推奨される検証手順について説明していただけますか? さらに、正しいアプリケーション フラッシュ開始アドレス、リンカー設定、ベクター テーブルの場所、必要なスタートアップ コードの変更など、ブートローダーで動作するようにアプリケーション プロジェクトを構築する方法に関するガイダンスも必要です。最後に、S32K144 を使用した UDS フラッシュに使用される一般的な PC 側ツールと、CAN 経由で統合ブートローダをテストするための推奨 CAN インターフェース ハードウェアについて知りたいと思います。 Re: S32K144 Unified Bootloader Configuration for CAN UDS Update こんにちは@padmaja 、 残念ながら、コミュニティで共有されている統合ブートローダーは非公式のデモ版のみ提供されています。 現状のまま 保証もサポートもありません。現在、このデモをサポートするリソースがありません。ドキュメントを通じてご質問にお答えするよう努めますが、フォローアップが表示された場合は、代わりにサポート ページにお問い合わせください。 アプリケーションを MCU にフラッシュし、ECU-BUS 機能のテストを開始できます。CAN ID、ボーレートなどを変更する必要はありません。両方を参照できます 統合ブートローダ – ユーザーガイドとUDS ブートローダ実装ガイド。 Open Bus Toolを使用する前に、CANブートローダをMCUにダウンロードする必要があります。これは、S32DSを使ってプロジェクトをコンパイルすることで実行できます。また、コミュニティ投稿「 HOWTO: S32 Design Studioを使用してマイクロコントローラに個別のelf/srec/hexファイルをダウンロードする」に記載されているように、elf/binaryファイルをアップロードすることもできます。 Open Bus Toolを使用すると、CANバス経由でアプリケーションをダウンロードできます。PEAK CANバスインターフェースをサポートしています。APPプロジェクトは統合ブートローダパッケージに含まれています。 ツールで読み込む必要があるJSONファイルも存在します。このJSONファイルには、フラッシュドライバ(flash_api.bin)とAPPファームウェア(APPファームウェアのフォーマットはS19/hex/binary)に関する情報が含まれています。 よろしくお願いします、 ジュリアン
查看全文
こんにちは、NPU!i.MX 9でTFLiteモデルを実行 以下は、Pytorch と Tensorflow でシンプルなモデルをトレーニングし、i.MX93 Ethos-65 ニューラル プロセッシング ユニット (NPU) を使用してアプリケーションにデプロイするためのガイドです。 このガイドに従うと、次のことが達成されます。 MNISTデータセットでシンプルなCNNをトレーニングする モデルを tflite に変換し、量子化して i.MX93 NPU (Ethos-65) 用にコンパイルします。 モデルによって数字を描画および識別できる簡単なアプリケーションを実行します。 前提条件 このガイドに従うには次のものが必要です: Yocto イメージ、C++ の例では GTKMM3 のサポートが必要ですが、Python の例では事前にビルドされたイメージを使用できます。 i.MX93ボード Pythonの例を実行する アプリケーションの実装は Python と C++ の両方で提供されます。Pythonアプリケーションを使用する場合は、代わりに事前に構築された完全なイメージを使用できます。Python スクリプトをターゲットにコピーして、次のように実行するだけです。 # Running quantized example on the CPU ./run.py -m cnn_tf_quant.tflite # Running example on the Ethos NPU ./run.py -m cnn_tf_quant_vela.tflite -d /usr/lib/liblitert_ethosu_delegate.so 添付ファイルには事前に構築されたモデルが提供されていますが、モデルのトレーニングと生成に使用される手順とスクリプトも含まれています (以下を参照)。 GTKMM3 サポート付きのイメージのビルディング (C++ の例のみ) デモンストレーションに使用される GUI アプリケーションはGTKMM3 ( GTKライブラリの C++ ラッパー) で記述されているため、GTKMM3 をサポートするイメージが必要ですが、幸いなことに、これを Yocto イメージに簡単に統合できるレシピが既にあります。 イメージをビルドするには、 Yocto ユーザー ガイドの指示に従うだけです。この記事の執筆時点では最新の BSP は 6.12.49_2.2.0 なので、これを使用します。 ホストとインストールされたリポジトリですべての要件を設定したら、次のようにビルド環境を設定できます。 リポジトリ init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-walnascar -m imx-6.12.49-2.2.0.xml リポジトリ同期 ターゲットに応じてビルド ディレクトリを設定できるようになりました。例として、X11 をサポートする Wayland グラフィックスとiMX93 Freedomボードを使用します。 ディストリビューション=fsl-imx-xwayland マシン=imx93-11x11-lpddr4x-frdm ソース imx-setup-release.sh -b 93-frdm-xwayland ボードに合った MACHINE 構成を選択するだけです。 これでビルドを開始する準備がほぼ整いました。まだイメージに GTKMM3 サポートを追加する必要があります。conf/local.conf の下にある local.conf ファイルを変更し、次のコードを追加するだけです。 IMAGE_INSTALL:append = "gtkmm3" ビルド時に問題が発生しないように、gtkmm3 の前にスペースがあることを確認してください。ビルドはリソースを大量に消費するため、ビルド中にメモリ不足の問題が発生する可能性があります。一度にビルドを試みる同時レシピの数を制限するために、以下も追加することをお勧めします。 BB_NUMBER_THREADS="8" PARALLEL_MAKE="-j8" BB_PRESSURE_MAX_CPU ?= "50000" BB_PRESSURE_MAX_IO ?= "100000" BB_PRESSURE_MAX_MEMORY ?= "25000" その後、local.conf は次のようになります。 注意:ビルドを完了するには 500 GB 以上必要なので、マシンに十分なストレージ容量があることを確認してください。 これでビルドを開始できます。GTKMM アプリケーションをソースからビルドする場合は、利用可能な SDK が必要であり、次のように作成します。 bitbake imx-image-full -c populate_sdk 画像を作成するには、次のようにするだけです。 bitbake imx-image-full すべての Tensorflow Lite ライブラリとさまざまな例が含まれているため、完全なイメージが必要です。 ビルドが完了したら、ツールチェーンをインストールし、イメージをボードにフラッシュできます。 ツールチェーンをインストールするには: ./tmp/deploy/sdk/fsl-imx-xwayland-glibc-x86_64 -imx-image-full-armv8a-imx93-11x11-lpddr4x-frdm-toolchain-6.12-walnascar.sh その後、ツールチェーンを使用するたびに次の操作を実行します。 ソース /opt/fsl-imx-xwayland/6.12-walnascar-full-gtkmm3/environment-setup-armv8a-poky-linux イメージを SD カードにフラッシュするには: zstdcat imx-image-full-imx93-11x11-lpddr4x-frdm.rootfs.wic.zst | sudo dd of=/dev/mmcblk0 bs=1M conv=fsync これで、アプリケーションを構築し、いくつかのモデルをトレーニングしてデプロイする準備が整いました。 GTKMM3 ビルディング アプリケーション (C++) アプリケーションのソースはここにあります。また、ビルド済みのバイナリも提供されており、ここに添付されています。 アプリケーションには、マウスまたはタッチ ディスプレイを使用して数字を簡単に描画できる描画領域と、描画領域をクリアするためのボタンと、モデルの実行をトリガーして数字を予測するためのボタンの 2 つのボタンが含まれています。 最初からビルドするには、CMake と、GTKMM3 をサポートするツールチェーン (上記参照) が必要です。プロジェクトをビルドするには、次の手順に従ってください。 sudo apt install cmake git クローンhttps://github.com/ManRod2982/drawing_window_imx cd drawing_window_imx/drawing_window_cpp/ ソース /opt/fsl-imx-xwayland/6.12-walnascar-full-gtkmm3/environment-setup-armv8a-poky-linux cmake -B ビルド -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake cmake --build ビルド この後、ビルド ディレクトリの下に window というバイナリが作成され、それをターゲットの SD カードに簡単にコピーできるようになります。 Linux を使用している場合はファイルシステムがマウントされるので、バイナリをルート ディレクトリにコピーするだけです。 sudo cp build/window /media/user/root/root/ ボードへの接続がすでに確立されている場合も SCP を使用できます。 scp ビルド/ウィンドウ root@192.168.xx:/root そして、この後、ターゲット上でアプリケーションを次のように起動できます。 ./window -m model_path [オプション] -d delegate_path [オプション] -v アプリケーションでは次の 3 つのパラメータが受け入れられます。 モデルへのパス: -m または --model_path [オプション] デリゲートへのパス(存在する場合): -d または --delegate_path。指定されていない場合は、 XNN デリゲートを使用して CPU 上でモデルの実行が試行されます。 [オプション] 詳細フラグ。存在する場合、モデルはより多くの情報を出力します。 ここで、実行するモデルが必要です。 シンプルなCNNモデルのトレーニング このリリースの機械学習ユーザーガイドを見てみましょう。各デバイスで利用可能なコンピューティング エンジンに関するさまざまなフレームワークのサポートは次のとおりです。 Tensorflow Lite とLiteRT (Tensorflow Lite の最新リリースであり、今後リリースされる唯一のもの) は、i.MX9 ファミリのほとんどのコンピューティング エンジンで広くサポートされているフレームワークです。このガイドでは、例として C++ を使用し、LiteRT の現在のリリースでは Python のみがサポートされているため、Tensorflow Lite を使用しますが、インターフェースとプロセスはほぼ同じです。 環境の設定 サンプル リポジトリには、モデルをトレーニングして tflite 形式に変換するために使用されるさまざまな Python スクリプトが含まれています。次の手順を実行するには、python3 のインストールが必要です。 仮想環境を設定することをお勧めします。 python3 -m venv myenv ソース myenv/bin/activate pip インストール -r 要件.txt これにより、Tensorflow と Pytorch の両方に必要なすべてのパッケージがインストールされます。 Tensorflowでモデルをトレーニングする Tensorflow を使用すると、モデルを量子化して Tensorflow Lite に変換するための簡単なパスが可能になり、畳み込みニューラル ネットワーク (CNN) アーキテクチャは次のようになります。 model = tf.keras.models.Sequential([ tf.keras.layers.Input(batch_shape=(1, 28, 28, 1)), tf.keras.layers.Conv2D(16, 5, padding='same', activation='relu'), tf.keras.layers.Conv2D(32, 3, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.MaxPool2D(2, strides=(2,2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(100, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) train_tf.pyスクリプトを実行してモデルをトレーニングすることができます。通常のノートPCでトレーニングするには約 2 分かかり、テスト データセットで 99.05% の精度を達成します。フレームワークの詳細については、公式のTensorflow ドキュメントを参照してください。 スクリプトを実行した後、 eIQ ツールキットモデル ビジュアライザーまたはNetron.app を使用してモデルを視覚化できます。 i.MX93 には、重み、バイアス、入力が整数である必要があるArm Ethos-65 NPUが搭載されており、現在のモデルは float32 を使用しているため、モデルを量子化する必要があります。これを実現するには、モデルを量子化して tflite に変換する tf2quant_tflite.py を実行します。 整数の入力と出力を取り、重みとバイアスも量子化されており、ファイル サイズの違いが簡単に確認できます。 量子化モデルは 555 KB ですが、float32 モデルは 2.2 MB です。これは、float32 では重みとバイアスをそれぞれ保存するのに 4 バイトが必要なのに対し、量子化モデルでは 1 バイトしか必要ないからです。 これで、ターゲットで使用できるモデルができました。ただし、現状では、XNN デリゲートを使用して CPU 上で実行されます。モデルを実行するには、次のようにするだけです。 ./window -m cnn_tf_quant.tflite これで、Arm Ethos NPU 用に量子化モデルをコンパイルできるようになりました。eIQ ツールキットが使用されます。モデル ツールを使用してモデルを開きます。 量子化されたモデル(この場合は cnn_tf_quant.tflite)があるフォルダーに移動して開きます。モデルを視覚化できるはずです。オプション メニューをクリックして変換を選択します。 i.MX93 コンバータを選択すると、保存先フォルダも選択するように求められます。 宛先フォルダを選択した後、すべてがうまくいけば変換が完了し、Ethos で実行できるように最適化されたモデルを視覚化できるようになります。NPU でサポートされていない操作はすべて CPU によって表示および実行されます。この単純な例では、すべての操作は NPU によって実行されます。 そして、次のようにしてターゲット上でモデルを実行できるようになりました。 ./window -m cnn_tf_quant_vela.tflite -d /usr/lib/libethosu_delegate.so Pytorchでモデルをトレーニングする リポジトリには、畳み込みニューラル ネットワークを使用して MNIST データ セットをトレーニングするサンプル モデルが含まれています。モデル構造は次のとおりです。 NeuralNetwork( (cnn): Sequential( (0): Conv2d(1, 16, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (1): ReLU() (2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1)) (3): ReLU() (4): Dropout(p=0.2, inplace=False) (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (6): Flatten(start_dim=1, end_dim=-1) (7): Linear(in_features=5408, out_features=100, bias=True) (8): ReLU() (9): Dropout(p=0.2, inplace=False) (10): Linear(in_features=100, out_features=10, bias=True) ) ) Pytorch モデルは、Tensorflow lite (量子化なし) に簡単に変換して CPU 上で実行できます。また、 Open Neural Network Exchange モデル (ONNX)も同様です。ただし、最近リリースされたExecutorchは組み込みデバイス上の Pytorch モデル用の推論モデルであり、現在そのサポートが進められています。 Pytorch モデルは pytorch_model.py で定義されています。 #!/usr/bin/env python3 import torch from torch import nn # Define model class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.cnn = nn.Sequential( # Input 28x28x1, after padding 32x32x1, output 28x28x16 nn.Conv2d(in_channels=1, out_channels=16, kernel_size=5, padding=2), nn.ReLU(), # Input 28x28x16, output 26x26x32 nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3), nn.ReLU(), nn.Dropout(p=0.2), # Input 26x26x32, output 13x13x32 nn.MaxPool2d(kernel_size=2, stride=2), nn.Flatten(), nn.Linear(13*13*32, 100), nn.ReLU(), nn.Dropout(p=0.2), nn.Linear(100, 10) ) def forward(self, x): logits = self.cnn(x) return logits トレーニングは train_pytorch.py を実行して実行され、テスト データセットで 99.3% の精度を達成し、通常のノートPCで完了するまでに約 7 分かかります。フレームワーク自体とトレーニング プロセスの詳細については、公式のpytorch ドキュメントを参照してください。 その後、pytorch モデルは pytorch_model.pth に保存されますが、pytorch はグラフ情報ではなく重みとバイアスのみを保存します。保存したモデルをnetronまたはeIQ ツールキットモデル ビジュアライザーで視覚化すると、分離された重みとバイアスを観察できます。 モデルをより良く視覚化するために、スクリプトpytorch2onnx.pyを使用してONNX形式に変換するだけです。そして、Neutron 上でモデルのグラフを視覚化できるようになりました。 注: ONNX は量子化して量子化されたモデルを tflite に変換する方法も提供している可能性がありますが、onnx-tf のテストではツールが最新の Tensorflow フレームワークと同期していないようでした。Tensorflow で同様のモデルを作成し、量子化してエクスポートする方が簡単でした。 これでモデルを tflite にエクスポートできるようになりました。モデルは量子化されていないため、CPU (XNN デリゲート) 上で実行されます。エクスポートするには、 pytorch2tflite.py を実行し、エクスポートされたモデルを視覚化できるようになりました。 そして、次のようにしてこのモデルをターゲット上で実行できます。 ./window -m pytorch_cnn.tflite モデルのデプロイと実行 これで、数字を描画できるアプリケーションと、それらの数字を検出できるモデルができましたが、アプリケーションはそのモデルを実行して結果を取得できる必要があります。これが次のステップです。 ターゲット上でモデルを実行できるようにするには、次のことが必要です。 モデルをロードする tfliteインタープリターを作成する 外部デリゲートがある場合はロードする テンソルを割り当てる C++の例 ここでは最小限の例が提供されていますが、NPU でモデルを実行するために必要な外部デリゲートの読み込みは含まれていません。 必要なヘッダーは次のとおりです。 #include "tensorflow/lite/delegates/external/external_delegate.h" #include "tensorflow/lite/interpreter.h" #include "tensorflow/lite/interpreter_builder.h" #include "tensorflow/lite/kernels/register.h" #include "tensorflow/lite/model_builder.h" TFLite APIを使用して次のようにモデルをロードできるようになりました。 std::unique_ptr<:flatbuffermodel> model = tflite::FlatBufferModel::BuildFromFile(model_path); ここでインタープリターを作成する必要があります。そのためには、モデルだけでなく操作リゾルバーも必要です。 tflite::ops::builtin::BuiltinOpResolver resolver; std::unique_ptr<:interpreter> interpreter; tflite::InterpreterBuilder(*model, resolver)(&interpreter); デリゲートが必要な場合は、それを作成して実行グラフを更新し、インタープリターがサポートされている操作でデリゲートを呼び出すことを認識できるようにする必要があります。 // Create external delegate option and pass the delegate library TfLiteExternalDelegateOptions external_delegate_options = TfLiteExternalDelegateOptionsDefault(delegate_path); // Create the External Delegate. This will load the delegate. TfLiteDelegate *external_delegate = TfLiteExternalDelegateCreate(&external_delegate_options); // Add External Delegate into TFLite Interpreter to automatically delegate nodes. if (interpreter->ModifyGraphWithDelegate(external_delegate) != kTfLiteOk) { std::cerr << "Failed to add delegate" << std::endl; } これで、モデルにテンソルを割り当てることができます。 // Allocate tensors for the model if (interpreter->AllocateTensors() != kTfLiteOk) { std::cerr << "Failed to allocate tensors" << std::endl; } これで、モデルを使用して推論を実行する準備が整いました。 最後のステップは、入力バッファにデータを入力し、インタープリタを呼び出して、出力バッファから結果を取得することです。次の例では、float モデルを使用しています。 // Fill input buffers // Note: The buffer of the input tensor with index `i` of type T can // be accessed with `T* input = interpreter->typed_input_tensor (i);` float *input_tensor = interpreter->typed_input_tensor (0); std::memcpy(input_tensor, input.data(), input.size() * sizeof(float)); // Run inference if (interpreter->Invoke() != kTfLiteOk) { std::cerr << "Failed to invoke Interpreter!" << std::endl; return {}; } // Read output buffers // Note: The buffer of the output tensor with index `i` of type T can // be accessed with `T* output = interpreter->typed_output_tensor (i);` float *output_tensor = interpreter->typed_output_tensor (0); std::memcpy(output, output_tensor, output.size() * sizeof(float)); 私たちのサンプル アプリケーションでは、インタープリターの作成と推論の呼び出しは NnModel というクラスにラップされています。その実装はリポジトリで確認できますが、変更なしで float モデルと int8 モデルの両方を処理できます。 クラスはメイン ルーチン内でインスタンス化され、予測ボタンがクリックされるたびに推論が呼び出されます。 // Create model with parsed parameters NnModel nn(model_path, delegate_path, verbose); void Window::on_predict_clicked() { // Save screen to file std::cout << "Predict clicked!" << std::endl; // Call inference on NnModel depending on the type // the model expects int number; auto data_type = nn_.get_dtype(); switch (data_type) { case kTfLiteFloat32: { std::vector drawing = mouse_drawing.export_to_vector (28, 28, 255.0); std::vector output_vec_f = nn_.infer (drawing); number = get_max_index (output_vec_f); break; } case kTfLiteInt8: { std::vector drawing = mouse_drawing.export_to_vector (28, 28, 255.0); std::vector output_vec_int = nn_.infer (drawing); number = get_max_index (output_vec_int); break; } default: std::cerr << "Cannot handle input type: " << std::to_string(data_type) << std::endl; break; } std::string display = "You drew a: " + std::to_string(number); std::cout << display << std::endl; text_view.set_text(display); } Pythonの例 Python でインタープリターを作成するプロセスはほぼ同じですが、デリゲートが使用されている場合はそれをロードし、モデルをロードしてテンソルを割り当てる必要があります。 この例では、代わりに LiteRT が使用されていますが、API は同じままで、必要な変更は解釈されたものがどこからインポートされるかだけです。 次の最小限のコードを使用して、モデルと外部デリゲートを読み込むことができます。 from ai_edge_litert.interpreter import Interpreter # Create interpreter if delegate_path is not None: # attempt to load external delegate if provided (platform specific) try: from ai_edge_litert.interpreter import load_delegate delegate = load_delegate(delegate_path) self.interpreter = Interpreter(model_path=model_path, experimental_delegates=[delegate]) except Exception as e: raise RuntimeError(f"Failed to load delegate: {e}") else: self.interpreter = Interpreter(model_path=model_path) self.interpreter.allocate_tensors() これで使用できるインタープリターができました。入力テンソルを入力し、インタープリターを呼び出して、モデルからの結果を含む出力テンソルを取得するだけです。 # Set input input_details = self.interpreter.get_input_details()[0] self.interpreter.set_tensor(input_details['index'], input_data) # Run inference self.interpreter.invoke() # Get results out_details = self.interpreter.get_output_details()[0] output_data = self.interpreter.get_tensor(out_details['index']) これらの手順は、 nn_model.pyの下のラッパー クラスに含まれています。 モデルのベンチマーク リリースには、ランダムな入力を生成し、モデルで推論を実行するのにかかる時間を測定するための事前構築されたベンチマーク ツールが付属しています。以下は、i.MX93 でさまざまなモデルを実行した結果です。 ./benchmaark_model --graph=モデル --num_threads=コア数   CPU 1コア CPU 2コア NPU pytorch_cnn.tflite 1559.61米ドル 1023.22米ドル N/A cnn_tf_quant.tflite 585.37米ドル 379.69米ドル N/A cnn_tf_quant_vela.tflite N/A N/A 221.84米ドル これはもちろん単なる例ですが、専用ハードウェア上で実行すると推論速度が大幅に向上することがわかります。 以下は、Pytorch と Tensorflow でシンプルなモデルをトレーニングし、i.MX93 Ethos-65 ニューラル プロセッシング ユニット (NPU) と i.MX95 eIQ Neutron NPU を使用してアプリケーションにデプロイするためのガイドです。
查看全文
iMXRT1060 マイクロコントローラのマニュアルの一部の情報が不正確または不完全である可能性があります。 最近、i.MX RT1060 プロセッサ リファレンス マニュアル、Rev. 3、07/2021 の情報を考慮して、FlexPWM によって生成されたハードウェア トリガーを使用して取得シーケンスを実装するように ADC (iMXRT1062 - Teensy 4.1) をプログラミングしていました。 コミュニティによって確認され、マニュアルの次のバージョンで更新される可能性のある 2 つの問題に気づきました。 1 つ目は、XBAR1 でトリガーをルーティングするための構成を指します。マニュアルの 62 ページの表 4-5 - XBAR1 入力割り当てによると、トリガー信号 FlexPWM4_SM2_TRIG0 と FLEXPWM4_PWM2_OUT_TRIG1 は XBAR1_IN53 入力に関連付けられていますが、私のコードは XBAR1_IN54 入力を使用してのみ動作しました。コードはhttps://ernane-aac.github.io/Teensy-4.1--How-to-Configure-the-ADC-System/で入手できます。 2 番目の問題は、ユーザーがビット B2B = 0 を使用することを決定した場合の ADC_ETC_TRIG0_COUNTER レジスタのサンプル間隔構成に関係します。マニュアルでは、間隔遅延を次のように設定しています: Interval_delay = (SAMPLE_INTERVAL+1)*(PRE_DIVIDER+1)*ipg_clk。SO、アプリケーションのニーズを満たす SAMPLE_INTERVAL と PRE_DIVIDER のさまざまな組み合わせが存在します。このCASE、PRE_DIVIDER=0 を考慮すると、SAMPLE_INTERVAL は 271 以上である必要がありますが、コードは PRE_DIVIDER=0 では機能しませんでした。PRE_DIVIDER=1、SAMPLE_INTERVAL=136 に変更すると、コードは動作します。このコードは PRE_DIVIDER=1 以上の組み合わせでは機能しますが、PRE_DIVIDER=0 では機能しないことに注意してください。マニュアルに記載されているこれらのビットの機能に関する単なる説明を超えた何かがあるようです。コードはhttps://ernane-aac.github.io/Teensy-4.1--How-to-Configure-the-ADC-System/で紹介されているものと同じです。B2B (コメント) からサンプル間隔 (サンプル間隔と事前分割定義のコメント解除) に変更するだけです。 異なる結果になった場合はお知らせください。 Re: Some information in the iMXRT1060 microcontroller manual may be incorrect or incomplete. こんにちは@Ernane 、 弊社の製品にご興味をお持ちいただき、またコミュニティをご利用いただき誠にありがとうございます。 これら 2 つの質問をお寄せいただきありがとうございます。詳細を共有していただき感謝いたします。社内で確認させていただき、さらにご要望があればご連絡させていただきます。   よろしくお願いいたします。 メイリュー
查看全文
LED code example does not work I was following this example on my s32k116: https://www.nxp.com/design/design-center/training/TIP-GET-TO-KNOW-THE-USER-FRIENDLY-MBDT-D0609 I did exactly what was shown in the video to get the LED working. My code builds too. But the LED wont turn on when I turn the potentiometer. I have attached a picture of the board for reference. Kindly guide me on where I might be going wrong Re: LED code example does not work Hello, Please note that the video you mentioned uses another evaluation kit (S32K144EVB) and the pins might not be the same for S32K116. Did you check the schematic to see the pins used by the potentiometer and the LED? As a recommendation, try to use the FreeMASTER tool to visualize the data on the board. You have to add data store memory blocks to save the data from the ADC and the state of the LED. Please set them to Volatile (in order to see them in FreeMASTER).  Another variant is to use the S32 Design Studio to directly debug the application, by placing breakpoints at specific lines and see the values read from the potentiometer. Best regards, Sorin Bancila  Re: LED code example does not work I tried doing that but when I try to start a session on freemaster, it cannot detect the board information. And I set the block state ("pot_adc") as Volatile which is why is shows up as a symbol when I go to the symbol table preview . Here is the screenshot. I am not sure why the board is not responding
查看全文
i.MX8Mimi LPDDR4 ZQ0 および ZQ1 ZQ キャリブレーション リファレンス デザイン こんにちは、 ファイル SPF31399 では、R6 は DNP です。別のファイル SPF47712 も同じで、MT53D512M32D2DS はデュアルダイです。SO、R6 に 240 オームの抵抗器を配置する必要がありますか? どのビジョンが最新ですか? MT53D512M32D2DS は EOL になります。これを MT53E1G32D2FW に交換したいのですが、ハードウェアのどの部分を変更する必要があるか教えていただけますか?それとも、PCB を変更する必要がなく、完全に互換性があるのでしょうか? ありがとう! HW-オープンソース#i.MX8 mini HW-Open-Source Re: i.MX8Mimi LPDDR4 ZQ0 and ZQ1 ZQ calibration reference design こんにちは@Zack8 R6を接続する必要はありません。ZQ キャリブレーション抵抗は 1 つで十分です。 BR
查看全文
iMX RT700 EVK accessing SDIO Card Trying to access 1.8V SDIO card on RT700 EVK. Set jumpers JP65 and JP66 to 1-2 using a sample enhanced with debug statements. SDCARD fatfs freertos example. Card inserted. SDCARD fatfs freertos example. Card inserted. --- SD Card Init --- SD card init failed! Status: 1834 Possible causes: - Card doesn't support 1.8V signaling - Voltage switch failed - Card communication error Trying basic card detection... OCR: 0x 0 Flags: 0x 0 Re: iMX RT700 EVK accessing SDIO Card Hi @MikeAtPhantom , Thank you so much for your interest in our products and for using our community. Please carefully check the readme file. I did a test for you, the SDK demo runs okay. HW: MIMXRT700-EVK    JP65 1-2 connected SW:  mimxrt700evk_sdcard_fatfs_freertos_cm33_core0 SD:    SanDisk  Ultra   32G Please use Recommend SD Cards , and try to run the example again. Best Regards MayLiu
查看全文
EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 这个McuPGOOD_POLARITYControl配置项在该路径下找不到 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 我不确定你是否可以下载,你可以尝试一下,如果不可以,请联系你的代理商或者FAE来获取评估权限。 https://www.nxp.com/design/design-center/software/automotive-software-and-tools/real-time-drivers-rtd:AUTOMOTIVE-RTD Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 在哪可以下载30.0.0吗?30.0.0能打开29.0.0的工程吗? Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 我看这个版本适配的EB Tresos版本应该是30.0.0,不是你所使用的版本。 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 你这界面的风格不对阿,新版本的风格和之前旧的完全不一样的,你的界面还是老版本的风格。 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh ok,不客气 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 在下载界面有这样的提示,你要修改后缀 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 好像有点问题,运行setup提示没有安装包,可以解压EBtresosStudio_EBtresosStudio.zip后直接打开应用,但应用界面还是旧的: Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 这是30.0.0的界面,好像还是没有这个配置项。 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 已经可以了,感谢!
查看全文
调试工具在使用最新版 SDK_25_12_00 时显示为灰色,在使用旧版 SDK_25_03_00 时工作正常 运行 MCUXpresso IDE V25.6.136 版+ 带有 SDK_25_12_00 的 evkmimxrt685 板。调试开始时,所有调试工具(恢复...)都显示为灰色,无法运行项目。 使用旧版 SDK_25_03_00 可以正常工作,但使用 SDK_25_06_00 和 SDK_25_09_00 会出现同样的问题。 如何恢复调试工具 Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 你好,卡洛斯,包括 hello world 在内的所有示例都出现了这种情况。它总是停在"void ResetISR(void) 函数的第一行,即 startup_mimxrt685s.c 中的 __asm volatile ("cpsid i") 行(第 381 行)。文件。我正在尝试运行 evkmimxrt685_dsp_mu_polling_cm33。该示例在 25.03 版本中运行正常。之后的所有版本(06、09、12)都有这个问题。对于 24.03 之后的 SDK 版本,我是否需要在集成开发环境中进行一些更改?我有截图,但如何发布呢?谢谢@bobvr Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 你好,卡洛斯,我正在上传截图> 包括 hello world 在内的所有示例都出现了这种情况。它总是停在"void ResetISR(void) 函数的第一行,即启动目录下 startup_mimxrt685s.c 文件中的 __asm volatile ("cpsid i") 行(第 381 行)。它从未进入 main() 开始运行。 我试图运行 evkmimxrt685_dsp_mu_polling_ cm33。cm33。该示例在 25.03 版本中运行正常。之后的所有版本(06、09、12)都有这个问题。对于 24.03 之后的 SDK 版本,我是否需要在集成开发环境中做一些更改? 谢谢 bobvr Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 你好@bobvr 能否请您介绍一下您的计算机使用的是哪个操作系统?Linux、Windows 10 还是 Windows 11? 能否请您检查一下 EVK 的 BOOT_SEL 是否选择正确? Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 我正在戴尔 Alder Lake 台式机上运行 Windows 11。启动跳线 (JP1) 处于打开状态,根据手册(MIMXRT685-AUD-EVKUM 修订版 3-2023 年 7 月 21 日),这是默认设置。我想这就是您所说的"查看 EVK" 的 BOOT_SEL 的意思。谢谢 bobvr Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 你好@bobvr 感谢您分享您的设置细节。 能否请您对闪存进行一次大规模擦除,然后重新进行调试? 为此,请在快速启动面板上更改链接服务器操作 然后使用 LinkServer 探测器将其返回到调试模式。 如果在此过程中出现任何错误信息,请分享截图。 Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 卡洛斯,我试图用链接服务器进行大规模清除,但得到了错误信息--截图附后。 谢谢 Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 卡洛斯,谢谢。在此之前,我想让您知道,我一直使用世纪佳缘 J-Link 探头,使用世纪佳缘 J-Link 探头" 菜单选项可进行"清除闪存操作。我应该用它清除还是用你上面提到的链接服务器探针清除? Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 你好,卡洛斯,我使用 Segger J-Link 探头(不是链接服务器探头,因为该固件已被 Segger 固件覆盖)删除了闪存。 我知道我必须使用 Segger 探针来调试 ARM 内核和 HiFi4 DSP。我还将 Segger 固件更新到了最新的 8.98 版本。 我删除了调试启动文件,删除了工作区以在启动时生成一个新文件,还重新启动了板。还是同样的问题。 它说调试会话正在运行,但我无法调试。 正如我所说,03 之后的所有版本(06、09 和 12)都会出现这种情况。 它停在 startup_mimxrt685s.c 处文件。 在调试器控制台中,我确实看到了一条警告信息,但这可能是无害的。 "警告:无法将 "main "从主机编码 (CP1252) 转换为 UTF-32。 这种情况通常不会发生,请提交错误报告。 监测执行器 setrestartonClose=1 请告知下一步措施。谢谢 bobvr。 Re: Debug tools greyed out with latest SDK_25_12_00, work fine with older SDK_25_03_00 你好@bobvr 感谢您分享您正在使用的产品。 如果尝试使用链接服务器调试,问题是否仍然存在?如果您收到错误信息,请与我们分享。
查看全文
i.MX8MP 添加 HD3SS3220 Type-C 导致 LAN 唤醒失败 我正在开发 6.12.34 内核并修改内核设备树 imx8mp-evk.dts。 nxp-imx/imx-Manifest:i.MX 版本清单 (imx-linux-wal nascar) 当按如下方式在设备树中添加 hd3s3220 type-c 控制器时,WOL 失败了。 /{ connector { compatible = "usb-c-connector"; label = "USB-C"; data-role = "dual"; status = "disabled"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; hs_ep: endpoint { remote-endpoint = <&usb3_hs_ep>; }; }; port@1 { reg = <1>; ss_ep: endpoint { remote-endpoint = <&hd3ss3220_in_ep>; }; }; }; }; }; &iomux { pinctrl_hd3ss3220: hd3ss3220grp { fsl,pins = < MX8MP_IOMUXC_ECSPI2_MISO__GPIO5_IO12 0x140 >; }; }; &i2c2 { clock-frequency = <400000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c2>; status = "okay"; hd3ss3220@67 { compatible = "ti,hd3ss3220"; reg = <0x67>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_hd3ss3220>; interrupt-parent = <&gpio5>; interrupts = <12 IRQ_TYPE_LEVEL_LOW>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; hd3ss3220_in_ep: endpoint { remote-endpoint = <&ss_ep>; }; }; port@1 { reg = <1>; hd3ss3220_out_ep: endpoint { remote-endpoint = <&usb3_role_switch>; }; }; }; }; }; &usb_dwc3_1 { dr_mode = "otg"; hnp-disable; srp-disable; adp-disable; usb-role-switch; status = "okay"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; usb3_hs_ep: endpoint { remote-endpoint = <&hs_ep>; }; }; port@1 { reg = <1>; usb3_role_switch: endpoint { remote-endpoint = <&hd3ss3220_out_ep>; }; }; }; }; 调用挂起命令后,WOL 功能失败。 根据我的检查,唤醒功能是受支持的 root@imx8mpevk:~# ethtool -s eth0 wol g root@imx8mpevk:~# ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Full 100baseT/Full 1000baseT/Full Supported pause frame use: Symmetric Receive-only Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Full 100baseT/Full 1000baseT/Full Advertised pause frame use: Symmetric Receive-only Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Link partner advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Link partner advertised pause frame use: Symmetric Link partner advertised auto-negotiation: Yes Link partner advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Auto-negotiation: on master-slave cfg: preferred slave master-slave status: slave Port: Twisted Pair PHYAD: 1 Transceiver: external MDI-X: Unknown Supports Wake-on: ug Wake-on: g Current message level: 0x0000003f (63) drv probe link timer ifdown ifup Link detected: yes root@imx8mpevk:~# dmesg | grep -i wake [ 3.148381] imx-dwmac 30bf0000.ethernet: Wake-Up On Lan supported [ 13.933830] stmmac: wakeup enable root@imx8mpevk:~# cat /sys/class/net/eth0/device/power/wakeup enabled 但是 6.6.52 内核(imx-linux- scarthgap)上同样的设备树设置效果很好!! 谁能帮帮我? i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus Linux Re: i.MX8MP adding HD3SS3220 Type-C cause Wake on LAN failed 你好, 请尝试在 dts 中使用IRQ_TYPE_EDGE_FALLING。 致敬, Zhiming Re: i.MX8MP adding HD3SS3220 Type-C cause Wake on LAN failed 虽然将中断信号改为"IRQ_TYPE_EDGE_FALLING" ,但唤醒功能仍然不起作用。 目前,通过以下设置,唤醒功能运行良好。 / { connector { compatible = "usb-c-connector"; label = "USB-C"; data-role = "dual"; status = "disabled"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; hs_ep: endpoint { remote-endpoint = <&usb3_hs_ep>; }; }; port@1 { reg = <1>; ss_ep: endpoint { remote-endpoint = <&hd3ss3220_in_ep>; }; }; }; }; }; &i2c2 { clock-frequency = <400000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c2>; status = "okay"; hd3ss3220@67 { compatible = "ti,hd3ss3220"; reg = <0x67>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_hd3ss3220>; interrupt-parent = <&gpio5>; interrupts = <12 IRQ_TYPE_LEVEL_LOW>; wakeup-source; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; hd3ss3220_in_ep: endpoint { remote-endpoint = <&ss_ep>; }; }; port@1 { reg = <1>; hd3ss3220_out_ep: endpoint { remote-endpoint = <&usb3_role_switch>; }; }; }; }; }; &iomux { pinctrl_hd3ss3220: hd3ss3220grp { fsl,pins = < MX8MP_IOMUXC_ECSPI2_MISO__GPIO5_IO12 0x140 // USB_SW_INTn (AH20) >; }; }; &usb3_phy1 { fsl,phy-tx-preemp-amp-tune-microamp = <1800>; fsl,phy-tx-vref-tune-percent = <116>; status = "okay"; }; &usb3_1 { status = "okay"; }; &usb_dwc3_1 { dr_mode = "otg"; hnp-disable; srp-disable; adp-disable; usb-role-switch; role-switch-default-mode = "host"; snps,dis-u1-entry-quirk; snps,dis-u2-entry-quirk; status = "okay"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; usb3_hs_ep: endpoint { remote-endpoint = <&hs_ep>; }; }; port@1 { reg = <1>; usb3_role_switch: endpoint { remote-endpoint = <&hd3ss3220_out_ep>; }; }; }; }; 但如你所见,连接器的状态被设置为"disabled" ,这是为什么呢? 删除这一行后,唤醒功能就失效了。 Re: i.MX8MP adding HD3SS3220 Type-C cause Wake on LAN failed 嗨 @AlanWen 我个人认为,这个问题可能与内核通用元器件的升级有关,不应归因于 i.MX 相关的驱动程序。由于我没有相同的硬件平台,所以无法准确找出问题所在。 致敬, Zhiming Re: i.MX8MP adding HD3SS3220 Type-C cause Wake on LAN failed 但在 6.6.52 内核版本中,使用相同的设置,在没有连接器状态行的情况下,唤醒功能也能正常工作。 如下所示: / { connector { compatible = "usb-c-connector"; label = "USB-C"; data-role = "dual"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; hs_ep: endpoint { remote-endpoint = <&usb3_hs_ep>; }; }; port@1 { reg = <1>; ss_ep: endpoint { remote-endpoint = <&hd3ss3220_in_ep>; }; }; }; }; }; &i2c2 { clock-frequency = <400000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c2>; status = "okay"; hd3ss3220@67 { compatible = "ti,hd3ss3220"; reg = <0x67>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_hd3ss3220>; interrupt-parent = <&gpio5>; interrupts = <12 IRQ_TYPE_LEVEL_LOW>; wakeup-source; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; hd3ss3220_in_ep: endpoint { remote-endpoint = <&ss_ep>; }; }; port@1 { reg = <1>; hd3ss3220_out_ep: endpoint { remote-endpoint = <&usb3_role_switch>; }; }; }; }; }; &iomux { pinctrl_hd3ss3220: hd3ss3220grp { fsl,pins = < MX8MP_IOMUXC_ECSPI2_MISO__GPIO5_IO12 0x140 // USB_SW_INTn (AH20) >; }; }; &usb3_phy1 { fsl,phy-tx-preemp-amp-tune-microamp = <1800>; fsl,phy-tx-vref-tune-percent = <116>; status = "okay"; }; &usb3_1 { status = "okay"; }; &usb_dwc3_1 { dr_mode = "otg"; hnp-disable; srp-disable; adp-disable; usb-role-switch; role-switch-default-mode = "host"; snps,dis-u1-entry-quirk; snps,dis-u2-entry-quirk; status = "okay"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; usb3_hs_ep: endpoint { remote-endpoint = <&hs_ep>; }; }; port@1 { reg = <1>; usb3_role_switch: endpoint { remote-endpoint = <&hd3ss3220_out_ep>; }; }; }; };
查看全文
Connection problem with MCXN647 (Ee(42) error) Hi, I am having a problem with my FRDM-MCXN947 . Whenever I try to debug or flash my project, I get this error : I don't know if it's related, but it started when I changed this line in a while(1) loop to increase its frequency : SDK_DelayAtLeastUs(30000, SystemCoreClock); -> SDK_DelayAtLeastUs(10000, SystemCoreClock); I didn't update before the problem occurred, but I updated LinkFlash afterwards and it didn't solve anything. I already tried SPT erase but it didn't work. (Maybe I did it wrong.) On the SPT, after activating ISP mode, I was able to perform the “build image” and “write image” operations, but erasing still does not work. Thank you in advance for your help. PS: Please excuse my English and technical vocabulary, I am just starting this project at engineering school. Boot ROM|Booting | Flash Clock|Timers MCXN USB Re: Connection problem with MCXN647 (Ee(42) error) Hi @Peter-D  Please try using the Flash Programmer inside the SPT tool to erase and program a blinky SDK demo, and check whether it works properly. For details, please refer to the video in the attachment. If these steps work well but you still cannot debug with the onboard debugger, please use an external debugger to test. If you still have issues, please feel free to contact me. Thank you. BR Alice Re: Connection problem with MCXN647 (Ee(42) error) Hi @Alice_Yang, Thank you very much for your reply. I followed the instructions in the video, and the method works to make the LED flash. However, I get the same error when I return to the debugger from the MCUXpresso IDE. If the problem comes from the onboard debugger, I don't think I'll buy an external debugger such as PEMicro or SEGGER J-Link (if that's what you were referring to) especially since the board I'm using was lent to me at school. If I can't find a solution, I'll continue to use the flash programmer, which also works for my project, and I'll ask my professors if they have an external debugger. Best regards, Peter Re: Connection problem with MCXN647 (Ee(42) error) Hello @Peter-D  I’m not sure if the debugger on your board is actually broken. Please try updating the debugger firmware by following the instructions here: https://docs.nxp.com/bundle/UM12018/page/topics/Updating_MCU_Link_firmware.html  After the update, power cycle the board, create a new workspace in MCUXpresso IDE, import a fresh SDK demo, and try debugging again. It would be better if you could take a video and share it with me. I’ll help you check it. Thank you.     BR Alice Re: Connection problem with MCXN647 (Ee(42) error) Hello @Peter-D Thanks for your video. Please delete the .launch file (in below picture)and erase your board again. Use the Debug button shown in the picture below to start debugging. If it still doesn’t work, I recommend replacing the board. By the way, I will be on New Year holiday and will return on January 5th. If you still have questions, please contact me on that day. Thank you for your understanding, and Happy New Year! BR Alice Re: Connection problem with MCXN647 (Ee(42) error) Hello @Alice_Yang Thank you for your reply. I updated LinkServer as suggested, but I think I already had it after the problem appeared. I tried the update again anyway, then power-cycled the board, created a new workspace, and imported a demo project, but I am still getting the same Ee(42) error when trying to debug. I have recorded a short video showing the process, which I have attached. Thank you for your help, and I wish you a happy new year. Best regards, Peter
查看全文
imx95 low power mode I am working on a custom i.MX95 board running Linux 6.12 (Yocto-based). I am facing a suspend-to-RAM (deep sleep) failure related to the USB3 host controller. When executing echo mem > /sys/power/state, the system aborts suspend with xhci-hcd: WARN: xHC CMD_RUN timeout followed by PM: failed to suspend async: error -110. The issue occurs consistently when USB host mode is enabled, even with no active USB traffic. I am using a fixed 5V VBUS regulator controlled by a GPIO, and the USB3 controller, PHY, clocks, and power-domains are defined in the DTS (attached). My requirement is to fully power off USB VBUS during low power mode while allowing the system to enter deep sleep successfully. I have attached the full suspend/resume dmesg logs and the relevant USB-related DTS nodes for reference. I would like guidance on the correct DTS and/or driver-side handling required to avoid the xHCI suspend timeout on i.MX95. Re: imx95 low power mode In custom board iam using fusb302 but not enabled as usb3.0 , we are using it as usb2.0 . but when entering into deep sleep ( echo mem > /sys/power/state ) The error is occuring in xhci-hcd driver. Test Setup: • SoC: i.MX95 • OS: Yocto Linux (kernel 6.x, NXP BSP) • USB Mode: Host (xHCI, USB3) • Connected Device: USB flash drive (Mass Storage) Boot the board normally. Connect a USB storage device to the USB3 host port. Verify enumeration using lsusb and confirm device is accessible. Enter low power mode using: echo mem > /sys/power/state After this step itself it is showing error. Resume the system using the configured wake-up source (power button/ GPIO). After resume, observe that the USB device either: is not detected, or shows xHCI / DWC3 related errors in dmesg, or requires USB re-plug to work again. ERROR LOGS : echo mem > /sys/power/state [ 117.057281] PM: suspend entry (deep) [ 117.066009] Filesystems sync: 0.005 seconds [ 117.071209] Freezing user space processes [ 117.076800] Freezing user space processes completed (elapsed 0.001 seconds) [ 117.083781] OOM killer disabled. [ 117.087011] Freezing remaining freezable tasks [ 117.132725] Freezing remaining freezable tasks completed (elapsed 0.041 seconds) [ 117.140164] printk: Suspending console(s) (use no_console_suspend to debug) [ 117.156868] sd 0:0:0:0: [sda] Synchronizing SCSI cache [ 117.267552] xhci-hcd xhci-hcd.2.auto: WARN: xHC CMD_RUN timeout [ 117.267611] xhci-hcd xhci-hcd.2.auto: PM: dpm_run_callback(): platform_pm_suspend returns -110 [ 117.267631] xhci-hcd xhci-hcd.2.auto: PM: failed to suspend async: error -110 [ 117.267702] PM: Some devices failed to suspend, or early wake event detected [ 117.268017] hub 1-0:1.0: hub_ext_port_status failed (err = -108) [ 117.268044] usb usb1-port1: cannot disable (err = -108) [ 117.516365] PM: resume devices took 0.248 seconds [ 117.570639] OOM killer enabled. [ 117.573777] Restarting tasks ... done. [ 117.575261] sd 0:0:0:0: [sda] Test Unit Ready failed: Result: hostbyte=0x01 driverbyte=DRIVER_OK [ 117.578423] random: crng reseeded on system resumption [ 117.587117] sda: detected capacity change from 120164352 to 0 [ 117.598136] PM: suspend exit -sh: echo: write error: Connection timed out Re: imx95 low power mode Could you share us the details steps, that we can reporcuce it on our EVK Board? Thanks Re: imx95 low power mode Hi @kannappan , OK, we are going to have the New Year's Day holiday. when I back to office I will try it on our board and then give your reply. Wish you have a nice day Best Regards Rita Re: imx95 low power mode Hi @kannappan , Sorry for too busy this week, I will test it for you next week and share the result to you. Wish you have a nice day Best Regards Rita Re: imx95 low power mode HI @Rita_Wang , Is there any reply for the above issue. Best Regards Kannappan
查看全文
TMU 导致 LS1046a CPU 在 -40C 的低温室下 RESET 我们有一块基于 LS4046a 的板正在零下40摄氏度的温度箱中进行测试,系统已关闭,报告“温度过高”,如下所示。我在散热驱动器中添加了日志代码来报告关机时的确切温度,关机温度为 101 度,这让我们感到困惑,板的低温室低于 -40 摄氏度,为什么 TMU 报告了临界高温? [2025-12-23 15:41:31.267] root@E7-2:~# [ 2435.041159] thermal thermal_zone0: ddr-controller:达到临界温度十六进制 0x18a88,十进制 101000,无符号 101000,正在关闭。 [2025-12-23 15:46:04.940] [ 2435.053636] 重新启动:硬件保护关闭(温度过高) Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 我与 AE 团队讨论了这个问题,请参阅他们的以下更新。 TMU 的指定测量范围为 0~110C。-40℃超出范围,寄存器值可能会被软件误读。 客户可参阅 AN12310 和 LSDK 用户指南第 11.3 章。 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 我还编写了一个脚本,在 -40C 环境下轮询温度寄存器(TRITSR0 - TRITSR4),大部分时间 V 位为 0(无效),但不时 V 位设置为 1(有效),当 V 位为 1 时,TEMP 字段显示高温,见下图,温度寄存器报告 0x65000080,其中 0x80 表示 V 位为 1,0x65 是温度值,十进制为 101 度。 temp_val=0x65000080, (temp_val& 0xff000000)=0x65000000, (temp_val& 0x000000ff)=0x00000080 为什么 TRITSR 寄存器的 V 位被设置为 -40C 下有效,从而误导软件读取无效温度? Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 请参阅 AE 团队提供的以下信息。 这不是错误,而是预期行为。 LS1046A TMU 的指定测量温度范围有限(约 0 °C 至 110 °C)。在 -40 °C 时,TMU 的工作温度超出其有效范围。 当温度超出范围时,TMU 仍会偶尔断言 V(有效)位,这意味着转换已完成,尽管转换结果没有物理意义。 与此同时,TMU 状态寄存器(TSR)中的 ORL(低电平超出范围)标志也会被确认。 如果软件仅检查 V=1 而忽略 ORL=1,它可能会将该值误解为正常温度(例如,0x65 → 101 °C),并触发错误的超温关机。 建议 在使用 TRITSR 温度值之前,请务必检查 ORL 标志。 如果 ORL=1,则将温度读数视为无效,与 V 位无关。 或者,推迟启用 TMU 监控,直到 SoC 温度恢复到有效范围内(≥0 °C)。 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 我检查了 ORL 位,似乎该位在检测超出范围的低温时并不可靠,如下所示 我的显卡在室温下运行,TMU 的温度约为 58 摄氏度。 root@E7-2:~# cat /sys/class/thermal/thermal_zone0/temp 58000 root@E7-2:~# cat /sys/class/thermal/thermal_zone1/temp 59000 读取 TMU 模式寄存器 (TMR) 和 TMU 状态寄存器 (TSR),启用 TMU 模式并钳位 ORL root@E7-2:~# devmem 0x1f00000 w 0xFFFF008C root@E7-2:~# devmem 0x1f00004 w 0x000000A0 然后我禁用了 TMU 监控模式,发现 ORL 已被清除 root@E7-2:~# devmem 0x1f00000 w 0xFFFF008C root@E7-2:~# devmem 0x1f00000 w 0xFFFF000C #disable the monitoring mode root@E7-2:~# devmem 0x1f00000 w 0xFFFF000C root@E7-2:~# devmem 0x1f00004 w #ORL bit was cleared 0x00000020 然后我重新启用了 TMU 监控模式,ORL 位又被钳位 root@E7-2:~# devmem 0x1f00000 w 0xFFFF008C root@E7-2:~# devmem 0x1f00004 w 0x000000A0 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber TMU 温度测量范围为 0-125°C。 RM 表示寄存器 ORL - 检测到超出范围的低温测量值。温度传感器检测到的温度读数低于 0 摄氏度的最低可测量温度。TMU监控(重新)启用后,该位将自动清零。 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 该卡处于室温下而不是环境低于 0 摄氏度,TMU 报告 56 摄氏度,而 ORL 仍然钳位 ORL 表明低温超出范围,这没有道理,为什么即使卡在室温下也钳位 ORL 位?如前面的评论所示,我重新启用了 TMU 监控,重新启用 TMU 监控模式后,ORL 位仍处于钳位状态。 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 这个问题有什么新进展吗? 上周,我们在另一种具有相同 CPU 的显卡上发现了同样的问题,我们想知道是否有解决方法,谢谢。 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 请参考我在 LS1046ARDB u-boot 上的验证结果。 => mw 0x1f000000x00F8000C => mw 0x1f000000x00F8008C => md 0x1f00100 1 01f00100:25000080...% => md 0x1f00004 1 01f00004:00000000.... = md 0x1f00004 1 01f00004:00000000.... => Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 请使用以下值配置寄存器0x1f00000。 => mw 0x1f00000 0x00F8000C => mw 0x1f00000 0x00F8008C Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 将 TMU 寄存器的 RESERVED 位(bits21 ~ bit31)设置为 0 似乎可以清除我的卡上的 ORL 位。如果这些保留位为 1,则无法清除 ORL,不知道为什么。总之,我会在 TMU 驱动程序中将这些位初始化为 0,然后在读取温度之前检查 ORL 位。谢谢 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber 是的,谢谢,我做到了,而且将再次进行 -40C 下的热测试,以检验代码的更改,希望它能通过测试。 Re: TMU caused LS1046a CPU reset at a -40C low temperature chamber root@LG871:~# devmem 0x1f00000 w 0x00F8008C //保留位为 0,则未钳位 ORL 位 root@LG871:~# devmem 0x1f00004 w 0x00000080 root@LG871:~# root@LG871:~# devmem 0x1f00000 w 0xFFF8008C //保留位为 1,然后 ORL 位钳位为 root@LG871:~# devmem 0x1f00004 w 0x000000A0
查看全文
RT1170 使用同步动态随机存取存储器(SDRAM) 处理堆和堆栈 我按照https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/RT1170-debugging-when-application-is-built-for-SDRAM/m-p/1374145/highlight/true#M17210和 RT1170_BriefOverview_v210.pdf 中提到的步骤进行了操作。 我正在开发一个需要大量头部内存的应用程序。 按照提供的步骤,使用 RT1170_BriefOverview_v210.pdf 中提到的修改刷新 hello world,我可以在调试模式下使用同步动态随机存取存储器(SDRAM)。 但是在这种变化之后,同步动态随机存取存储器(SDRAM)也用于存储代码。 在我的应用程序中,我希望代码存储在闪存中,而 BOARD_SDRAM 仅用于堆和堆栈部分。 我将把我的应用程序闪存到闪存中,该应用程序的堆和栈部分将使用 BOARD_SDRAM。 请指导我进行所需的更改。 i.MX-RT1170 MIMXRT1170-EVK Re: RT1170 Use SDRAM for Heap and Stack 按照恩智浦支持中的步骤,我得以在 RT1170 EVKB 上加载多核项目(如何在 RT1176 & [RT1170] 中调试双核项目)。 当我能够从同步动态随机存取存储器(SDRAM)运行后,在 Master/Core M7 项目中,我进入了项目设置-> C/C++ 版本-> 设置-> 托管链接器脚本并禁用了 " 将应用程序链接到 RAM " 设置。 然后我得以刷新二进制文件,并确认应用程序在 RESET 时从闪存运行,并成功地将 M4 应用程序从闪存复制到同步动态随机存取存储器(SDRAM)。 Re: RT1170 Use SDRAM for Heap and Stack 你好@sibrain-himanshu、 感谢您对 NXP MIMXRT 系列的关注! 问题的根本原因在于您使用了这个步骤6: 这会将整个图像加载到 RAM 中执行,也是生成非 XIP 图像的选项。 对于您的应用场景,在启用和配置同步动态随机存取存储器(SDRAM)之后,您只需要在 MCUXpresso IDE 中正确配置 Head/Stack: 致以最诚挚的问候, Gavin Re: RT1170 Use SDRAM for Heap and Stack 你好@Gavin_Jia 在步骤 6 的基础上做了你建议的更改,并在预处理器中使用了 "XIP_BOOT_HEADER_DCD_ENABLE=1" 宏之后,我的固件使用了同步动态随机存取存储器(SDRAM)。 但我的应用程序是用 C++ 编写的,所以我最初对它进行了与 hello world C 应用程序相同的修改,但没有成功。 因此,还在 C++ 预处理器宏中添加了"USE_SDRAM" 和"XIP_BOOT_HEADER_DCD_ENABLE=1" 宏,结果成功了。 C++ 预处理器宏 C 预处理器宏 感谢您的帮助。
查看全文
s32m24x PMC_AE 监测自检问题 问:我按照这个步骤对其进行了配置。但是在完成第 5 步之后设置 触发信号=10,为什么不在这里 RESET? Re: S32M24x PMC_AE Monitor self check question 你好 写入触发信号后,MONCHECK 寄存器的内容是什么? 因为 RESET 应该在写入 TRIGGER 之后立即触发。 顺祝商祺! Peter Re: S32M24x PMC_AE Monitor self check question 感谢您的反馈。 我检查了我的设计,我认为主要问题在于:我无法读取 MONCHECK 的值,也就无法完成功能描述。 详情如下: 开机后,如果我按如下方式读取 MONCHECK,则返回值始终是 E_NOT_OK,我无法检查 DONEF 和触发信号的值。为什么我读不到? ret = Ae_ReadRegister((uint32)&(IP_PMC_AE->MONCHECK),32,&data); 如果我将 MONCHECK 写入 PMC_AE_MONCHECK_TRIGGER(2),如下所示,那么我就可以读取它,并且与我设置的值相同。 /*读取 MONCHECK,检查 DONEF=0 和 触发信号=10*/ ret = Ae_ReadRegister((uint32)&(IP_PMC_AE-)>MONCHECK), 32,&data); 如果((data&(PMC_AE_MONCHECK_DONEF_MASK|PMC_AE_MONCHECK_TRIGGER_MASK))!=PMC_AE_MONCHECK_TRIGGER(2)) { data = PMC_AE_MONCHECK_TRIGGER(2); ret = Ae_WriteRegister((uint32)&(IP_PMC_AE-)>MONCHECK), 32, data); } /*写入触发信号 = 01*/ data = PMC_AE_MONCHECK_TRIGGER(1); ret = Ae_WriteRegister((uint32)&(IP_PMC_AE-)>MONCHECK), 32, data); ret = Ae_ReadRegister((uint32)&(IP_PMC_AE-)>MONCHECK), 32,&data); Re: S32M24x PMC_AE Monitor self check question 你好 开机后,如果我按如下方式读取 MONCHECK,则返回值始终是 E_NOT_OK,我无法检查 DONEF 和触发信号的值。为什么我读不到? 能否通过调试器手动检查? 只需在开始时设置 while/decision 循环,并通过调试器直接读取寄存器,即可确定寄存器的值。 我不熟悉你们的驱动程序,所以无法判断它是否正确检查。 我会在这里进行测试,然后把结果告诉你们。 顺祝商祺! Peter 顺祝商祺! Peter Re: S32M24x PMC_AE Monitor self check question 初始化芯片后,我通过调试器手动进行了如下检查,结果始终是 E_NOT_OK。顺便说一下,我们的驱动程序基于 RTD( SW32K1_S32M24X_RTD_R21-11_3.0.0_D2503)。即使我使用示例项目(Ae_Handler_Faults_Example_DS_001_S32M244)再次进行测试,问题也是一样。 Std_ReturnType ret = E_NOT_OK; while(ret == E_NOT_OK) { ret = Ae_ReadRegister((uint32)&(IP_PMC_AE->MONCHECK), 32,&data); } Re: S32M24x PMC_AE Monitor self check question 你好 我仔细查看了 AE 的编程,但在执行测试时却毫无进展。 这需要更多的时间来创建一个示例。 如需申请支持,请在 NXP.com 上提交申请。 如果有时间,我将在一月份创建一个工作示例,作为我的副业。 顺祝商祺! Peter Re: S32M24x PMC_AE Monitor self check question 谢谢,我已收到,案件编号是:00755819
查看全文