1. 硬件连接

SWIM接口只需要一根传输线,即可完成双向的传输。传输过程,都是由主控制端(host)发起,设备端然后做出反应。host端需要在一个总线上实现读和写,那就是说必须要同时接一个输出IO和一个输入IO(也可以用同一个,开漏的情况下,IO可以同时读写),且输出IO必须设计成开漏,总线上挂接上拉电阻,以便随时交出控制权。硬件连接如下:

上图SWIM_IN为输入IO,SWIM为输出IO。

2. 编码格式

SWIM协议使用归零码,且支持两种速率。

高速模式

低速模式

这两种模式都是使用8M的clock同步(上图中的箭头)。高速模式下,2个低电平加8个高电平表示1;8个低电平加2个高电平表示0。低速模式下,2个低电平加20个高电平表示1;20个低电平加2个高电平表示0。

程序的第一步就是要实现这两种速率的编码输出。通常情况下,使用IO口加延时即可达到目的。只不过,延时时间需要使用示波器观测,然后多次调节才能比较准。另外,在翻转IO的过程中,注意要关掉所有中断,避免被打断。

3. 通讯协议

上图为host到设备端的通讯过程,主要由命令和数据组成。命令占6个bit,数据占11个bit。

- Command。黑体部分为Command,由5个bit组成。第一个bit固定为0,称之为header,b0~b2为预定义的命令。pb为b0~b2异或之后的值,ack为设备返回的电平。下图为预定义的三种命令:

- Data。Data也是由固定的0的header,加上8个bit的数据,加上数据异或校验,然后设备返回的ack组成。下图是实际通讯过程的截图:

从设备到host的通讯格式也是如此,但header就由0变为1。然后ack由host发送。

程序的第二步,就需要实现这个通讯协议。即实现预定义的三种命令的函数,以及发送1个字节数据的函数。

4. 写操作

有了上述的函数,就可以实现一个写的操作。一个完整的写操作由一下步骤组成:

- WOTF,写命令,即010。

- N,需要发送的数据长度,以字节为单位。

- 三个字节表示的地址。

- N个字节的数据。

下图为一个实际的写操作过程:

程序的第三步就是需要实现这一个功能。

5. 读操作

这是一个可选功能,如果不需要验证的话,可以不实现。实现过程和写操作是一样的。

- ROTF,读命令,即001

- N,要读的数据长度,单位为字节

- 三个字节表示地址

- 设备返回的N个字节的数据。

需要注意的是,收到数据后,程序需要尽快校验数据正确与否,并返回ACK(逻辑1)或者NACK(逻辑0)。下图为实际的读操作过程:

6. 复位操作

复位操作有两种,第一种为发送复位命令,即发送SRST。第二种为拉低 总线16us以上。

下图为发送SRST

下图为拉低总线

这两种复位操作有细微的区别。详细请参考手册《UM4070》

7. 输入激活序列

在上电之后,SWIM总线是没有被激活的,需要输入特定的序列才能激活。序列如下:

详细的描述请参考手册。这里一个函数就实现了,挺简单。

8. 配置寄存器,激活SWIM功能

激活之后,还不能对所有的寄存器进行读写,必须配置SWIM_CSR寄存器

实现上面8步之后,整个SWIM接口及其通讯就都打通了,程序中应该实现了以下函数:

1. Write()。这个函数实现SWIM写命令和写单个字节的功能。

2. SWIM_Write。这个函数实现了SWIM往某个寄存器写若干数据的功能。

3. SWIM_Read。前期可以不实现该功能。

4. SWIM_Active()。这个函数实现了激活序列。

5. SWIM_RST(),SWIM_H_RST()。这两个函数实现两种复位功能。

9. STM8 Flash烧录预备知识

官方手册上,提供了三种flash操作的方式。

- 字节编程

- 字编程

- 块编程

并提供了两种使用SWIM烧录的方法:

第一种方法,在某些型号的MCU上,只能支持字节操作。第二种方法,所有型号都支持,但需要先下载一个ICP驱动到RAM中。这两种方法,官方都没有提供详细的文档描述。因此,只能先使用逻辑分析仪分析STLink工具的下载过程,然后仿照其方法进行操作。

10. 逻辑分析仪分析

一般的逻辑分析仪都没有SWIM协议,因此买的时候注意要买开放接口的逻辑分析仪,然后自己编写。编写的时候没必要考虑异常情况,尽量简单抓出所有下载过程即可。一般半天即可搞定。

我这里抓取了其数据之后,分析部分过程如下:

STLink下载是使用官方描述的第二种方法,即先下载一个驱动到RAM中,然后不停的将整块数据送到RAM中的某特定地址,然后等待驱动将firmware数据写入到flash中。简单描述一下过程如下:

- 激活SWIM

- 配置若干寄存器

- 使能flash读写

- 下载驱动到RAM中

- 按照协议下载firmware数据到特定地址

- 等待驱动将数据写入flash

- 继续下一步写入

11. 写代码

有了上述的实现,以及资料。基本就可以完成整个的程序设计。整个程序需要实现的功能如下,名字即功能。最后的接口为Download()。

12. 参考资料

《UM0470》,介绍SWIM接口

