搜索
您的当前位置:首页正文

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. 入口序列后,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在激活状态,在低速位格式(如所示)

.

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 SWIM控制状态寄存器(SWIM_CSR)

.

9

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Top