大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是MCUXpresso IDE下使用J-Link下载算法在Flash调试注意事项。
痞子衡前段时间写过一篇小文《为i.MXRT设计更新Segger J-Link Flash下载算法文件》,介绍了痞子衡在github上的开源i.MXRT下载算法项目,这个项目收集了几乎所有i.MXRT型号的J-Link flash下载算法源工程,基于这个源工程可以很轻松修改生成不同flash的算法文件用于各大IDE以及J-Flash。今天痞子衡就来介绍一下如何使用新生成的flash算法文件配合J-Link调试器在MCUXpresso IDE下XIP调试(基于i.MXRT500)。
1、准备测试环境
首先需要准备好测试环境,包含必要的软件和硬件,痞子衡的环境如下:
- 集成开发环境:MCUXpresso IDE v11.2.0_4120,点此下载
- 软件开发包:SDK_2.8.0_EVK-MIMXRT595_PRC(Toolchain需包含MCUXpresso IDE),点此下载
- 软件驱动:J-Link driver v6.72b,点此下载
- 硬件工具:J-Link Plus调试器
- 硬件开发板:MIMXRT595-EVK (Rev.C1)
其中集成开发环境和软件开发包需要有如下版本对应关系,因为MCUXpresso IDE是恩智浦基于GCC和Eclipse而设计的免费IDE,而且主要是为恩智浦MCU设计的,所以跟恩智浦MCU SDK包有一定的捆绑关系。
![ce09a3cd815f4214e4b277b405259cdf.png](https://i-blog.csdnimg.cn/blog_migrate/7b6f3b51154ade693967ba3b3c9a2288.png)
2、新生成flash算法
我们测试的板卡是MIMXRT595-EVK (Rev.C1),这个板卡默认是在FlexSPI0上连接的八线Flash(MX25UM51345),J-Link驱动里如果支持i.MXRT500的话默认flash算法也是这个八线flash,为了测试新生成的flash算法,我们将板卡rework一下,FlexSPI0连接到四线Flash(IS25WP064)。
![f43df4e0120b3681438ab83597ff0a9b.png](https://i-blog.csdnimg.cn/blog_migrate/83b93c82474528264bd247389272496b.png)
我们现在需要为这个四线Flash(IS25WP064)做一个新flash算法,打开痞子衡的github开源项目如下源工程,确保工程添加的is25wp064相关的源文件,然后编译生成新的MIMXRT5XX_FLEXSPI.FLM(即flash算法文件)。
- 算法源工程:https://github.com/JayHeng/imxrt-tool-flash-algo/tree/master/boards/nxp_evkmimxrt595_rev.a-c/flash_algo_b0_silicon/Keil_JLink
![314f462dbda212b77722599f4dbab222.png](https://i-blog.csdnimg.cn/blog_migrate/c7d97569c30bb8c299bbd5a40858c1c9.png)
有了新flash算法文件,将其放到 \SEGGER\JLink_V672b\Devices\NXP\iMXRT5xx 路径下,为了跟默认flash算法区分开来,可以将其重新命名为MIMXRT5XX_FLEXSPI_IS25WP064.FLM,顺便更新JLinkDevices.xml文件。
![8a86d83de8fe391538b1ac9f80eafe99.png](https://i-blog.csdnimg.cn/blog_migrate/9dd0bf09be744cb5d745f57fa0ed781b.png)
将板卡供电,连上Jlink调试器,使用JlinkCommander的loadbin命令试一下新flash算法是否有效,在确保新flash算法没问题时再进入IDE调试。
![b6161e802278f25cc2e70e35959ab252.png](https://i-blog.csdnimg.cn/blog_migrate/42ec6113c5d21c2d41b0298b3420ddfe.png)
3、进入MCUXpresso IDE调试
3.1 导入SDK及打开示例工程
打开MCUXpresso IDE,默认Installed SDKs界面框里没有RT500,我们直接将下载好的SDK_2.8.0_EVK-MIMXRT595_PRC.zip包拖到Installed SDKs界面框中即可。
![0a59779e1ee687ebfb171ef5f5aa664d.png](https://i-blog.csdnimg.cn/blog_migrate/4663327c7d6abb63c913fb98df7e46bf.png)
这时候Installed SDKs界面框里可以看到RT500,选中它然后继续操作来导入example,我们就选demo_apps下的hello_world例程,编译这个工程确保没问题。
![5c75848b28886facfd47a7d603f6b9bf.png](https://i-blog.csdnimg.cn/blog_migrate/79b6873ad69b8ff40cecf9af0cdce2f7.png)
3.2 更新J-Link Server路径
在安装MCUXpresso IDE时会同时安装一个默认Jlink驱动(一般路径在C:\Program Files (x86)\SEGGER\JLink),这个驱动版本不一定新,MCUXpresso会默认调用这个驱动,但很多时候我们都是手动安装新Jlink驱动来使用的(痞子衡装在了C:\tools_mcu\SEGGER\JLink_V672b),前面我们新生成的flash算法也是放在手动安装的Jlink驱动目录下的,因此我们需要在MCUXpresso里重设J-Link Server路径,指向手动安装的Jlink驱动。
![64edfa18432bca2228360ca1456fed65.png](https://i-blog.csdnimg.cn/blog_migrate/f1a382e61d5ebaf35c6e37186375926f.png)
3.3 借助J-Link在线调试
看起来一切就绪了,让我们开始在flash调试吧,点击Debug按钮,会看到MCUXpresso弹出了调试器类型选择,并且识别到了我们连接的J-Link,点击OK确认。
![b02bffa4ad3d918fe4c11f0e31150c69.png](https://i-blog.csdnimg.cn/blog_migrate/2dc6d23d31afaa26a830a0106bbc44d3.png)
如果出现下载失败,需要查看一下自动生成的jlink的.launch文件里的设置,尤其是下面的Device设置,要确保与前面更新的JLinkDevices.xml文件里改动的脚本代码里Name一栏相一致。
![823d857af8efd4fe44e9907717523977.png](https://i-blog.csdnimg.cn/blog_migrate/1bbd60ebfa0aaa33d0d4b7a33e85b7f2.png)
这时候可以看到MCUXpresso调用了J-Link驱动完成了代码烧写(这时候去读flash,里面的内容是烧录正确的),但是界面并没有停在main函数里,并且没法单步调试,这是为什么?
![1f26d2353d04ef49469839cd14ade97e.png](https://i-blog.csdnimg.cn/blog_migrate/dd6d147246efd84604bccfd278290ae7.png)
3.4 满足MCUXpresso调试流程
然后痞子衡去咨询了MCUXpresso IDE研发团队,得知它默认的调试流程跟一般的通用IDE(Keil,IAR)不太一样,一般的IDE可以直接引导App启动来调试,但MCUXpresso IDE不主动引导App,而是复位后让App自然启动,然后尝试Attach上去接管调试,所以根据这个流程,我们需要做两点必要的改动:
- 更新flash_config头(将hyper flash配置改为QSPI Flash配置),需要与板卡连接的flash相匹配
- 设置ISP模式为从Flash启动,保证reset之后ROM能引导App从Flash正常启动
改动完之后,我们终于可以愉快地单步调试了。
![d535783b5c4d7f26bbdc64fbc717174d.png](https://i-blog.csdnimg.cn/blog_migrate/9652c6f53dc68ed16af0c7f934a7c191.png)
至此,MCUXpresso IDE下使用J-Link下载算法在Flash调试注意事项痞子衡便介绍完毕了,掌声在哪里~~~