数据采集板通讯命令测试1测试平台本测试平台依赖于新版数据采集卡,整个通信可以划分为两部分,PC机到单片机的串口通信,以及单片机到FPGA的SPI通信。
2软件环境对于用户而言,所有测试命令基于串口精灵发送,通过串口精灵返回的数值来判断命令发送正确与否。
串口通讯约定1,计算机作为主机,数据采集板作为从机。
2,所有的通讯都由主机发起,以从机的应答结束。
3,波特率设置为9600,一个起始位,一个停止位,无校验位。
4,当出现通信错误时(超时,校验错,无应答),采用重传作为处理手段。
主机发送容定义从机回复容的定义设备地址:数据采集板的地址定义为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:主机发送容定义4.1工作模式设置命令测试该命令主要完成对视频采集模式的参数设置,包括对FPGA读写操作设定,设置LVDS 行场有效的时间参数,帧头检测参数设置,设置LVDS的单双通道,分辨率以及制式,VIDEO 行场有效时间参数设置。
该命令的数据容共有13字节4.1.1参数定义参照数据采集板的设计概要。
将工作参数写入到FPGA部,该命令包含13个字节,下面的容为各个字节中的所代表的命令的含义。
1)工作模式寄存器定义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此次调试使用到的信号源的分辨率为1366*768,因此设置行有效时间参数为1366的十六进制表示,0x556,其中高三位送给字节1,低八位送给字节2,因此,需要发送两个字节,0x05,0x56对于VIDEO而言,行有效设置为720,其十六进制表示为0x2D0,即发送两个字节,0x02,0xD03)场有效时间参数定义为两字节,一共11bit同理设置场有效时间参数为768的十六进制0x300,即高两位送给字节1,低八位送个字节2,即发送两个字节0x03,0x00.对于VIDEO而言,场有效设置为576,其十六进制表示为240,则发送两个字节0x02,0x40.行同步时间以及场同步时间暂且不用,其定义如下:4)行同步时间参数定义为两字节,一共9bit设置这两个寄存器为0,这里需要发送四个0x00帧头检测参数有5位组成,我们独用一个寄存器,用第五位表示,高三位保留6)帧头检测参数以及消隐消隐信号最高位定义bit3-bit0为帧头查找设定值,bit7-bit4分别为四个消隐信号分别的最高位。
9)设置场消隐的前肩(9bit)10)设置场消隐的后肩(9bit)对于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命令设置4.1.3上位机与单片机通信单片机返回到主机的值有三类,发送完命令后,当主机接受到0x00时,表明此次通讯成功,成功的标志在于,单片机正确的解析到了完整的命令容,并且命令的容符合约定,且命令的累加和同单片机计算的累加和校验值一致,整个通信建立成功。
发送完命令后,当主机接收到0xBF时,表明此次通讯不成功,但是引导字符,以及设备地址,以及命令字符都符合要求,不满足的地方在于校验出了问题,需要重新检查命令容,并计算校验值。
发送完命令后,当主机接受到0x7F,表明此次通讯彻底失败,即命令不是定义的类型。
例如,串口助手发送正确的指令:AAA000200D00A00000179,共19个字节,发送完毕后,串口精灵收到0x00,表明此次通讯正确但是,如果将累加和容或者命令容部分改变,即最后一个字节不再是0x4B时,串口精灵就会收到0xBF。
若将指令的非数据以及校验部分容部分更改(例如,引导字符,设备地址,命令字符等),则返回0X7F,说明此命令不符合系统要求。
需要注意的是,单片机仅仅在命令正确的情况下才会向FPGA发送指令,否则一直处于等待正确命令状态。
4.1.4单片机与FPGA的SPI通信对于FPGA与单片机之间的SPI的通信正确与否,我们只能通过看现象来得知命令是否传输正确,例如,上述指令的数据容为00A000001,这串命令将通过SPI的方式发送到FPGA,在FPGA的部存在13字节的命令寄存器,我们可以通过检测该寄存器的值是否为写入的命令,为此,我们在FPGA采用比较的方式来验证传输的正确性。
若FPGA接受到的数据与要求相符,则点亮LED,否则LED不亮。
通过实验发现,串口助手将正确指令发出后,FPGA将LED点亮,验证了SPI通信的正确性。
,若发送的指令有误,FPGA将不会接收到指令,因为在指令错误的情况下,单片机跟FPGA的SPI通信是建立不起来的。
4.2 读取单片机状态命令4.2.1参数定义CFG:FPGA配置结束后会给单片机一个应答,若配置没完成,该位置0,配置结束后,变为1;WAIT:等待接收命令字节状态。
只要单片机不响应中断,那么该状态位就会置位4.2.2命令设置4.2.3 上位机与单片机通信单片机将当前状态返回给主机其格式为4.3 读取FPGA部状态命令4.3.1参数定义为0。
FH:当状态机处于帧头查找状态时(异常时,将一直维持在此状态),该位置位,否则为0.VALID:DE信号有无的标志,若DE信号一直无效,则VALID持续为0,否则VALID为1.FULL:部FIFO写满,该位置位,否则清零。
EMPTY:部FIFO读空,该位置位,否则清零。
在数据采集过程中,正常的状态应该是FULL,EMPYT都不为1。
4.3.2 命令设置发送命令AA,A0,00,30,004.3.3 上位机与单片机通信上位机发送指令后,由单片机返回状态,具体的状态值同上描述。
当返回值满足要求时,单片机将指令发送到FPGA,并读取FPGA状态。
4.3.4 单片机与FPGA通信FPGA将实时的部状态寄存器的容发送到单片机。
5公共通讯控制命令系统所有使用串口通讯的设备(RS232),使用如下4条公共的通讯命令,分别是设置(更改)通讯波特率命令、查询系统状态命令和获取从机固件版本信息和固件的SN码。
所有的从机遵循同样的控制方式,执行同样的控制操作和使用同样的命令执行时间。
5.1设置通讯波特率表4-4:从机回复容定义根据实际的板的信息填写“XX”部分的容,本命令将在1ms直接返回结果。
“0xYY”为实际的波特率的代码,本系统支持如下的波特率,实际波特率与代码的对应关系如下:由于单片机只支持9600以及57600的波特率,因此,对于波特率的设置我们仅局限于这两种。
对于其他的波特率更改,将忽略。
所有从机复位后,将使用默认的波特率,当主机设置未定义的波特率时,所有从机将维持当前波特率不变。
“0xZZ”为从机返回的应答,一般讲,应答将有如下几种定义(下同):0x00H:本次通讯操作成功。
0x7FH:未定义的操作命令。
0xBFH:本次通讯失败,校验错。
0xFFH:代表系统处于忙状态。
除“0x00H”外,从机实际上均未响应本次操作。
5.2查询从机状态就主机端观察,从机具备两个状态,分别定义为“忙”(BUSY=1)和“空闲”(BUSY=0),主机发送命令到从机时,一般必须要要求从机处于空闲状态,才可以正确接受并执行主机发送的命令,处于忙状态,将拒绝执行主机的命令,但有几种特殊的命令除外,是不需要约定从机处于空闲状态的,包括设置波特率命令和下面特别指出的命令。
表4-6:主机发送容定义:表4-7:从机回复容定义主机查询从机的状态的命令是“0x01H”。
主机查询从机的状态,不需要数据,所以数据长度是“0”。
本命令将在1ms直接返回结果。
“0xZZ”,返回的结果的含义如下:0x00H:本次通讯操作成功。
0x7FH:未定义的操作命令。
0xBFH:本次通讯失败,校验错。
0xFFH:代表系统处于忙状态。
当主机设置的上一次的操作还未执行完毕或从机正处于比较关键的操作时,从机为忙状态。
主机检测从机的忙状态的操作不是必须的,主机也可以不单独检测从机的忙状态,而直接发送控制命令,从从机的应答可分析出从机在主机发送控制命令时是否处于忙状态。
详细介绍见下文。
5.3获取从机固件版本信息表4-8:主机发送容定义:表4-9:从机回复容定义获取版本信息的操作总能立即返回指定固件的说明字符,而不会有“BUSY”状态。
版本信息固定为16字节,采用ASCII字符标志,典型的版本信息的表示方法如下:“20061205VER:1.01”。