Nxp:j-link烧写错误及解决方法
芯片:MIMXRT1021CAF4A
内核:Cortex-M7
出现的错误:
1、用keil5进行烧写时,出现一下错误:
No Algorithm found for: 00000000H - 00005CEBH
Error: Flash Download failed - "Cortex-M7"
[if !supportLists]2、[endif]用segger j-flash6.2和segger j-flash6.52进行烧写时,都出现在cpu中找不到MIMXRT1021CAF4A芯片,由于我知道其内核是Cortex-M7,所以随便在nxp中选择了Cortex-M7的芯片,发现是可以连接上的,但是,程序缺下载不成功,而且还报出了一下的错误:
No Algorithm found for: 00000000H - 00005CEBH
Error: Flash Download failed - "Cortex-M7"
错误跟keil5出现的一样。
Nxp开发QQ群中,由一个大牛提供了一个帖子,帖子主要内容如下:
链接:http://www.nxpic.org/module/forum/thread-615134-1-1.html
[if !supportLists]3、[endif]今天心情非常不错,因为前几天工作量是非常大的,因此没有过多的时间来玩RT1052,昨天下午才腾出一点儿空余时间出来研究。因为要玩转RT1052首先了解外设和框架是非常重要的。不多扯,讲一下几个话题:①:如何用JLinkV9来下载用户程序。如题首先你得保证你的烧录设备是JlinkV9版本,因为低版本不能识别。第二用的Keil版本得5.21版本以上,否者编译或者下载会出问题。最后Jlink的驱动版本必须是6.30以上,否则不能识别MCU的ID(那你做个P啊)。满足以上三点,即使你没有DAP,你的JLink也能独挡一面了。由于JLink不提供JTAG,因此一定要用SWD模式。笔者昨天在这上面下了不少瞎功夫,现在想想有点得不偿失啊。后续给出一篇文档进行讲解说明,这里就不在冗余了;②:上面IDE与MCU的烧录线路已有方向了,至于如何铺路将在后续讲解。首先我做了一个闪烁的LED灯,由飞凌给出的硬件资料可知LED的阴极接在了M11,即为(GPIO_AD_B0_02/GPIO1_IO02)。这里飞凌有一点没给出还是我没找到官方的IMX_RT1052_Core手册,这个是笔者在官网下的,作为附件分享给大家;③:还有就是笔者瞎鼓捣导致前期用飞凌提供的历程烧录不进去MCU一直提示M7 fail错误,这是Flash不知道怎么被弄卡死了,然后用BOOT的B0拉高,复位重新下载就能OK了,很神奇至此我也不是很明白,因此也要明白BOOT的拨码的使用,极为重要;④:本人喜欢应用程序的简单高效稳定,因此飞凌提供的QSPI_norFLASH感觉不是很适合笔者,因此耍小聪明另辟蹊径,问了下原子哥,发现移植RT1052号令者的SYSTEM用起来还是很不错的,毕竟用STM32的函数都是优先选用的。QSPI_norFLASH用起来是最直接,清楚的,简洁明了,但是我不喜欢哈哈。因此选用的MIMXRT1052_QuadSPI_4KB_SEC.FLM这种FLASH,听说貌似更稳定一点,我也没有去验证。就这样而原子联合周立功的RT跨界处理器使用的是分散加载的方法,其中太复杂笔者脑子笨只能了解点皮毛~,无所谓拿来能用就行了,其中修改了很多地方,不建议大家再去尝试浪费时间了。因此不多做介绍了。就讲到这里吧,帖子更新有点慢,但是这都是笔者一步一步摸索出来的,不喜勿喷!
j-link在线调试:
进入调试页面:
汇编窗口:是将c语言转化为汇编的显示情况,其中,黄色箭头是代表着程序现在运行到的位置和状态。
C语言窗口:显示的是我们正常写代码的C语言,其中,黄色箭头是代表着程序运行到的状态。
寄存器窗口:是显示单片机内部的一些寄存器的当前值和系统信息。
(仿真调试页面最左边显示的是单片机内部的一些寄存器的当前值和系统信息,右边是keil将C语言转换成汇编的代码,中间就是我们编写的C程序了)
调试工具栏的按钮:
[if !supportLists]1、[endif]
标有rst按钮:是软复位,单击之后,程序会到最开始的位置运行。
[if !supportLists]2、[endif]
全速运行,单击之后程序就会全速跑起来
[if !supportLists]3、[endif]
当程序全速运行起来的时候,单击停止按钮就会立即停止,可以观察程序运行到哪里去了。
[if !supportLists]4、[endif]
执行进去:该函数用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。
[if !supportLists]5、[endif]
执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。
[if !supportLists]6、[endif]
执行出去:已经进入该函数了,当不要执行该函数的剩余部分时,单击该按钮,则跳出该函数
[if !supportLists]7、[endif]
执行到光标处:该功能是单击时,会迅速执行到光标处,跟断点的功能类似,不同是断点可以有多个,但光标只有一个。
[if !supportLists]8、[endif]
汇编窗口:可以查看汇编代码
[if !supportLists]9、[endif]
观察窗口:mdk5提供2个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是常用的一个调试窗口。
[if !supportLists]10、[endif]
串口打印窗口:MDK5提供了4个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。
[if !supportLists]11、[endif]
逻辑分析仪窗口:该图标有3个选项(下拉选择),我们一般用第一个,也就是逻辑分析
其中:下拉中的Logic Analyzer窗口,点击即可调出该窗口,通过SETUP按钮新建一些IO口,就可以直观这些IO的电频情况,以多种形式显示出来,比较直观。
[if !supportLists]12、[endif]系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应的外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便产看设置的是否正确
DEBUG的工具条其他按钮:
[if !supportLists]13、[endif]设置断点中,为什么有的地方可以设置而有的不可以设置:
解释:单击复位之后,可以看到C语言程序的窗口左侧有灰色或aq者保持着原来的颜色,其中有灰色的地方是我们可以设置断点的地方,至于为啥有些地方不能设置断点呢,主要是因为keil具有程序优化的功能,如果我们想在任何地方都可以设置断点的话,我们需要更改工程选项里的优化等级,把等级设置为0即可,即高速keil不要对程序进行优化。其他的按钮就是关于子函数或者循环是否进入的操作了,具体自己可以试试看。