基于Cortex-M3的ARINC429总线协议转换模块的实现
2013-03-30赵宗红王大明
赵宗红,王大明
(西安工业大学电子信息工程学院,陕西 西安 710032)
0 引言
目前,国内主要采用单片机+FPGA或采用DSP技术实现ARINC429信号的转换,不仅结构和设计复杂,需要扩展电路,且价格昂贵。而根据USB,RS232和ARINC429的特点,以Cortex-M3微处理器为核心,设计了的 USB/RS232转ARINC429总线模块,具有硬件设计简单、易于开发和成本低等优点。为了提高传输速率、数据转换速率和数据的存储容量,拟采用意法半导体公司的STM32F103芯片。由于它采用3级流水线和哈佛结构,加上具有丰富的外设资源,提高了系统的灵活性和可靠性。
1 硬件设计
1.1 整体框架设计
模块的硬件设计平台主要由ARM芯片STM32F103、支持ARINC429总线协议的串行收发器 DEI1016、具有 TTL/CMOS电平转标准ARINC429电平功能的电平转换芯片、RS232的收发器、1个用于切换速率的模拟开关以及各种信号的隔离芯片组成。主控芯片用于接收USB和RS232串行信号到缓冲区,经过内部转换把串行信号转换成并行信号发送给DEI1016;接收DEI1016发送的并行信号,转换成USB和RS232串行信号发送出去。系统整体结构如图1所示。
图1 系统的整体结构
1.2 USB/RS232通信接口设计
由于主控芯片内部集成了USB设备控制器,硬件电路设计比较简单。要采用差分信号传输方式,只需将差分信号线与主控芯片的对应引脚连接即可。RS232信号收发器将RS232标准的电平转换成TTL/CMOS标准电平,具有2路驱动器2路接收器。
1.3 ARINC429通信接口设计
ARINC429总线采用的是双极性归零码的三态码调制方式,即调制方式为高(+9~+11V)、零(-0.5~+0.5V )和低(-9~ -11V)状态组成的三电平状态调制。传输采用32位或25位为一个字的差分模式,传输速率有100kB/s和12.5kB/s 2种[1]。DEI1016的输出电平是TTL标准,需要经过BD429电平转换器转换成ARINC429标准电平格式,再发送出去。而每个接收通道都不需要电平转换,可直接连接到ARINC429数据总线。通过STM32F103和模拟开关DG412来控制BD429的CA和CB引脚,以切换传输速率。
DEI1016的硬件接口电路如图2所示。
图2 DEI1016的硬件接口电路
1.3.1 DEI1016典型的发送数据时序
DEI1016发送数据的时序如图3所示。
图3 DEI1016发送数据的时序
在发送数据时,如果TXR为高电平,说明发送存储器空闲可以接收数据,把ENTX置低禁止发送,从16位数据总线上下载6个ARINC字到缓冲区,最多可达到8×32bit字。当/LD1为低,/LD2为高,下载的是 Word1;当/LD1为高,/LD2为低,下载的是 Word2。当ENTX置高,就可以通过DOA,DOB发送出去[2]。
1.3.2 DEI1016典型的接收数据时序
DEI1016接收数据的时序如图4所示。在接收数据时,如果接收到有效数据,则系统自动把/DR1或者/DR2位置0。当SEL为低,/OE1为低且/OE2为高时,接收通道1的数据传到16位数据总线上;当/OE1为高,/OE2为低时,接收通道2的数据传到16位数据线上[2]。
图4 DEI1016接收数据的时序
2 软件设计
软件部分主要包括应用程序、USB的驱动程序和STM32F103的固件程序。由于操作系统的应用程序主要用于人机交互,人机界面越友好越方便用户操作,但不是设计的重点。设计的重点是USB的驱动程序和STM32F103的固件程序。
2.1 USB的驱动程序
USB驱动程序的编写采用Driver Studio,它对必用的DDK进行了包装,只要使用简单的向导就能生成一个驱动框架。而接口操作部分的子函数还是要用VC++编写。应用程序主要通过Create-File,C1oseHandle,ReadFile,WriteFile,DeviceIo-Control函数调用驱动程序。通过ReadFile和WriteFile访问驱动程序的Read和Write函数,通过DeviceIoControl函数访问驱动程序的Control Code函数[3]。通过传递KIrp类(提供IRP各个域的存取方式)成员函数做参数,可以获取缓冲区地址、读和写数据的长度等参数。驱动程序处理I/O管理发来的I/O请求包(IRP),最后再将处理完成后的IRP返回给I/O管理。接着创建一个URB(USB请求块)由USB驱动程序处理。
2.2 STM32F103的固件程序
STM32F103的固件程序主要包括初始化程序、主程序和中断服务程序。初始化程序主要对USB,RS232和 ARINC429接口进行初始化[4];主程序主要是进入主循环等待各种中断;中断服务程序包括枚举过程、数据发送部分和数据接收部分。
USB的中断服务程序如图5所示。主机首先发送一个令牌包启动USB传输,当STM32F103收到令牌包后就会触发中断。触发中断的类型有复位、挂起、枚举过程、端点1接收数据和端点2发送数据。再读取中断寄存器,判断产生中断的类型,并进行相应的中断处理。其中枚举过程的成败决定USB能否正常传输数据,只有枚举过程成功,PC机才能发现新设备[5]。
图5 USB中断流程
ARINC429总线接收数据同样采用中断方式,如图6所示。当DEI1016接收到ARINC429总线数据时,硬件自动置/DR1或/DR2为低电平,/DR1或/DR2与主控制芯片I/O口连接,再把这2个I/O口配置成外部中断。当外部中断到来,主控芯片只需要查询与/DR1或/DR2相接的I/O口的状态,以便确定接收1或接收2通道传输的数据,再作相应的数据处理[6]。
图6 ARINC429总线引发的中断流程
3 结束语
经过Protues7.8软件仿真和大量实验证明,ARINC429信号可以正确地接收和发送信号。利用STM32F103控制DEI1016的译码、速率转换和通道选择,提高了系统稳定性、可靠性。使用本模块,使ARINC429信号测试更为方便,高、低速率之间切换更简单,具有工业实用价值。
[1]张 磊,李静昭.基于MSP430的ARINC429航空总线测试接口设计[J].电子测试,2011,(10):5-8.
[2]郭警涛,韩 敏.基于CPLD与DEI1016的ARINC429总线板设计[J].空军雷达学院学报,2011,25(4):300-302.
[3]马存宝,张 韦,周宇晗.基于USB协议的ARINC429总线接口板的设计[J].计算机测量与控制,2008,16(6):859-864.
[4]彭 刚,秦志强.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践[M].北京:电子工业出版社,2011.
[5]刘 荣.圈圈教你玩USB[M].北京:北京航空航天大学出版社,2009
[6]李 榕,刘卫国,刘晓剑.航空用ARINC429总线收发系统设计与实现[J].计算机测量与控制,2005,13(9):970-972,984.