温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
一种
ARINC429
总线
通信
软件
通用
实现
文圣丰
电子技术 第 52 卷 第 2 期(总第 555 期)2023 年 2 月 37Electronics 电子学0 引言 ARINC429是商用飞机和运输机中运用最广泛的总线1,最初版本是在19771978年间由AECC(AirlinesElectronicEngineeringCommittee)提出,最早运用在B757/B767和AirbusA300、A310等机型上。ARINC429是一种简单的点对点协议,它通过双绞线将机载设备连接在一起,以速度慢、电缆重量为代价换取高可靠性。作为一种历史悠久的总线,其传输数据的速率在现今看起来偏低,但因其在可靠性及成本方面的优势至今依然有顽强的生命力,在各种新型的飞机上依旧可以看到它的身影。国内参考ARINC429标准也提出了相应的航标,其编号为HB6096,现今仍在国内的各种飞机上广泛应用。本文对ARINC429标准的常用概念给出了清晰描述,提出了一套典型的包含驱动和通信协议的软件实现。此实现在多个项目中已推广使用,移植方便,简单可靠。1 ARINC429总线 1.1 数据格式一个ARINC429数据字通常为32位,分为校验(Parity)、符号状态矩阵(Sign/StatusMatrix,SSM)、数据位(Data)、源目的指示(SDI)和标号(Label)等5个字段。图1是位1位32与各字段对应关系。标准对上述字段有较详细的规定或建议的使用方式。而且ARINC429相关标准对各种数据传输的单位、范围、分辨率、更新频率、数据有效位、填充位等有详细的定义,可以查找标准2参考使用。(1)校验字段。第32位为校验位,ARINC429采用奇校验,即通过将第32位的校验位清0或置1保证发送的32位数据包含奇数个1。(2)符号状态矩阵字段。第3031位为符号/状态字段,用于表示设备状态(故障/正常)、工作方式或数据状态(有效/非计算数据/故障告警/功能测试等);在以BCD方式传送数据时,还可用于表示数据的符号(例如南纬/北纬、东经/西经、向右倾斜/向左倾斜等)。当SSM用于传送状态且有多个状态同时存在时,状态采用优先级来排序,优先设置高优先级状态。常用的状态和优先级见表1。(3)数据字段。第1129位为数据字段。(4)源目的指示字段。第910位,在有多个接收器时用于标志接收器。有时也与第1129位一起用作数据位,如图1所示。作者简介:文圣丰,中国航空工业集团公司西安航空计算技术研究所;研究方向:机载嵌入式软件。收稿日期:2022-10-14;修回日期:2023-02-12。摘要:阐述ARINC429总线的特点,ARINC429总线软件实现过程中的问题,机载嵌入式平台下ARINC429从驱动软件和上层通信协议的一种通用实现方法。关键词:ARINC429,嵌入式,驱动软件,协议解析。中图分类号:TN492文章编号:1000-0755(2023)02-0037-03文献引用格式:文圣丰,郝玉锴,张亚平.一种ARINC429总线通信软件通用实现J.电子技术,2023,52(02):37-39.一种ARINC429总线通信软件通用实现文圣丰,郝玉锴,张亚平(中国航空工业集团公司西安航空计算技术研究所,陕西 710115)Abstract This paper describes the characteristics of ARINC429 bus,the problems in the implementation of ARINC429 bus software,and a general implementation method of ARINC429 slave driver software and upper communication protocol under the airborne embedded platform.Index Terms ARINC429,embedded,driver software,protocol resolution.Analysis on a Typical Implementation of ARINC429 SoftwareWEN Shengfeng,HAO Yukai,ZHANG Yaping(AVIC Xian Aeronautics Computing Technique Research Institute,Shanxi,710115,China.)图1 ARINC429数据格式表1 SSM状态和优先级38 电子技术 第 52 卷 第 2 期(总第 555 期)2023 年 2 月Electronics 电子学(5)标号字段。第1第8位,用于标识数据类型,即用于区分传送的数是大气高度、指示空速还是大气温度等。通常将标号用一个3位的8进制数来表述,bit1为标号的msb,bit8为标号的lsb。标号的最高有效位先传送。1.2 常用协议芯片传统的ARINC429 总线设计大都采用专用芯片的解决方案,常用的芯片有HOLT公司的HI-3210、Device Engineering Inc.公司的DEI1016等。这些芯片成熟可靠,但在一些应用环境中存在一定的局限。这些芯片的数据总线宽度仅为16位,集成度低,需要占用宝贵的印制板尺寸,成本相对SOPC或SoC较高。随着技术的发展和系统对尺寸、重量、功耗的要求越来越高,新的设计需要在嵌入式系统中直接集成ARINC429 总线控制器IP。国内ARINC429总线的IP相对较少,兼容性也不是很好,基本都是自行设计3。笔者遇到很多IP实现因硬件工程师对ARINC429标准了解不够,其实现对软件不友好,整体系统性能不高。需要指出的是,传统的协议芯片的设计便于软件实现,不影响系统整体性能。在软件实现过程中,传统协议芯片的接口相对非标的IP核设计友好许多。如图2所示DEI1016芯片将总线上的数据位位置进行变化,方便接收时后续数据的解析,也方便将要发送的数据写入芯片4。后续的协议实现就是基于图2所示的数据位映射。2 驱动软件实现嵌入式系统驱动实现相较PC驱动要简单许多。以常用的VxWorks系统为例,ARINC429接口归类为字符型设备(非块设备)。将其驱动整合进I/O系统,仅需按I/O系统要求实现xxCreat,xxRead,xxWrite,xxIoctl等驱动函数(xx一般选用表征设备的名字,例如对ARINC429设备选用A429),并调用iosDrvInstall系统函数将驱动函数加入驱动表中。上层应用即可使用7个基本I/O函数creat、remove、open、close、read、write和ioctl来进行ARINC429接口的控制和通信。2.1 创建设备A429Creat创建设备函数的一般过程为:初始化设备,申请缓冲区资源,填充设备相关信息,最后调用向I/O系统函数iosDevAdd向系统注册该设备。设备信息在设备列表结构体中定义,其数据结构示例如下。其头部必须为DEV_HDR结构,DEV_HDR是双向链表的节点,I/O系统使用它进行设备维护。其他部分用于保存设备相关信息,例如示例中bufRx和bufTx保存接收缓冲区和发送缓冲区地址。2.2 接收和发送驱动接收和发送驱动处理流程类似,采用缓冲机制,接收发送各设置一个环形缓冲,用于应用与中断处理程序进行数据交换。2.2.1 环形缓冲实现策略环形缓冲也称循环缓冲(ring buffer或circularqueue),属于一种先进先出(FirstInFirst Out,FIFO)的线性表,所以有时也称环形FIFO。环形缓冲实现时需要考虑缓冲区大小设定、缓冲区指针同步、缓冲区满的处理、缓冲区空满判定等策略问题。缓冲大小设定策略:接收缓冲区可以根据上层应用对接收数据的处理周期和ARINC429通道本身的数据流量进行计算。发送缓冲的大小估算相对复杂。可以在发送的驱动函数中返回实际写入缓冲中的数据个数,超过缓冲区容量的则不写入,使应用知道真正写入的数据个数。如果应用不能将待发送的数据一次写入缓冲区,需要多次调用发送驱动直至将数据全部写入发送缓冲。为了简化上层应用对这种情况的处理,可以将缓冲区尽可能地设置大些,保证调用一次发送驱动即可将数据发送完,简化应用的处理。指针同步策略:环形缓冲实现方式各不相同,本软件包环形缓冲的实现方式是设置两个指针对缓冲进行控制,一个指向队头front,一个指向队尾rear。出入队列只需改变队头队尾指针,不需挪动队列内元素。缓冲区空满判定、空闲位置、占用单元个数均由front和rear计算得出。上述实现的优势在于,驱动和中断服务程序ISR仅改写front或rear指针之一,不存在同时改写的情况,无需对front和rear在驱动和ISR间进行同步。应避免使用冗余的变量,例如缓冲区数据个数count,因在驱动和ISR都需要改写count需要利用信号量等方式进行同步。缓冲区满的处理策略:随着数据入队列,缓冲区空闲单元越来越少,当缓冲区即将填满(只剩一个单元)时,若有数据需要入队列时需要选择一定的策略进行处理。本软件包的实现是直接将后续数据入队列,将数据填入尾指针指向的单元,尾指针前移一个,与头指针相等。此时判定队列为空,相当于整个队列从即将满,在放入一个新数据后又跳图2 DEI1016芯片数据位映射 电子技术 第 52 卷 第 2 期(总第 555 期)2023 年 2 月 39Electronics 电子学变为空,将整个缓冲区的数据都丢掉。上述处理的优点在于入队列时只需关心尾指针rear,不用理会头指针head。工程应用上这种策略满足要求,而且逻辑简单,代码清晰。此实现的逻辑认为在设置合理缓冲区大小的前提下,出现缓冲区满这种极限情况,判定应用处理不当或硬件平台性能不够,底层驱动不可能也不应该处理此种极限问题。因此采用简单处理的方式,直接丢弃所有旧数据。实践表明此策略简单可靠。空满的判定策略:基于前述对缓冲区满的处理策略,空满判定问题的处理也变得简单,当头尾指针相等时队列为空,不考虑满的状态。相较通常的实现简单许多。2.2.2 阻塞和非阻塞选择调用接收驱动读取数据时,若接收缓冲无数据,驱动实现可以选择阻塞当前调用任务,当缓冲区有数后解除阻塞。也可以选择不阻塞,向应用返回缓冲区数据个数为0个,适合上层应用按周期调用接收驱动并进行数据处理的情况。调用发送驱动进行数据发送时,若发送缓冲区满,驱动实现可以选择阻塞当前任务,也可以不进行阻塞,向应用返回0表明没有发送成功。在采取环形缓冲实现策略中所述,缓冲区大小设定策略和缓冲区满处理策略的情况下,最简单可用的实现是直接将数据写入缓冲,不进行阻塞。2.3 设备控制驱动A429Ioctl设备控制驱动响应ioctl调用,可用于设置协议芯片控制字,控制速率、校验等。2.4 驱动初始化A429Drv通常在驱动初始化中,调用iosDrvInstall函数向系统注册驱动,挂接中断,初始化硬件,分配资源等。3 数据解析实现通信双方对通信的数据做出约定,明确各个数据标号、周期、数据范围、单位、分辨率、占用的数据位等;双方根据约定生成数据、解析接收到的数据。3.1 数据结构结合C语言中的位域和联合对ARINC429数据格式定义如下。上述定义为大端(big-endian)平台上数据格式的定义。通过使用上述定义,可以通过位域存取方便得到ARINC429数据的标号、SSM、校验等数据段,避免使用过多的位操作,程序可读性好。3.2 接收数据解析BNR,BCD,离散数据是ARINC429最常用的三类数据格式5,收到后需根据通信协议进行解析。(1)BNR格式数据。BNR是ARINC429最常用的数据格式,数据为一整数,采用二进制补码进行编码。例如传送经纬度,约定分辨率为0.00017166,当传送西经120.5时,传送方实际填充的数据是(-120.5/0.00017166)并取整为-701 969,此数采用补码形式存储。接收方按协议约定从收到的ARINC429的32位数据的lsb至msb取出数据,通常采用先算术左移