Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
RT1170 Octal闪存启用 RT1170 Octal闪存启用 1.摘要 MIMXRT1170-EVK 硬件可直接支持两种类型的闪存:QSPI 闪存 IS25WP128 和八位闪存 MX25UM51345GXDI00。默认使用 QSPI 闪存,因此相关 SDK 的闪存配置块 (FCB) 以及一些 IDE 调试器下载的闪存驱动程序也默认针对 QSPI 闪存。在实际使用中,一些客户需要在 RT1170 上使用八位闪存,但在将 EVK 硬件修改为八位闪存 MX25UM51345GXDI00 后,他们可能会遇到各种问题,如下载问题、启动问题、调试问题,以及当闪存为空或闪存中有有效的启动代码时,下载结果不同等等。 本文将基于NXP官方的MIMXRT1170-EVK REV C1,修改板载闪存硬件,将QSPI闪存更换为八位闪存MX25UM51345GXDI00,并修改SDK项目FCB,进行ROM API测试,下载相关工具,修改调试器相关的闪存加载程序,并使用不同的IDE进行测试,以便需要的客户可以参考。本文不仅适用于EVK,还适用于RT1170+Octal闪存MX25UM51345GXDI00与客户定制电路板的组合。 图片 1 2. 硬件修改 要将 MIMXRT1170-EVK 板卡的闪存修改为八位闪存,需要断开 QSP I闪存引脚,并连接八位闪存引脚,相关修改点如下: OPTION2:使用八位闪存(安装 R381/R378/R382/R389/R402/R377/R388/R391,不安装 R380/R399/R386/R390/R392/R385) 图片2 八位闪存的 BOOT_CFG 引脚配置如下: 图片3 图片4 在修改硬件相关电阻以选择八位闪存后,应将 SW1、SW2 配置为内部启动,并从八位闪存启动,然后由软件部分进行控制。 3. 八进制闪存 APP FCB 3.1 测试从 RAM 运行的 SDK ROM API 为了验证板卡硬件能否从八位闪存运行,我们可以测试 SDK 附带的 fsl_romapi 项目: \SDK_2_12_0_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\fsl_romapi\cm7 请注意,不能直接测试默认项目,因为该项目配置是针对 QSPI 闪存的,而不是八位闪存。如果需要使用八位闪存,客户需要先修改代码,并添加 GPIO 来控制 Flash_RST 引脚,该引脚用于重置八位闪存。option0,1 的值需要修改为八位闪存的值。 3.1.1 八位闪存选项值     图片 5 我们可以使用以下 option0 进行测试,无需配置option1,因为八位闪存连接到主引脚。 option0= 0Xc0400007, option1 = 0 //query_pad =1, cmd_pad=1,133MHz option0= 0Xc0433007,option1 = 0 //query_pad =8,cmd_pad=8,133MHz option0= 0Xc0403007,option1 = 0 //query_pad =1,cmd_pad=8,133MHz 3.1.2 fsl_romapi 项目测试   ROM API 项目的修改代码如下,在调用 ROM_FLEXSPI_NorFlash_GetConfig API 之前,需要先使用 GPIO 重置外部八位闪存,因此,这里添加了 Flash_RST=GPIO_AD_03=GPIO09_IO02 引脚的 GPIO 配置。 Pinmux.c 相关代码: gpio_pin_config_t gpio9_pinP15_config = { .direction = kGPIO_DigitalOutput, .outputLogic = 1U, .interruptMode = kGPIO_NoIntmode }; GPIO_PinInit(GPIO9, 02U, &gpio9_pinP15_config); IOMUXC_SetPinMux( IOMUXC_GPIO_AD_03_GPIO9_IO02, 0U); IOMUXC_SetPinConfig( IOMUXC_GPIO_AD_03_GPIO9_IO02,//OD,it is a workaround for EVK HW bug 0X12); Flexspi_romapi.c 添加了代码: static serial_nor_config_option_t option_1bit = { .option0.U = 0xc0400007U, .option1.U = 0U, }; static serial_nor_config_option_t option_8bit = { .option0.U = 0xc0433007, .option1.U = 0U, }; static serial_nor_config_option_t option_1_8bit = { .option0.U = 0xC0403007, .option1.U = 0U, }; GPIO_PinWrite(GPIO9, 02U, 0U); // Delay some time to reset external flash with Flash_RST pin for (uint32_t i = 0; i < 60000; i++) __asm volatile ("nop"); GPIO_PinWrite(GPIO9, 02U, 1U); status = ROM_FLEXSPI_NorFlash_GetConfig(FlexSpiInstance, &norConfig, &option_8bit); if (status == kStatus_Success) { PRINTF("\r\n Successfully get FLEXSPI NOR configuration block with option_8bit\r\n "); } else { status = ROM_FLEXSPI_NorFlash_GetConfig(FlexSpiInstance, &norConfig, &option_1_8bit); if (status == kStatus_Success) { PRINTF("\r\n Successfully get FLEXSPI NOR configuration block with option_1_8bit\r\n "); } else { status = ROM_FLEXSPI_NorFlash_GetConfig(FlexSpiInstance, &norConfig, &option_1bit); if (status == kStatus_Success) { PRINTF("\r\n Successfully get FLEXSPI NOR configuration block with option_1bit\r\n "); } else { PRINTF("\r\n Get FLEXSPI NOR configuration block failure!\r\n"); error_trap(); } } } 测试结果为: 图片6 图7 从测试结果中我们可以看到,使用 GPIO 重置外部 flash 后,实际使用的选项值为: option0= 0xc0403007,option1 = 0 //query_pad =1,cmd_pad=8,133MHz 它可以成功读取SFDP,将闪存配置数据获取到norConfig中,然后使用这些值配置flexSPI模块,最后实现八位闪存相关地址区域的擦除-写入-读取-擦除操作。 从上述测试结果可以看出,修改后的硬件完全正常工作。请注意,由于我们无法确认外部闪存硬件是否正常工作,因此该项目的FCB仍然是QSPI闪存的默认设置,而不是八位闪存。因此,在测试此fsl_romapi项目时,建议从RAM而不是外部闪存运行它。 下图展示了如何从内部 RAM 运行项目,而不是直接下载到闪存: 图片8 在这里,对于配置,我们还有一个需要注意的点,为什么要将 GPIO 引脚 Flash_RST:GPIO_AD_03 配置为 OD(开漏)? 这是由于当前的 MIMXRT1170-EVK 硬件存在一个缺陷,因此采用这种 OD 配置作为临时解决方案。八位闪存 MX25UM51345GXDI00 的电源电压为 1.8V,但 GPIO_AD_03 的组电压为 3.3V,这两个模块之间没有电压转换硬件,因此会出现以下情况: a) 默认情况下,GPIO_AD_03 为输入模式,该引脚具有内部下拉 (PD) 35K 电阻,并通过外部上拉 (PU) 10K 电阻连接到 1.8V,因此 Flash_RST=1.8V*35K/(10K+35K)=1.4V,该电压也可用作使能信号。 对于正常启动,由于 ROM 未控制八位闪存的 Flash_RST 引脚,因此在实际使用中,该引脚可由任意引脚自由选择。因此,复位引脚默认为输入,电压为 1.4V,可启用八位闪存,无影响。 b) 当需要控制八位闪存复位时,需要使用 GPIO 控制 GPIO_AD_03 引脚。若要输出 0,则正常。但若要输出高电平,使用内部上拉电阻时,将向 Flash_RST 引脚输出 3.3V 电压。该电压已高于八位闪存的 1.8V,且八位闪存数据手册规定最大电压为 2V。尽管闪存芯片具有电压缓冲器,短时间内输入 3.3V 不会损坏芯片,但长时间工作后,无法保证芯片正常工作,这将带来风险。因此,为解决此问题,我们可在闪存加载器、ROM API 中采取临时解决方案:当向 Flash_RST 引脚输出高电平时,可使用 OD 模式,此时引脚电压完全由外部上拉电路决定,且 EVK 还具有外部 10K 上拉至 1.8V 的电路,因此可输出 1.8V 而非 3.3V。 图片9  在 NXP 新的 MIMXRT1170-EVKB 板卡中,硬件增加了电压转换芯片以解决这些问题,可实现 3.3V 和 1.8V 之间的转换: 图片10 3.2 使用 MCUBootUtility 对八位闪存进行编程 我们可以使用 MCUBootUtility 在串行下载模式下测试 MIMXRT1170-EVK+ 八位闪存,通常用于芯片连接、内存擦除、读取和编程。此方法还可使用该工具为八位闪存生成正确的 FCB 头,然后在内部启动模式下测试启动情况。 串口下载-> SW1:1-关,2-关,3-关,4-开 内部启动-> SW1:1-关闭,2-关闭,3-开启,4-关闭 MCUBootUtility 配置如下: 图片11 此配置为:option0=0Xc0403007,query 1wire, cmd 8 wire。 然后,应用程序镜像可使用 MCUBootUtility 附带的代码: NXP-MCUBootUtility-3.5.0\apps\NXP_MIMXRT1170-EVK_Rev.A\cm7\led_blinky_0x3000a000.srec 图片12 我们可以看到,代码下载已完成。接下来,重置设备,将开发板配置为内部启动模式,然后执行POR或硬件复位。此时,板载LED D34会闪烁,这表明硬件也可以从八位闪存启动。 3.3 SDK APP FDCB modification 如果需要从八位闪存调试 SDK 应用程序演示,必须确保提供正确的应用程序 FDCB。那么,如何将应用程序 FDCB 修改为八位闪存呢?您可以参考 MCUBootUtility 工具烧录的 FDCB 以及八位闪存的数据手册。以下是经过多次测试的 FDCB。关键在于提供正确的查找表 (LUT)。以 RT1170 SDK 的 led_blinky 项目为例,项目 xip 文件中的 evkmimxrt1170_flexspi_nor_config.c 文件修改如下: const flexspi_nor_config_t octalflash_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_ExternalInputFromDqsPad, .csHoldTime = 3, .csSetupTime = 3, .deviceModeCfgEnable = 1, .deviceModeType = kDeviceConfigCmdType_Spi2Xpi, .waitTimeCfgCommands = 1, .deviceModeSeq = { .seqNum = 1, .seqId = 6, /* See Lookup table for more details */ .reserved = 0, }, .deviceModeArg = 2, /* Enable OPI DDR mode */ .controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DdrModeEnable), .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_8Pads, .serialClkFreq = kFlexSpiSerialClk_133MHz, .sflashA1Size = 64ul * 1024u * 1024u, .dataValidTime = { [0] = {.time_100ps = 16}, }, .busyOffset = 0u, .busyBitPolarity = 0u, .lookupTable = { /* Read */// EEH+11H+32bit addr+20dummy cycles+ 4Bytes read data //133Mhz 20 dummy=10+10 [0 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0xEE, CMD_DDR, FLEXSPI_8PAD, 0x11),//0x871187ee, [0 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, DUMMY_DDR, FLEXSPI_8PAD, 0x0A),//0xb30a8b20, [0 + 2] = FLEXSPI_LUT_SEQ(DUMMY_DDR, FLEXSPI_8PAD, 0x0A, READ_DDR, FLEXSPI_8PAD, 0x04),//0xa704b30a, /* Read Status SPI */// SPI 05h+ status data 0X24 maybe 0X04 [4*1 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR , FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x24),//0x24040405, /* Read Status OPI *///05H+FAH+ 4byte 00H(addr)+4Byte read [4*2 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0x05, CMD_DDR, FLEXSPI_8PAD, 0xFA),//0x87fa8705, [4*2 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0x00, CMD_DDR, FLEXSPI_8PAD, 0x00),//0x87008700, [4*2 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0x00, CMD_DDR, FLEXSPI_8PAD, 0x00),//0x87008700, [4*2 + 3] = FLEXSPI_LUT_SEQ(READ_DDR , FLEXSPI_8PAD, 0x04, STOP_EXE, FLEXSPI_1PAD, 0x00),//0x0000a704, /* Write enable SPI *///06h [4*3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR , FLEXSPI_1PAD, 0x06, STOP_EXE, FLEXSPI_1PAD, 0x00),//0x00000406, /* Write enable OPI *///06h+F9H [4*4 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0x06, CMD_DDR, FLEXSPI_8PAD, 0xF9),//0x87f98706, /* Erase sector */ //21H+DEH + 32bit address [4*5 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0x21, CMD_DDR, FLEXSPI_8PAD, 0xDE),//0x87de8721, [4*5 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR , FLEXSPI_8PAD, 0x20, STOP_EXE, FLEXSPI_1PAD, 0x00),//0x00008b20, /*Write Configuration Register 2 =01, Enable OPI DDR mode*/ //72H +32bit address + CR20x00000000 = 0x01 [4*6 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR , FLEXSPI_1PAD, 0x72, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000472, [4*6 + 1] = FLEXSPI_LUT_SEQ(CMD_SDR , FLEXSPI_1PAD, 0x00, CMD_SDR, FLEXSPI_1PAD, 0x00),//0x04000400, [4*6 + 2] = FLEXSPI_LUT_SEQ(CMD_SDR , FLEXSPI_1PAD, 0x00, WRITE_SDR, FLEXSPI_1PAD, 0x01),//0x20010400, /*block erase*/ //DCH+23H+32bit address [4*8 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0xDC, CMD_DDR, FLEXSPI_8PAD, 0x23),//0x872387dc, [4*8 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, STOP_EXE, FLEXSPI_1PAD, 0x00),//0x00008b20, /*page program*/ //12H+EDH+32bit address+ write data 4bytes [4*9 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0x12, CMD_DDR, FLEXSPI_8PAD, 0xED),//0x87ed8712, [4*9 + 1] = FLEXSPI_LUT_SEQ(RADDR_DDR, FLEXSPI_8PAD, 0x20, WRITE_DDR, FLEXSPI_8PAD, 0x04),//0xa3048b20, /* Chip Erase (CE) Sequence *///60H+9FH [4*11 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR , FLEXSPI_8PAD, 0x60, CMD_DDR, FLEXSPI_8PAD, 0x9F),//0x879f8760, }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, }; 此处的 LUT 为全功能查找表,它包括:8 线读取、1/8 线状态读取、1/8 线写使能、8 线扇区擦除、1 线配置写使能(用于开放外设接口双倍数据速率 (OPI DDR) 模式)、8 线块擦除、8 线页编程、8 线芯片擦除。具体命令与 MX25UM51345GXDI00 数据手册以及 MCUBootUtility 工具生成的 FCB 相同。 4. CMSIS DAP Flashloader MIMXRT1170-EVK 默认使用 CMSIS DAP 调试器,以 MCUXPresso IDE 为例,它会调用名为 .cfx 文件的闪存加载器,闪存加载器源代码可从以下路径找到: C:\nxp\MCUXpressoIDE_11.6.0_8187\ide\Examples\Flashdrivers\NXP\iMXRT\ iMXRT117x_FlexSPI_SFDP.zip 可直接使用的现有 .cfx 文件路径为: C:\nxp\MCUXpressoIDE_11.6.0_8187\ide\binaries\Flash\ MIMXRT1170_SFDP_QSPI.cfx:  QSPI flash MIMXRT1170_SFDP_MXIC_OPI.cfx: octal flash 图片 13 使用闪存加载器 + CMSIS DAP + MCUXPresso 调试结果如下: 图片14 有一点需要注意,即 mcuxpresso IDE 闪存加载器源代码 iMXRT117x_FlexSPI_SFDP.zip,该项目已配置为八位闪存,需修改相关 Flash_RST 控制代码,否则,当输出高电平时,电压将为 3.3V。 图片15 在上图中, 添加代码: MEM_WriteU32(0x400E835CU, 0x12); 即将 SW_PAD_CTL_PAD_GPIO_AD_03 寄存器设置为 0x12,OD 模式,然后重新生成 mxic MX25UM51345GXDI00 八位闪存 .cfx 文件,用于 mcuxpresso+CMSIS DAP 调试器。 5. 带有 RT-UFL 的 JLINK Flashloader 在实际使用中,许多客户不仅使用板载 CMSIS-DAP 调试器,还喜欢使用外部 JLINK/JLINK plus,或使用板载 JLINK 固件(使用 LPCScrypt 修改固件,注意根据网页说明更新 JINK 固件),或使用外部 JLINK 固件(需要断开板载调试器跳线)。但如果直接调用 JLINK 闪存驱动器,则将是 QSPI 闪存。以下是在 JLINK 中使用八位闪存驱动器的方法。现在,JLINK 驱动器使用 JLinkARM.dll 来定义不同芯片使用的闪存,这与旧的 JLINK 驱动器不同。闪存固件由 JLinkDevices.xml 调用。.dll 文件不允许用户直接修改设备的相应闪存,因此需要提供一个支持 RT1170 八位闪存的闪存驱动器文件,并在 JLinkDevices.xml 中添加调用命令,以覆盖 JLinkARM.dll 中的默认 QSPI 定义。 NXP AE 开发了一款非常有用的全功能闪存驱动程序,称为 RT-UFL,可支持通用 QSPI、HyperFlash、OctaFlash 等。用户可以使用 JLINK 调用 RT-UFL 闪存驱动程序,然后使用 JFLASH、JLINK 指挥官或 IDE(如 MCUXpresso、IAR、MDK)来实现 RT 芯片与不同闪存的调试和下载。 RT-UFL下载链接: https://github.com/JayHeng/RT-UFL 有关 RT-UFL 的详细使用说明,请查看此博客链接: https://www.cnblogs.com/henjay724/ 下载后,将 RT-UFL 安装到 JLINK 驱动器中,复制以下文件夹文件: RT-UFL-1.0\algo\SEGGER\JLink_Vxxx 至 JLINK 驱动器安装路径: C:\Program Files\SEGGER\JLINKV768B JLINK驱动链接是: https://www.segger.com/downloads/jlink/JLink_Windows_x86_64.exe 现在,使用原始 RT-UFL 固件结合 JFLASH 直接测试 RT1170 中的八位闪存,调试器为 JLINK plus,仅检查是否可以运行,设备选择:MIMXRT1170_UFL_L0。 _L0 后缀算法适用于 QSPI Flash 和 Octal Flash(页大小为 256 字节,扇区大小为 4KB),_L1/2 后缀算法适用于 Hyper Flash(页大小为 512 字节,扇区大小为 4KB/64KB)。 5.1 RT-UFL JFlash Test 为之前已修改为八位闪存的 led_blinky 项目生成一个 .srec 文件,该文件将稍后由 JFLASH 或 JLINK 指挥器使用。 使用 JFLASH 结合 JLINK plus 创建一个新的 JFLASH 项目。选择支持八位闪存的 MIMXRT1170_UFL_L0 芯片。 测试情况如下,可以看到连接成功,可以找到 ARM Cortex-M7 内核,但编程、读取和擦除功能将失败。可以说,与外部八位闪存的连接根本不成功: Pic 16 如果使用的 JLINK 不是 JLINK plus,由于许可证不支持 JFLASH,那么客户可以使用 JLINK commander 进行测试,但在此情况下,使用原装 RT-UFL 的测试结果与 JFLASH 完全相同: 图片17 即便使用 mem32 读取地址数据,仍然会遇到 “Failed to initialize RAMCode” 的问题,有时读取的数据不正确,并非真实的闪存数据,客户可以将从 MCUBootUtility 读取的数据与内存中的数据进行比较。 因此,需要对 RT-UFL 闪存驱动器代码进行修改,以使其支持八位闪存,让八位闪存正常工作。 5.2 RT-UFL Flashloader 源代码修改     通过对原始 RT-UFL 代码结合八位闪存测试的分析,经过多次修改和测试,现将修改点逐一列出。使用经修改的 RT-UFL 生成的新闪存加载器文件,可通过 JFlash、JLINK commander、IDE 等进行测试。JLINK 工具分为外部 JLINK plus 和板载 JLINK 固件(不支持 JFLASH)两类。 5.2.1 Flashloader 修改点 1) RAMCode错误 在 JLinkDevices.xml 文件中,将 RAM 位置定义为 OCRAM 地址: 2) 新增擦除扇区 ROM API JLINK 会调用扇区擦除功能,因此需添加相关的扇区擦除 API: ufl_main.c static void ufl_fill_flash_api(void) { ... case kChipId_RT117x: uflTargetDesc->flashDriver.init = g_bootloaderTree_imxrt117x->flexspiNorDriver->init; uflTargetDesc->flashDriver.page_program= g_bootloaderTree_imxrt117x->flexspiNorDriver->page_program; uflTargetDesc->isFlashPageProgram = true; uflTargetDesc->flashDriver.erase_all = g_bootloaderTree_imxrt117x->flexspiNorDriver->erase_all; uflTargetDesc->flashDriver.erase = g_bootloaderTree_imxrt117x->flexspiNorDriver->erase; uflTargetDesc->flashDriver.erase_sector= g_bootloaderTree_imxrt117x->flexspiNorDriver->erase_sector;//kerry add uflTargetDesc->flashDriver.read = g_bootloaderTree_imxrt117x->flexspiNorDriver->read; uflTargetDesc->flashDriver.set_clock_source = NULL; uflTargetDesc->flashDriver.get_config= g_bootloaderTree_imxrt117x->flexspiNorDriver->get_config; uflTargetDesc->iarCfg.enablePageSizeOverride = true; break; … } ufl_flexspi_nor_flash_imxrt117x.h typedef struct _flexspi_nor_flash_driver_imxrt117x { uint32_t version; status_t (*init)(uint32_t instance, flexspi_nor_config_t *config); status_t (*page_program)(uint32_t instance, flexspi_nor_config_t *config, uint32_t dst_addr, const uint32_t *src); status_t (*erase_all)(uint32_t instance, flexspi_nor_config_t *config); status_t (*erase)(uint32_t instance, flexspi_nor_config_t *config, uint32_t start, uint32_t lengthInBytes); status_t (*read)(uint32_t instance, flexspi_nor_config_t *config, uint32_t *dst, uint32_t addr, uint32_t lengthInBytes); void (*clear_cache)(uint32_t instance); status_t (*xfer)(uint32_t instance, flexspi_xfer_t *xfer); status_t (*update_lut)(uint32_t instance, uint32_t seqIndex, const uint32_t *lutBase, uint32_t seqNumber); status_t (*get_config)(uint32_t instance, flexspi_nor_config_t *config, serial_nor_config_option_t *option); status_t (*erase_sector)(uint32_t instance, flexspi_nor_config_t *config, uint32_t address);//kerry add status_t (*erase_block)(uint32_t instance, flexspi_nor_config_t *config, uint32_t address); const uint32_t reserved0; status_t (*wait_busy)(uint32_t instance, flexspi_nor_config_t *config, bool isParallelMode, uint32_t address); const uint32_t reserved1[2]; } flexspi_nor_flash_driver_imxrt117x_t; 3) 提高擦除和编程速度 FlashDev.c struct FlashDevice const FlashDevice = { FLASH_DRV_VERS, // Driver Version, do not modify! "MIMXRT_FLEXSPI_RT1170", // Device Name EXTSPI, // Device Type 0x30000000, // Device Start Address 0x01000000, // Device Size in Bytes (16mB) 256*4, // Programming Page Size 0, // Reserved, must be 0 0xFF, // Initial Content of Erased Memory 100, // Program Page Timeout 100 mSec 15000, // Erase Sector Timeout 15000 mSec // Specify Size and Address of Sectors 4096*8, 0x00000000, // Sector Size 4kB (256 Sectors) SECTOR_END }; FlashPrg.c: int EraseSector (unsigned long adr) { uint32_t instance = g_uflTargetDesc.flexspiInstance; uint32_t baseAddr = g_uflTargetDesc.flashBaseAddr; /*Erase Sector*/ status_t status = flexspi_nor_flash_erase(instance, (void *)&flashConfig, adr - baseAddr, FLASH_DRV_SECTOR_SIZE*8);//kerry *8, 4096 if (status != kStatus_Success) { return (1); } else { return (0); } } int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf) { status_t status = kStatus_Success; uint32_t instance = g_uflTargetDesc.flexspiInstance; uint32_t baseAddr = g_uflTargetDesc.flashBaseAddr; uint32_t loadaddr = adr - baseAddr; unsigned char *buffer; buffer = buf; int i; for(i = 0; i < 4; i ++) // kerry add 256*4 { status = flexspi_nor_flash_page_program(instance, (void *)&flashConfig, loadaddr, (uint32_t *)buffer); if (status != kStatus_Success) { return (1); } buffer+=256; loadaddr+=256; } return (0); } 其原理是减少 PC 向 JLINK 发送命令,再由 JLINK 向开发板发送命令的次数。现在,一条命令可直接擦除并编程多个块。 4) 八进制闪存选项值轮询 需要注意的是,在闪存复位后或首次编程时,必须以单线模式读取串行闪存发现参数 (SFDP)。如果未复位且闪存中存在有效的 FCB,则闪存会初始化为 OPT 模式,需要以 8 线模式读取。此时,无法以单线模式读取闪存芯片的有效 SFDP 表。 RT-UFL是一款支持多芯片的闪存加载器,它不使用特定的 GPIO 作为芯片的 flash_RST。对于 RT-UFL 而言,未添加 GPIO 来控制 flash_RST 引脚,保留了高度的灵活性。否则,一旦客户使用的 RST 引脚与 EVK 不同,仍会出现问题,甚至需要客户花费时间修改闪存加载器源代码,增加开发时间。 因此,鉴于上述考虑,在此处修改代码,不添加 RESET 信号控制,不固定单线或 8 线的选项值,而是通过单线和 8 线轮询来读取 SPDF。 ufl_main.c static void ufl_set_target_property(void) case kChipId_RT117x: uflTargetDesc->flexspiInstance = MIMXRT117X_1st_FLEXSPI_INSTANCE; uflTargetDesc->flexspiBaseAddr = MIMXRT117X_1st_FLEXSPI_BASE; uflTargetDesc->flashBaseAddr = MIMXRT117X_1st_FLEXSPI_AMBA_BASE; // uflTargetDesc->configOption.option0.U = 0xc0433007; // uflTargetDesc->configOption.option1.U = 0x0; break; 确保未配置上述选项,否则选项配置将被固定,且轮询选项功能将不再启用。 ufl_auto_probe_flash.c static const serial_nor_config_option_t s_flashConfigOpt[] = { // 1st Pinmux, PortA for octal 1 bit SFDP for no FCB in flash eg. MX25UM51345G {.option0.U = 0xc0403007, .option1.U = 0x00000000}, // 1st Pinmux, PortA for octal 8 bit SFDP for FCB in flash eg. MX25UM51345G {.option0.U = 0xc0433007, .option1.U = 0x00000000}, // 1st Pinmux, PortA for octal 1 bit SFDP &1 bit CMD for no FCB in flash eg. MX25UM51345G {.option0.U = 0xc0400007, .option1.U = 0x00000000}, ..} 在完成上述修改后,编译 RT-UFL 的源代码项目: RT-UFL-1.0\build\mdk\MIMXRT_FLEXSPI_UV5.uvprojx, 生成一个新的 MIMXRT_FLEXSPI_UV5_UFL.FLM 编程算法,并将其复制到以下路径: C:\Program Files\SEGGER\JLINKV768B\Devices\NXP\iMXRT_UFL JLinkDevices.xml中定义的设备名称是:MIMXRT1170_UFL_octalFlash。 JLinkDevices.xml路径: C:\Program Files\SEGGER\JLINKV768B 修改 .xml 文件,并添加上述提到的 “RAMCode error” 部分。 修改完成后,请刷新JLinkDLLUpdater.exe文件,以便多个IDE能够同步由更新的XML文件定义的固件。 5.2.2 JFlash Test 从以下 Jflash 的测试结果可以看出,其能够成功擦除,并且应用程序镜像可下载至八位闪存中。下载成功后,进行复位操作,即可看到板载 LED 灯在闪烁。这表明修改后的 RT-UFL 闪存加载器已正常工作。此处需注意,使用 JFLASH 需要借助外部 Segger JLINK Plus。若部分客户使用的是普通 JLINK 或 RT EVK 板载 JLINK 固件,则可尝试采用 JLINK commander 方法。 图片18 5.2.3 JLINK命令测试 使用与 JLINK commander 配套的 JLINK plus 进行测试的结果是: 图片19 可以看到固件能够成功下载。 现在使用 EVK 板载的 JLINK 固件进行如下测试,可以看出编程操作正常。因此,如果用户没有外部 JLINK,也可以直接使用 RT EVK 板载的 JLINK 固件。需要注意的一点是,当使用板载 JLINK 固件时,该固件会导致调试器端口 USB 无法直接为 RT 芯片供电,因此需要配置 J38 跳线连接至 3-4 引脚,然后另找一根 USB 线连接 J20 接口为开发板供电。 图片20 5.3 MCUXpresso + JLINK + 修改后的 RT-UFL 测试 首先,选择MCUXPresso IDE的JLINK调试路径,添加已包含RT-UFL固件的JLINK驱动程序路径,依次进入Windows->首选项,然后路径应如下所示: 图片21 下载时,仍需配置RUN->调试器配置,JLINK配置应为: Pic 22 请注意,请勿在调试配置中勾选“运行前重置”选项,因为该选项在默认情况下已勾选。 Pic 23 如果勾选了 “Reset before running” 选项,在调试时,代码在下载完成后会被阻塞,无法跳转到主函数。如果客户点击暂停按钮,会遇到代码停在 0x223104 地址处的问题,但在退出调试模式并再次执行上电复位 (POR) 后,会发现应用程序已成功下载到闪存中。 图片24 该问题与 RT1170 安全策略对 JLINK 的影响有关。详情请参考以下链接: https://www.cnblogs.com/henjay724/p/15725966.html 当 JLink 连接到芯片时,只要执行复位命令,它将直接进入安全调试模式(PC 停在 0x223104)。 因此,请确保未勾选“运行前复位”选项,以便能够正常进入调试模式和主函数,测试结果如下: 图片25 5.4 MDK+JLINK+改进型RT-UFL测试 接下来,使用 MCUXPresso 配置工具结合 SDK 包导出一个 MDK 工程,同样基于 led_blinky 项目,并修改八位闪存的 FCB 代码,然后调用修改后的 RT-UFL 闪存加载器,设备名称为:MIMXRT1170_UFL_octalFlash。 注意,务必刷新以下文件: C:\Program Files\SEGGER\JLINKV768B\JLinkDLLUpdater.exe 确保 IDE 使用的是最新的固件链接。 以下是具体的 MDK 工程相关配置图片: 图片26 项目选择为 flexspi_nor_debug,编译完成后,将调试工具配置为 JLINK,可找到 JLINK 仿真序列,且在“utilities”中,调试前不应勾选 “updated target before debugging” 选项: Pic 27 图28 图片29 修改 JlinkSettings.ini,配置 override = 1,将设备设置为 RT-UFL 修改后的固件设备名称:MIMXRT1170_UFL_octalFlash。 图片30 图片31 从上图可以看出,修改后的RT-UFL Octal flash已经成功用于运行MDK项目。 需要注意的是,不要使用下载按钮,因为该按钮无法使用经过覆盖和修改的 RT-UFL 编程算法,它仍会调用接口中已删除区域​​的编程算法,若找不到该算法则会报错。 5.5 IAR + JLINK + 修改后的 RT-UFL 测试 以下是使用 IAR 结合 JLINK 调试 RT1170 八位闪存,并采用修改后的 RT-UFL 编程算法。具体配置如下: 图片32 不要勾选 “ use flash loaders”,这意味着不要使用 IAR 附带的 .out 文件下载算法,而是使用 JLINK 驱动中经过修改的 RT-UFL 八位闪存驱动器。 图片33 复位时可选择内核,若情况正常,调试时会遇到与勾选复位项的 MCUXPresso 相同的问题,PC 将停在 0x223104 地址处。 图片34 在此处,修改项目设置文件夹中的 ->.jlink 文件,使用 RT-UFL 设备名称:MIMXRT1170_UFL_octalFlash, 并设置 override =1,这样就会调用修改后的 RT-UFL 闪存加载器。如果在新创建的项目中找不到 .jlink 文件,只需先选择 JLINK 调试器,点击下载,此时会生成 .jlink 文件,然后修改该文件并再次进行调试。 图片35 将RT-UFL编程算法修改为适用于八位闪存后,点击 “download and debug” 按钮,将进入调试模式,如下图所示,代码已成功运行: Pic 36 6. 结论 在完成上述细节操作后,可实现 MIMXRT1170-EVK 开发板上八位闪存的代码下载,并使用 fsl_romspi 项目在 RAM 中运行,以此验证硬件八位闪存的正常读写功能,同时使用 MCUBootutility 验证编程和启动状态。APP FCB 修改需与八位闪存相匹配。调试器可使用 JLINK 或 CMSIS DAP,且需采用正确的闪存驱动编程算法。特别地,JLINK 需使用 RT-UFL 作为闪存加载器,但需修改其源代码。最终可见,RT-UFL 下载算法与 JLINK 的组合,成功在 MCUXpresso、IAR、MDK 三种集成开发环境中实现了八位闪存代码的下载与运行。本文内容不仅限于 MIMXRT1170-EVK 开发板,同样适用于采用 RT1170+ MX25UM51345GXDI00 八位闪存的客户设计板。 附件添加了修改后的 RT-UFL 编程算法以及三大 IDE 的八位闪存项目。
查看全文
i.MX8MP NPU 调试和微调应用说明 本文指导客户如何在 i.MX8MP NPU 上进行开发以及如何调试性能。 i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux Yocto Project
查看全文
Configツールの導入と使用方法 Configツールの導入と使用方法 i.MX93以降のDDR設定にはConfig Toolを使用しています。Config Tools for i.MXは、初期評価から本番環境ソフトウェア開発までユーザーを支援する評価/設定ツールのスイートです。Config Tools for i.MXは、i.MXプロセッサデバイスのピンとDDRを設定するのに使いやすいツールです。 このソフトウェアでは通常、デバイスのピン構成や多重化のあらゆる側面を作成、検査、変更、修正できます。また、DDR設定の構成や検証もできます。 1 ダウンロードしてインストールする ウェブサイトのリンク: https://www.nxp.com/design/design-center/software/i-mx-developer-resources:IMXSW_HOME Config Tools for i.MXはデスクトップツールとしてインストールされ、ネットワーク接続を介して追加のデバイス情報をロードしますが、それ以外でインターネット接続は必要ありません。プロジェクトのセットアップは必要ありません。すべての設定はテキストと生成済みソースファイルに保存されるため、バージョン管理システムに保存するのも、他のユーザーと交換するのも簡単です。 Config Toolの機能 Config Toolには2つの機能があります。1つはピン・ツール、もう1つはDDRツールです。 1.1 ピン・ツール ピン・ツールは直感的で使いやすいユーザーインターフェースになっているので、ピン設定がより簡単かつ迅速になり、C/C++アプリケーションで使用できる通常のCコードが生成されます。ピン・ツールでは、ピンのマルチプレクシング(多重化)から電気的特性に至るまでピン信号が設定でき、またデバイスツリースニペットインクルード(.dtsi)ファイルやCSV形式のレポートも作成できます。 ピン・ツール ピンのルーティング/多重化の設定 ルーティング初期化に使用する多種多様な関数の管理 ピンの機能/電気的特性の設定 ルーティングおよび機能/電気的特性のコード生成 1.2 DDR Tool DDRツールには2つの主要な機能、設定と検証があります。DDR設定では、使いやすいグラフィカルインターフェースで、DDRコントローラとDDR PHYを設定します。ボードに付属しているメモリモジュールとは異なるメモリモジュールを使用する場合や、設定を最適化する場合にも、設定パラメータの一部を微調整するのに使用できます。DDR検証では、USB接続を通じてプロセッサの内部RAMにテストイメージをダウンロードすることにより、さまざまなシナリオでDDR性能を検証します。結果は、UART経由でDDRツールに送信されます。DDR検証は、OS以外の環境でボード上のDDRの安定性を検証するのに役立ちます。 DDR Tool DDRツールは次の目的で設計されています。 DDRコントローラの設定 DDR設定の検証 i.MX 8Mファミリとi.MX93ファミリのサポート 設定:デバイス設定のUIのシンプル化 ボード構成オプションの高度化 ストレス:オーバーナイトオプションによるストレステスト 最適化:ODT設定のスイープと、DQおよびCAのVrefの最適化 仮想タイミング信号解析(vTSA)のサポート:RXおよびTXのデータアイ、CA BUS信号のマージン、LPDDR4 DRAMのCAアイテスト U-boot SPLドライバのCコードの生成 DDRツールを使用すると、メモリタイプ、周波数、チャネル数などの基本的なDDR属性を表示および構成し、さまざまなテストでDDR構成をテストできます。接続タイプを指定した後、シナリオやそのシナリオで実行するテストを選択し、テスト結果、ログ、概要を表示できます。 2 Config_Tools_for_i.MX_v16_x64.exeをダウンロードしてインストールする 注意:当社のPCでは、Admin Manageを適用する必要があります。 Config Tools for i.MXはオフライン(ローカル)で利用可能です。最小システム要件 次のいずれかのグラフィカルオペレーティングシステム: – Microsoft Windows 10(64ビット) – Ubuntu 22.04 LTS 注意:Linuxでホストされるツールのバリアントは、Linuxで64ビットバイナリとして配布されますが、32ビットシステムでは動作しないことがあります。 – サポートされているデスクトップ環境:GNOME – Mac OS X (12.x) 4GB RAM 解像度1024 x 768のディスプレイ プロセッサデータベースからの動的ダウンロードに向けたインターネット接続 注意:MacOSが中国語(繁体字)に設定されている場合、Config Tools for i.MXは中国語ではなく英語で起動します。これは意図されたものです。 2 Config Toolの使用 DDRコントローラの設定 2.1 新しい設定の作成 開発開始ウィザードから、またはメニューバーからFile > Newを選択して、設定を作成します。 NXP ボードまたはキットの開発を開始する場合は、ボードまたはキットの構成を作成する例から始めることをお勧めします。この構成には、ボード固有の設定が含まれています。プロセッサを選択した場合、構成は空になります。 2.2設定ツールを実行する Config Toolを開き、プロセッサ、ボード、またはキットの新しいスタンドアロン設定の作成を選択します。 プロセッサを選択してください i.MX93の部品番号の製品を選択する DDRを選択する ツールで「tools---->DDR」を選択する 次の3つのセクションについて言及する必要があります。 DDR を正しく構成し、DDR がすでに有効になっていることを確認してください。 以前の製品で提供していたツールと同様、次の2つのセクションは非常に重要です。 DDRパラメータ設定 DDRストレステスト(検証) DDRパラメータ設定: これは UART ポートの設定です。i.MX93 EVK ボードでは、デフォルトで A55 コアのデバッグに UART1 を使用しますが、顧客の設計で他のポートを使用する場合は、ここで選択でき、レジスタ設定を手動で変更する必要があります。 高度なパラメータ設定は非常に重要: 一般的なアドバイス MXとPMICとの間のI2C接続は、開発ボードで同じパッドを使用して、一貫性を持たせるようにしてください。異なったものを選択した場合、I2Cを変更する必要があります。 DDR設定の検証 以前のDDRストレステストツールでは、機能はDDRキャリブレーションとストレステストの2つのみでした。 新しいConfig Toolでは、お客様がDDRをデバッグするためのテスト項目が増え、合計4項目です。 DDRの設定が完了したら、検証を行ってください。 DDR初期化スクリプトをテストし、基本的な読み取り/書き込み操作を実行します。 テストに合格すればOKです。失敗した場合、そのシューティングは諦める必要があります。 ログ出力情報に従って、ブートモード/UART/USBなどを確認してください テストが失敗した場合は、まず起動モード設定とUART/USBインターフェースを確認します。 以前のDDRストレステストツールでは、「シリアルダウンロードモードに設定してください」や「UARTポートを接続してください」などの明確なメッセージが出力されていました。 現在の Config ツールは、コードのすべてのログ情報を出力し、内容が豊富で誤った結論は含まれていません。ログ出力を注意深く確認し、問題がどこにあるのかを特定する必要があります。 i.MX93 EVKボードのテストで、起動モードが適正でなく、 USBが接続されていない場合、テストを行うとログにエラーメッセージが表示されます。 i.MX93 EVKボードのテストで、適切なUARTポートがない場合、ログにエラーメッセージが表示されます。 最適化テスト ここでの要件は、詳細なODT、ドライバ強度テスト、すべてのDQ IO設定オプションのスキャンです。 設定ごとに合格か不合格かをテストします。最後に、読み取り/書き込みドライブ強度とODT出力との間マッピングを出力します。 読み取り時のテスト結果には、DRAM駆動強度とPHY ODTのインピーダンスをあまり大きく設定できません。(グリーン - 合格、オレンジ - 不合格) お客様のボードに最適なODT/ドライバ強度値を決定する際、このマッピング図は参照用にはできますが、決定を下すための唯一の根拠にはなりません。 お客様がNXP開発ボードのデザインをフルに参照する場合、まず開発ボードのデフォルト設定をテストに使用します。それから微調整します。     VTSA(仮想タイミング信号解析) 一連の書き込み/読み取り操作を実行して、書き込みおよび読み取りデータのアイダイアグラムを生成します。(高速オシロスコープを使用して手動で物理的なTSA(pTSA)を測定する場合とは異なります)。 DDRコントローラ自体を使用したマージンのテストでは、マージン書き込み(Diag Write Margin)/読み取りマージン診断(Diag Read Margin)により、Read Marginテストで各DQチャンネルの仮想データアイダイヤグラムを描画します。 このツールは実際のアイダイヤグラムの結果とは異なり、参照にのみ使用されます。 DDRストレステスト 最後の手順、ストレステストでは、お客様は長時間のテストを選択できます。 コード生成 右側に見えるlpddr4_timing.cは、ubootで使用するために生成します。 このツールではコードが自動的に生成されますが、レジスタが変更されるとコードが自動的に生成されるので、ボード上でテストを実行する必要がありません。これが以前のツールとの違いです。 3 i.MX93 UBOOTとカーネルDDR設定 3.1 UbootのDDR設定 (1) 生成したlpddr4x_timing.cを次のu-boot パスへコピーします。 board/freescale/imx93_evk/lpddr4x_timing.c (2)DDRサイズ設定 uboot-imx/include/configs/imx93_evk.h i.MX93 EVKボードのデフォルトサイズは2GBです。 i.MX93EVKでは、2GB LPDDR4Xを使用します。1GB/512MB LPDDR4を使用する場合、DDRのサイズはメモリマップアドレスに関連していることに注意することが重要です。 メモリマップによれば、0xC000_0000から1GBのDRAM空間が始まり、0xA000_0000から512MBのDRAM空間が始まります。 3.2 DDR設定はカーネルで整合 1GB LDDR4/4X デバイスツリーを修正するには i.MX93の場合、NPUはMコア経由でアクセスされるため、DRAMメモリの1セクションが予約されています。NPUが使用されているかどうかに関係なく、ここでEthosを変更する必要があります。そうしないと、カーネルの起動でエラーが発生することがあります。アドレス空間を1GB以内に変更し、メモリ割り当てサイズを十分に削減します。 arch/arm64/boot/dts/freescale$ vi imx93-11x11-evk.dts 要約: Configツールは、NXPの新しいDDRスクリプト生成/ストレステスト/OMUX割り当てツールであり、i.MX93に必要なものです。他のi MXチップでも、このツールを使用できます。 Config ツールは、ODT/ドライバー機能のテスト、マッピングマップの出力、DDR仮想アイダイアグラムの生成など、より多くのDDRテストプロジェクトを提供し、複数の観点からDDRの状態を簡単にテストできます。 ODT/ドライバー機能やその他のパラメーターをデバッグするには、すべての i MX チップにも適用可能な Config ツールを、参照用のデバッグツールとして使用することをお勧めします。実際のボードの理論的なパラメータは、ボードのシミュレーション結果またはDDR信号の測定結果を参照する必要があります。 ご不明な点は、お気軽にお問い合わせください。
查看全文
imx8.mp 无法设置相机 Hello, 我正在尝试设置一个自定义相机,该相机连接到我的主板的 CSI0 端口,具有 imx.8mp。摄像机通过 LVDS 连接到 MIPI 桥,桥的 I2C 目前由微控制器编程。我暂时不需要 I2C。 我已经使用 Scope 进行了检查,并且在引脚上看到了 MIPI CSI 信号。 我正在尝试启动并运行该软件,但是 /dev/video0 设备尚未创建。问题是 IMX8-MEDIA-DEV 驱动程序无法探测。 这是我的相关 DTS 代码: / { cam1_clk: cam1-clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <27000000>; }; }; &cameradev { status = "okay"; }; &i2c3 { cam1: camera1@36 { compatible = "onsemi,ar052x"; reg = <0x36>; #address-cells = <0x1>; #size-cells = <0x0>; clocks = <&cam1_clk>; clock-names = "ext"; port@0 { reg = <0>; cam1_mipi_ep: endpoint { remote-endpoint = <&mipi_csi0_ep>; bus-type = <4>; /* MIPI CSI-2 D-PHY */ data-lanes = <2>; clock-lanes = <0>; clock-noncontinuous = <1>; }; }; }; }; &isi_0 { status = "okay"; cap_device { status = "okay"; }; }; &isi_1 { status = "okay"; cap_device { status = "okay"; }; }; &mipi_csi_0 { status = "okay"; #address-cells = <1>; #size-cells = <0>; compatible = "fsl,imx8mp-mipi-csi"; no-reset-control; //power-domains = <&mipi_phy1_pd>; port@0 { reg = <0>; mipi_csi0_ep: endpoint {}; }; }; &mipi_csi0_ep { remote-endpoint = <&cam1_mipi_ep>; data-lanes = <4>; csis-hs-settle = <16>; csis-clk-settle = <2>; csis-wclk; }; &mipi_csi_1 { status = "okay"; port@1 { reg = <1>; mipi_csi1_ep: endpoint {}; }; }; [ 107.559356] imx8_mipi_csi2_sam: module is from the staging directory, the quality is unknown, you have been warned. [ 107.580669] mxc-mipi-csi2-sam 32e50000.csi: supply mipi-phy not found, using dummy regulator [ 107.611984] : mipi_csis_imx8mp_phy_reset, No remote pad found! [ 107.626983] mxc-mipi-csi2-sam 32e50000.csi: lanes: 2, hs_settle: 0, clk_settle: 0, wclk: 0, freq: 266000000 [ 107.658121] ar052x 1-0036: Probing ar052x Driver [ 107.662908] i2c i2c-1: new_device: Instantiated device ar052x at 0x36 [ 107.688612] imx8_isi_capture: module is from the staging directory, the quality is unknown, you have been warned. [ 107.711395] imx8_capture: module is from the staging directory, the quality is unknown, you have been warned. [ 107.724051] isi-capture 32e00000.isi:cap_device: deferring 32e00000.isi:cap_device device registration [ 107.733520] mxc-isi 32e00000.isi: mxc_isi.0 registered successfully [ 107.741636] isi-capture 32e02000.isi:cap_device: deferring 32e02000.isi:cap_device device registration [ 107.751060] mxc-isi 32e02000.isi: mxc_isi.1 registered successfully [ 108.118167] imx8_media_dev: module is from the staging directory, the quality is unknown, you have been warned. [ 108.164988] mx8-img-md: Registered mxc_isi.0.capture as /dev/video0 [ 108.194417] mx8-img-md: Registered mxc_isi.1.capture as /dev/video1 [ 108.214117] mxc-md 32c00000.bus:camera: 2 deferring csi device registration 这是显示失败的日志。我不明白为什么媒体驱动程序尝试查找名为“isi”的节点,并且当两个节点相同时会失败。 到目前为止我已经尝试了很多事情。 其中一件重要的事情是,当我在 mipi_csi1 中设置 status="disabled" 时,csi2-sam 驱动程序就不会探测。 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano 回复:imx8.mp 无法设置相机 Hi, 感谢您对恩智浦半导体产品的关注, 确保您的传感器已正确初始化,请参考以下步骤。 用户必须通过以下步骤确保传感器能够正常工作: • 检查所有电源电压。 • 检查传感器MCLK频率。 • 检查重置和电源顺序。 • 确保传感器和 SoC 之间的 I2C 通信正常。 • 确保传感器初始化寄存器配置正确。 • 检查传感器数据通道和时钟通道信号。 • 确保传感器输出流在 SoC MIPI 捕获能力范围内(参见第 5 节)。 此致 回复:imx8.mp 无法设置相机 真正的问题是 CSI 驱动程序仅为 CSI1 调用,而不为 CSI0 调用。 [ 35.617099] imx8_mipi_csi2_sam: module is from the staging directory, the quality is unknown, you have been warned. [ 35.638426] mxc-mipi-csi2-sam 32e50000.csi: supply mipi-phy not found, using dummy regulator 我没有看到它被称为 32e40000.csi
查看全文
IMX RT1170 の POR 中に PWM ピンが High になる Hi NXP, GPIO_AD_00を使用してPWM信号を生成していますが、正常に機能しています。しかし、RT1170でPOR操作を実行するとします。その後、ボードが起動するまでPWMピンが高くなります。起動後、期待どおりにPWM信号が生成されています。しかし、ボードが起動するまでPORを実行している間、PWMピンが高くなることは望ましくありません。この問題について親切に助けていただけますか。 ありがとう&よろしく、 ラグナル。 Re: IMX RT1170 の POR 中に PWM ピンが High になる デフォルトでは、ピンにはプルイネーブルがあります。したがって、リセット中、パッドは起動するまでデフォルトのままになります。 よろしくお願いいたします オマル
查看全文
i.MX 8 - RTSP 流媒体支持 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 最近我在 i.MX 开发者博客上发布了一篇关于 Gateworks 插件 gst-variable-rtsp-server 对 i.MX 6 支持的文章。 现在,您也可以了解如何在 i.MX 8 SoCs 上使用该插件。 1. 准备图像。 为了使用 gst-variable-rtsp-server 插件,请准备好您的机器和发行版: 将以下行添加到 conf/local.conf: IMAGE_INSTALL_append += "gstreamer1.0-rtsp-server gst-variable-rtsp-server" 下载附带的补丁并通过以下方式应用: $ cd /sources/meta-fsl-bsp-release/ $ git am ~/Download/0001-Add-RTSP-support-for-i.MX-8-L4.14.78_ga1.0.0-or-olde.patch 注意:对于 L4.14.98_ga2.0.0 BSP,此补丁不是必需的! 然后,使用bitbake构建镜像并将其部署到SD卡。 2. 视频测试源示例 服务器 $ gst-variable-rtsp-server -p 9001 -u "videotestsrc ! v4l2h264enc ! rtph264pay name=pay0 pt=96" 客户 2. 视频测试源示例 服务器 $ gst-variable-rtsp-server -p 9001 -u "v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! v4l2h264enc ! rtph264pay name=pay0 pt=96" 客户 若要使用 VLC 或其他应用程序作为客户端,只需输入如下方图片所示的 URL: i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano 多媒体 关于:i.MX 8 - RTSP 流媒体支持 IMAGE_INSTALL_append += "gstreamer1.0-rtsp-server gst-variable-rtsp-server" 如果我说错了请纠正我,这里可能还需要添加 gstreamer1.0-plugins-good 和 gstreamer1.0-plugins-bad 插件。因为你在示例中使用了 v4l2h264enc。 因此,上述行应更改为: IMAGE_INSTALL_append += "gstreamer1.0-rtsp-server gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gst-variable-rtsp-server"
查看全文
如何:在构建结束时显示内存使用百分比 在嵌入式系统开发中,关注内存利用率是普遍的。在 S32 Design Studio 中,可以通过调用链接器选项在成功构建结束时轻松提供此信息。 在项目资源管理器面板中右键单击项目名称,然后从菜单中选择“属性”。导航到C/C++ Build -> Settings -> Standard S32DS C Linker -> Miscellaneous菜单。在其他选项部分中,单击添加。 在“输入值”弹出菜单中输入: 打印内存使用情况 单击“确定” ,然后单击“应用”并“关闭” 。 现在构建项目并查看控制台窗口中显示的内存使用情况信息。
查看全文
在 i.MX8MM 和 L5.4.24_2.1.0 上使用 KSZ9031 PHY   1. 硬件设计 KSZ9031 KSZ9031 的电源轨 [评论] 1. VDDIO:KSZ9031支持 1.8V 或 3.3V IO,这里我们使用 1.8V 2. Phy 地址:0x07 3. 复位引脚:使用 CPU 的 GPIO1_IO07 Pad 4. 125MHz 输出:未使用,未连接。 2. 软件 --在 u-boot 的设备树中 &fec1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_fec1>; phy-mode = "rgmii-id"; phy-handle = <&ethphy0>; fsl,magic-packet; status = "okay"; mdio { #address-cells = <1>; #size-cells = <0>; ethphy0: ethernet-phy@7 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <7>; }; }; }; [评论] 在U-Boot启动完成后,请务必在U-Boot命令行中设置MAC地址。 U-Boot > setenv ethaddr 00:01:02:03:04:05 U-Boot > save --在 Linux 内核的设备树中 pinctrl_fec1: fec1grp { fsl,pins = < MX8MM_IOMUXC_ENET_MDC_ENET1_MDC 0x3 MX8MM_IOMUXC_ENET_MDIO_ENET1_MDIO 0x3 MX8MM_IOMUXC_ENET_TD3_ENET1_RGMII_TD3 0x1f MX8MM_IOMUXC_ENET_TD2_ENET1_RGMII_TD2 0x1f MX8MM_IOMUXC_ENET_TD1_ENET1_RGMII_TD1 0x1f MX8MM_IOMUXC_ENET_TD0_ENET1_RGMII_TD0 0x1f MX8MM_IOMUXC_ENET_RD3_ENET1_RGMII_RD3 0x91 MX8MM_IOMUXC_ENET_RD2_ENET1_RGMII_RD2 0x91 MX8MM_IOMUXC_ENET_RD1_ENET1_RGMII_RD1 0x91 MX8MM_IOMUXC_ENET_RD0_ENET1_RGMII_RD0 0x91 MX8MM_IOMUXC_ENET_TXC_ENET1_RGMII_TXC 0x1f MX8MM_IOMUXC_ENET_RXC_ENET1_RGMII_RXC 0x91 MX8MM_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL 0x91 MX8MM_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL 0x1f MX8MM_IOMUXC_GPIO1_IO07_GPIO1_IO7 0x19 >; }; &fec1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_fec1>; phy-mode = "rgmii-id"; phy-handle = <&ethphy0>; phy-reset-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>; phy-reset-post-delay = <150>; phy-reset-duration = <10>; fsl,magic-packet; status = "okay"; mdio { #address-cells = <1>; #size-cells = <0>; ethphy0: ethernet-phy@7 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <7>; rxc-skew-ps = <1860>; txc-skew-ps = <1860>;            };     }; }; 3.关于PHY驱动 Drivers/net/phy/micrel.c 支持以下 PHY: * Support : Micrel Phys: * Giga phys: ksz9021, ksz9031, ksz9131 * 100/10 Phys : ksz8001, ksz8721, ksz8737, ksz8041 * ksz8021, ksz8031, ksz8051, * ksz8081, ksz8091, * ksz8061, * Switch : ksz8873, ksz886x * ksz9477 */ 在Linux内核配置中,应选择以下项: CONFIG_MICREL_PHY=y [注释] 如果 PHY 驱动未在 u-boot 中加载,即以太网没有 MAC 地址, Linux 将自动为其分配一个随机的 MAC 地址。 NXP TIC 团队 孙卫东 2020 年 11 月 18 日  
查看全文
HOWTO:S32デバッガとS32デバッグ・プローブを使用したS32G274A EVB用JTAGフラッシュ・プログラミング方法 S32プラットフォームIDE向けS32 Design Studioに付属するS32デバッガを利用すると、S32 Debug Probeのフラッシュ・プログラミング機能にアクセスできます。 注:現在はQSPIフラッシュのみがサポートされています。 準備 S32 Design Studio IDEをインストールします。 デバッグするデバイスの開発パッケージをインストールします。ここでは、S32G2xx開発パッケージを使用します。S32デバッガのサポート・コンポーネントには、フラッシュ・プログラミング操作を実行するのに必要なデバイス固有のPythonスクリプトが含まれるため、このパッケージは重要です。 フラッシュメモリデバイスにプログラムするアプリケーションを含むアプリケーションプロジェクトを開いてください。 HOWTO:S-Record/Intel HEX/バイナリ・ファイルの生成に記載される手順に従って、「Rawバイナリ」オプションを選択します。 プロジェクトをビルドし、バイナリ実行可能ファイルを生成します。このファイルは、IVTツールへのアプリケーション・バイナリ入力になります。IVTツールを使用してBLOBイメージを生成する必要があります。このイメージは、フラッシュ・メモリ・デバイスにプログラミングして、BootROMによりRAMにロードできます。 HOWTO:IVTツールを使用してBLOBイメージS32G274Aを作成するに記載される手順に従います。手順の完了後に得られるBLOBイメージ・ファイルは、デバイスにフラッシュできます。 手順 デバッグ構成メニューを開く 「S32 Debugger Flash Programmer」を選択し、右クリックして「新規」を選択します。 新しい構成の名前を入力し、「追加...」をクリックしてフラッシュするファイルを追加します。 「参照...」をクリックして、アプリケーション・バイナリが配置されているワークスペースからプロジェクトを選択します。 プロジェクトを選択し、「OK」をクリックします。 デフォルトでは、ELFファイルが使用されます。「プロジェクト内検索」をクリックして、バイナリ・ファイルを選択します。 .binファイルを選択し、「OK」をクリックします。 ここで、ベース・アドレスを入力する必要があります。通常は、0である可能性がありますが、他の要件がある場合もあります。「OK」をクリックします。 新しいイメージが必要とするメモリのみが消去される必要があるため、絶対にそうする必要がある場合のみ、「すべてのフラッシュ・メモリを消去」ボックスをオンにします。これで、デバッガ接続設定の構成準備が整いました。「デバッガ」タブをクリックします。 上から順に入力し、「デバイスを選択」をクリックします。 デバイスを選択し、OKをクリックしてください 適切な初期化スクリプトが自動的に設定されます。セットアップに合わせてDebug Probeの接続設定を設定します。完了したら、「適用」をクリックします。 フラッシュを開始するには、「デバッグ」をクリックします。 完了したら、デバッグ・パースペクティブが終了したスレッドに表示されます。 GDBでフラッシュをご活用ください! このアプリケーションは続いてBootROMによって起動されるため、デバッグするには注意が必要です。 「デバッグ構成」メニューにある「デバッガ」タブの初期化スクリプト・フィールドで「s32gxx_attach.py」を使用します。 「デバッグ構成」メニュー内の「起動」タブで次の調整を行います。 「イメージをロード」ボックスをオフにします。  「次の場所にプログラム・カウンタを設定:」ボックスをオンにし、「Reset_Handler」と入力します。
查看全文
ポーリングモードDS3.5 RTD300を使用したS32K312 CAN送受信の例 ******************************************************************************* このデモアプリケーションの目的は、  S32K3xx MCUでのFlexCAN IPドライバの使用についてのプレゼンテーションです。 この例では、FLEXCAN-0を使用して送受信を行います。使用するメッセージバッファ:-- #define RX_MB_IDX 1U #define TX_MB_IDX 0U. ボーレート:500 KBPS  ------------------------------------------------------------------------------ * テストハードウェア:S32K3X2EVB-Q172 * MCU: S32K312 * コンパイラ:S32DS3.5 * SDKリリース:RTD 3.0.0* デバッガー:PE micro* ターゲット: internal_FLASH********************************************************************************  
查看全文
i.MX 上 LT9211 桥接器的补丁   平台:i.MX8MP EVK,L6.1.22-2.0.0 LT9211是一款可以实现MIPI DSI信号到LVDS信号的转换的芯片。此补丁基于此主线驱动程序: https://github.com/nxp-imx/linux-imx/blob/lf-6.1.y/drivers/gpu/drm/bridge/lontium-lt9211.c 关键点 将lt9211_host_attach函数移至lt9211_attach以跳过桥接连接错误。 图形与显示 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux
查看全文
s32k3x4 -t172 debug error このエラーが発生する理由 Re:s32k3x4-t172デバッグエラー プローブを交換し、その動作は正常にありがとうございます Re:s32k3x4-t172デバッグエラー PEMicro ソフトウェアと S32DS Update 14 を更新しましたが、それでもご指摘の問題を再現できません。他の開発ボードはありますか?また、同僚がこの問題に遭遇したことはありますか? また、ssb.PNGを見ると、インストールしたS32K3 RTDは、先ほどおっしゃったRTD 5.0.0ではなく、バージョン3.0.0 P01であることがわかります。 Re:s32k3x4-t172デバッグエラー 私はすでにすべてのソフトウェアをインストールしていますが、エラーメッセージが表示されていますが、Dioの例では、4〜5回試した後は機能しますが、周辺機器は機能しません Re:s32k3x4 -t172デバッグエラー 私はこの問題を抱えていません、私のインストールの詳細を比較してください Re:s32k3x4 -t172デバッグエラー オンボード OPEN SDA デバッガのみを使用しています Re:s32k3x4 -t172デバッグエラー s32DSのバージョンは3.5です および RTD 5.0.0 はい s32k3x4evb-T172 リビジョンB2 オープンsdaで確認するだけ Re:s32k3x4 -t172デバッグエラー 教えてください: S32DS v3.5 にはどのバージョンの更新プログラムをインストールしましたか? S32K3 RTDのどのバージョンですか? PEMicro Softwareを更新しましたか? どのS32K3開発ボードですか?S32K3X4EVB-T172 RevBまたはRevB2? オンボードのOpenSDAではこの問題は発生せず、外部PEMicro Multilinkを使用している場合にのみ発生しました。 Re:s32k3x4 -t172デバッグエラー 外部デバッガは使用していませんが、オンボードデバッガのみを使用しています Re:s32k3x4 -t172デバッグエラー 構成方法とダウンロード先 Re:s32k3x4 -t172デバッグエラー Hi オンボードのOpenSDA(J40)デバッガを使用することをお勧めします。 外部のPEMicro Multilinkデバッガを使用していますか?その場合は、次の点に注意してください。 「USB Multilink FX RevAおよびUniversal Rev AおよびBは、レガシーUF32 USBデバイスに基づいています。これらは、最新のプラグイン/ソフトウェアパッケージの下でPEmicroによって積極的にサポート/検証されなくなりました。 最新のサポートを受けるには、Multilink FX Rev C、Multilink Universal Rev C/D、またはMultilink ACPが必要です。 よろしくお願いいたします ロビン ------------------------------------------------------------------------------- 手記: - この記事があなたの疑問に答えたら、「正解をマーク」ボタンをクリックしてください。ありがとうございます! - 最後の投稿から7週間スレッドをフォローしていますが、その後の返信は無視されます 新しいスレッドを開き、後で関連する質問がある場合は、閉じたスレッドを参照してください。 -------------------------------------------------------------------------------
查看全文
如何:将 IAR Eclipse 插件安装到 S32 Design Studio 3.4 中 S32 Design Studio (S32DS) 支持 IAR Eclipse 插件,使用户能够使用 ARM 的 IAR 工具链构建和调试 S32DS 项目。 本文档介绍了如何安装此插件以及如何在新项目向导中启用 IAR。 S32DS 3.4 的当前版本支持 IAR 编译器 v9.x。 IAR eclipse 插件安装完成后,您应该能够直接在 S32DS Eclipse 环境下使用 IAR 编译器/调试器接口创建、构建和调试新的 S32DS 项目(包括 SDK)。 安装说明 首先,确保您已安装 IAR Embedded Workbench 并拥有 IAR 的有效许可证。现在我们来开始eclipse插件的安装。 1.安装IAR插件管理器 进入菜单“帮助”->“安装新软件”         单击“添加...”按钮添加一个新的 IAR 存储库,位于此处: http://eclipse-update.iar.com/plugin-manager/1.0                   勾选“我接受许可协议的条款”,点击“完成”即可接受未签名内容的软件 最后继续安装。安装插件后,系统会要求您重新启动 S32DS 再次,转到菜单“帮助”->“安装新软件”,然后单击“添加...”按钮以添加位于此处的新 IAR 存储库: http://eclipse-update.iar.com/arm/9.10/                   勾选“我接受许可协议的条款”,点击“完成”即可接受未签名内容的软件 最后继续安装。安装插件后,系统会要求您重新启动 S32DS 每当您创建新的工作区时,系统都会要求您输入 IAR Embedded Workbench IDE 的路径。进入菜单“Window”->“Preferences”,点击“IAR Embedded Workbench”菜单,在“Installed IAR Toolchains”中选择“IAR Toolchain for Arm – (9.x)”,然后输入IAR Embedded Workbench IDE的安装路径。            2.在IAR Embedded Workbench插件管理器中配置IAR插件 启动 IAR 插件管理器(菜单“帮助”->“IAR Embedded Workbench 插件管理器” )          选择ARM版本(9.10-)并点击“安装”按钮。          选择显示的所有 IAR 组件,然后单击“下一步”按钮继续安装。 3. 在项目向导中新建IAR项目 您现在可以在 S32DS 中创建一个新项目,并选择 ARM 的 IAR 工具链而不是默认的 GCC 编译器。          调试器选择中应该会出现一个新项目 - “IAR 插件调试器”。如果您打算使用 IAR 支持的探针进行调试,请选择此选项(例如I-喷气式飞机          现在,IAR 特定的面板和设置显示在启用了 IAR 选项的新 S32DS 项目的项目属性中(见下文)。          调试配置面板中有一个新类别“IAR C-SPY 应用程序”,其中包含选择了 IAR 调试插件选项的项目的所有调试配置。          调试器视角现在提供了几个 IAR 特定的视图和功能。 享受使用 S32DS 中的 IAR Eclipse 插件进行构建和调试! 第三方(高级)插件 激活 | 安装 | 许可 | 安装程序下载
查看全文
通过以太网从深度睡眠中唤醒 iMX93EVK 背景   局域网唤醒 (Wake-on-LAN,WoL) 是一种以太网计算机网络标准,它允许通过网络消息将计算机从睡眠模式开启或唤醒。 该消息通常由连接到同一局域网的设备上运行的程序发送到目标计算机。 以太网连接(包括家庭和工作网络、无线数据网络以及互联网本身)均基于计算机之间发送的帧。 WoL 通过一种特殊设计的帧(称为“魔术包”)来实现,该帧会发送到网络中的所有计算机,其中就包括需要被唤醒的计算机。魔术包包含目标计算机的 MAC 地址。MAC 地址是每个网络接口控制器 (NIC)/ 以太网控制器中内置的标识号,它使 NIC/ 以太网控制器能够在网络上被唯一识别和寻址。 什么是 WOL Magic 包? 魔术包是一种帧,通常以广播形式发送,其有效载荷中包含 6 字节的全 255(十六进制表示为 FF FF FF FF FF FF),后跟目标计算机 48 位 MAC 地址的 16 次重复,总长度为 102 字节。 它通常作为 UDP 数据报发送到端口 0(保留端口号)、7(回显协议)或 9(丢弃协议),或者直接通过以太网发送,使用的以太网类型为 0x0842。 配置 iMX93EVK 以通过以太网 WOL 魔术包唤醒 前提条件:- 从 Microsoft Store 安装 Windows 版 “Wake on LAN” 工具。 该工具使用端口 7 将魔术包作为广播发送到网络中的设备。 步骤 1:修改 dts 以启用 eth1 的唤醒功能   在以下 dts 中: arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts 你会看到对应以太网(eth1,即 eqos)的节点条目。 向该节点添加 fsl,magic-packet;   构建更改后,使用 imx93evk 镜像启动。 步骤 2:启用局域网唤醒功能 在 Linux 用户空间中,局域网唤醒功能默认是禁用的,要启用它,请运行:  ethtool -s eth1 wol g 现在,您已准备好通过以太网WOL数据包唤醒imx93evk。 通过 “echo mem > /sys/power/state” 命令将 iMX93 置于深度睡眠状态。   步骤 3:通过 Windows 版 Wake On LAN 工具发送 WOL 魔术包以唤醒 iMX93EVK 请确保设备连接到同一局域网,例如 imx93evk 和笔记本电脑连接到同一个 L2 交换机。 将你的 iMX93EVK 设备添加到 Wake on LAN 软件中,你需要提供 iMX93EVK 上连接 RJ45 电缆的以太网的 MAC 地址 [可从 “ifconfig -a” 命令的输出中获取]。 添加设备后,界面将类似如下所示: 右键单击 Wake on LAN 界面中已注册的 “imx” 设备,然后点击 “Send WOL (magic packet)”。 执行此操作后,WOL 包将从同一网络中的笔记本电脑 / PC 发送到你的 iMX 设备,iMX 将从深度睡眠中被唤醒。   希望对您有所帮助。如有任何问题或意见,请随时提出。
查看全文
S32DSのピン構成エラー こんにちは、皆さん 初めてS32K376用のピン構成ツールを使用しようとしています 「 」ボックスでプロジェクトを選択した後、解決方法がわからない次のエラーが発生します。「プロジェクトには、インポートする構成/ソースファイルが含まれていません」 「New->S32DSアプリケーションプロジェクト」から、以下の通りプロジェクトを作成しました。 エラーなしでプロジェクトをビルドできます。ピン構成ツールに切り替えると、これが私が見るものです myprojectを選択すると、エラーが発生します。 私が欠けているものについて何か考えはありますか? ありがとうございました。 Re:S32DSのピン構成エラー ジュリアンに感謝します、問題は解決しました Re:S32DSのピン構成エラー Hi @rogi, RTD 3.0.0を使用しているようです。このリリースはS32K376をサポートしていません。RTD 4.0.0/5.0.0 のリリース ノートを参照してください。 Best regards, Julián Re:S32DSのピン構成エラー Hi, 答えをありがとう。 写真に写っているS32k376のSDKはどこで入手できますか? S32DSにautosar RTD拡張機能をインストールするS32k396でなんとかそれを行うことができますが、S32k376をサポートするものが見つかりません Re:S32DSのピン構成エラー Hi @rogi アプリケーションを作成するときは、RTD/SDK をプロジェクトにアタッチする必要があります。 Best regards, Julián
查看全文
Linux における規制ドメインおよび Wi-Fi 送信電力レベル管理(国別規制設定) デフォルトの初期化ケース デフォルトでは、国の規制設定が定義されていない場合、WW(ワールドワイドセーフ設定)を使用します。この設定では、世界中で許可されているバンドのみで送信し、TX 電力はすべての国の規制に適合します。   国の設定 1/ APモードで動作している場合: - 通常、国コードを設定します(例: country_code=JP)をhostapd.confに設定して国を定義します。 - この国コードは、hostapd.conf で ieee80211d=1 を設定した場合、接続されているすべての STA に通知されます。 - 国は "iw reg set" コマンドでも設定できます。   2/ STAモードで動作する場合 - 国コードは "iw reg set" コマンド、または wpa_supplicant.conf(例: country=jp)で設定できます。 - 802.11d が有効な AP に接続すると、STA は AP の国設定に切り替わります(この動作は driver パラメータ country_ie_ignore=1 を追加することで無効化できます)。   国が設定されると: - その国で許可されているチャンネルでのみ送信します。 - その国で定められた最大 TX 電力で送信します。 - その国で DFS チャンネルとして定義されているチャンネルでは、DFS 機能を使用する場合があります。   TX パワー設定   1/ デフォルトでは、Linuxの規制設定(/lib/firmware/regulatory.db、db.txtから生成)を使用します。 これらの設定により、国ごとに許可されるチャンネル、DFS フラグ、および最大 TX 電力が定義されます。 詳細は「Regulatory db」セクションを参照してください。   2/ Linux の規制設定は、次の方法で上書きできます: a. cntry_txpwr=0 および txpwrlimit_cfg=nxp/txpower.bin ドライバー パラメータ(txpower.conf(channel/MCS→txpower)から生成。詳細は AN13009 を参照)。 すべての国で同一の設定(静的)。 db.txt のチャンネル/フラグと、db.txt と txpower.bin/rgpower.bin との間で決定される最小 TX 電力を使用します。 b. cntry_txpwr=1(nxp/txpower_XX.bin ファイル(txpower.conf(channel/MCS→txpower)から生成。詳細は AN13009 を参照)を使用) 各国 XX ごとに txpower_XX.bin ファイルが 1 つ必要です(例: iw reg set XX により動的にロード)。 db.txt のチャンネル/フラグと、db.txt と txpower_XX.bin との間で決定される最小 TX 電力を使用します。   cntry_txpwr txpwrlimit_cfg TX出力制限 方法 0 nxp/txpower.bin nxp/txpower.bin (スタティック) V1 1 - nxp/txpower_XX.bin (動的) V1 cfg     デフォルトの TX 電力テーブルは提供されていますが、顧客はハードウェアに応じてこれらの TX 電力設定を調整できます。 「AN13009 Wi-Fi Tx Power Management in Linux」を参照してください。       Regulatory db   出典: https://wireless.wiki.kernel.org/en/developers/Regulatory/wireless-regdb   Wi-Fi の規制設定(許可されるチャンネルなど)は db.txt に定義され、regulatory.db に変換されて /lib/firmware に保存されます。 公式の db.txt をここから取得し、以下のコマンドで regulatory.db を生成できます。   git clone git://git.kernel.org/pub/scm/linux/kernel/git/wens/wireless-regdb.git 作成する   regulatory.db の整合性は Linux カーネルによって検証されます。 以下のカーネル設定により REGDB の署名チェックを無効化できます: CONFIG_EXPERT=y CONFIG_CFG80211_CERTIFICATION_ONUS=y # CONFIG_CFG80211_REQUIRE_SIGNED_REGDB が設定されていない   カーネルを再構築してフラッシュします。 scp Image [email protected]:/run/media/mmcblk0p1/      iw reg コマンドの例とその他の注意事項   root@imx8mqevk:~# iw reg get global country 00: DFS-UNSET         (2402 - 2472 @ 40), (N/A, 20), (N/A)         (2457 - 2482 @ 20), (N/A, 20), (N/A), AUTO-BW, PASSIVE-SCAN         (2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, PASSIVE-SCAN         (5170 - 5250 @ 80), (N/A, 20), (N/A), AUTO-BW, PASSIVE-SCAN         (5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW, PASSIVE-SCAN         (5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, PASSIVE-SCAN         (5735 - 5835 @ 80), (N/A, 20), (N/A), PASSIVE-SCAN         (57240 - 63720 @ 2160), (N/A, 0), (N/A) root@imx8mqevk:~# iw reg get global country FR: DFS-ETSI         (2400 - 2483 @ 40), (N/A, 20), (N/A)         (5150 - 5250 @ 80), (N/A, 23), (N/A), NO-OUTDOOR, AUTO-BW         (5250 - 5350 @ 80), (N/A, 20), (0 ms), NO-OUTDOOR, DFS, AUTO-BW         (5470 - 5725 @ 160), (N/A, 26), (0 ms), DFS         (5725 - 5875 @ 80), (N/A, 13), (N/A)         (57000 - 66000 @ 2160), (N/A, 40), (N/A) デフォルトでは(国が設定されていない場合)、ワールドドメインを使用しています。これは最も制限が厳しいです。 次に、ドライバー モジュールのパラメータや wpa_supplicant.conf などを使用して国コードを設定するか、802.11d によりアクセスポイントから自動的に提供される国コードを取得できます。これにより、規制ドメイン(許可されるチャンネルなど)が更新されます。 「iw reg get」コマンドを使用して国の設定を確認することができます。 規制ドメインは、wpa_supplicant.conf で設定するチャネルリストよりも優先されます。 OS LINUX 製品: Wi-Fi 88MW32X 製品: Wi-Fi 88W8801 製品: Wi-Fi 88W8897 製品:WiFi 88W8987 製品: Wi-Fi 88W8997 製品:WiFi 88X9098 製品: WiFi IW416 製品: WiFi IW6XX 製品: WiFi RW6XX プロトコル:Wi-Fi
查看全文
例: MCAL S32K311 MEM_InFls DS3.5 RTD300 ******************************************************************************* このデモアプリケーションの目的は、 MEM_InFls MCAL ドライバを S32K3x1 MCU で使用する方法を示すことです。 本例では、MEM_InFls ドライバを使用して、FLASH メモリアドレス 0x48_0000 に 128 バイトを書き込みます。 ------------------------------------------------------------------------------ * テストハードウェア: S32K31XEVB‑Q100 * MCU: S32K311 * コンパイラ: S32DS 3.5 * SDK リリース: RTD 3.0.0 * デバッガ: PEmicro * ターゲット: internal_FLASH ******************************************************************************** 結果:-- FLASH 書き込み/消去コードが配置されている RAM 領域:-- RAM サイズの最大アドレスから 256 バイト下にコードを配置 0x20407DAA = 541097386 MAP ファイルおよびリンカ・ファイルによるフラッシュルーチン格納に必要な RAM サイズ:-- 0x00406FF0 - 0x00406F78 = 120 バイト S32K3 フラッシュメモリ用語 :--
查看全文
imx8mp以太网mdio时钟 Hello, 我们有基于 NXP 的 imx8mp 和内核 6.6.23 的自己的设计。 我们还有以太网接口,这是设备树配置: &fec { pinctrl 名称 = “默认” ; pinctrl-0 = <&pinctrl_fec>; phy模式= “rmii” ; phy 句柄 = <&ethphy0>; phy 供应 = <&reg_on_veth>; 状态 = “好的” ; mdio { #地址单元格 = <1>; #大小单元格 = <0>; ethphy0:以太网-phy @0 { 兼容= “以太网-phy-ieee802.3-c22” ; reg = <0>; nxp,rmii-refclk-in; smsc,禁用能量检测; }; }; }; pinctrl_fec: fecgrp { fsl,引脚=< MX8MP_IOMUXC_SAI1_MCLK__ENET1_TX_CLK 0x0000001f MX8MP_IOMUXC_SAI1_RXD2__ENET1_MDC 0x00000106 MX8MP_IOMUXC_SAI1_RXD3__ENET1_MDIO 0x00000106 MX8MP_IOMUXC_SAI1_RXD4__ENET1_RGMII_RD0 0x00000091 MX8MP_IOMUXC_SAI1_RXD5__ENET1_RGMII_RD1 0x00000091 MX8MP_IOMUXC_SAI1_TXD0__ENET1_RGMII_TD0 0x0000001f MX8MP_IOMUXC_SAI1_TXD1__ENET1_RGMII_TD1 0x0000001f MX8MP_IOMUXC_SAI1_TXD4__ENET1_RGMII_TX_CTL 0x0000001f MX8MP_IOMUXC_SAI1_TXD6__ENET1_RX_ER 0x00000106 MX8MP_IOMUXC_SAI1_TXD7__ENET1_TX_ER 0x00000106 MX8MP_IOMUXC_SAI1_TXFS__ENET1_RGMII_RX_CTL 0x00000091 >; }; 我们在使用“ifconfig eth0 down”命令时遇到了问题。大多数时候,信号 ENET1_MDC(AH9)保持高电平,有时保持低电平。 我们需要确保这个信号变低。当此信号为高并且 PHY 的供电被移除时,一些毫安电流将通过此引脚驱动。 此致 天使 回复:imx8mp以太网mdio时钟 Hello, 谢谢你的回答。 我已经添加了用于睡眠的 pinctrl 手柄,当我将接口关闭时以及当我进入待机模式时,它似乎都会将引脚驱动到低位。 谨致问候并致以感谢 回复:imx8mp以太网mdio时钟 Hi, 感谢您对恩智浦半导体产品的关注, 您可以尝试添加另一个用于睡眠的 pinctrl 句柄,当接口关闭时,通过文件系统将 MDC 引脚作为 GPIO 写入。 此致
查看全文
gpsd 文件中的 GPSD 波特率设置 Hi, 我只是想在 gpsd 文件中将我的 GNSS 端口的波特率设置为 38400,如果有人知道请帮助我。 以下是当前 gpsd 文件内容 START_DAEON="真" GPSD_OPTIONS="" 设备=“/ dev / ttyLP3” USBAUTO="true" GPSD_SOCKET =“/var/run/gpsd.socket” 此致, 布林托 回复:GPSD 文件中的 GPSD 波特率设置 你好, 您可以选择 udev 规则或 systemd 服务在 gpsd 服务之前设置波特率。 这是 udev 规则: ACTION=="add", SUBSYSTEM=="tty", KERNEL=="ttyLP3", RUN+="/bin/stty -F /dev/%k 38400" 添加规则: udevadm control --reload udevadm trigger --action=add --subsystem-match=tty 当系统中检测到 ttyLP3 时应该调用此函数。 此致, 志明 回复:GPSD 文件中的 GPSD 波特率设置 我检查了系统日志并确认 gpsd 正在运行 并且我可以正确接收 GNSS 数据。 但是,gpsd 似乎不会自动将波特率设置为 38400。我必须使用以下方法手动配置它: stty -F /dev/ttyLP3 38400 只有运行此命令后,gpsd 才能按预期工作。但是在主板重启后,波特率重置为 9600,我必须手动重新设置它。 有没有办法让 gpsdalways 在启动时使用 38400 波特?如果您有任何建议,请告诉我。 此致, 布林托 回复:GPSD 文件中的 GPSD 波特率设置 Hello, 您是否尝试设置 38400 波特率,然后从系统获取日志? 参考指南,您可以从syslog获取日志 日志 什么时候 GPS 作为守护进程运行(不在前台),并将其所有日志发送到 系统日志(3)。使用设施“LOG_USER”以标识“gpsd”发送日志。 如果你正在使用 syslog-ng,那么你可以发送所有 GPS 记录到文件 /var/log/gpsd 。把这个放在你的 /etc/syslog-ng/syslog-ng.conf 文件: destination gpsdf { file("/var/log/gpsd"); }; filter f_gpsd { program("gpsd"); }; log { source(src); filter(f_gpsd); destination(gpsdf); }; 此致, 志明 回复:GPSD 文件中的 GPSD 波特率设置 出现类似错误 连接到 gpsd 时出错:[Errno 104] 对端重置连接 此致, 布林托 回复:GPSD 文件中的 GPSD 波特率设置 你好, 请尝试添加GPSD_OPTIONS="-b -s 4800 " 此致, 志明
查看全文
S32G_M7_STBYFULLBOOT_A53STR このドキュメントとプロジェクトは、S32G M stbyデモとLinux STRデモを1つのデモに統合し、高速起動を実現する方法を説明しています。中国語版: 本文说明如何在S32G2 RDB2板上搭建 一个M7 MCAL Standby Fullboot GPIO resume Demo加A53 Suspend to RAM的Demo,主要的 应用场景是电动汽车的快速启动。 G3与更新版本BSP的支持情况与此类 似,不再另外说明,客户可以自行参考开发。 请注意本文为培训和辅助文档,本文不是 官方文档的替代,请一切以官方文档为准。 目录 1 参考资料说明与声明 .................................................. 2 2 STBY+STR的硬件注意点 .......................................... 3 3 修改M7 MCAL Standby Demo代码 ............................ 5 3.1 Clock相关修改 ........................................................ 5 3.2 MCU相关修改 ......................................................... 5 3.3 UART Clock相关修改 ............................................. 7 3.4 Port相关修改 .......................................................... 7 3.5 I2C相关修改 ........................................................... 7 3.6 实现M核进入STDY状态等待功能 ........................... 8 3.7 Main函数的修改 ..................................................... 8 4 修改Bootloader工程来支持同时Boot M/A核Demo ... 10 4.1 I2C Clock相关修改 ............................................... 10 4.2 Port相关修改 ........................................................ 11 4.3 其它修改 ............................................................... 12 5 修改A53 Linux代码 .................................................. 13 6 Demo 运行测试 ........................................................ 13 6.1 硬件连接 ............................................................... 13 6.2 镜像烧写 ............................................................... 13 6.3 Demo运行 ............................................................ 14 7 工程发布包............................................................... 15 8 未来开发建议 ........................................................... 17 8.1 M/A核同步机制 ..................................................... 17 8.2 功能安全与信息安全 ............................................. 17 9 遗留问题 .................................................................. 17 9.1 IPCF STR支持 ...................................................... 18 9.2 PFE Slave STR支持 ............................................. 18 注意以下说明与声明: 说明: 汽车网关有快速启动要求,而电动车因为驻车时有更大的电池提供待机电源,所以希望是使 用Linux 的suspend to ram 的功能来实现Linux 的快速启动,而在S32G 上则需要考虑将M 核的 Standby 功能 与A 核的STR 功能 结合起来,目前可用的资源包括:  从BSP32 起支持ATF,可以支持Linux 端的STR 功能,文档《S32G_Linux_STR_V1-*.pdf》 (John.Li)说明linux STR 的原理和与M7 Standby Demo 结合时所需要的修改。  NXP 的M7 内部standby demo,可以支持M 核端的standby 功能,支持full boot 和standby ram boot。文档《S32G_Standby_Demo_V4-*.pdf》(John.Li)有详细说明,本文使用MCAL full boot+GPIO resume Demo。  本Demo 与本文主要说明如何将这两个Demo 结合起来,形成一个整体的Demo。  由于需要Boot M 核加A 核,所以也需要Bootloader 工程的支持,文档 《S32G_Bootloader_V1-*.pdf》(John.Li)说明了如何创建一个MCAL sample 加Linux 的 Bootloader 工程。 声明: 请注意:  M7 standby demo 本来为NXP 内部Demo,不保证运行质量。而Linux 本身也是reference software。  Linux STR 本身会引入比较复杂的电源管理切换,也会引起系统级的不稳定性。  本文所说的方法也是实验性质,不保证运行质量。 所以客户应该谨慎决定其产品功能并自行保证其产品质量,本文及本Demo 仅为Demo 性质。 この記事では、S32G2 RDB2ボード上でMCAL Standby Fullboot GPIO resume Demo plus A53 Suspend to RAMのデモを構築する方法について説明します。主な適用シナリオは、電気自動車の迅速な始動です。 G3および新しいバージョンのBSPのサポート状況はこれと同様で、追加の説明はありません。顧客は独自に開発する際にこれを参照できます。  この記事はあくまでもトレーニングおよび補足文書であることにご留意ください。この記事は公式文書の代わりにはなりません。公式文書をご参照ください。 目次 1    参考資料およびステートメント2 2   STBY+STRハードウェア・チェックポイント。3 3   修正されたM7 MCAL Standby Demoコード。5 3.1  クロックの修正。5 3.2 MCU関連の修正。6 3.3 UARTクロックに関する修正。7 3.4 ポートに関する修正。8 3.5 I2C関連の修正。8 3.6 MコアがSTDYに入る待機機能を有効にします。9 3.7 主要機能の修正。9 4   ブートローダー・プロジェクトを修正して、同時M/Aコアデモをサポート  11 4.1 I2Cクロックに関する修正。11 4.2 ポート関連の修正。11 4.3  Others modificaiton. 13 5   A53 Linuxコードを修正。14 6   デモの実行とテスト。14 6.1 ハードウェアリンク。14 6.2 イメージの書き込み。14 6.3 デモ実行中。15 7   プロジェクトのリリース・パッケージ。16 8   将来の開発に関する提案17 8.1 M/Aコア同期メカニズム.. 17 8.2 機能安全と情報セキュリティ。17 9   残りの問題。18 9.1 IPCF STRサポート 18 9.2 PFEスレーブSTRサポート 18 必要に応じて参照: S32G_Linux STR このドキュメントは、S32G Linux STRの詳細を説明し、M stdyデモと統合するための変更について説明します https://community.nxp.com/t5/NXP-Designs-Knowledge-Base/S32G-Linux-STR/ta-p/1652680 S32G スタンバイデモ プロジェクトは新しいMcalスタンバイ・デモを作成し、その詳細を説明します https://community.nxp.com/t5/NXP-Designs-Knowledge-Base/S32G-M-kernel-Standby-demo-and-how-to-porting-to-Mcal/ta-p/1556313 S32Gブートカスタマイズドキュメント mcal&linuxを実行するためにブートローダーを実行する方法 https://community.nxp.com/t5/NXP-Designs-Knowledge-Base/S32G-Bootloader-Customzition/ta-p/1519838 オートモーティブ Re: S32G_M7_STBYFULLBOOT_A53STR 問題の状態を更新: 次のように変更してください。EB を使用してビルドは成功しますが、起動に失敗しました。コンソール出力はありません。 - bootloader >> MCU >> MCU >> 一般 >> コンフィグバリアント => バリアントプリコンパイル - Bootloader >> SysDal >> SysDal >> General >> SysDalGeneral の sysdal からのMCUの有効化 = チェックなし Hi John, ビルドエラーに遭遇しましたか? ありがとうございます。 Re: S32G_M7_STBYFULLBOOT_A53STR Hi John, IVTツールを開きたいのですが、いくつか問題が発生しました: ソフトウェアのバージョンが一致していないように見えますか? もう1つの問題はビルドが失敗したことです: いくつかのステップを飛ばしてもいいですか? ありがとうございます。 アレン
查看全文