STM8的SWIM通信协议(communication protocol)和调试模块介绍本手册为需要建立STM8微控制器系列的编程,测试或调试工具的开发者而写。
它解释了STM8内核的调试结构。
STM8的调试系统包括以下两个模块:●DM:调试模块;●SWIM:单总线接口模块。
相关文档(Related documentation):●How to program STM8S and STM8A Flash program memory and data EEPROMversion is not published yet)(PM0051) (STM8A●How to program STM8L Flash program memory and data EEPROM (PM0054)专业术语:DM:Debug ModeSWIM:Serial Wire Interface ModuleWFI:Wait For InterruptWFE:Wait For Event目录1. 调试系统概述 (1)2. 通信层 (2)3. 单总线接口模块(SWIM) (3)3.1 操作模式 (3)3.2 SWIM入口序列 (3)3.3 位格式 (5)3.4 SWIM通信协议 (6)3.5 SWIM命令 (7)3.6 SWIM通信复位 (8)3.7 CPU寄存器访问 (8)3.8 在停止模式下的SWIM通信 (9)3.9 物理层 (9)3.10 STM8的SWIM寄存器 (9)4. 调试模块(DM) (12)4.1 介绍 (12)4.2 主要特点 (12)4.3 调试 (12)4.4 断点解码表 (14)4.5 软断点模式 (14)4.6 时序描述 (14)4.7 中止(abort) (15)4.8 数据断点 (15)4.9 指令断点(Instruction breakpoint) (15)4.10 单步模式 (16)4.11 应用笔记 (16)4.12 DM寄存器 (16)5. 常见问题解答 (17)5.1 时序相关 (17)1. 调试系统概述STM8的调试系统接口允许一个调试或编程工具,通过一根基于开漏接口的单总线双向(bidirectional)通信线连接到MCU。
它提供了非抢占式(non-intrusive)读写方式去访问RAM和外设,在程序执行期间(during program execution)。
方框图(The block diagram)如所示。
调试模块使用设备中的两个内部时钟源,LSI低速内部时钟(通常范围为20KHz-200KHz,视产品而定)和HSI高速内部时钟(通常范围为10MHz-25MHz,视产品而定)。
必要时,时钟会自动启动。
2. 通信层SWIM是一个基于异步(asynchronous),强灌电流(high sink)(8mA),开漏,双向通信(bidirectional communication)的单总线接口。
当CPU正在运行,出于调试目的,SWIM允许非抢占式(non-intrusive)读写访问,去执行on-the-flay到RAM和外设寄存器。
此外(In addition),当CPU停止(stalled),SWIM允许读写访问,去执行MCU存储空间的其它部分(数据EEPROM和程序存储器)。
CPU寄存器(A,X,Y,CC,SP)也可以被访问。
这些寄存器被映射在存储器中,而且可以以相同的方式去访问。
●仅仅当SWIM_DM位置一时,寄存器,外设和存储器才被访问。
●当系统处于停止(HALT),WFI或者读保护模式,SWIM_CSR寄存器的NO_ACCESS标志将置一。
在这种情况下,禁止(it is forbidden to)执行任何的访问,这时因为部分设备可能没有时钟驱动,读访问返回无用的数据(garbage),或者写访问不成功。
SWIM可以执行MCU软件复位操作SWIM引脚可以作为标准IO口用于MCU的目标应用,如果你也想将他用于调试,IO 口功能将会有一些限制(some restrictions)。
最安全的方式是在PCB设计时提供选择项(a strap option)。
3. 单总线接口模块(SWIM)3.1 操作模式上电复位后,SWIM复位,并且进入它的OFF模式。
1. OFF:在此模式下,SWIM引脚一定不能在应用中用作I/O口。
等待SWIM入口序列(entry sequence)或者应用软件打开I/O模式。
2. I/O:软件应用程序设置内核配置寄存器(CFG_GCR)的SWIM禁能位(SWD)(SWIM disable),可以进入此状态。
在此状态下,用户应用程序可以使用SWIM引脚作为标准I/O引脚,仅有的缺陷是无法使用该引脚的内置(bulit-in)调试功能。
一旦复位(In case of a reset),SWIM重新返回OFF模式。
3. ACTIVE:当处于OFF状态,SWIM引脚检测到一个特殊的序列,可以进入此模式。
在此状态下,通过SWIM引脚,主设备工具使用3个命令去控制STM8。
(SRST System Reset,ROTF Read On The Fly,WOTF Write On The Fly)注意:请注意,SWIM可以被设置为Active,而且可以在设备处于复位状态(NRST引脚被强制拉低)时进行通信。
3.2 SWIM入口序列POR(上电复位)后,SWIM一直处于OFF模式,SWIM引脚采样用于检测入口序列。
要实现这一机制,内部低速RC时钟在POR后自动运行,并且在SWIM处于OFF模式下一直保持。
如果SWIM引脚检测到入口序列之前,SWD bit is set,SWIM将工作在I/O模式。
一旦SWIM处于ACTIVE模式,写该位是无效的,并且SWIM仍然处于ACTIVE模式。
如果应用程序使用SWIM引脚作为I/O模式,应用程序会在软件代码的初始化部分将SWIM引脚设置为I/O模式(一般地,会在复位后执行)。
尽管在这种状态下,仍然有可能使得SWIM引脚处于ACTIVE模式,方法是:强制拉低RESET引脚,保持RESET引脚为0持续(duration)到SWIM入口序列完成。
在复位期间或者应用程序运行期间,只要SWIM处于OFF模式,任何时候,SWIM入口序列都会被检测。
如果SWIM引脚和复位引脚都被复用(are multiplexed)为I/O口,那么进入SWIM的ACTIVE状态的方法是:MCU设备掉电,再上电,并且保持MCU复位直到SWIM入口序列发送结束。
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个HSI时钟脉冲表示发出一个同步帧,用于调试主机对RC的测量。
一个高级调试主机可以重新校准(re-calibrate)它的时钟,来适应(adapt)MCU内部RC的频率。
5. 开始SWIM通信之前,SWIM线必须释放为高电平,以保证SWIM准备好通信(至少维持300ns)。
6. 写0A0H到SWIM_CSR寄存器:●Bit5置一,允许访问整个存储器和SRST命令●Bit7置一,掩盖内部复位源7. 释放加载配置字节的序列的复位。
等待1ms以保持稳定。
8. 一旦配置字节加载发生,且稳定时间到,CPU分段(in phase 8):●STM8S停止,且HSI = 16MHz(详见STM8S数据手册)●SWIM时钟为HSI/2 = 8MHz●SWIM在激活状态,在低速位格式(如所示)3.3 位格式位格式采用的是一种归零格式(Return-To-Zero format),它允许位同步。
两个通信速率可选。
在SWIM激活状态下,选择的是低速通信速率。
通过设置SWIM_CSR寄存器的HS位置一,选择高速通信速率。
当在复位阶段(during the RESET phase)进入SWIM模式时,配置项可能已经从非抢占式存储器中加载到相应的寄存器中。
任何内部或外部的复位都会触发加载配置项。
为了确保适当的系统行为,HS位直到配置项加载完成后才能置一。
在配置项加载结束后,SWIM_CSR寄存器的HSIT位被硬件置一。
3.3.1 高速位格式10个HSI振荡器脉冲生成一位。
位格式为:●2个时钟脉冲的0电平,接着8个时钟周期的1电平。
●8个时钟脉冲的0电平,接着2个时钟周期的1电平。
当SWIM收到一包数据时,它将解码:●1:检测到小于或等于4个连续低电平。
●0:检测到大于或等于5个连续低电平。
3.3.2 低速位格式22个HSI振荡器脉冲生成一位。
位格式为:●2个时钟脉冲的0电平,接着20个时钟周期的1电平。
●20个时钟脉冲的0电平,接着2个时钟周期的1电平。
当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命令产生一个系统复位。