当前位置:首页 >> 信息与通信 >>

STM8 SWIM通信协议和调试模块


Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

STM8 的 SWIM 通信协议(communication protocol)和调试 模块

介绍
本手册为需要建立 STM8 微控制器系列的编程, 测试或调试工具的开发者而写。 它解释 了 STM8 内核的调试结

构。 STM8 的调试系统包括以下两个模块: ? DM:调试模块; ? SWIM:单总线接口模块。 相关文档(Related documentation) : ? How to program STM8S and STM8A Flash program memory and data EEPROM (PM0051) ?(STM8A version is not published yet) ? 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

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

目 录
1. 调试系统概述...........................................................................................................1 2. 通信层.......................................................................................................................2 3. 单总线接口模块(SWIM)....................................................................................3
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 5.1 操作模式...................................................................................................................3 SWIM 入口序列.......................................................................................................3 位格式.......................................................................................................................5 SWIM 通信协议.......................................................................................................6 SWIM 命令...............................................................................................................7 SWIM 通信复位.......................................................................................................8 CPU 寄存器访问 ......................................................................................................8 在停止模式下的 SWIM 通信 ..................................................................................9 物理层.......................................................................................................................9 STM8 的 SWIM 寄存器...........................................................................................9 介绍.........................................................................................................................12 主要特点.................................................................................................................12 调试.........................................................................................................................12 断点解码表.............................................................................................................14 软断点模式.............................................................................................................14 时序描述.................................................................................................................14 中止(abort)..............................................................................................................15 数据断点.................................................................................................................15 指令断点(Instruction breakpoint)......................................................................15 单步模式.................................................................................................................16 应用笔记.................................................................................................................16 DM 寄存器 .............................................................................................................16 时序相关.................................................................................................................17

4. 调试模块(DM) ..................................................................................................12

5. 常见问题解答.........................................................................................................17

. 2

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

1. 调试系统概述
STM8 的调试系统接口允许一个调试或编程工具, 通过一根基于开漏接口的单总线双向 (bidirectional)通信线连接到 MCU。 它提供了非抢占式 (non-intrusive) 读写方式去访问 RAM 和外设, 在程序执行期间(during program execution)。 方框图(The block diagram)如所示。

调 试 模 块 使 用 设 备 中 的 两 个 内 部 时 钟 源 , LSI 低 速 内 部 时 钟 ( 通 常 范 围 为 20KHz-200KHz,视产品而定)和 HSI 高速内部时钟(通常范围为 10MHz-25MHz,视产品 而定) 。必要时,时钟会自动启动。

. 1

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

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) 。

. 2

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

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 模式(一般地,会在复位后执行) 。尽管在这种状态下,仍然有可能
. 3

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

使得 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. 4. 入口序列后,SWIM 进入 ACTIVE 状态,HSI 振荡器(oscillator)自动开启。 延时过后,SWIM 发出一个同步帧给主机。

同步帧描述:MCU 的 SWIM 总线输出低电平,维持 128 个 HSI 时钟脉冲表示发出一个 同步帧,用于调试主机对 RC 的测量。一个高级调试主机可以重新校准(re-calibrate)它的 时钟,来适应(adapt)MCU 内部 RC 的频率。 5. 开始 SWIM 通信之前, SWIM 线必须释放为高电平, 以保证 SWIM 准备好通信 (至 少维持 300ns) 。 6. 写 0A0H 到 SWIM_CSR 寄存器: ? Bit5 置一,允许访问整个存储器和 SRST 命令 ? Bit7 置一,掩盖内部复位源 7. 8. 释放加载配置字节的序列的复位。等待 1ms 以保持稳定。 一旦配置字节加载发生,且稳定时间到,CPU 分段(in phase 8):

? STM8S 停止,且 HSI = 16MHz(详见 STM8S 数据手册) ? SWIM 时钟为 HSI/2 = 8MHz ? SWIM 在激活状态,在低速位格式(如所示)

. 4

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

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 电平。
. 5

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

当 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”。 )

. 6

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

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 格式:一个命令+要写的字节数+三个字节的地址。

. 7

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

参数: 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 位置一。

. 8

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

3.8

在停止模式下的 SWIM 通信