《PM0051》,介绍STM8 flash编程相关步骤

《RM0061》,接收STM8 flash寄存器相关

转载于:https://www.cnblogs.com/WeyneChen/p/9329407.html

SWIM接口及STM8烧录过程相关推荐

  1. Linux接口驱动03 - SWIM(脱离ST烧录器,单线完美升级STM8的固件,附带总结经验和源代码)

    一.需求概述 如何摆脱ST官方烧录器的束缚,编写一个Linux驱动,完成ARM-A9 Soc对STM8固件的升级烧录? 二.目标步骤: 1.准备好一个编译好的固件(bin格式文件): 2.平台Soc激 ...

  2. STM32 ISP烧录过程

     STM32在芯片生产过程中内嵌了一段引导程序,其作用就是通过串口将程序下载到Flash中,为以后的软件更新提供了极大的便利,用户不需要利用仿真口进行下载程序,从而极大的提高了工作效率. STM3 ...

  3. c语言烧录芯片,入门扫盲!芯片程序的烧录过程,没想象那么难跟着走就行!...

    大家好!之前就说过从上个月起,创客e工坊在原本讲解电路知识的基础上会逐渐加入单片机的教程. 并且也如约出了三期的单片机视频:什么是单片机:C语言如何控制单片机:单片机小制作自动加湿器: 那么,今天我们 ...

  4. 高通QFIL版本烧录过程

    QFIL 版本烧录: (1) 下载并安装QPST工具,安装成功后,安装列表内就可以看到 QFIL工具了: (2) 启动QFIL工具,界面如下: 烧录过程: (a)SelectPort 进行端口选择,一 ...

  5. 通达信交易接口代码的执行过程分享

    股票软件一般都提供了接口,可以参考里面的公式,编写自己的公式,这样就可以得到相应的数据了.无论使用哪种语言,建议先了解文档,然后再阅读各编程语言的用户手册. 通达信交易接口代码的执行过程分享: // ...

  6. 标准USB/Mini-USB接口,及OTG 苹果lightning接口和ipod认证过程

    (1)USB (2)Mini USB (3)总结 从左往右依次为:miniUSB公口(A型插头).miniUSB公口(B型插头).USB公口(B型).USB母口(A型插座).USB公口(A型插头) . ...

  7. 用iDesigner对HR7P275开发板进行程序的仿真和代码烧录过程详解

    仿真: 1. 选择芯片型号,选择HR7P275. 2.配置芯片配置字 ICDEB项必须选择 Enable,才可以进行仿真调试. ICD_SEL 选择PA4/PA5,这是由于开发板调试器的物理连接选择的 ...

  8. STM8烧录及加密/解密流程

    STM8烧录及加密流程 打开烧录软件STVP 将需要烧录的程序xxx.s19拖至烧录软件 点击窗口"OPTION BYTE" 点击"ROP"栏,选择" ...

  9. 分享券商通达信下单接口执行委托下单过程

    首先要有券商通达信下单接口,如果有这个功能,那么就可以了.利用委托下单功能来设置,这是预埋单的性质,当达到条件时,会自动交易. 整个委托下单过程如下: // 委托下单 // category:  0= ...

最新文章

  1. MapReduce对交易日志进行排序的Demo(MR的二次排序)
  2. tomcat启动项目内存溢出问题
  3. JavaScript获取节点类型、节点名称和节点值
  4. docker-compose单机容器编排工具
  5. python升级pip在哪儿打开_Linux下升级python和安装pip的详解
  6. 【2018.5.19】模拟赛之二-ssl2433 文件名排序【字符串】
  7. 人工智能领域开展标准化研究
  8. u盘被保护怎样解除?(第十招)
  9. Python使用BeautifulSoup爬取网页中主体部分的内容,并导出为pdf格式
  10. 6.边缘检测:梯度——边缘检测、导数与边缘、什么是梯度_2
  11. Redis(3-3):列表类型
  12. 屏幕操作录制成gif图的技巧
  13. Android基础--ListView的刷新
  14. linux系统添加打印机失败,Linux下设置网络打印机
  15. 《从0到1:CTFer成长之路》
  16. 一分钟带你了解全链路测试
  17. 剑走偏锋——老女人教你另类情人节攻略
  18. 支付公司如何预防和治理重复出款的风险
  19. 该不该抛弃那匹马呢?
  20. 13.0高等数学五-幂级数的收敛域与和函数

热门文章

  1. JS逆向|写给小白的浏览器环境补充指北
  2. Frp内网端口映射教程
  3. 短视频拍摄要注意啥细节?从服化道到拍摄思路,注意细节方能成功
  4. linux 命令 ls 与 ls -lrt 的区别
  5. tp5 fastadmin 拉黑功能实现
  6. ds18b20温度转换指令_ds18b20温度数据怎么换算? - ds18b20如何读取温度?温度数据怎么换算?...
  7. mongo数据同步的三种方案
  8. 算法题:删除链表中指定值的节点(Java实现)
  9. pixel安装magisk与LSPosed框架
  10. 大电流dcdc降压芯片20a_宝砾微PL5501电源芯片批量出货:倍思65W车充首发!