硬件准备
1.stm32最小系统板:stm32c8t6
2.stlink下载器:stlink v2版本
软件安装:
1、STM32 ST-LINK Utility(官网下载)
2、csky IDE: 剑池CDK集成开发环境V2.18.2
https://occ.t-head.cn/community/download?id=4119141468164132864
调试工具制作
1.首先查看stm32最小系统板原理图,
1)、PA12是否有电阻。有的去掉;
2)、PA12和PB5之间是否有其他东西。否则在两者之间并一个2k电阻。
2.使用stlink下载
连接后先更新一下stlink固件
升级后的版本号位V3.9.0:
按接线线序连接STM32C8T6和stlink对应端口,connect:
连接成功后,显示连接信息:
刷写固件前的要先全盘擦除:
擦除完成
安装C-skyDebug工具(DebugServer),用于测试:
链接:https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource/1836682/1626764310739/T-Head-DebugServer-windows-V5.12.1-20210716-1524.zip
平头哥的DebugServer软件里面,提供了两个CK-Link-Lite的固件,位于.\T-HeadDebugServer\bin\links\CK-Link目录下,分别是cklink_lite_iap.hex和cklink_lite.hex。
cklink_lite_iap.hex代码结构分析:
任意文本编辑器打开cklink_lite_iap.hex可见:
开头2行和末尾2行记录hex的地址等重要数据。
第1行-
: 02 0000 04 0800 F2
2个字符表示1个16进制字节
:每行开始 (0X3A)
02:代表本行有2个字节数据
0000:本行数据的起始地址(偏移地址)
04:扩展线性地址标识,后面2个字节数据是后面数据的基地址
注:由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,故有了扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录含数据的高16位,扩展线性地址记录总是有两个数据字节。
0800:是扩展地址 (0x0800 << 16) = 0x08000000后面的数据记录都以这个地址为基地址。即iap文件的基址是0x08000000。
F2: 记录本行校验和 F2=0x100-(0x02+0x04+0x08)
结尾为..(0X0D 0A)
利用winhex打开cklink_lite_iap.hex可见开头及换行字符(采用记事本打开时特殊符号不显示):
第2行及以下的数据行:
:10000000280800201D350008050A0008070A000816
:每行开始
10:本行有16个byte数据 (0x10)
0000:基于初始地址的偏移量,表示本行数据起始地址为0x08000000。下一行则是0x08000010依次类推
00:数据标识,表示后面字节为记录的数据
280800201D350008050A0008070A0008:10个byte的数据
16:校验和:
0X100-(10+00+00+00+28+08+00+20+1D+35+00+08+05+0A+00+08+07+0A+00+08)= 0X100-0XEA=16
以下类似。
:100010000B0A00080F0A0008130A0008000000007D
:10002000000000000000000000000000170A0008A7
:10003000190A0008000000001B0A00081D0A000839
末尾2行记录:
倒数第2行-:04 0000 05 080000ED 02
04:表示本行有4个byte数据
0000:表示本行数据起始地址为0x00000000
05: 表示后面存放要执行的下一个指令的地址
080000ED:表示要执行的下一个指令的地址(main函数地址)
02;校验和
最后1行::00000001FF
01:标识hex文件结束。
cklink_lite.hex代码结构分析:
第1行与前述cklink_lite_iap.hex代码结构相同。
第2行及以下的数据行:
:10 4000 00 B019002021410008474D0008F54A0008 7A
:每行开始
10:本行有16个byte数据 (0x10)
4000:基于初始地址的偏移量,表示本行数据起始地址为0x08004000。下一行则是0x08004010依次类推。0X4000=16384=16 KB=0X10 KB
00:数据标识,表示后面字节为记录的数据
B019002021410008474D0008F54A0008:10个byte的数据
16校验和:
0X100-(10+40+ B0+19+00+20+21+41+00+08+47+4D+00+08+F5+4A+00+08)= 0X100-0X86=7A
注意:这里(10+40+ B0+19+00+20+21+41+00+08+47+4D+00+08+F5+4A+00+08)=0X386,省略首位3,只保留2位参与计算,即0X86。
其他类似。
综上,从存储位置关系上分析,需要写烧写入cklink_lite_iap.hex,再烧写cklink_lite.hex(不擦除)。
烧写固件
先刷入cklink_lite_iap.hex:
再刷入cklink_lite.hex(不擦除):
插入电脑的usb接口,C-SKY CKLINK已可以正常识别了。
以win11为例,按win(视窗)+X键,打开设备管理器:
有博主将刷入的2个.hex文件拼合起来,并升级改写为CKLinkLite2.30.hex,可以直接烧写使用:
合并文件下载详见:https://oshwhub.com/l88889686/cklinkw80x-fang-zhen-qi
CDK使用CKLINK下载调试SDK
硬件接线
CK-LINK | W806 |
3V3 | 3V3 |
RST | RST(复位脚) |
TCK | CLK(PA1) |
TMS | DAT(PA4) |
GND | GND |
运行DebugServer后,提示错误:
根据问答社区, 有网友碰到同样的问题,解决方法是降低CDK版本:
目前官网还能找到的低版本是剑池CDK集成开发环境V2.16.2,安装后也不能用,问题依旧。
(https://occ.t-head.cn/community/download?id=4092601014065106944)
问题解决
根据网友提供方法,在设备管理器里卸载设备,然后右键选择“扫描检测硬件改动”,重新扫描后,CKLink就重新枚举变为“CKLink-Serial Port”。
可以看到CKlink-Lite了:
打开Debugger Server,正常识别了,创建gdb调试服务,保持后台运行,开始调试把!
参考博文:
1、HEX文件格式详解
HEX文件格式详解_hex格式_揪住小尾巴的博客-CSDN博客
2、自制CKLink-lite调试器,调试D1裸机编程
http://bbs.eeworld.com.cn/thread-1200313-1-1.html