数据采集板最新通信协议及测试.docx
《数据采集板最新通信协议及测试.docx》由会员分享,可在线阅读,更多相关《数据采集板最新通信协议及测试.docx(21页珍藏版)》请在冰豆网上搜索。
数据采集板最新通信协议及测试
数据采集板通讯命令测试
版本历史:
版本
设计
审核
批准
备注
V0.1
田云钧
2010-3-2.初次制定。
1测试平台
本测试平台依赖于新版数据采集卡,整个通信可以划分为两部分,PC机到单片机的串
口通信,以及单片机到FPGA的SPI通信。
2软件环境
对于用户而言,所有测试命令基于串口精灵发送,通过串口精灵返回的数值来判断命令
发送正确与否。
串口通讯约定
1,计算机作为主机,数据采集板作为从机。
2,所有的通讯都由主机发起,以从机的应答结束。
3,波特率设置为9600,—个起始位,一个停止位,无校验位。
4,当出现通信错误时(超时,校验错,无应答),采用重传作为处理手段。
主机发送内容定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
累加和
长度
1
1
1
1
1
n
1
内容
0xAA
0xA0
X
X
X
X
X
从机回复内容的定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
累加和
长度
1
1
1
1
1
n
1
内容
0x55
X
X
X
X
X
X
设备地址:
数据采集板的地址定义为0XA0。
子地址:
不同设备内部不同单元,该设计中子地址定义,默认为0x00.
命令字符:
详细定义见下文。
数据长度:
数据的长度,不包括检验和的长度,有可能是0。
当数据长度是0时,“数
据内容”部分不存在。
数据内容:
当数据长度不为0时为所发送的数据,不能大于255字节。
累加和:
以简单的累加和作为校验。
只针对数据部分进行累加,如果数据长度为1,
累加和就等于数据内容,如果数据长度为0,不仅数据部分内容为空,累加和部分也为空。
3测试内容
所有的命令可以划分为两类:
公共的通讯控制命令以及针对数据采集板的控制命令。
公
共通讯控制命令可分为以下四条
1设置通讯波特率
2查询从机状态
3获取从机固件版本信息
4获取固件SN码
针对数据采集板的控制命令有以下三条
1读取单片机状态
2设置数据采集板工作模式
3读取FPGA内部状态
对于控制命令的第二条和第三条而言,其测试内容都包含两部分内容:
上位机到单片机
的通信验证以及单片机到FPGA的验证。
上位机到单片机的通讯方式采用RS232方式,波特率为9600,—个起始位,8个数据
位,以及一个停止位,无校验。
上位机到单片机的通信方式都会有应答,具体的应答方式在
下面的测试内容中有详细介绍。
单片机到FPGA的通信方式采用SPI方式,CS低有效,SCLK的上升沿采集数据。
4控制命令测试
数据采集板的地址是0xA0。
单片机仅仅是一个命令转达的单元。
其负责将接收到的控制信息转发给FPGA。
主机给单片机发送的内容定义
表4-12:
主机发送内容定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
X
1
内容
0xAA
0xA0
0x00
0xXX
0xXX
XX
X
表4-13:
数据采集板从机回复内容定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
X
1
内容
0x55
0xA0
0x00
0xXX
0xXX
XX
X
上位机与单片机通讯的命令字符与数据定义
项目
子地址
方向
命令
数据
说明
1
0xA0H
下行
0x10H
0BYTE
读单片机状态。
0xA0H
上行
0x10H
1BYTE
返回单片机状态数据。
2
0xA0H
下行
0x20H
13BYTE
设置参数。
0xA0H
上行
0x20H
1BYTE
返回应答。
3
0xA0H
下行
0x30H
1BYTE
读取FPGA内部状态。
(8bit)
0xA0H
上行
0x30H
1BYTE
返回应答。
4.1工作模式设置命令测试
该命令主要完成对视频采集模式的参数设置,包括对FPGA读写操作设定,设置LVDS
行场有效的时间参数,帧头检测参数设置,设置LVDS的单双通道,分辨率以及制式,VIDEO行场有效时间参数设置。
该命令的数据内容共有13字节
4.1.1参数定义
参照数据采集板的设计概要。
将工作参数写入到FPGA内部,该命令包含13个字节,
下面的内容为各个字节中的所代表的命令的含义。
1)工作模式寄存器定义
bit7
bit6
bit5
bi4
bit3
bit2
bit1
bit0
R/W
SWITCH
S/D
8/10
format
保留
保留
保留
R/W_:
控制单片机对FPGA的操作,如果是写操作,那么主机必须依次执行该命令以及执行命令字符为30-B0的所有命令,每写一个命令字节成功,返回一个成功标志。
如果是读操作,那么单片机返回FPGA内部状态内容。
SWITCH:
选择当前处理的是CVBS信号还是LVDS信号,1为CVBS,0为LVDSS/D:
针对LVDS信号而言,S为single,当该位为1时,选择单通道,否则为双通道
8/10:
颜色分辨率选择,8为8bit,10为10bit。
该位为1时,选择8bit,否则为10bit。
format:
选择电视制式,0为VESA,1为JEADA.
我们需要设置数据采集板工作在LVDS信号采集,双通道,分辨率为8bit,VESA制式
下,因此,设定该寄存器内容为0x10
如果我们要设置数据采集板工作在VIDEO信号采集下,那么应该设置该寄存器值为40
2)行有效时间参数定义为两字节,一共11bit
字节1
字节2
Bit7~3
Bit2~0
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Rsv
HD
HD
HD
HD
HD
HD
HD
HD
HD
0
X
X
x
x
x
x
x
x
x
此次调试使用到的信号源的分辨率为1366*768,因此设置行有效时间参数为1366的十
六进制表示,0x556,其中高三位送给字节1,低八位送给字节2,因此,需要发送两个字节,
0x05,0x56
对于VIDEO而言,行有效设置为720,其十六进制表示为0x2D0,即发送两个字节,
0x02,0xD0
3)场有效时间参数定义为两字节,一共11bit
字节1
字节2
Bit7~3
Bit2~0
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Rsv
VD
VD
VD
VD
VD
VD
VD
VD
VD
0
X
X
x
x
x
x
x
x
x
同理设置场有效时间参数为768的十六进制0x300,即高两位送给字节1,低八位送个
字节2,即发送两个字节0x03,0x00.
对于VIDEO而言,场有效设置为576,其十六进制表示为240,则发送两个字节
0x02,0x40.
行同步时间以及场同步时间暂且不用,其定义如下:
4)行同步时间参数定义为两字节,一共9bit
字节1
字节2
Bit7~1
Bit0
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Rsv
HS
HS
HS
HS
HS
HS
HS
HS
HS
0
X
X
x
x
x
x
x
x
x
5)场同步时间参数定义为两字节,一共9bit
字节1
字节2
Bit7~1
Bit0
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Rsv
VS
VS
VS
VS
VS
VS
VS
VS
VS
0
X
X
x
x
x
x
x
x
x
设置这两个寄存器为0,这里需要发送四个0x00
帧头检测参数有5位组成,我们独用一个寄存器,用第五位表示,高三位保留
6)帧头检测参数以及消隐消隐信号最高位定义
bit7
bit6
bit5
bi4
bit3
bit2
bit1
bit0
HFP8
HBP8
VFP8
VBP8
FH3
FH2
FH1
FH0
bit3-bit0为帧头查找设定值,bit7-bit4分别为四个消隐信号分别的最高位。
7)设置行消隐的前肩(9bit)
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
HFP7
HFP6
HFP5
HFP4
HFP3
HFP2
HFP1
HFP0
8)设置行消隐的后肩(9bit)
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
HBP7
HBP6
HBP5
HBP4
HBP3
HBP2
HBP1
HBP0
9)设置场消隐的前肩(9bit)
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
HFP7
HFP6
HFP5
HFP4
HFP3
HFP2
HFP1
HFP0
10)设置场消隐的后肩(9bit)
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
HBP7
HBP6
HBP5
HBP4
HBP3
HBP2
HBP1
HBP0
对于LVDS信号采集而言,这些数据组成了工作模式设置命令即:
10,05,56,03,00,00,00,00,00,0A,00,00,01,共13字节。
对于CVBS信号采集而言,这些数据组成了工作模式设置命令即:
40,02,
D0,02,40,00,00,00,00,0A,00,00,01,共13字节
4.1.2命令设置
类型
引导字符
设备
地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
13
1
LVDS
内容
0xAA
0xA0
0x00
0x20
0x0D
0x2005560300000000000A000001
0x4B
CVBS
0xAA
0xA0
0x00
0x20
0x0D
0x4002D00240000000000A000001
0x5F
4.1.3上位机与单片机通信
单片机返回到主机的值有三类,
发送完命令后,当主机接受到0x00时,表明此次通讯成功,成功的标志在于,单片机
正确的解析到了完整的命令内容,并且命令的内容符合约定,且命令的累加和同单片机计算
的累加和校验值一致,整个通信建立成功。
0xBF时,表明此次通讯不成功,但是引导字符,以及设不满足的地方在于校验出了问题,需要重新检查命令内
0x7F,表明此次通讯彻底失败,即命令不是定义的类型。
AAA000200D1005560300000000000A00000179,共19
0x4B时,串
但是,如果将累加和内容或者命令内容部分改变,即最后一个字节不再是
口精灵就会收到0xBF。
若将指令的非数据以及校验部分内容部分更改(例如,引导字符,设备地址,命令字符等),则返回0X7F,说明此命令不符合系统要求。
需要注意的是,单片机仅仅在命令正确的情况下才会向FPGA发送指令,否则一直处
于等待正确命令状态。
4.1.4单片机与FPGA的SPI通信
对于FPGA与单片机之间的SPI的通信正确与否,我们只能通过看现象来得知命令是否传输正确,例如,上述指令的数据内容为1005560300000000000A000001,这串命令将通过
SPI的方式发送到FPGA,在FPGA的内部存在13字节的命令寄存器,我们可以通过检测该寄存器的值是否为写入的命令,为此,我们在FPGA采用比较的方式来验证传输的正确
性。
若FPGA接受到的数据与要求相符,则点亮LED,否则LED不亮。
通过实验发现,串口助手将正确指令发出后,FPGA将LED点亮,验证了SPI通信的正确性。
,若发送的指令
有误,FPGA将不会接收到指令,因为在指令错误的情况下,单片机跟FPGA的SPI通信是
建立不起来的。
4.2读取单片机状态命令
4.2.1参数定义
内部状态寄存器定义
bit7
bit6
bit5
bi4
bit3
bit2
bit1
bit0
CFG
WAIT
:
保留
保留
保留
保留
保留
保留
CFG:
FPGA配置结束后会给单片机一个应答,若配置没完成,该位置0,配置结束后,变
为1;
WAIT:
等待接收命令字节状态。
只要单片机不响应中断,那么该状态位就会置位
4.2.2命令设置
类型
引导字符
设备地址
子地址
命令字符
数据长度
长度
1
1
1
1
0
内容
0xAA
0xA0
0x00
0x10
0x00
发送命令AA,A0,00,10,00
4.2.3上位机与单片机通信
单片机将当前状态返回给主机
其格式为
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
长度
1
1
1
1
1
1
内容
0x55
0xXX
X
0x10
0x01
见421
4.3读取FPGA内部状态命令
431参数定义
FPGA内部状态寄存器定义
bit7
bit6
bit5
bi4
bit3
bit2
bit1
bit0
BUSY
FH
VALID
FULL
EMPTY
保留
保留
保留
BUSY:
当FPGA正在采集数据的过程中(即状态机处于接受数据状态)该位置位,否
则为0。
FH:
当状态机处于帧头查找状态时(异常时,将一直维持在此状态),该位置位,否则
为0.
VALID:
DE信号有无的标志,若DE信号一直无效,则VALID持续为0,否则VALID为1.
FULL:
内部FIFO写满,该位置位,否则清零。
EMPTY:
内部FIFO读空,该位置位,否则清零。
在数据采集过程中,正常的状态应该
是FULL,EMPYT都不为1。
4.3.2命令设置
类型
引导字符
设备地址
子地址
命令字符
数据长度
长度
1
1
1
1
1
内容
0xAA
0xA0
0x00
0x30
0x00
发送命令AA,A0,00,30,00
4.3.3上位机与单片机通信
上位机发送指令后,由单片机返回状态,具体的状态值同上描述。
当返回值满足要求时,单片机将指令发送到FPGA,并读取FPGA状态。
4.3.4单片机与FPGA通信
FPGA将实时的内部状态寄存器的内容发送到单片机。
5公共通讯控制命令
系统内所有使用串口通讯的设备(RS232),使用如下4条公共的通讯命令,分别是设置(更改)通讯波特率命令、查询系统状态命令和获取从机固件版本信息和固件的SN码。
所有的从机遵循同样的控制方式,执行同样的控制操作和使用同样的命令执行时间。
5.1设置通讯波特率
表4-3:
主机发送内容定义:
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
1
1
内容
0xAA
0xA0
X
0x00
0x01
0xYY
0xYY
表4-4:
从机回复内容定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
1
1
内容
0x55
0xA0
X
0x00
0x01
0xZZ
0xZZ
根据实际的板的信息填写“XX”部分的内容,本命令将在1ms内直接返回结果。
“OxYY”为实际的波特率的代码,本系统支持如下的波特率,实际波特率与代码的对应关系如下:
表4-5:
波特率代码对应表:
代码
0x00(默认)
0x01
0x02
0x03
其他
波特率(bps)
9600
38400
57600
115200
未定义
由于单片机只支持9600以及57600的波特率,因此,对于波特率的设置我们仅局限于这两种。
对于其他的波特率更改,将忽略。
所有从机复位后,将使用默认的波特率,当主机设置未定义的波特率时,所有从机将维持当前波特率不变。
“0xZZ”为从机返回的应答,一般讲,应答将有如下几种定义(下同):
0x00H:
本次通讯操作成功。
0x7FH:
未定义的操作命令。
0xBFH:
本次通讯失败,校验错。
0xFFH:
代表系统处于忙状态。
除“0x00H”外,从机实际上均未响应本次操作。
5.2查询从机状态
就主机端观察,从机具备两个状态,分别定义为“忙”(BUSY=1)和“空闲”(BUSY=0),主机发送命令到从机时,一般必须要要求从机处于空闲状态,才可以正确接受并执行主机发
送的命令,处于忙状态,将拒绝执行主机的命令,但有几种特殊的命令除外,是不需要约定
从机处于空闲状态的,包括设置波特率命令和下面特别指出的命令。
表4-6:
主机发送内容定义:
类型
引导字符
设备地址
子地址
命令字符
数据长度
长度
1
1
1
1
1
内容
0xAA
0xA0
X
0x01
0x00
表4-7:
从机回复内容定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
1
1
内容
0x55
0xA0
X
0x01
0x01
0xZZ
0xZZ
主机查询从机的状态的命令是“0x01H”。
主机查询从机的状态,不需要数据,所以数据长度是“0”。
本命令将在1ms内直接返回结果。
“OxZZ”,返回的结果的含义如下:
OxOOH:
本次通讯操作成功。
0x7FH:
未定义的操作命令。
OxBFH:
本次通讯失败,校验错。
OxFFH:
代表系统处于忙状态。
当主机设置的上一次的操作还未执行完毕或从机正处于比较关键的操作时,从机为忙状
^态。
主机检测从机的忙状态的操作不是必须的,主机也可以不单独检测从机的忙状态,而直
接发送控制命令,从从机的应答可分析出从机在主机发送控制命令时是否处于忙状态。
详细
介绍见下文。
5.3获取从机固件版本信息
表4-8:
主机发送内容定义:
类型
引导字符
设备地址
子地址
命令字符
数据长度
长度
1
1
1
1
1
内容
0Xaa
0xA0
X
0x02
0x00
表4-9:
从机回复内容定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
16
1
内容
0x55
0xA0
X
0x02
0x10
0xZZ
X
获取版本信息的操作总能立即返回指定固件的说明字符,而不会有“BUSY”状态。
版
本信息固定为16字节,采用ASCII字符标志,典型的版本信息的表示方法如下:
20061205VER:
1.01”。
依次为年(4个ASCII字符),月(2个ASCII字符),日(2个
ASCII字符),“VER:
”为版本引导字符,“1.01”为版本说明(4个ASCII字符)。
5.4获取固件SN码
每一个固件都具有与其他设备不同的且唯一的SN码,作为硬件设备的唯一标识。
表4-10:
主机发送内容定义:
类型
引导字符
设备地址
子地址
命令字符
数据长度
长度
1
1
1
1
1
内容
0Xaa
0xA0
X
0x03
0x00
表4-11:
从机回复内容定义
类型
引导字符
设备地址
子地址
命令字符
数据长度
数据内容
校验和
长度
1
1
1
1
1
16
1
内容
0x55
0xA0
X
0x03
0x10
0xZZ
X
获取版本信息的操作总能立即返回指定固件的说明字符,而不会有“BUSY”状态。
SN
码固定为16字节,米用ASCII字符标志。
SN码可作为设备有效性标识和参数校准的标识。
目前保留。
6测试结论
6.1工作模式命令测试结论
6.1.1正确的命令测试
发送:
AA,A0,00,20,0D,10,05,56,03,00,00,00,00,00,0A,00,00,01,79
AA,A0,00,20,0D,40,02,D0,02,40,00,00,00,00,0A,00,00,01,5F
接收:
55A00020010000
现象:
接收到55A00020010000之后,FPGA将LED点亮。
结论:
发送命令符合要求,且校验正确,单片机将接收到命令的数据内容作累加计算后跟命令中的校验值做比较,判断出两者一致后,将该命令发送给FPGA,FPGA将该命令
数据跟标准呢指令作比较,两者若一致,则点亮LED,此次测试LED被点亮,说明通信成
功。
6.1.2校验失败命令测试
发送:
AA,A0,00,20,0D,10,05,56,03,00,00,00,00,00,0A,00,00,00,4B
AA,A0,00,20,0D,40,02,D0,02,40,00,00,00,00,0A,00,00,01,1F
接收:
55A0002001BFBF
现象,无
结论,由于发送命令中的数据内容为2005560300000000000A000000,