为了保持调试主机的通信联系,MCU 进入停滞模式时,HIS 振荡器仍打开。这就意味 着当 SWIM 处于激活状态下,停滞模式的功率消耗测量是没有意义的。 当系统处于停滞模式,WFI 或读保护模式下,SWIM_CSR 寄存器的 NO_ACCESS 位被 置一。这就意味着在此情况下总线不能被访问。 SWIM_CSR 寄存器的 OSCOFF 位通常用于关闭振荡器。在此状态下,只要设备处于停 滞模式,且 SWIM 引脚拉高,那么调试机制失效。恢复(recover)调试机制的唯一方式是 诱发(induce)SWIM 引脚产生一个下降沿:这将使能 HIS 振荡器。

3.9

物理层

通信期间,SWIM 引脚将配置为伪开漏模式。当该引脚输出 0 时,它将能经受 8mA 的 灌电流。SWIM 总线的外部上拉应该有以下要求:SWIM 的最大上升时间 tr 应该小于 1 个采 样周期(100ns +/-4%) 。

3.10 STM8 的 SWIM 寄存器
3.10.1
. 9

SWIM 控制状态寄存器(SWIM_CSR)

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

地址:7F80H 复位值:00H 当上电复位或 SWIM 的 SRST 命令(SWIM_CSR 寄存器的 RST 位置一)时,该寄存器 复位。

. 10

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

3.10.2

SWIM 时钟控制寄存器(CLK_SWIMCCR)

偏移地址:50CDH(产品依赖—product dependent) 复位值:xxxx 0000(x0H)

. 11

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

4. 调试模块(DM)
4.1 介绍

调试模块(DM)允许开发者执行某一(certain)调试任务而无需使用仿真器。例如, DM 可以中断 MCU,打断无限循环(infinite loops)或者在给定断点输出内核上下文(栈) 。 DM 主要用于仿真调试。

4.2
? ? ? ? ? ? ?

主要特点
两个条件断点 (可在以下几处中断: 取指令-instruction fetch, 读写数据, 堆栈访问…) 软件断点控制 睡眠模式 在 SWIM 模式下的 WOTF 命令的外部停止能力 看门狗和外设控制 DM 版本鉴定功能(identification capability) 中断向量表选择

4.3

调试
可通过 SWIM 接口读写 DM 寄存器。STM8 内核无权访问这些寄存器。

. 12

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

4.3.1 复位 由于调试模块寄存器的复位值,一旦 SWIM 激活,且 SWIM_CSR 寄存器的 SWIM_DM 位置一,在复位向量地址的一个“数据读”断点将会自动设置。这个断点可用于初始化调试 窗口。 4.3.2 断点 当运行至断点处时,DM 产生一个内核的停止。当处理器停止时,主机能够读或修改存 储器的任何地址。访问处理器寄存器详见。 为了重启执行程序,必须使用 SWIM 协议的 WOTF 命令,将 DM_CSR2 的 STALL 位 必须清零。 4.3.3 中止(Abort) 使用中止功能,主机必须写 DM_CSR2 的 STALL 位。 无中断产生。当前状态下内核被中止。使用 SWIM 命令,主机可以读和修改 MCU 的状 态。如果 CPU 寄存器被修改,程序被描述详见。 主机可以重启程序,通过复位 STALL 位。 4.3.4 看门狗控制 使用 DM 控制寄存器的 WDGOFF 位,你可以配置看门狗窗口,且调试模块中止 CPU 时,将停止独立的看门狗计数器。看门狗激活之前必须将该位置一。如果硬件看门狗配置位 使能了看门狗,则 WDGOFF 位将无效。 4.3.5 SWIM 交互 SWIM 发送状态位用于指示 SWIM 是否激活。当 SWIM 未被激活,DM 将不会生成任 何的断点/中止要求给 CPU。

. 13

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

4.4

断点解码表

4.5

软断点模式

软断点模式是为调试工具保留的,用于将断点插入(insert)到用户代码中,通过软件 断点 取代(substituting)用户指令(instruction) 。 使用 DM control/status 寄存器的 SWBKPE 位可以使能软件断点模式。 当解码 BKPT 指令后, CPU 中止, STALL 和 SWBKF 位被硬件置一, 且 以指示 (indicate) 发生的软件断点。 为继续 (resume) 执行, 调试器必须还原(restore)用户的指令, 然后将 FLUSH 位置一,将 STALL 位清零。

4.6

时序描述
时序信息如所示。

. 14

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

4.7

中止(abort)
写 DM_CSR2 寄存器的 STALL 位可以立即产生中止。

4.8

数据断点
当 SWIM 激活时,在当前指令执行到最后时,产生一个中止。

4.9

指令断点(Instruction breakpoint)

在 STM8 中,一个指令中断,DM 在选择指令执行之前,中止 CPU。当特殊地址与固 定的指令地址不对应时,不会产生中止。

