首页 log
OPENOCD和CMSIS DAPLINK
发布时间:2023年11月21日 评论数:抢沙发 阅读数:74
在新公司做开发,用的烧录软件是openocd,烧录器是olimex的usb tiny h,这玩意采购要300一个,和样品配套送给客户做测试,一年送出去十几二十个,老板嫌贵。但是之前已离职的工程师当时试了好几个烧录器,结论只有这个能用,贵也只能买。
老板跟我提过一次,家里有个10年前大学时候和友善之臂开发板配套买的JLINK,简单学习了下jlink自带的cfg,好像只要把driver ftdi 改成 jlink就行了,试了一下openocd可以连上jlink,能显示版本是V8,电压是多少多少伏,但是刷写flash时试了几次一直失败,果然是不行,就放弃了。
11月来了个新员工,(之前也是RS的,不过我是先去了一趟体制内,待的不怎么样,想回回不去了,想不通他为啥来这,毕竟只是起步阶段小公司,外面经济形势这么差,可能给的足够多吧),老板又跟他提了一次,看他在那研究,我就把之前尝试过jlink,配置怎么改,最后报什么错误,跟他说了,没想到第二天上班,他说试了jlink可以用,是我用的版本太老了,他之前有个客户送的jlink V11,最新的版本,就成功了。然后另一个同事不知道从哪个柜子里翻出来之前测试时买的一堆调试器(靠怎么不早点拿出来我都不知道),其中有jlinkV10和stlinkV2,V10试了也没问题。第三天他不知道又从哪弄来一个V9,试了,也没问题。靠,合着就到我V8就太旧了不支持了。
我就想弄个开发板放家里,自己再买个烧录器,网上一个盗版jlinkv9七八十块,感觉还是有点贵。翻了下openocd支持的设备列表,stlink二十多块,还行,但是公司已经有了,不能用。看到cmsis-dap,才十几块,就买了一个试试。到手发现连不上,一直显示no matching cmsis dap device。但是换成官方编译出来的openocd又能识别。公司自己编译的openocd不支持cmsisdap,但是有自己的flash driver。官方的openocd支持cmsisdap,但是没有我们的flash driver。这个flash driver是之前已离职的同事写的,不知道放在哪里,问几个在职同事都不知道。找了两天,终于在一个备用服务器的某个文件夹里找到了,找到三个版本,都不一样,试了只有一个日期最新的报错最少,能编译成功,其他两个放到最新版本的openocd里报一大堆错误。
用编译出的openocd测试,可以用,并且这个东西才十块钱包邮,但是有一个问题,就是烧写速度太慢了,一次20k的bin要等半分钟,连gdb调试一个命令也要等三秒,能用但是一点也不好用,用示波器测试了,这个TCK时钟最高速度只有600khz,而usb-tiny-h是5M。jlinkV10是6M。差了十倍。这个是CMSIS-DAP v1版,驱动是hid免驱版的。想着v2 usb版的会不会好点,正好看到南京沁恒淘宝店再卖的有LINKE和DAPLINK,一样的价格,LINKE用的芯片305,比DAPLINK用的203要好,虽然RISCV的部分用不到。18块,还是顺风包邮。拿到手测试了一下,果然好用,烧写速度也正常了。
看到淘宝上推送的muselab卖的DAPLINK,很眼熟,电路板除了中间用的MCU不一样外,其他一模一样,顺着找到github上的nanodap主页,对比了原理图,就是v2.3版本的,页面上还有几个固件,就想试试,死马当活马医,反正也没用,速度太慢了,弄坏就扔了。板子设计可以,还留了SWD烧写接口,焊上了排针,板子上用的MCU是国产MH2103A,nanodap上用的是STM32F103,不过应该是兼容的,用沁恒LINKE连上给它烧写,看了几个stm32的openocd cfg文件,照着拼凑出了个cfg,最后还真烧写成功了,发现速度正常了,还是带虚拟U盘版的,虽然这个U盘显示64M,肯定是假的。
cfg文件:
adapter speed 3000 adapter driver cmsis-dap transport select swd set FLASH_SIZE 0x20000 #source [find target/stm32f1x.cfg] set _CHIPNAME MH2103A set _TARGETNAME $_CHIPNAME.cpu set _FLASH_SIZE 0x20000 #set _CPUTAPID 0x2ba01477 set _CPUTAPID 0x20036410 set _ENDIAN little set _WORKAREASIZE 0x1000 swd newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap $_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0 set _FLASHNAME $_CHIPNAME.flash flash bank $_FLASHNAME stm32f1x 0x08000000 $_FLASH_SIZE 0 0 $_TARGETNAME echo "Ready for Remote Connections"
烧写过程:openocd打开cfg文件,另外用telnet连接4444端口,使用 flash 相关命令刷进bin文件,用flash banks可以看到flash起始地址应该是在 0x08000000 size 0x20000。
(1)碰到 protected,使用 flash unlock bank解锁。
(2)碰到 target not examed yet,不能烧录,这时在端口4444的控制台发“reset halt”就好了。
固件下载地址:https://github.com/wuxx/nanoDAP/tree/master/firmware/v2.3/DAPLink
刷机后,调试器插入电脑有个名为DAPLINK的U盘出现,
把GND和RST脚短接再插入电脑,则有个MAINTANCE的U盘出现,
把80K的bin固件拖到这个名为MAINTANCE的U盘中,可以方便的更新调试器固件。但前48k的bootloader需要连另一个调试器才能更新。
HID模式的固件下载速度非常慢,测试sck脚速度只有五六百Khz,
BULK模式下载速度比较快,和JLINK,USB-TINY-H速度差不多了。
不过HID模式下载的成功率高,BULK模式下载很容易失败。
本文地址:http://jiang.shuang.he.cn/blog/?post=64
版权声明:若无注明,本文皆为“”原创,转载请保留文章出处。