APP下载

双处理器间的同步串口通信机制软件实现方法

2022-07-01刘晓栋张亦姝

现代电子技术 2022年13期
关键词:波特率同步控制功能模块

蒋 欣,刘晓栋,张亦姝,韩 强

(1.中航工业西安航空计算技术研究所,陕西 西安 710016;2.空装驻西安地区第六军事代表室,陕西 西安 710016)

0 引 言

传统的处理器间同步通信的实现方式主要有以下两种:

1)FPGA实现。在FPGA内部构建同步输入输出接口,将FPGA模拟为SDRAM控制器,实现FPGA与处理器之间的同步数据传输。

2)同步时钟实现。结合同步时钟戳和逻辑时钟实现分布式系统的时间确定性。

但是上述同步通信实现方法有一定不足之处:FPGA与处理器集成度不高,增加了硬件设计的复杂度;同步时钟设计复杂,有很大的软件开销。

PowerPC系列处理器P2010有两个独立控制的UART控制器,利用UART控制器的互联通信,同时加载软件时序控制协议,完成一个数据处理模块上两个P2010处理器间的同步通信机制,这样有利于减少数据处理模块硬件电路设计的复杂度,增加了处理器间协调工作的途径,加强了数据处理模块使用的灵活性。

1 处理器间软件同步通信机制原理

1.1 P2010处理器UART的硬件配置

1)处理器UART的基本配置

P2010处理器具备2个独立的全双工UART,编程模型与PC16552D兼容。FIFO模式下,接收器和发送器均带有16 B的FIFO。软件可编程波特率,16位计数器用于波特率生成,带有START、STOP和奇偶校验位,以及错误检测。

UART的组成框图如图1所示。

图1 UART框图

2)UART的工作效率

为使处理及时、节省CPU时间,将UART配置为FIFO模式、中断或者DMA处理方式。推荐配置方式为:8位数据长度、1位停止位、无奇偶校验、3.125 Mb/s波特率,接收FIFO半满时触发接收中断,发送时尽量将发送FIFO填满。

1.2 UART的配置与硬件启动的时序关系

1)系统引导程序对UART的配置

所有DUART寄存器必须映射到非CACHE的地址,即MMU的WIMG应该设置为0B01x1。所有UART寄存器都是1 B宽,读写这些寄存器必须是1 B宽。设置数据长度、停止位、校验方式、FIFO模式、清理发送和接收FIFO、DMA、波特率等。

2)板级支持包对UART的配置

板级支持包中,两个处理器通过各自的UART完成第一次握手,标志两个处理器的UART准备完成。处理器通过各自的UART发送同步数据,然后接收同步数据,若接收超时则重复进行发送-接收操作,直到接收到同步数据或者握手超时。

3)OS启动后UART的同步通信

OS启动后,同步通信模块加载,以一定的通信协议保持两个处理器之间的同步。初始化等待1.2 s确保对方已经启动,进行初始化缓冲区、注册用户回调函数等必要的准备工作,然后启动通信协议。

1.3 同步通信机制软件的功能模块

同步通信机制具有以下三种用途:

1)同步心跳(定时通信);

2)同步数据(即时通信);

3)同步控制,协调处理器间的任务调度(应急通信)。

根据以上用途,划分软件功能模块:发送数据模块、组包入队模块、同步心跳处理模块、同步数据模块、同步控制模块、接收数据模块、解包分发模块。

数据帧的一般结构如图2所示。根据通信类型的不同,TYPE分为定时通信类型0、即时通信类型1和应急通信类型2。长度LEN表示数据帧的总长度。CRC为数据帧的校验和。DATA为与通信类型相关的数据,定时通信类型DATA为4 B的时间戳,即时通信类型DATA为1~250 B的用户数据,应急通信DATA是4 B的控制指令。

图2 数据帧结构

接收数据过程:UART接收到数据后,通过中断控制器或者DMA控制器将数据存放到一级接收缓冲区内,并唤醒解包模块进行处理。解包模块检测数据包的完整性,然后根据数据包类型作相应的处理。如果是同步控制信息,则立即通知应急处理单元;如果是同步心跳,则将心跳值保存;如果是同步数据,则保存同步数据。

发送数据过程:心跳处理单元要发送心跳时,经过组包单元形成数据包,将数据包插入到发送队列的开头,若有同步控制数据包则放到同步控制数据包之后。同步数据处理单元要发送同步数据时,经过组包单元形成数据包,将数据包插入到发送队列的末尾。同步控制单元要发送控制命令时,经过组包单元形成控制数据包,插入到发送队列的开头,并监督该数据包发送完成。

1.4 分配同步通信机制中的功能模块时间表

根据处理器的实际处理速度、上层软件以及任务开销的时间,可以做出如下假设:一个同步心跳周期内最多有2个同步控制,同步数据最高速率为128 KB/s。据此设计各功能模块的时间分配关系表。

一个周期内,同步心跳20.5μs,同步控制0~41μs,同步数据0~979.5μs。

同步心跳包:8 B,20.5μs,1 ms为周期;

同步控制包:8 B,20.5μs;

同步数据包:5~255 B,12.8~653μs。

在最坏情况下,同步控制的漂移为653μs,同步心跳的漂移为653+20.5×2=694μs。

以下是通信时间分配的一种典型情况。以发送数据为例,每1 ms需要发送一次同步心跳包,第1个同步心跳包在0 ms处发送,0.5 ms时发送同步数据包持续0.6 ms,第2个同步心跳包顺延至1.1 ms处发送。第3个周期内控制包来到,这时心跳包正在发送,等待心跳包发送完成再发送控制包,如图3所示。

图3 通信时间分配情况举例

2 处理器间软件同步通信机制的实现

2.1 UART在Boot中的配置流程

UART在Boot中的配置流程为配置MMU,设置UART寄存器LCR、FCR、DLL、DLM、MCR和IER,如图4所示。

图4 UART在Boot中的配置流程

2.2 同步通信在板级包中的配置流程

在板级包中UART完成第一次握手。握手以对称方式完成,一方首先等待1.2 s确保对方已经启动,然后发送0x5A,接收到对方发来的0x5A后再发送0xA5进行确认,如图5所示。

图5 UART第一次握手

2.3 同步通信机制功能模块在操作系统上的工作流程

OS启动后,加载同步通信机制的功能模块,初始化缓冲区,包括1个接收缓冲区和3个发送缓冲区;然后清理串口接收寄存器;最后注册用户回调函数并启动同步通信任务,完成同步通信机制的功能模块,如图6所示。

图6 加载同步通信模块

3 效能对比

对FPGA同步、同步时钟同步和UART同步这三种同步方式做对比,从同步方式、同步时间和效能评价三方面对比它们的优缺点,对比结果如表1所示。

表1 三种同步方式的效能对比

4 结 语

本文实现了双处理器间的同步串口通信机制软件,制定了对称的通信协议并分析了该协议的工作性能。该实现方法与传统的同步方法相比,对系统通信性能有了较大的提高,给软硬件的开发和调试带来了较大的便利。

猜你喜欢

波特率同步控制功能模块
CAN 总线波特率自适应程序设计
基于FPGA的异步串行通信波特率容错设计
基于EtherCAT网络的金刚线多线切割机双主轴同步控制
基于ASP.NET标准的采购管理系统研究
输电线路附着物测算系统测算功能模块的研究
M市石油装备公服平台网站主要功能模块设计与实现
功能模块的设计与应用研究
基于云模型的舵机同步控制
基于广义预测的双转动扫描系统同步控制
一个具有完全四翼形式的四维混沌系统同步控制