3单总线接口模块SWIM.docx
- 文档编号:6685798
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:18
- 大小:1.24MB
3单总线接口模块SWIM.docx
《3单总线接口模块SWIM.docx》由会员分享,可在线阅读,更多相关《3单总线接口模块SWIM.docx(18页珍藏版)》请在冰豆网上搜索。
3单总线接口模块SWIM
STM8的SWIM通信协议(communicationprotocol)和调试模块
介绍
本手册为需要建立STM8微控制器系列的编程,测试或调试工具的开发者而写。
它解释了STM8内核的调试结构。
STM8的调试系统包括以下两个模块:
●DM:
调试模块;
●SWIM:
单总线接口模块。
相关文档(Relateddocumentation):
●HowtoprogramSTM8SandSTM8AFlashprogrammemoryanddataEEPROM(PM0051)(STM8Aversionisnotpublishedyet)
●HowtoprogramSTM8LFlashprogrammemoryanddataEEPROM(PM0054)
专业术语:
DM:
DebugMode
SWIM:
SerialWireInterfaceModule
WFI:
WaitForInterrupt
WFE:
WaitForEvent
1.调试系统概述
STM8的调试系统接口允许一个调试或编程工具,通过一根基于开漏接口的单总线双向(bidirectional)通信线连接到MCU。
它提供了非抢占式(non-intrusive)读写方式去访问RAM和外设,在程序执行期间(duringprogramexecution)。
方框图(Theblockdiagram)如所示。
调试模块使用设备中的两个内部时钟源,LSI低速内部时钟(通常范围为20KHz-200KHz,视产品而定)和HSI高速内部时钟(通常范围为10MHz-25MHz,视产品而定)。
必要时,时钟会自动启动。
2.通信层
SWIM是一个基于异步(asynchronous),强灌电流(highsink)(8mA),开漏,双向通信(bidirectionalcommunication)的单总线接口。
当CPU正在运行,出于调试目的,SWIM允许非抢占式(non-intrusive)读写访问,去执行on-the-flay到RAM和外设寄存器。
此外(Inaddition),当CPU停止(stalled),SWIM允许读写访问,去执行MCU存储空间的其它部分(数据EEPROM和程序存储器)。
CPU寄存器(A,X,Y,CC,SP)也可以被访问。
这些寄存器被映射在存储器中,而且可以以相同的方式去访问。
●仅仅当SWIM_DM位置一时,寄存器,外设和存储器才被访问。
●当系统处于停止(HALT),WFI或者读保护模式,SWIM_CSR寄存器的NO_ACCESS标志将置一。
在这种情况下,禁止(itisforbiddento)执行任何的访问,这时因为部分设备可能没有时钟驱动,读访问返回无用的数据(garbage),或者写访问不成功。
SWIM可以执行MCU软件复位操作
SWIM引脚可以作为标准IO口用于MCU的目标应用,如果你也想将他用于调试,IO口功能将会有一些限制(somerestrictions)。
最安全的方式是在PCB设计时提供选择项(astrapoption)。
3.单总线接口模块(SWIM)
3.1操作模式
上电复位后,SWIM复位,并且进入它的OFF模式。
1.OFF:
在此模式下,SWIM引脚一定不能在应用中用作I/O口。
等待SWIM入口序列(entrysequence)或者应用软件打开I/O模式。
2.I/O:
软件应用程序设置内核配置寄存器(CFG_GCR)的SWIM禁能位(SWD)(SWIMdisable),可以进入此状态。
在此状态下,用户应用程序可以使用SWIM引脚作为标准I/O引脚,仅有的缺陷是无法使用该引脚的内置(bulit-in)调试功能。
一旦复位(Incaseofareset),SWIM重新返回OFF模式。
3.ACTIVE:
当处于OFF状态,SWIM引脚检测到一个特殊的序列,可以进入此模式。
在此状态下,通过SWIM引脚,主设备工具使用3个命令去控制STM8。
(SRSTSystemReset,ROTFReadOnTheFly,WOTFWriteOnTheFly)
注意:
请注意,SWIM可以被设置为Active,而且可以在设备处于复位状态(NRST引脚被强制拉低)时进行通信。
3.2SWIM入口序列
POR(上电复位)后,SWIM一直处于OFF模式,SWIM引脚采样用于检测入口序列。
要实现这一机制,内部低速RC时钟在POR后自动运行,并且在SWIM处于OFF模式下一直保持。
如果SWIM引脚检测到入口序列之前,SWDbitisset,SWIM将工作在I/O模式。
一旦SWIM处于ACTIVE模式,写该位是无效的,并且SWIM仍然处于ACTIVE模式。
如果应用程序使用SWIM引脚作为I/O模式,应用程序会在软件代码的初始化部分将SWIM引脚设置为I/O模式(一般地,会在复位后执行)。
尽管在这种状态下,仍然有可能使得SWIM引脚处于ACTIVE模式,方法是:
强制拉低RESET引脚,保持RESET引脚为0持续(duration)到SWIM入口序列完成。
在复位期间或者应用程序运行期间,只要SWIM处于OFF模式,任何时候,SWIM入口序列都会被检测。
如果SWIM引脚和复位引脚都被复用(aremultiplexed)为I/O口,那么进入SWIM的ACTIVE状态的方法是:
MCU设备掉电,再上电,并且保持MCU复位直到SWIM入口序列发送结束。
SWIM激活时序图如所示,图中每一段的描述如下。
1.为了激活SWIM,SWIM引脚必须强制拉低16μs(在HSI下最少64个脉冲)。
2.第一个脉冲后(总线当前为0),在SWIM的ACTIVE状态入口处,SWIM检测一个特殊序列以保证鲁棒性(guaranteerobustness).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分段(inphase8):
●STM8S停止,且HSI=16MHz(详见STM8S数据手册)
●SWIM时钟为HSI/2=8MHz
●SWIM在激活状态,在低速位格式(如所示)
3.3位格式
位格式采用的是一种归零格式(Return-To-Zeroformat),它允许位同步。
两个通信速率可选。
在SWIM激活状态下,选择的是低速通信速率。
通过设置SWIM_CSR寄存器的HS位置一,选择高速通信速率。
当在复位阶段(duringtheRESETphase)进入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.4SWIM通信协议
当处于ACTIVE模式时,通信可以被主机或设备初始化。
每一个字节或命令之前都有一位头,用于仲裁主机和设备发起的通信。
主机的头是“0”,由于是开漏结构,可用于在仲裁时取得优先权。
若无数据传输,主机就可以开始传输。
主机发送的每个命令有以下组成:
●1个命令(ROTF,WOTForSWRST)包含:
头:
1Bit“0”
b2-b0:
3-bit命令
pb:
奇偶位(paritybit):
b(i)异或
ack:
应答位(1bit“1”)。
若检测到错误或为准备好,接收者必须发送非应答(NACK:
1bit“0”)
●若干数据包(WOTF下)包含:
头:
1Bit“0”
b2-b0:
8-bit数据
pb:
奇偶位(paritybit):
b(i)异或
ack:
应答位(1bit“1”)。
3.5SWIM命令
当总线空闲或者设备发送某个数据字节后,主机可以发送一个命令。
发送命令后,主机释放总线。
当SWIM准备好回应命令时,它启动(initiates)转换。
如果SWIM正在相应一个命令,主机发出新的命令,上个命令被取消,且新命令被解码,除WOTF外。
三个命令是有效的(available)。
如所示。
3.5.1SRST:
系统复位
格式:
一个命令从主机到目标板
参数:
无
只有SWIM_CSR/SWIM_DM位置一,SRST命令产生一个系统复位。
3.5.2ROTF:
readonthefly
格式:
一个命令+要读的字节数+三个字节的地址。
参数:
N8位的将要读取的字节数(1~255)
@E/H/L即将访问的24位地址
D[…]从存储空间读取的字节
如果主机发送一个NACK信号,设备将再次发送相同的字节。
如果SWIM_DM位被清零,ROTF只能在SWIM内部寄存器被操作。
3.5.3WOTF:
writeonthefly
格式:
一个命令+要写的字节数+三个字节的地址。
参数:
N8位的将要写的字节数(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.6SWIM通信复位
在通信期间的问题,主机可以通过发送128个HSI时钟周期来复位通信。
如果SWIM检测到SWIM引脚拉低超过64个HIS时钟周期,它将复位通信状态机,并且打开低速模式(SWIM_CSR.HS<-0)。
这是为了改变内部RC振荡器的频率。
(ThisistoallowforvariationinthefrequencyoftheinternalRCoscillator.)
为了响应(Inresponseto)通信复位,SWIM将发送同步帧—拉低DBG引脚持续128个HIS振荡器时钟。
3.7CPU寄存器访问
CPU寄存器被映射在STM8存储器中,且这些寄存器可以通过ROTF和WOTF命令来被直接读或写。
当CPU处于停滞状态时,对CPU寄存器的写操作才被允许。
为了刷新指令解码阶段,你必须在为程序计数器(PCE,PCH,PCL)写入新值后,将DMcontrol/status寄存器的FLUSH位置一。
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.10STM8的SWIM寄存器
3.10.1SWIM控制状态寄存器(SWIM_CSR)
地址:
7F80H
复位值:
00H
当上电复位或SWIM的SRST命令(SWIM_CSR寄存器的RST位置一)时,该寄存器复位。
3.10.2SWIM时钟控制寄存器(CLK_SWIMCCR)
偏移地址:
50CDH(产品依赖—productdependent)
复位值:
xxxx0000(x0H)
4.调试模块(DM)
4.1介绍
调试模块(DM)允许开发者执行某一(certain)调试任务而无需使用仿真器。
例如,DM可以中断MCU,打断无限循环(infiniteloops)或者在给定断点输出内核上下文(栈)。
DM主要用于仿真调试。
4.2主要特点
●两个条件断点(可在以下几处中断:
取指令-instructionfetch,读写数据,堆栈访问…)
●软件断点控制
●睡眠模式
●在SWIM模式下的WOTF命令的外部停止能力
●看门狗和外设控制
●DM版本鉴定功能(identificationcapability)
●中断向量表选择
4.3调试
可通过SWIM接口读写DM寄存器。
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.5SWIM交互
SWIM发送状态位用于指示SWIM是否激活。
当SWIM未被激活,DM将不会生成任何的断点/中止要求给CPU。
4.4断点解码表
4.5软断点模式
软断点模式是为调试工具保留的,用于将断点插入(insert)到用户代码中,通过软件断点取代(substituting)用户指令(instruction)。
使用DMcontrol/status寄存器的SWBKPE位可以使能软件断点模式。
当解码BKPT指令后,CPU中止,且STALL和SWBKF位被硬件置一,以指示(indicate)发生的软件断点。
为继续(resume)执行,调试器必须还原(restore)用户的指令,然后将FLUSH位置一,将STALL位清零。
4.6时序描述
时序信息如所示。
4.7中止(abort)
写DM_CSR2寄存器的STALL位可以立即产生中止。
4.8数据断点
当SWIM激活时,在当前指令执行到最后时,产生一个中止。
4.9指令断点(Instructionbreakpoint)
在STM8中,一个指令中断,DM在选择指令执行之前,中止CPU。
当特殊地址与固定的指令地址不对应时,不会产生中止。
4.10单步模式
在指令的第一个解码周期中,在指令执行前,STM8的CPU激活中止。
当单步模式和指令断点都使能时,STF和BKxF标志都被置一。
当清除STALL位时,单步功能继续原来的操作。
4.11应用笔记
4.11.1非法存储器访问(illegalmemoryaccess)
如果程序试图读写非法的存储器(如保留区),选择“DataR/WonBK1<=@<=BK2”,BK1和BK2是更低的和更高的保留区。
4.11.2禁止堆访问
如果堆区中一部分包含了特殊的不能被重写的数据或指令,DM可能会阻止访问这些区域。
选择“DataWriteinStackon@<=BK1”包含,且将设置BK1为更高的值。
如果STM8试图重写这些值,DM将产生一个中断。
4.11.3DM截断
一个DM截断后CPU中止。
当CPU中止时,SWIM可以读写任何存储器地址或映射的寄存器。
通过重新设置Stall位,程序从断点处继续执行。
如果PC的改变被允许,SWIM必须写新的PC值,如所示。
为了从新的PC地址获取代码,SWIM必须在设置STALL位之前,设置DMcontrol/status寄存器的FLUSH位。
4.12DM寄存器
略。
5.常见问题解答
5.1时序相关
1.MCU与仿真器之间相互通信,如何保证时钟同步?
2.仿真器发出SWIM入口序列:
4个1KHz的脉冲,紧接着4个2KHz的脉冲。
由于没有时钟保证,如何确保MCU。
3.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 总线接口 模块 SWIM