赞
踩
通过对于ARINC429的了解,发现一个问题即每个用户对于ARINC429理解并不一致,每个公司对于ARINC429的规范并不一致,每个圈子对于ARINC429的规定也不一致,有的同学会问不就是32BIT数据吗?还能玩出什么花活来,还别说,真让他们玩出花活来了。为了方便大家理解写了一个简单的程序。
前期对于我们自己设计的ARINC429转USB产品板的功能规定如下:
表1:发送协议
序号 | 字节 | 说明 |
1 | 0xAA | 固定字节1 |
2 | 0x55 | 固定字节2 |
3 | 0xYX | X:ARINC429发送源(SDI):1bit~0bit Y:ARINC429发送校验位(P):0x0:表示FPGA自动算;0x3:表示校验位写1;0x1:表示校验位写0. |
4 | 0xXX | ARINC429发送数据20bit~16bit |
5 | 0xXX | ARINC429发送15bit~8bit |
6 | 0xXX | ARINC429发送7bit~0bit |
7 | 0xXX | ARINC429发送label |
8 | 0x00 | 固定字节3 |
表 2 接收数据协议
序号 | 名称 | 描述 |
1 | DAT1 | 7:校验位;6~5:SDI;4~0:ARINC429数据[21:16] |
2 | DAT2 | 7~0:ARINC429数据[15:8] |
3 | DAT3 | 7~0:ARINC429数据[7:0] |
4 | DAT4 | 7~0:LABLE数据 |
根据上协议,模拟仿真如下:
如上图所示,将界面分为三个区域,分别是1,2,3,对应着波形显示、速率控制和数据填充:。
波形对应ARINC429定义如下:
表 3 ARINC429格式说明
End | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
校验位 | SSM | DATA(MSB:28) | |||||
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
DATA | |||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
DATA(LSB:10) | SDI | ||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | Start |
LABEL(MSB:1 ->LSB:8) |
实际示波器对比:
值得详细说明的是区域3模块,上面HEX为ARINC429转USB接收数据显示(0xC2040202)即区域3.接收字节,下面HEX为ARINC429转USB发送字节(0xAA55020204020200)即区域3.发送字节,当根据协议填充发送字节并点击对应右侧波形生成后,区域3.接收字节会自动填写接收数据,且在区域1中,绘制波形;当填充接收字节,同样可以在区域1内绘制波形,但不会填充区域3.发送字节数据。
- function [wave] = wave_creat(data,speed_100k);
- %UNTITLED Summary of this function goes here
- % Detailed explanation goes here
-
- if(speed_100k == 0)
- b = zeros(1,100);
- for(i = 1:1:32)
- if(mod(data,2) == 1)
- a{33-i} = [5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
- end
- if(mod(data,2) == 0)
- a{33-i} = [-5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
- end
- data = fix(data/2) ;
- end
- end
- if(speed_100k == 1)
- b = zeros(1,10);
- for(i = 1:1:32)
- if(mod(data,2) == 1)
- a{33-i} = [5 5 0 0];
- end
- if(mod(data,2) == 0)
- a{33-i} = [-5 -5 0 0];
- end
- data = fix(data/2) ;
- end
- end
- wave = [b,a{1},a{2},a{3},a{4},a{5},a{6},a{7},a{8},a{9},a{10},a{11},a{12},a{13},a{14},a{15},a{16},a{17},a{18},a{19},a{20},a{21},a{22},a{23},a{24},a{25},a{26},a{27},a{28},a{29},a{30},a{31},a{32},b];
- plot(wave);
- [m,n] = size(wave);
- axis([0 n -8 8])
- end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。