. 15

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

4.10 单步模式
在指令的第一个解码周期中,在指令执行前,STM8 的 CPU 激活中止。

当单步模式和指令断点都使能时,STF 和 BKxF 标志都被置一。当清除 STALL 位时, 单步功能继续原来的操作。

4.11 应用笔记
4.11.1 非法存储器访问(illegal memory access)

如果程序试图读写非法的存储器(如保留区) ,选择“Data R/W on BK1<=@<=BK2” , BK1 和 BK2 是更低的和更高的保留区。 4.11.2 禁止堆访问

如果堆区中一部分包含了特殊的不能被重写的数据或指令, DM 可能会阻止访问这些区 域。选择“Data Write in Stack on @ <= BK1”包含,且将设置 BK1 为更高的值。如果 STM8 试图重写这些值,DM 将产生一个中断。 4.11.3 DM 截断

一个 DM 截断后 CPU 中止。当 CPU 中止时, SWIM 可以读写任何存储器地址或映射的 寄存器。 通过重新设置 Stall 位,程序从断点处继续执行。 如果 PC 的改变被允许,SWIM 必须写新的 PC 值,如所示。为了从新的 PC 地址获取 代码,SWIM 必须在设置 STALL 位之前,设置 DM control/status 寄存器的 FLUSH 位。

4.12 DM 寄存器
略。

. 16

Smallmount

STM8 SWIM 通信协议和调试模块
STM8 应用笔记

5. 常见问题解答
5.1 时序相关
1. MCU 与仿真器之间相互通信,如何保证时钟同步?

2. 仿真器发出 SWIM 入口序列:4 个 1KHz 的脉冲,紧接着 4 个 2KHz 的脉冲。由于 没有时钟保证,如何确保 MCU。

. 17


相关文章:
STM8L微控制器中文参考手册
关于 STM8 SWIM 通信协议信息和调试模块,请参阅用户手册(um0470) 。在 STM8 的核心信息,请参阅 STM8 的 CPU 编程手册(pm0044) 。关于编程,擦除和保护的内部...
STM8L中文参考手册-1,2,3,4(RM0031)
注:指 STM8 SWIM 通信协议和调试模块用户手册 游的描述和调试模块(DM)寄存器。 5 内存和寄存器图 本节适用于低密度 stm8l05xx / stm8l15xx 设备,介质密度...
STM8L152中文介绍
信息的调试模块和游泳(单线接口模块),指 stm8 游泳和通信协议调试模块用户手册(um0470)。 信息的 stm8 核心,指 stm8 处理器编程手册(pm0044)。 2、描述 高...
STM8L152中文介绍
信息的调试模块和游泳(单线接口模块),指 stm8 游泳和通信协议调试模块用户手册(um0470)。 信息的 stm8 核心,指 stm8 处理器编程手册(pm0044)。 2、描述 高...
STM8S105XX中文资料
● 如果需要关于调试和 SWIM(single wire interface module 单线接口模块),请参考 STM8 SWIM 通信协议和调试模块用户手册(UM0470)。● 如果需要关于 STM8 内核的...
STM8使用小经验
STM8使用小经验_信息与通信_工程科技_专业资料。STM...该工具具有 SWIM 接口,也能支持 SWIM 在线调试和 ...
基于stm8测压力2
基于stm8测压力2_电子/电路_工程科技_专业资料。基于...协议,主/从模式和自动重新同步 SPI 接口最高到 10...单线接口模块(SWIM)和调试模块(DM) ,可以方便地...
STM8A:汽车电子MCU方案
这些模块化产品提供了真数据 EEPROM 以及软件和引脚...STM8AF 板可以执行 CAN 和 LIN 通信, MCU 供电...板上 ST-LINK/V2 包括调试和编程,方案特点: ?...
ST系列MCU与MSP430比较_信息与通信_工程科技_专业资料
8. 9. MSP430可采用软件开发,采用IAR,可以JTAG仿真.STM8采用SWIM调试模块. ...件模拟方式或UART转协议方式,故需要一个带UART和SPI的MCU.STM8,STM32, MSP...
STM8 开发环境
STM8 开发环境_信息与通信_工程科技_专业资料。STM...调试接口(SWIM) 1、电源 STM8S 系列 MCU 的工作...
更多相关标签:
stm8 swim接口 | stm8 swim | stm8 swim io | stm8s swim复用设置 | stm8 swim接口 jlink | stm8 swim复用设置 | stm8 swim做i o处理 | stm8 iar stlink 调试 |