MSP430多处理器之间的通信方式及协议

发布者:快乐家庭最新更新时间:2006-10-18 来源: 单片机及嵌入式系统应用关键字:单片机  内存  总线 手机看文章 扫描二维码
随时随地手机看文章
在单片机系统中,多处理器是指多个相同类型或者不同类型的单片机协作处理同一个系统的不同工作。它们之间必须具备一定的数据交换和协作处理能力,共同完成一个系统化的工作。不同处理器之间可以采用数据交换方式、并行总线方式、串行总线方式进行通信。其中,数据交换方式又可以称为共享内存交换方式;串行总线方式又可以分为单总线方式、集成电路之间的通信方式和UART方式。

1 MSP430多处理器
  MSP430是一款超低功耗的混合信号控制器,具有1 6位RISC结构,有着丰富的片内外设,主要包括有看门狗、定时器、比较器、硬件乘法器、液晶驱动器、ADC、I/0端口、串口(USART)等等,还集成有64 KB的Flas’E-ROM和2 KB的RAM。其功能强大,应用场合广泛。但是在大型复杂的场合或者实时性要求较高的场合,使用一个处理器处理所有的业务,总是显得有些不足。引入多个MsP430处理器协作工作的模式,可以提高系统的实时性、可靠性和适用性。

  在多数场合,MSP430无须为每个处理器扩展FlashROM,也无须扩展RAM,采用共享内存的数据交换方式组成多处理器系统并非最佳选择。此外,MSP430包括有两个串口(USART),在MSP430的应用中,可以把两组串行端口中的一个供外部通信使用,另一个串行端口供内部通信使用。采用串行总线中的串行通信方式组成多处理器系统是比较理想的选择。

2 技术要点

2.1 MSP430多处理器组成


  MSP430具有两个串行端口(USART),可以使用其中的一个作为多处理器之间的通信端口。由于串行通信的架构限制,MSP430采用UART串行通信模式组成的多处理器系统,必须建立一个主处理器和若干从处理器。主处理器的TXD端与所有从处理器的RXD端相连,所有从处理器的TXD端与主处理器的RXD端相连。MSP43O多处理器拓扑结构如图1所示。


  在这个结构中,主处理器通过TXD端发送出指令报文,传输到从处理器的RXD接收端;从处理器对指令报文进行解包并且对这个指令报文进行响应。从处理器的响应报文通过TXD发送到主处理器的RXD接收端,主处理器获取响应报文确认指令是否被正确执行。从这个结构上看,主处理器可以与任何从处理器进行通信,任何从处理器也可以和主处理器进行通信,但是从处理器与从处理器之间却不可以进行直接的通信。

2.2 多处理器系统串行通信协议


  在多处理器系统的串行通信方式中,可以有若干种通信协议进行选择,如ModBus、Brooks、工业总线协议等等。在此,可以选择业界通用的MocBus通信协议作为处理器与处理器之间的通信协议。

2.3 ModBus通信协议


  Modbus协议支持传统的RS232、RS422、RS485和以太网设备。ModBus协议包括ASCII、RTU、TCP等报文格式,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。ModBtls的ASCII、RTU协议规定了消息和数据的结构、命令和就答的方式,数据通信采用Master/Slave方式。Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Mastez端,以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

2.4 ModBus在多处理器系统中的报文格式


  由于是一个主服务器对应多个从处理器的系统,处理器与处理器之间的报文传输必须明确标注目标地址和源地址,以免不相干的处理器之间进行误导操作。除此以外,为了提高主处理器的处理能力,同时避免不同处理器存在报文相应速度差,以及不同指令任务之间存在处理量差异的问题,必须采用异步通信模式进行通信。要满足异步通信模式,必须在报文中对每次的通信操作加注请求报文的16位标示(可以称之为句柄),同时对这些句柄进行记录。

