最近新学习了一种协议模式——SWIM,适用于STM8系列芯片,st官网有明确的文档说明。
文章目录
一、编码格式
SWIM 通信协议使用归零码编译,并且支持两种速率。在 SWIM 激活时,选择低速,而高速是通过 SWIM 协议在 SWIM_CSR 寄存器中设置 HS bit 完成。
1.1 高速编码格式
由 8M 时钟同步,两个‘0’加上八个‘1’表示逻辑 1,八个‘0’加上两个‘1’表示逻辑 0。
1.2 低速编码格式
由 8M 时钟同步,两个‘0’加上二十个‘1’表示逻辑 1,二十个‘0’加上两个‘1’表示逻辑 0。
二、通讯协议
2.1 主机(host)到从机(target)通信
主从通信格式:
由命令+数据组成,其中
命令(5-bit):bit[0]:始终是 0,称为 header;
bit[3:1]:预定义命令;
bit[4]:b0,b1,b2 异或值;
ack 是 target 返回的电平(1-ack,0-nack)。
数据(10-bit):bit[0]:始终是 0;
bit[8:1]:8-bit 数据
bit[9]:b0-b7 异或值
ack 是 target 返回的电平。
2.2 从机(target)到主机(host)通信
从主通信格式:
由数据组成,其中
数据(10-bit):bit[0]:始终是 1;
bit[8:1]:8-bit 数据
bit[9]:b0-b7 异或值
ack 是 host 返回的电平。
2.3 预定义命令
三、SWIM 命令
3.1 复位操作
命令格式:
复位操作有两种,第一种为发送复位命令,即发送 SRST。第二种为拉低总线 16us以上。
3.2 读操作
命令格式:
由读命令+读取的字节数+24-bit 地址+N个读取的数据组成:
ROTF: 0b001;
N: 读取的字节数
@E/@H/@L:24-bit 地址
D[@+i]: 读取的数据
3.3 写操作
命令格式:
由写命令+发送的字节数+24-bit 地址+N 个发送的数据组成:
ROTF: 0b010;
N: 发送的字节数
@E/@H/@L:24-bit 地址
D[@+i]: 发送的数据
四、激活流程
上电之后,SWIM 并没有处于激活状态,需要发送特定的时序完成激活,如下图:
1.SWIM 引脚至少 16us 低电平;
2.发送特定序列,四个 1k Hz 脉冲+四个 2k Hz 脉冲;
3.设置 SWIM_CSR 寄存器 0xA0,bit[7]:屏蔽内部重置源,bit[5]:允许访问整个存储器范围和 SRST 命令。
目前只是对SWIM的初步认识,后续模拟的时候遇到问题再记录。