STM8的SWIM通信协议(communication protocol)和调试模块
介绍
本手册为需要建立STM8微控制器系列的编程,测试或调试工具的开发者而写。它解释了STM8内核的调试结构。
STM8的调试系统包括以下两个模块:
●DM:调试模块;
●SWIM:单总线接口模块。
相关文档(Related documentation):
●How to program STM8S and STM8A Flash program memory and data EEPROM
version is not published yet)
(PM0051) (STM8A
●How to program STM8L Flash program memory and data EEPROM (PM0054)
专业术语:
DM:Debug Mode
SWIM:Serial Wire Interface Module
WFI:Wait For Interrupt
WFE: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模式(一般地,会在复位后执行)。尽管在这种状态下,仍然有可能