首页 » 智能 » 用ST-link调试Atmel Cortex-m0_法式_的是

用ST-link调试Atmel Cortex-m0_法式_的是

神尊大人 2024-11-24 16:44:06 0

扫一扫用手机浏览

文章目录 [+]

后来又听说出了把ST-link刷成J-link的固件,但是这样的J-link也只能调试ST的MCU。
那仿制做一个盗版的J-Link来用总该是可以的,然而我对盗版、破解软件的已经兴趣不大,能用不破解受限定的免费版我就有用免费版;再说玩玩这个MCU又不是紧急的事情,就先搁一边了。

再后来,我把稳到OpenOCD这个开源的调试器,它支持ST-Link,也支持Atmel D21系列,那么可否实现我的目标呢?

用ST-link调试Atmel Cortex-m0_法式_的是 用ST-link调试Atmel Cortex-m0_法式_的是 智能

下载了一份OpenOCD 0.9.0 (编译好的版本, win32平台), 按照大略提示用法,用 -f 参数指定配置文件,一个是调试器硬件的,一个是MCU的。
我先用 Nucleo-F091RC 测试一下ST MCU能否连上,命令是 openocd -f interface\stlink-v2-1.cfg -f target\stm32f0x.cfg

用ST-link调试Atmel Cortex-m0_法式_的是 用ST-link调试Atmel Cortex-m0_法式_的是 智能
(图片来自网络侵删)

OK, 看来OpenOCD能够找到STM32F091,下面就把SWD的线连到我DIY的ATSAMD21精简板上,

给OpenOCD的参数改 -f target\stm32f0x.cfg 为 -f target\at91samdxx.cfg 该当便是对应Atmel SAMD21的配置了

竟然出错了,哪里的问题呢?

剖析这个提示 \公众UNEXPETED idcode: 0x0bc11477\"大众 也便是 ID code 不对。
打开 at91samdxx.cfg 这个文件,

个中设置了一个 _CPUTAPID 为 0x4ba00477,但是没有读到这个ID:和调试的目标不匹配了。
我猜想是这样的缘故原由,那就把此处改一下,改成 0x0bc11477 试咯。
果真,改了这个文件就连上了。

OK, 解释 ST-link 和 ATSAMD21 可以通信,这是个好的开始。
现在OpenOCD程序就停在那里了,接下来该怎么玩?查资料,原来这货是通过TCP端口进行交互的,于是telnet localhost 4444就可以连上它的terminal,输入help回车可以列出很多命令. 至于端口号为什么是 4444...

我须要的是 flash write_image 这个命令,无奈的是,它不能成功。
而对付STM32F091,用同样的办法是可以成功烧写程序的。
换其它招吧,load_image 命令可以把数据装入MCU的RAM,这样好歹能把程序装进来运行呀。

写一个测试程序,点LED

由于要装到RAM运行,linker的脚本须要改动,把全部的段都定位到RAM的地址(0x20000000开始),像这样

在OpenOCD交互终端里面可以载入这样编译的RAM中运行的程序

halt 是停掉当前的程序实行;mdw 用来查看内存,这里是看一下程序入口地址(PC的初值);然后用reg 命令修正PC (SP也该当改一下);末了resume规复实行,就实行内存中的程序了.

若要调试,还是用GDB来得方便。
在gdb里面实行 target remote localhost:3333 连接到OpenOCD. 起初我用4444端口,GDB就报错,我想不明白,后来知道用的是其余的端口啊

末了,我读了ATSAMD21手册关于Flash写入的部分,通过编程实现了Flash ROM的写入,还好,操作不算繁芜。
也便是把要写到Flash的程序作为数据,用一段内存中实行的程序来卖力烧写。
虽然这样麻烦了一点,但对付我总算是一个办法。
谁叫我用ST-link呢,ST是不管ATmel的MCU怎么写flash的。
至于OpenOCD的flash烧写功能不堪利,我估计是它带的程序对这个器件支持有问题,不得而知了。

以上图文内容均是EEWORLD论坛网友:cruelfox原创,在此感谢。

欢迎微博@EEWORLD

如果你也写过此类原创干货请关注微信"大众年夜众号:EEWORLD(电子工程天下)回答“投稿”,也可将你的原创发至:bbs_service@eeworld.com.cn,一经入选,我们将帮你登上头条!

与更多行业内网友进行互换请上岸EEWORLD论坛。

标签:

相关文章