1 资料

1.1、MCU

1.2、GUI

        emWin

        emWin接口文档

1.3、论坛

         NXP 论坛   【野火】《i.MX RT 库开发实战指南》连载一       i.MX RT博客集锦

1.4、工具           

            RT量产神奇

1.5、好的入门博客 

           痞子衡博客

           NXP新出的Cortex-M7核单片机imx.rt1050调试心得

1.6、摄像头资料

          摄像头原理            摄像头原理          红外摄像头        拜尔滤光片   白平衡  摄像头 CSI接口

 1.7、 TFT屏幕资料         

             ILI9341   RGB接口 MPU接口   LCD各种接口

2、工具使用

2.1、NXP MCU Boot Utility     

                MCU Boot Utility 使用说明

              问题1: 工具需要放在根目录下,避免提示路径问题

               问题2:

 

2.2、MCUXpresso  

2.2.1 DAP调试问题

            问题1、调试无法进入主程序

             

              可以再下拉框先擦除再调试

           

 

Could not find CFI compliant flash device

 

2.2.2、Jlink调试问题

  1) Jlink 调试链接不上  Error in final launch sequence

出现这个的原因是由于我装 MCUXpresso  之后,又重新装了jlink工具,导致调试的时候找不到jlink,重新安装MCUXpresso就可以了

 

 

3、在使用外部Flash调试,需要将开发板子上的拨码开关打到相应的外设启动位置

2.2.3、如何生成bin

1 、打开菜单栏:Project (工程)-> Properties (属性),属性对话框如下:

 

2 、在Properties (属性)窗口里, 打开 "C/C++ Build" 然后选择 "Settings".

3 、选择 "Build steps" 选项卡

4 、在"Post-build steps - Command" 输入框里会看到如下命令:

arm-none-eabi-size ${BuildArtifactFileName}; # arm-none-eabi-objcopy -O binary ${BuildArtifactFileName} ${BuildArtifactFileBaseName}.bin ; checksum -d ${BuildArtifactFileBaseName}.bin;

5、去掉中间的 # ;

6、点击应用Apply;然后OK。

7、build project,*.bin自动生成,下图:

 

3、调试问题

3.1 QSPI Flash调试问题

          RT106F 芯片由于内部没有Flash,所以都是外挂FLash,外挂Flash主要为 Hyper Flash 跟 QSPI Flash。内部通过XIP技术是可以实现外部Flash调试的。Flash有1.8V跟3.3V的区别,这里要注意,设计板子的时候需要考虑NVCC_SD1的电源。我们刚开始用了华邦的W25Q256FVEIQ(从非代理拿的,说是自己买的华邦晶元封装的),一直没法进入Flash调试。后面又换成开发板上的  IS25WP064AJBLE ,也还是不行,但在开发板子上是可以的。后对了一下开发板的Boot配置,发现,需要将  BOOT_MODE[1] 跟 BOOT_MODE[0]配置为10即Internal  Boot模式,BOOT_CFG[10] BOOT_CFG[9] BOOT_CFG[8] 配置成 000即3线SPI模式才可进入调试。在用IS25WP064AJBLE的时候虽然能进入调试,但是跑两下就异常了。所以我们重新从原厂那里128MBits 跟 256Mbits的3.3V  Flash,进入后调试正常。

          不同的QFlash 配置也不一样,在sln_vizn_iot_flexspi_nor_config.c 中

//W25Q128
const flexspi_nor_config_t qspiflash_config = {
    .memConfig =
        {
            .tag              = FLEXSPI_CFG_BLK_TAG,
            .version          = FLEXSPI_CFG_BLK_VERSION,
            .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromSckPad,//kFlexSPIReadSampleClk_LoopbackFromDqsPad,
            .csHoldTime       = 3u,
            .csSetupTime      = 5u,
            // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
            .sflashPadType = kSerialFlash_4Pads,
            .serialClkFreq = kFlexSpiSerialClk_120MHz,
            .sflashA1Size  = 8u * 1024u * 1024u,
            .lookupTable =
					/*
						{
								// Read LUTs
								FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
								FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
						},
					*/
						{
								// Read LUTs
								FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 0x18),
								FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
						},
        },
    .pageSize           = 256u,
    .sectorSize         = 4u * 1024u,
    .blockSize          = 64u * 1024u,//256u * 1024u,
    .isUniformBlockSize = false
};

//W25Q256 
const flexspi_nor_config_t qspiflash_config = {
    .memConfig =
        {
            .tag = FLEXSPI_CFG_BLK_TAG,
            .version = FLEXSPI_CFG_BLK_VERSION,
            .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
            .csHoldTime = 3u,
            .csSetupTime = 3u,
            // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
            .sflashPadType = kSerialFlash_4Pads,
            .serialClkFreq = kFlexSpiSerialClk_100MHz,
            .sflashA1Size = 8u * 1024u * 1024u,
            .lookupTable =
                {
                    // Read LUTs
                    FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
                    FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
                },
        },
    .pageSize = 256u,
    .sectorSize = 4u * 1024u,
    .blockSize = 256u * 1024u,
    .isUniformBlockSize = false,
};

//IS25MP064
const flexspi_nor_config_t qspiflash_config = {
    .memConfig =
        {
            .tag              = FLEXSPI_CFG_BLK_TAG,
            .version          = FLEXSPI_CFG_BLK_VERSION,
            .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
            .csHoldTime       = 3u,
            .csSetupTime      = 3u,
            // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
            .sflashPadType = kSerialFlash_4Pads,
            .serialClkFreq = kFlexSpiSerialClk_100MHz,
            .sflashA1Size  = 8u * 1024u * 1024u,
            .lookupTable =
                {
                    // Read LUTs
                    FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
                    FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
                },
        },
    .pageSize           = 256u,
    .sectorSize         = 4u * 1024u,
    .blockSize          = 256u * 1024u,
    .isUniformBlockSize = false,
};

3.2  程序卡在vPortValidateInterruptPriority

           原理:探究

          由于使用了I2C,需要将I2C的中断优先级设置一下,避免中断会卡死再 vPortValidateInterruptPriority

          NVIC_SetPriority(LPI2C1_IRQn, configMAX_SYSCALL_INTERRUPT_PRIORITY - 1);

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