当 SWIM 收到一包数据时,它将解码: ●1:检测到小于或等于 8个连续低电平。 ●0:检测到大于或等于 9个连续低电平。 3.4 SWIM 通信协议
当处于 ACTIVE 模式时,通信可以被主机或设备初始化。每一个字节或命令之前都有 一位头,用于仲裁主机和设备发起的通信。
主机的头是“ 0” ,由于是开漏结构,可用于在仲裁时取得优先权。若无数据传输,主机 就可以开始传输。
主机发送的每个命令有以下组成: ●1个命令(ROTF , WOTF or SWRST包含:
头:1Bit “ 0” b2-b0:3-bit 命令
pb :奇偶位(parity bit :b(i异或
ack :应答位(1bit “ 1” 。若检测到错误或为准备好,接收者必须发送非应答 (NACK :1bit “ 0”
●若干数据包(WOTF 下包含: 头:1Bit “ 0” b2-b0:8-bit 数据
pb :奇偶位(parity bit :b(i异或 ack :应答位(1bit “ 1” 。
3.5 SWIM 命令
当总线空闲或者设备发送某个数据字节后,
主机可以发送一个命令。 发送命令后, 主机 释放总线。当 SWIM 准备好回应命令时,它启动(initiates 转换。如果 SWIM 正在相应一 个命令,主机发出新的命令,上个命令被取消,且新命令被解码,除 WOTF 外。
三个命令是有效的(available 。如所示。 3.5.1 SRST :系统复位
格式:一个命令从主机到目标板 参数:无
只有 SWIM_CSR/SWIM_DM位置一, SRST 命令产生一个系统复位。 3.5.2 ROTF :read on the fly
格式:一个命令 +要读的字节数 +三个字节的地址。 参数:
N 8位的将要读取的字节数(1~255 @E/H/L 即将访问的 24位地址
D[…] 从存储空间读取的字节
如果主机发送一个 NACK 信号,设备将再次发送相同的字节。 如果 SWIM_DM位被清零, ROTF 只能在 SWIM 内部寄存器被操作。 3.5.3 WOTF :write on the fly
格式:一个命令 +要写的字节数 +三个字节的地址。
参数:
N 8位的将要写的字节数(1~255 @E/H/L 即将访问的 24位地址 D[…] 将要写到存储空间的字节
当字节 D[i+1]到达, 如果字节 D[i]仍未写完成, 那么 D[i+1]之后紧跟着 NACK 。 在这种 情况下,主机必须再次发送 D[i+1]知道收到应答信号 ACK 。
对于最后一个字节,当一个新命令发生,而最后一个字节未写完成,那么,新命令将收 到 NACK ,且不会被解释(account 执行。
如果 SWIM_DM位被清零, WOTF 只能在 SWIM 内部寄存器被操作。 3.6 SWIM 通信复位
在通信期间的问题,主机可以通过发送 128个 HSI 时钟周期来复位通信。如果 SWIM 检测到 SWIM 引脚拉低超过 64个 HIS 时钟周期, 它将复位通信状态机, 并且
打开低速模式 (SWIM_CSR.HS<-0 。 这是为了改变内部 RC 振荡器的频率。 (This is to allow for variation in the frequency of the internal RC oscillator.
为了响应(In response to 通信复位, SWIM 将发送同步帧 — 拉低 DBG 引脚持续 128个 HIS 振荡器时钟。
3.7 CPU 寄存器访问
CPU 寄存器被映射在 STM8存储器中,且这些寄存器可以通过 ROTF 和
WOTF 命令来
被直接读或写。当 CPU 处于停滞状态时,对 CPU 寄存器的写操作才被允许。 为了刷新指令解码阶段,你必须在为程序计数器(PCE , PCH , PCL 写入新值后,将 DM control/status 寄存器的 FLUSH 位置一。