SWIM接口及STM8烧录过程

转自:https://blog.csdn.net/weynechen/article/details/81415964

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寄存器相关

 

串口ISP:

The STM8 Flash loader demonstrator (FLASHER-STM8) is a free PC software utility from STMicroelectronics.

This software runs on Microsoft®OSs and communicates with the MCU system memory bootloader through the RS232.

To get an example on how to execute the device’s bootloader, refer to the application note STM32 microcontroller system memory boot mode (AN2606) available at www.st.com.

To get information about the USART protocol used in the STM32 MCU bootloader, refer to the application note USART protocol used in the STM32 bootloader (AN3155) available at www.st.com.

https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm8-software-development-tools/stm8-programmers/flasher-stm8.html

---------------------
作者:weynechen
来源:CSDN
原文:https://blog.csdn.net/weynechen/article/details/81415964
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值