NXP IMXRT106F 活体人脸识别芯片 调试记录
一、资料1)MCU2)GUI
1 资料
1.1、MCU
1.2、GUI
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屏幕资料
2、工具使用
2.1、NXP 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);
更多推荐
所有评论(0)