资源描述
数据采集板通讯命令测试
版本历史:
版本
设计
审核
同意
备注
V0.1
田云钧
-3-2.首次制订。
1测试平台
本测试平台依靠于新版数据采集卡, 整个通信能够划分为两部分, PC机到单片机串口通信, 以及单片机到FPGASPI通信。
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为LVDS
S/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
0x0000000A000001
0x4B
CVBS
0xAA
0xA0
0x00
0x20
0x0D
0x4002D00A000001
0x5F
4.1.3上位机与单片机通信
单片机返回到主机值有三类,
发送完命令后, 当主机接收到0x00时, 表明此次通讯成功, 成功标志在于, 单片机正确解析到了完整命令内容, 而且命令内容符合约定, 且命令累加和同单片机计算累加和校验值一致, 整个通信建立成功。
发送完命令后, 当主机接收到0xBF时, 表明此次通讯不成功, 不过引导字符, 以及设备地址, 以及命令字符都符合要求, 不满足地方在于校验出了问题, 需要重新检验命令内容, 并计算校验值。
发送完命令后, 当主机接收到0x7F, 表明此次通讯根本失败,即命令不是定义类型。
比如, 串口助手发送正确指令: AAA000200D0000000A00000179,共19个字节, 发送完成后, 串口精灵收到0x00, 表明此次通讯正确
不过, 假如将累加和内容或者命令内容部分改变, 即最终一个字节不再是0x4B时, 串口精灵就会收到0xBF。
若将指令非数据以及校验部分内容部分更改(比如, 引导字符, 设备地址, 命令字符等), 则返回0X7F, 说明此命令不符合系统要求。
需要注意是, 单片机仅仅在命令正确情况下才会向FPGA发送指令, 不然一直处于等候正确命令状态。
4.1.4单片机与FPGASPI通信
对于FPGA与单片机之间SPI通信正确是否, 我们只能经过看现象来得悉命令是否传输正确, 比如, 上述指令数据内容为0000000A000001, 这串命令将经过SPI方法发送到FPGA, 在FPGA内部存在13字节命令寄存器, 我们能够经过检测该寄存器值是否为写入命令, 为此, 我们在FPGA采取比较方法来验证传输正确性。
若FPGA接收到数据与要求相符, 则点亮LED, 不然LED不亮。经过试验发觉, 串口助手将正确指令发出后, FPGA将LED点亮, 验证了SPI通信正确性。, 若发送指令有误, FPGA将不会接收到指令, 因为在指令错误情况下, 单片机跟FPGASPI通信是建立不起来。
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
见4.2.1
4.3 读取FPGA内部状态命令
4.3.1参数定义
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内直接返回结果。
“0xYY”为实际波特率代码, 本系统支持以下波特率, 实际波特率与代码对应关系以下:
表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内直接返回结果。
“0xZZ”, 返回结果含义以下:
0x00H: 此次通讯操作成功。
0x7FH: 未定义操作命令。
0xBFH: 此次通讯失败, 校验错。
0xFFH: 代表系统处于忙状态。
当主机设置上一次操作还未实施完成或从机正处于比较关键操作时, 从机为忙状态。
主机检测从机忙状态操作不是必需, 主机也能够不单独检测从机忙状态, 而直接发送控制命令, 从从机应答可分析出从机在主机发送控制命令时是否处于忙状态。具体介绍见下文。
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字符标志, 经典版本信息表示方法以下:
“1205VER: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
接收: 55 A0 00 20 01 00 00
现象: 接收到55 A0 00 20 01 00 00以后, 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
接收: 55 A0 00 20 01 BF BF
现象, 无
结论, 因为发送命令中数据内容为000A000000, 其校验和为0x79,不过命令中校验和为4B, 二者不一致, 造成通信失败, 返回数据内容bf, 标志此次通信校验失败。通信失败, FPGA不会接收到单片机发来指令, 当然也不会点亮LED了
6.1.3 未定义命令测试
发送: A0,A0,00,20,0D,10,05,56,03,00,00,00,00,00,0A,00,00,01,79
AA,A0,A0,20,0D,40,02,D0,02,40,00,00,00,00,0A,00,00,01,5F
接收: 55 A0 00 20 01 7F 7F
现象: 无
结论: 该命令引导字符0xA0未定义, 发送完成后, 单片机给上位机返回55 A0 00 20 01 7F 7F, 代表该命令未定义, 一样, FPGA也不会将LED点亮, 通信失败。
6.2 读取单片机状态命令测试结论
6.2.1 正确命令测试
发送: AA,A0,00,10,00
接收: 55 A0 00 10 01 80 80
结论: 此时FPGA已配置结束, 而且在发送命令时刻, 单片机处于等候接收命令状态, 所以单片机状态寄存器值为10000000b, 收到数据80, 校验值也是80,通信成功。
发送
6.2.2 未定义命令测试
发送: AA,B0,00,10,00
接收: 55 A0 00 10 01 7F 7F
结论: 发送错误地址, 单片机返回通信错误标志7F, 通信失败
6.3 读取FPGA内部状态命令测试结论
6.3.1 正确命令测试
发送: AA,A0,00,30,00
接收: 55 A0 00 30 01 00 00
结论: 默认FPGA状态为00, 在以后工作中丰富FPGA内部状态定义, 并做读取工作, 临时为验证通信同能而设定其为00。通讯成功。
6.3.2 未定义命令测试
发送 B0,B0,00,30,00
接收: 55 A0 00 30 01 7F 7F
结论: 未定义命令, 报错
6.4 设置通讯波特率
现在默认使用波特率为9600, 无需更改。
6.5 查询从机状态
6.5.1 正确命令测试
发送: AA,A0,00,01,00
接收: 55 A0 00 01 01 00 00
结论, 能接收到正确返回数据, 通讯成功。此时单片机并不忙。
6.5.2 错误命令测试
发送: BB,B5,00,01,00
接收: 55 A0 00 01 01 7F 7F
结论: 通信失败。
6.6 获取从机固件版本信息
6.6.1 正确命令测试
发送:AA,A0,00,02,00
接收: 55 A0 00 02 10 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 50
结论: 取得正确版本信息(自定义), 且校验和一致。通讯成功
6.6.2 未定义命令测试
发送; AB,CD:00,02,00
接收: 55 A0 00 02 01 7F 7F
结论: 通讯失败
6.7 获取固件SN码
6.7.1 正确命令测试
发送: AA,A0,00,03,00
接收: 55 A0 00 03 10 AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA A0
结论: 取得正确SN码(自定义), 且接收到校验和和实际校验和相同。通讯成功
6.7.2 未定义命令测试
发送: AA,A3,00,03,00
接收: 55 A0 00 02 01 7F 7F
结论: 通讯失败。
展开阅读全文