NXP MIMXRT1052CVL5B + 正点原子 + MCUXpresso IDE 开发环境搭建
说明
因为公司规定不能使用盗版软件,而正点原子提供的开发例程又都是基于keil开发的,所以只能放弃使用多年的老朋友,老老实实的开始倒腾免费开源的 MCUXpresso IDE。因为有用过 RT-Thread Studio 的经验,本来以为换上这个同类型的套壳 IDE 会是信手拈来的事,结果经历了无数翻车,惨不忍睹呀。好在是刚入职新公司,也是第一次用 NXP 平台,没有被领导 K 死。 但是,好处是在被拆腾的过程中,也基本了解了 分散加载, J-Link, J-Flash 下载的一些知识。想当年这些都是被 Keil 包装好,基本没去了解过,开发也是拿来就用了。
资料准备
- 正点原子 号令者开发板一套。题外话,这个板子可能太久,用的人也少吧,配套的资料更新好像很少的样子。
- IDE 下载地址:点这里
- SEGGER J-Link 驱动下载地址:点这里
一切就绪,搞他
安装 IDE 及生成基本工程
- 安装 IDE, 这个没什么好说的,一路 next 就是了
- 安装完启动就有一个欢迎界面。可以选择创建新工程,导入工程等。看网上有说用这个 IDE 创建新工程不太好,但没关系,就先搞他,后面有什么问题再说。
特别说明一下的是,正点原子使用的是 8MBytes 的 QSPI Flash, 而 NXP 官方的 EVK 用的是 64MBytes HyperFlash,这个地方是最让人头痛的
- BOARD_FLASH: 对应的就是板个外挂的 QSPI Flash, 0x60000000 是这个 Flash 映射到地址空间的值, 图中大小 0x4000000 实际应该是 0x800000, 就是8MBytes容量
- 片内的 512KBytes 内存,被划分成了三个部分,这也是 RT1052 执行效率可以高于 STM32 的地方
-
- SRAM_DTC: 数据紧偶合内存(Data Tightly-Coupled Memory), 有着极高的访问速度,用于存储程序数据的,即代码中变量的存储位置。映射到地址空间是 0x20000000, 大小为 128KBytes
-
- SRAM_ITC: 指令紧偶合内存,有着非常高的访问速度,用于存放经常执行的指令代码,比如中断向量表, 调试程序等。程序在编译连接的时候,会将这里运行的代码放到 BOARD_FLASH 里,芯片运行的时候再从Flash里拷贝到指定的内存位置,其实道理跟初始化 RW-DATA 是一个道理吧,(不太确定)。映射到地址空间是 0x00000000, 大小为 128KBytes
-
- SRAM_OC: 片上内存(On-chip RAM), 可以理解为传统 MCU 内部的 SRAM, 没有什么特别的限制,也没有速度加成,可以存放任意代码或者数据。映射到地址空间是 0x20200000, 大小为 256KBytes
- BOARD_SDRAM: 就是外挂的 SDRAM 啦
- NCACHE_REGION: 还没去,后补说明吧
- IDE 就是通过这些FALSH/RAM数据生成链接文件(ld), 省去了像 KEIL 那样手动编辑 分散加载文件的麻烦(但对分散加载大家还是要了解一下,不能懒,本来想分享个文件的,但不知道怎么上传)更多信息,可以参考这个链接: MCUXpresso IDE下工程链接文件配置管理与自动生成机制
- 关于地址分配更多的信息,可以参考这个链接: 点这里
- 如无意外,点击编译就可以了
安装 J-Link 及配置
- 安装J-Link 程序,也是一路 next 就好了,没啥可说的
- 官方 EVK 用了两种Flash: HyperFlash(型号不清楚)和QSpiFlash: IS25WP064AJBLE, 而正点原子用的是 QspiFlash: W25Q64, 所以官方提供的J-Link 下载算法是不能使用的。而正点原子提供的下载算法:MIMXRT105x_QuadSPI_4KB_SEC.FLM 只适用于 Keil,同样不适用, 所以又要依靠网络了。
W25Q 下载算法及更改方式,请移步以下链接:W25Q下载算法 这里要特别强调,像我的电脑,不知道为什么装了两个 J-Link 电脑目录分别是:C:\Program Files (x86)\SEGGER\JLink 和 C:\Program Files\SEGGER\JLink。 所以最好两个目录下的 “JLinkDevices.xml” 文件都更改好,并将算法文件都放到 .\Devices\NXP\iMXRT105x 目录里去 - 订个小目标吧,自己写一个下载算法,以便后续换 Flash 时可以用上,应该跟写 Bootloader 差不多
开始调试下载
- 电脑连接上 J-Link ,我踩的坑就开始了
这个 IDE 对山寨的 J-Link 支持不是很友好,我那个工具在 Keil 的时候可以正常识别并烧录,但在 IDE 里却看不到了,因为来新公司,没有验证过工具,所以倒腾了半天,结果更换上同事的 J-Link, 一切正常了。 - 上图可以看到,程序虽然下载成功了,但是没有正常的跑起来,因为程序目前还是 HyperFlash 的设置,需要更新配置成 QSpiFlash. 那就没什么可想的了(后面有两句叨叨),参考正点原子的 “实验X SPI FLASH XIP实验”, 更改 IDE 工程里对应的文件,注意不要使用其它的例程里的文件来改,因为其它例程是屏蔽了 XIP 描述信息的
evkbimxrt1050_flexspi_nor_config.c 更改如下:
const flexspi_nor_config_t qspiflash_config = {
.memConfig =
{
.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackInternally,
.csHoldTime = 3u,
.csSetupTime = 3u,
.columnAddressWidth = 0u,
.configCmdEnable = 0u,
.controllerMiscOption = 0u,
.deviceType = kFlexSpiDeviceType_SerialNOR,
.sflashPadType = kSerialFlash_4Pads,
.serialClkFreq = kFlexSpiSerialClk_133MHz,
.lutCustomSeqEnable = 0u,
.sflashA1Size = 8u * 1024u * 1024u,
.lookupTable =
{
[0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
[1] = FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x02),
[2] = FLEXSPI_LUT_SEQ(STOP, 0, 0, STOP, 0, 0),
[3] = FLEXSPI_LUT_SEQ(STOP, 0, 0, STOP, 0, 0),
},
},
.pageSize = 512u,
.sectorSize = 4u * 1024u,
};
board.h 更改如下
#define BOARD_FLASH_SIZE (0x800000U)
重新编译并执行debug, 调试已经正常启动了,并且停在了 main() 入口
点击 运行 按钮,见证奇迹的时刻
重要知识点补充说明
为什么第一次Debug时程序没有跑来
因为 IDE 在下载完程序后,并没有让 MCU 跳转到指定的地址开始运行,而是让 MCU reset 后跑起来,那么 1052 就会首先执行片内ROM引导程序去读取 Flash 起始位置存放的 Flash Configurate 信息,然后配置相应的 Flash 寄存器。但当前程序里面存放的是 HyperFlash 的配置信息,所以ROM调用的驱动信息就错误了,导致程序没有跑起来.
IDE 烧录程序的流程猜想
当点击 Debug 按键或者点击下载按键 时,IDE 会调用 JLinkGDBServerCL.exe 下载程序,并将下载结果返回给 IDE。所以要确保 IDE 设置的 J-Link 地址正确,具体位置如下: 所以当 IDE 调试出错时,可能通过 J-Flash.exe 程序帮忙验证是烧录出问题了,还是运行出问题了
双击 *.lanuch 文件调出 Debug 的更详细设置
更改 Flash 或者 RAM 的配置
更改 分散加载 的方法
更多的知识,好好啃
痞子衡嵌入式, 注意Chrome内核的浏览器不能显示文章里的图片,但 IE 浏览器就可以,不明所以然
|