2.4.1 数据读取请求报文格式


  源地址:主处理器地址。
  目标地址:指令目的地地址(从处理器)。
  句柄:指令请求标示号。
  功能代码:操作指令代码。
  起始地址:读取从处理器数据寄存器的起始地址。
  字节数:操作所涉及的寄存器字。
  校验码:CRC校验码或者LRC校验码。

2.4.2 数据读取应答报文格式


  源地址:从处理器地址。
  目标地址:主处理器地址。
  句柄:指令请求标示号。
  功能代码:操作指令代码。
  数据字节数:操作所涉及的寄存器字节数。
  数据1至数据n:数据。
  校验码:CRC校验码或者LRC校验码。

  其中,应答报文中的目标地址等价于请求报文中的源地址,应答报文中的源地址等价于请求报文中的目标地址。


2.5 校验码
  在ModBus中,通用的校验方式是ASCII协议方式采用LRC校验方式,RTU协议方式采用CRC校验方式。

2.5.1 LRC校验

  LRC校验比较简单。它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它的C代码:

BYTE GetCheckCode(const char*pSendBuf,Int nEnd)
{ //获得校验码
BYTE byLrc=O。
char pBuf[4];
int nData=0
for(i=1;i{//每两个需要发送的ASCII码转化为一个十六进制数
pBuf[O]=pSendBuf[i];
pBu=pSendBuf;
pBuf[2]=、O’;
sscanf(pBuf,”%x”,& nData);
bvLrc+=nData;
byhc=~byLrc;
byLrc++;
return byLrc;
}

2.5.2 CRC校验


  CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节和当前寄存器中的值进行处理。仅每个字符中的8位数据对CRC有效,起始位和停止位以及奇偶校验位均无效。

  CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测。如果LSB为1,寄存器单独和预置的值“或”一下;如果LSB为O,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相“或”。最终寄存器中的值,是消息中所有字节都执行之后的CRC值。

  CRC添加到消息中时,低字节先加入,然后高字节加入。下面是它的C代码:
WORD GetCheckCode(const char*pSendBuf,int nEnd)
{ //获得校验码
WORD wCrc=WORD(0xFFFF);
for(int i=O;iwCrc^=WoRD(BYTE(pSendBuf[i]);
for(Intj=O;j<8;J++){
if(wCrc&1){
wCrc>>=l;
wCrc^一OxA00l:
}
else{
wCrc>>=1;
retIlrIl wCrc:


3 报文示范
  ModBus包含ASCII和RTU两种报文格式。RTU报文较短,但是没有边界定义;ASCII报文较长,但是边界明了。在多处理器通信之中,由于通信距离很短,干扰较小,因此可以选择较高的通信速率。通信速率提高了,报文长度较长对通信的影响不大,因此可以选择ASCII报文格式进行通信。

  ModBus的ASCII读取请求报文格式如下:


  ModBus 的 ASCII读取请求报文格式如下:


  假设主机地址01,要对从机地址02进行读取247和248地址的两个寄存器值的通信,并且本次通信为第1次通信,设定流水号为000l。


结 语
  多处理器协作工作模式和通信协议,已经成功应于CNG加气机,使系统信息交换更加迅速、可靠,整个系统的性能得到了提高。

关键字:单片机  内存  总线 引用地址:MSP430多处理器之间的通信方式及协议

上一篇:分布式系统内部以太网中的地址动态配置
下一篇:MSP430多处理器之间的通信方式及协议

推荐阅读最新更新时间:2024-03-30 21:22

单片机学不会怎么办?单片机从哪里开始学?
说起单片机学不会怎么办?就想起我自己一些学习的辛酸史。 我做单片机开发10余年了,单片机硬软件开发自然是很熟练了。 但做其他的工作可是一窍不通,在上家公司工作的时候,公司有很多上位机软件开发的需求,所以我就想扩展一下自己的知识,想学一下 C++ 和Java。 话说活到老学到老,多掌握一门技术,将来发展的空间就越大。 我有个朋友是这一块开发的高手,他给我提供了很多资料。 先是看基础语法,又是搭环境,开始实战,奋斗了大概3周,找不到感觉,对着理论知识,冷冰冰的提不起继续学习的兴趣,就放下了,没有继续。 后面想了一下,没继续学习的最主要原因还是没有目标驱动。 如果工作上正好有个项目需要,根据项目需求针对性去学习,相信我很快能学会。 还有
[单片机]
MSP430单片机精确延时的方法解析
发现一种MSP430的精确延时方法,经测试,确实狠精确。最低可以精确到1/OSC,例如:如果采用8MHz的晶体,那么最小延时就是125ns,已经利用示波器通过验证。 具体做法如下: 先做如下预定义: #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 其中第一行中的8000000为时钟,可以根据自己时钟设置。 然后在程序中直接条用delay_us
[单片机]
MSP430<font color='red'>单片机</font>精确延时的方法解析
单片机中volatile变量定义的作用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automat IC variables) 3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatil
[单片机]
基于MCP2515的多路CAN总线接口电路设计
  目前主流的CAN协议控制器一般采用I/O总线(SJA1000等)或SPI接口(MCP2515等)与MCU进行通信。由于本设计采用PC /104总线扩展卡的方式来扩展多个RS232和RS485接口,没有多余的I/O片选线可用,因此最终选用9200的SPI接口与MCP2515进行多 路CAN总线接口的扩展。MCP2515是Microchip公司推出的具有SPI接口的独立CAN控制器。它完全支持CAN V2.0B技术规范,通信速率最高可达1 Mbps,内含3个发送缓冲器、2个接收缓冲器、6个29位验收滤波寄存器和2个29位验收屏蔽寄存器;它的SPI接口时钟频率最高可达10 MHz,可满足一个SPI主机接口扩展多路CAN总线接口的需要
[电源管理]
基于MCP2515的多路CAN<font color='red'>总线</font>接口电路设计
PIC单片机中断程序设计技巧
所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。三是,一般都
[单片机]
AVR单片机与上位机通信协议的制定
单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定! 上行协议,即由单片机向上位机发送数据。 下行协议,即由上位机向单片机发送数据。 而通信协议又要分固定长度和不定长度两种 本文所介绍的协议属于简单的固定字长的通信协议! 下行协议由四个字节构成 起始字PRE 命令字ORD 值VAL 结束字END 附注 1byte 1byte 1byte 1byte   BBH AAH(ORD_SATA)     单片机状态转换命令标识 01H EEH 模式1:空闲 02H EEH 模式2:温度采集 03H EEH 模式3:温度采集向上位机传送采集值 04H EEH 模式4:PWM测试 BBH DDH(ORD_P
[单片机]
基于单片机的模拟开关时序设计与仿真
     随着现代工业的飞速发展, 对工况参数的实时监测越来越重要。参数的监测分为电量和非电量两大类, 对于非电量参数的测量, 测量成功与否主要取决于传感器的质量和对信号的提取。由于电容传感器具有结构简单、功耗低、测量范围大、稳定性好、灵敏度高、使用寿命长及可以进行非接触测量等特点, 非常适合在高潮湿、高尘埃、强辐射及超低温等恶劣环境下长期使用,因此, 对于某些变化缓慢或微小物理, 比较适宜采用电容传感器进行测量。      目前用于测量微电容的方法主要是交流法, 其测量原理是通过激励信号对被测电容连续充放电, 形成与被测电容成比例的电压或电流信号, 从而测得被测电容值。采用此方法测量的信号中具有脉动噪声, 需要通过滤波器滤除其脉
[单片机]
基于<font color='red'>单片机</font>的模拟开关时序设计与仿真
51单片机是什么_51单片机入门自学
  51单片机是什么   51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flashrom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。   51单片机入门自学   作为一个初学者,如何51单片机入门?   实际上,其实不需要多少东西,会简单的C语言,知道51单片机的基本结构就可以了。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新工业控制文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved