切换到宽版
  • 63082阅读
  • 128回复

[ARM]从头开始做个stm8的swim调试编程器,兼容stlink(开源,首发数码之家) [复制链接]

上一主题 下一主题
离线2545889167
 

发帖
13268
M币
20754
专家
302
粉丝
4860
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2017-09-11
— 本帖被 香瑶 设置为精华,作者+3000M币+5专家(2017-09-11) —
这货大概花了2周多的时间来完成,从开始研究手册到最终能用。
本作的功能是:实现了兼容官方上位机的能对stm8单片机进行调试、下载的设备

研究一个兼容stlink的编程器,主要是因为原装的stlink的固件只能在stm32f103c8上使用,换到stm32f103rc或者gd32上面都是不能正常工作的。这可是有些蛋疼。
如果说10多元就能在淘宝上买一个stlink的话,另外一个主要动机是想练练手了,本次折腾学到了好多关于stm32的定时器的高级用法,也对usb模块更熟练了。

还有就是,要感谢坛友 @jcdzxh   的大力帮助,给提供了很多的知识

成果展示如图硬件部分,


设备管理器查看设备被成功枚举为stlink



使用st官方的flash编程器STVD工具对目标板进行flash读、flash写、数据eeprom读、数据eeprom写、选项字节读、选项字节写、芯片上锁解锁  都是没有问题的


使用iar进行在线仿真调试
没有问题

逐行执行





逻辑分析仪抓取的一段读flash操作发生的波形
0通道为swim
1通道为rst
4.5通道为usb的d+和d-



硬件接线示意图



调试的时候,用了这些

由stm32核心板(板子上焊接的是gd32)作为调试器主机,stm8核心板是目标板。
jlink是用于给stm32调试器编程,逻辑分析仪负载分析swim接口波形和usb数据

----------------------------------分割线----------------------------------
本次主要参考的手册是st官方提供的um0470手册
STM8-SWIM通信协议和调试模块


STM8 的调试系统接口允许一个调试或编程工具,通过一根基于开漏接口的单总线双向(bidirectional)通信线连接到 MCU。

SWIM 是一个基于异步(asynchronous),强灌电流(high sink)(8mA),开漏,双向通信(bidirectional communication)的单总线接口。
当 CPU 正在运行,出于调试目的,SWIM 允许非抢占式(non-intrusive)读写访问,去执行 on-the-flay 到 RAM 和外设寄存器。
此外,当 CPU 停止(stalled),SWIM 允许读写访问,去执行 MCU 存储空间的其它部分(数据 EEPROM 和程序存储器)。
CPU 寄存器(A,X,Y,CC,SP)也可以被访问。这些寄存器被映射在存储器中,而且可以以相同的方式去访问





对于芯片编程,首先要对目标芯片写进入入口时序,用于激活目标芯片的swim调试模块
POR(上电复位)后,SWIM 一直处于 OFF 模式,SWIM 引脚采样用于检测入口序列。要实现这一机制,内部低速 RC 时钟在 POR 后自动运行,并且在 SWIM 处于 OFF 模式下一直保持。


SWIM 激活时序图如所示,图中每一段的描述如下。
1. 为了激活 SWIM,SWIM 引脚必须强制拉低 16μs(在 HSI 下最少 64 个脉冲)。
2. 第一个脉冲后(总线当前为 0),在 SWIM 的 ACTIVE 状态入口处,SWIM 检测一个特殊序列以保证鲁棒性(guarantee robustness).SWIM 入口序列式:4 个 1KHz 的脉冲,紧接着 4 个 2KHz 的脉冲。序列的频率很容易被内部 RC 检测到。入口序列如所示。注意序列以 SWIM 引脚拉高作为开始和结束标志。

3. 入口序列后,SWIM 进入 ACTIVE 状态,HSI 振荡器(oscillator)自动开启。

4. 延时过后,SWIM 发出一个同步帧给主机。
同步帧描述:MCU 的 SWIM 总线输出低电平,维持 128 个 SWIM 时钟脉冲表示发出一个同步帧,用于调试主机对RC时钟频率的测量。一个高级调试主机可以重新校准(re-calibrate)它的时钟,来适应(adapt)MCU 内部 RC 的频率。
5. 开始 SWIM 通信之前,SWIM 线必须释放为高电平,以保证 SWIM 准备好通信(至少维持 300ns)。
6. 写 0A0H 到 SWIM_CSR 寄存器:
Bit5 置一,允许访问整个存储器和 SRST 命令
Bit7 置一,掩盖内部复位源
7. 释放加载配置字节的序列的复位。等待 1ms 以保持稳定。


其中
HSI = 16MHz   SWIM 时钟为 HSI/2 = 8MHz

用逻辑分析仪抓取入口时序以后的效果如图
图上可见强制拉低 至少16μs(这里远多于16us)
4 个 1KHz 的脉冲,紧接着 4 个 2KHz 的脉冲



从机发送的同步帧给主机
如果rc时钟足够精确的话,这里应该是16us,显然手上的这片stm的时钟频率有些误差
紧接着的同步帧以后,是一个软件复位指令


写 0A0H 到 SWIM_CSR 寄存器







[ 此帖被2545889167在2017-09-15 00:45重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共2条打赏M币+20专家+1
rush 专家 +1 很久以前就不忍吐槽这个接口,感觉是普通单总线,实际上根本不是同一种东西 2018-11-22
rush M币 +20 很久以前就不忍吐槽这个接口,感觉是普通单总线,实际上根本不是同一种东西 2018-11-22
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 1楼 发表于: 2017-09-11
请登录后查看
[ 此帖被2545889167在2017-09-11 01:51重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共1条打赏M币+8
wpppmlah M币 +8 - 2018-07-09
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 2楼 发表于: 2017-09-11
请登录后查看
[ 此帖被2545889167在2017-09-11 02:09重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共6条打赏M币+115
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 3楼 发表于: 2017-09-11
请登录后查看
[ 此帖被2545889167在2017-09-12 23:47重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共19条打赏M币+249
12
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 4楼 发表于: 2017-09-11
请登录后查看
[ 此帖被2545889167在2017-09-13 20:00重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共6条打赏M币+36专家+2
离线cao57508

发帖
2265
M币
3657
专家
9
粉丝
85
只看该作者 5楼 发表于: 2017-09-11
请登录后查看
本帖最近打赏记录:共1条打赏M币+20
离线ookfei

发帖
1745
M币
5883
专家
-1
粉丝
36
只看该作者 6楼 发表于: 2017-09-11
请登录后查看
本帖最近打赏记录:共1条打赏M币+5
离线shi988

发帖
556
M币
1028
专家
2
粉丝
25
只看该作者 7楼 发表于: 2017-09-11
请登录后查看
本帖最近打赏记录:共1条打赏M币+20
离线msi12

发帖
1573
M币
708
专家
18
粉丝
21398
只看该作者 8楼 发表于: 2017-09-11
请登录后查看
本帖最近打赏记录:共1条打赏M币+13
离线yhky

发帖
7293
M币
1769
专家
18
粉丝
86
只看该作者 9楼 发表于: 2017-09-11
请登录后查看
本帖最近打赏记录:共1条打赏M币+20
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个