11826|6

659

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

【平头哥Sipeed LicheeRV 86 Panel测评】自制CKLink-lite调试器,调试D1裸机编程 [复制链接]

  本帖最后由 mars4zhu 于 2022-4-19 11:53 编辑

自制CKLink-lite调试器,调试D1裸机编程

 

摘要:

使用了一块STM32F103开发板(市面上最常见的正点原子的miniSTM32开发板),利用平头哥的DebugServer中的固件(稍微魔改一下),变身为CKLink-Lite调试器,接入LicheeRV开发板的JTAG引脚上,可以直接使用调试D1芯片的裸机编程,如断点、单步运行、查看寄存器等,跟单片机开发一样方便。

 

 

正文:

在之前的帖子中(https://bbs.eeworld.com.cn/thread-1199389-1-1.html 【平头哥Sipeed LicheeRV 86 Panel测评】D1作为单片机裸奔编程点灯——LED-Blinky),由于没有调试器连接JTAG进行单片机常用的调试方法,所以观察程序功能正确与否,只能查看板子上的反应来确定。而D1CPU内核C906的调试接口及其协议是自己开发的,并非RISCV标准调试接口,因此使用其余的JLink+OpenOCD方案无法实施,经过网络查找,发现有不少人可以DIY自制CKLink

 

https://www.bilibili.com/video/av977444179 自制CKlink阿里平头哥w801/w806仿真器DIY全教程

 

链接已隐藏,如需查看请登录或者注册

 

看了一下里面的原理图,都是使用STM32F103C8T6主控,外围几个电阻、LED而已。烧写入CKLink-Lite固件,主要功能就是USBJTAG,使用几个GPIO引脚作为JTAG信号引脚,如图:

 

作为最热门的MCU,大家伙手里应该都有一两个STM32F103的板子吧,我手头上有个STM32F103RBT6的开发板(市面上最常见的正点原子的miniSTM32开发板);跟STM32F103C8T6是同架构,仅仅是封装和Flash存储容量不同而已,应该可以通用固件;

然后D1的手册上表明,RISCV内核的JTAG信号可以复用到SD卡槽上,刚好之前使用SD-NAND的时候,有一个SD引出IO引脚的转接小板子,可以把D1芯片的SD卡槽上的信号引出,两边对应的引脚连接关系如图:

 

先烧写CKLink-Lite的固件,平头哥的DebugServer软件里面,提供了两个CK-Link-Lite的固件,位于T-HeadDebugServer\bin\links\CK-Link目录下,分别是cklink_lite_iap.hexcklink_lite.hex,用文本编辑器打开,发现cklink_lite.hex是从0x08004000开始,而cklink_lite_iap.hex是从0x08000000开始(STM32芯片的Flash空间起始地址),很显然是先烧写IAP功能的固件,可以随时更新CKLink调试功能的固件,因此先烧入cklink_lite_iap.hex。采用Jlink或者BOOT0串口下载等方式烧入cklink_lite_iap.hex后,USB口插入电脑发现C-SKY CKLink-Lite Firmware Loader,看名称就知道是加载调试功能固件的,打开Debugger-Server,发现固件更新,但是这里却无法更新。最后无奈,依然采用Jlink烧入cklink_lite.hex

1)注意这次烧写固件,不要擦除芯片,避免把之前烧入的cklink_lite_iap.hex给擦除了。

2)也可以使用文本编辑器,把两个hex文件合并为一个,然后再一次性烧写。

 

烧写后插入电脑,依然出现C-SKY CKLink-Lite Firmware Loader,使用Debugger-Server也无法进入调试功能。

 

尝试了方法:

1)刚插上电脑,设备管理器里冒出来的是“C-Sky CKLink-Lite Firmware Loader”,之后换了好多驱动libusbKwinusblibusb-win32,在C-Sky Debugger Server里面都没法成功识别出CKLink

2)尝试了好多次,最后设备管理器里卸载设备,然后右键选择“扫描检测硬件改动”,重新扫描后,CKLink就重新枚举变为“CKLink-Lite”然后就可以用Debugger Server识别,并创建gdb调试服务。。。

 

 

 

 

总结一下,估计还是硬件差异的问题吧,毕竟STM32开发板跟CKLink-Lite原理图相比,有两三个电阻没接,特别是USB_CNCTPB5)到USB-D+PA12)的1.5K电阻没有连接,这个肯定是用来实现USB重新枚举的,所以无法从IAP功能切换到CKLink功能。用这种方法,只能采用卸载设备然后重新枚举的方式,才能进入CKLink-Lite固件;

 

 

 

 

 

PS1:在压箱底找到一个STM32F103C8T6的最小系统开发板,烧入这个固件,也一样可以调试,说明这个固件对于STM32F103R/C等封装都通用,我推测对于其他如VZ封装,不同Flash容量的芯片型号,也一样通用,但没有测试,手上有板子的朋友不妨都去试试。

 

 

 

 

 

 

PS2:突发奇想,既然CKLink固件的起始地址是0x08004000,那么我把这一段的中断向量表复制到0x08000000,是不是可以直接忽略IAP固件,而是直接执行CKLink固件呢?采用文本编辑器,在头部复制中断向量表,并且把地址全部改为0x080000xx开头,hex文件最后的校验和也修改一下,如图:

 

 

烧入后插上电脑,果然直接显示为CKLink-Lite设备,大功告成!!!!

 

附带DebugServer的原始的两个固件(cklink_lite.hexcklink_lite_iap.hex)、合并后的固件cklink_lite_merge.hex、以及复制中断向量表的固件cklink_lite_mod.hex,以及网上的固件CKLinkLite2.30.hex(这个也是两个固件合并在一起)

自制CKLink-lite调试器,调试D1裸机编程.zip (3.27 MB, 下载次数: 242)

 

最新回复

网购最小板C8T6写入cklink_lite_mod.hex,无法启动T-headdebugserver,提示cklink_usb_write failed,无法升级  详情 回复 发表于 2023-3-12 08:19
点赞(2) 关注(3)
 
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

确实是无法从IAP功能切换到CKLink功能,用卸载设备然后重新枚举的方式,看楼主的操作进入CKLink-Lite固件也还是可以的

 
 
 

回复

7159

帖子

2

TA的资源

版主

板凳
 

这个CKLink-lite调试器真不错,最佩服自己动手DIY工具了!!!

 
 
 

回复

40

帖子

0

TA的资源

一粒金砂(中级)

4
 

有空也做一个

个人签名

相互学习,共同进步。

 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

5
 

有点意思,越来越繁荣。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 

动手能力真强, 非常有帮助

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 

网购最小板C8T6写入cklink_lite_mod.hex,无法启动T-headdebugserver,提示cklink_usb_write failed,无法升级


 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表