0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于多处理器系统的串行通信方式研究

电子设计 来源:单片机及嵌入式系统应用 作者:崔凤新;廖明燕; 2021-06-17 15:41 次阅读

作者:崔凤新;廖明燕;郑金吾

单片机系统中,多处理器是指多个相同类型或者不同类型的单片机协作处理同一个系统的不同工作。它们之间必须具备一定的数据交换和协作处理能力,共同完成一个系统化的工作。不同处理器之间可以采用数据交换方式、并行总线方式、串行总线方式进行通信。其中,数据交换方式又可以称为共享内存交换方式;串行总线方式又可以分为单总线方式、集成电路之间的通信方式和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协议支持传统的RS232RS422RS485以太网设备。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;

int nData=0

for(i=1;i {//每两个需要发送的ASCII码转化为一个十六进制数

pBuf[O]=pSendBuf;

pBu=pSendBuf;

pBuf=、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;i wCrc^=WoRD(BYTE(pSendBuf);

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读取请求报文格式如下:

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

4 结 语

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

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18288

    浏览量

    222167
  • 单片机
    +关注

    关注

    6001

    文章

    43978

    浏览量

    620862
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112041
收藏 人收藏

    评论

    相关推荐

    如何在多处理器系统中使用EMIF?

    我想在多处理器系统中使用 EMIF。 为此,应不时将地址和数据总线设置为高阻抗状态。 可能吗? 我找不到图纸中连接 EMIF 总线的位置? 直接连接到 PIN 或
    发表于 03-05 06:51

    CM3之STM32如何实现多处理器通信

    CM3之STM32如何实现多处理器通信
    发表于 09-17 10:11

    为嵌入式系统选择合适的多处理器(一)

    的饮料。电机控制必须保证电机仅有足够长的时间传送一件商品。所有这些任务需要处理器等待一些事情完成以保证它不会中途停止。这个等待可能会影响到其它任务。这个系统多处理器设计的一个很好的例证。
    发表于 12-06 10:20

    请问有谁做过串口的多处理器通信吗?

    原子哥,论坛上的大神们,有做过串口的多处理器通信么?如果有,大家是用空总线检测还是用地址标记的方式啊?
    发表于 09-05 04:35

    什么是STM8多处理器通信

    STM8多处理器通信是什么
    发表于 11-12 06:27

    分享一种不错的基于NiosII的SOPC多处理器系统设计方法

    本文将对基于NiosII的SOPC多处理器系统的实现原理、设计流程和方法进行详细的讨论。
    发表于 04-19 08:51

    什么是MSP430多处理器?MSP430多处理器有哪些技术要点?

    什么是MSP430多处理器?MSP430多处理器有哪些技术要点?
    发表于 05-27 06:52

    多处理器通信和LIN模式区别是什么?

    多处理器通信和LIN模式区别是什么?
    发表于 12-08 07:32

    CH32V103基础教程65-USART-多处理器通信

    多处理器通信,即将几个USART连接在一个网络里。比如某个USART设备可以是主机,它的TX输出和其他USART从设备的RX输入相连接;USART从设备各自的TX输入输出与本地,并与主设备的RX输入
    发表于 04-28 16:24

    多处理器分组实时调度算法

    多处理器实时调度理论是目前实时系统的关键技术。论文研究了PFair 调度算法在多处理器中的调度理论,在此基础上,提出了一种基于PFair 调度算法的
    发表于 12-18 15:38 11次下载

    基于NiosII的SOPC多处理器系统设计方法

    基于NiosII的SOPC多处理器系统设计方法 两个或多个微处理器一起工作来完成某个任务的系统称为“多处理器
    发表于 10-17 09:28 1087次阅读
    基于NiosII的SOPC<b class='flag-5'>多处理器</b><b class='flag-5'>系统</b>设计方法

    为嵌入式系统选择合适的多处理器

    人们一般希望用一个处理器处理整个系统,但有的时候加入一个新的处理器将是一个很好选择。尽管使用多处理器会带来一些成本增加,但
    发表于 05-25 17:29 28次下载
    为嵌入式<b class='flag-5'>系统</b>选择合适的<b class='flag-5'>多处理器</b>

    什么是同步多处理器

    同步多处理器,英文为Synchronous Multi-Processors,缩写为SMP。同步多处理器系统在工作的时候,每当一个任务完成后,空闲的处理器会立刻寻找下一个新的任务,对于
    发表于 06-02 09:16 930次阅读

    GPGPU流式多处理器架构剖析(上)

    具有较小结构的CPU,支持指令并行(多发射)。流式多处理器是线程块的运行载体,但一般不支持乱序执行。每个流式多处理器上的单个Warp以SIMD方式执行相同指令。
    的头像 发表于 04-03 14:28 1556次阅读
    GPGPU流式<b class='flag-5'>多处理器</b>架构剖析(上)

    GPGPU流式多处理器架构剖析(下)

    具有较小结构的CPU,支持指令并行(多发射)。流式多处理器是线程块的运行载体,但一般不支持乱序执行。每个流式多处理器上的单个Warp以SIMD方式执行相同指令。
    的头像 发表于 04-03 14:28 1413次阅读
    GPGPU流式<b class='flag-5'>多处理器</b>架构剖析(下)