作者:廖明燕,崔凤新,郑金吾(中国石油大学信息与控制工程学院,东营)
摘 要:MSP430系列单片机处理能力强大,超低功耗设计,功能高度集成,适合众多的场合使
用。但是在大型复杂的场合或者实时性要求较高的场合,使用一个处理器处理所有的任务,总是显
得有些不足。提出用多片MSP430组成多处理器系统,利用MSP430固有的UART硬件模块,采用
MODBUS通讯协议实现不同处理器之间的数据交换。
1. 1 多处理器简介
在单片机多机系统中,多处理器是指多个相同或者不同类型的单片机处理器协作处理一个系统中的任务,他们之间具备一定的数据交换和协作处理能力,共同完成一个系统化的工作。不同处理器之间可以采用数据交换方式、并行总线方式、串行总线方式进行通讯。其中,数据交换方式又可以称为共享内存交换方式;串行总线方式又可以分为单总线方式、集成电路之间的通讯方式和UART方式。
1. 2 MSP430简介
MSP430系列单片机是TI公司推出的一种16位超低功耗的混合信号控制器。低电压供电、宽工
作电压范围,有正常工作模式和4种低功耗工作模式,单片机可以方便地在各种工作模式之间切换,用中断请求将CPU唤醒只要6us。MSP430也具有非常高的集成度,单片集成了多通道12bit的A /D转换、片内精密比较器、多个具有PWM 功能的定时器、斜边A /D转换、片内USART、看门狗定时器、片内数控振荡器(DCO) 、大量的I/O端口以及大容量的片内存储器,单片可以满足绝大多数的应用需要。
MSP430的超低功耗特性使其在电池供电、便携式设计的应用中表现出非常优良的特性,在国内已经有了非常广泛的应用。但是在大型复杂的场合或者实时性要求较高的场合,使用一个处理器处理所有的业务,总是显得有些不足。为此引入多个MSP430处理器协作工作的模式,把复杂的功能和计算分解为若干子任务后分配给多个单片机去完成,从而可以提高系统的实时性、可靠性和适用性。
2 技术要点
2. 1 MSP430多处理器组成MSP430系列中F14X和F44X系列集成有64K的Flash ROM和2K的RAM,在多数场合,无须为每个处理器扩展Flash ROM也无须扩展RAM,采用共享内存的数据交换方式组成多处理器系统并非最佳选择。此外,片内有两个串行通信接口(USART).可直接进行双机通信。可以把两组串行端口中的一组串行端口供内部通讯使用,另一组串行端口供外部通讯使用,采用串行总线中的串行通讯方式组成多处理器系统是比较理想的选择。采用UART串行通讯模式组成主从结构多处理器系统,建立一个主处理器和若干从处理器。在硬件结构中,涉及两组信号引脚串行发送信号TXD和串行接收信号RXD,主处理器的TXD端与所有从处理器的RXD端相连,所有从处理器的TXD端与主处理器的RXD端相连,接收和发送操作采用双缓冲结构。主处理器通过TXD端发送出指令报文,传输到从处理器的RXD接收端,从处理器对指令报文进行解包并且对这个指令报文进行响应,同时,从处理器的响应报文通过TXD发送到主处理器的RXD接收端,主处理器获取响应报文确认指令是否被正确执行。从这个结构上看,主处理器可以与任何从处理器进行通讯,任何从处理器也可以和主处理器进行通讯,但是从处理器与从处理器之间却不可以进行直接通讯。MSP430多处理器拓扑结构图如图1
所示。
在主从式多处理器系统中,要保证主处理器与所选择的从处理器实现可靠地通信,必须保证通信接口具有从处理器识别功能, 因此采用地址位多机通讯格式,主处理器选择从处理器时发送一个地址识别编码,使每个从处理器能自动判别,完成相应的通讯和数据传输。发送和接收由于有独立的中断向量,故都可以采用中断方式处理。发送当然可以采用数据查询方式,但在多任务系统中为保证系统实时性,采用中断方式更为合理。接收过程应和定时器配合,在接收
开始后在定时器中断里面计算延时时间,在超出最长的接收等待延时时间后就可判定一次完整的传输过程结束,转而进行报文处理。发送是在发送中断处理程序中进行发送计数,一旦完成,立即关中断。
2. 2 串行通讯协议
在串行通讯方式中,可以有若干种通讯协议进行选择,例如ModBus、Brooks、工业总线协议等等。在此,我们可以选择业界通用的ModBus通讯协议作为处理器与处理器之间的通讯协议。
2. 3 ModBus通讯协议
ModBus协议支持传统的RS - 232、RS - 422、RS - 485和以太网设备。ModBus协议包括ASCII、RTU、TCP等报文格式,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。ModBus 的ASCII、RTU协议规定了消息、数据的结构、命令和应答的方式,数据通讯采用Master /Slave方式,Master端发出数据请求消息, Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。
2. 4 ModBus在多处理器系统中的报文格式由于是一个主处理器对应多个从处理器的系统,处理器与处理器之间的报文传输必须明确标注目标地址和源地址,以免不相干的处理器之间进行误导操作。除此以外,为了提高主处理器的处理能力,同时避免不同处理器存在报文响应速度差异以及不同指令任务之间存在处理量差异的问题,必须采用异步通讯模式进行通讯。要满足异步通讯模式,必须在报文中对每次的通讯操作加注请求报文的16位标示,可以称之为句柄(Handle) ,同时对这些句柄进行记录。
2. 4. 1 数据读取请求报文格式
数据读取请求报文格式如表1所示。
源地址:主处理器地址;目标地址:指令目的地地址(从处理器) ; 句柄: 指令请求标示号; 功能代码:操作指令代码;数据数量:操作所涉及的寄存器数量;数据1. . . 数据n:数据;校验码: CRC校验码或者LRC校验码。
2. 4. 2 数据读取应答报文格式
数据读取应答报文格式如表2所示。
源地址:从处理器地址;目标地址:主处理器地址;句柄:指令请求标示号;功能代码:操作指令代码;数据字节数:操作所涉及的寄存器字节数;数据1. . . 数据n:数据;校验码: CRC校验码或者LRC校验码。
其中,应答报文中的目标地址等价于请求报文中的源地址,应答报文中的源地址等价于请求报文中的目标地址。
2. 4. 3 数据操作请求报文格式
数据操作请求报文格式如表3所示。
源地址:从处理器地址;目标地址:主处理器地址;句柄:指令请求标示号;功能代码:操作指令代码;数据字节数:操作所涉及的寄存器字节数;数据1. . . 数据n:数据;校验码: CRC校验码或者LRC校验码。
其中,应答报文中的目标地址等价于请求报文中的源地址,应答报文中的源地址等价于请求报文中的目标地址。
2. 5 校验码
在ModBus中,通用的校验方式是ASC II协议方式采用LRC校验方式, RTU协议方式采用CRC校
验方式。
2. 5. 1 LRC校验LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它的VC代码:
BYTE GetCheckCode ( const char 3 pSendBuf, int nEnd) //获得校验码
{
BYTE byLrc = 0;
char pBuf[ 4 ];
int nData = 0;
or( i = 1; i < end; i + = 2) // i初始为1,避开“开始标记”冒号
{ //每两个需要发送的ASC II码转化为一个十六进制数
pBuf [ 0 ] = pSendBuf [ i ];
pBuf [ 1 ] = pSendBuf [ i + 1 ];
pBuf [ 2 ] = ’ \0’;
sscanf (pBuf,“% x”, & nData) ;
byLrc + = nData; }
byLrc = ~ byL rc;
byLrc + + ;
return byL rc;
}
2. 5. 2 CRC校验
CRC是先调入一值是全" 1"的16位寄存器,然后调用一过程将消息中连续的8位字节给当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR) ,结果向最低有效位方向移动,最
高有效位以0 填充。LSB 被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8 次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。CRC添加到消息中时,低字节先加入,然后是高字节。下面是它的VC代码:
WORD GetCheckCode ( const char 3 pSendBuf, int nEnd) //获得校验码
{
WORD wCrc = WORD (0xFFFF) ;
for ( int i = 0; i < nEnd; i + + )
{
wCrc ^= WORD (BYTE (pSendBuf[ i ] ) ) ;
for ( int j = 0; j < 8; j + + )
{
if (wCrc & 1)
{
wCrc > > = 1;
wCrc ^= 0xA001; } else{
wCrc > > = 1;
}
}
}
return wCrc;
}
3 报文示范
ModBus包含ASC II和RTU两种报文格式, RTU报文较短,但是没有边界定义, ASCII报文较长,但是边界明了。在多处理器通讯之中,由于通讯距离很短,干扰较小,因此可以选择较高的通讯速率。通讯速率提高了,报文长度较长对通讯的影响不大,因此可以选择ASCII报文格式进行通讯。ModBus的ASCII读取请求报文格式如表4 所示。ModBus的ASCII读取应答报文格式如表5所示。
假设主机地址01,要对从机地址02进行读取247和248地址的两个寄存器值的通讯,并且本次
通讯为第一次通讯,设定流水号为0001。请求报文格式范本如表6所示。
假设反馈回来的247数据为5D,反馈回来248的数据为3C。应答报文格式范本如表7所示。
4 结束语
试验证明,利用UART模块,采用MODBUS的通讯协议可以实现多片处理器之间的通信和数据传
输。用多片430单片机组成多处理器系统可以增强系统的实时处理能力和应用范围。结构灵活性强,便于扩展,同时减轻了主CPU负担,提高了系统的可靠性。
参考文献:
[ 1 ] 魏小龙. MSP430系列单片机接口技术及系统设计实例 [M ]. 北京:北京航空航天大学出版社, 2002 - 11.
[ 2 ] 胡大可. MSP430系列单片机C语言程序设计与开发 [M ]. 北京:北京航空航天大学出版社, 2003 - 01.
[ 3 ] 李正军. 现场总线及其应用技术[M ]. 北京:机械工业出版社, 2005 - 01.