串口摄像头通信协议整理Word格式文档下载.docx
《串口摄像头通信协议整理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《串口摄像头通信协议整理Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
320×
240(同上)
160×
160(同上)
4、配备红外灯,在拍摄时,自动点亮,以实现夜视以及省电功能。
5、摄像头应该具备自适应功能,即对外界的光线强弱具备一定的适应性,以保证在任何情况下都能获得在该情况下所能获得的最佳质量的图片.
6、应具备低功耗工作,在低功耗模式工作电流应小于或等于10mA,正常模式工作电流应小于或等于120mA(不启动红外灯的状态)。
二、摄像头接口协议
1、基本报文格式介绍
串口摄像头采用可以支持232或485接口进行通讯,其通讯协议保持一致.下行(到摄像头)报文的基本格式如下:
报文头
2字节
摄像头地址
1字节
报文类型
报文长度
命令参数
〈(65536—9)
CRC校验码
报文头:
固定两个字节0X90EB,第一个字节是0XEB,第二个字节是0X90;
摄像头地址:
每个摄像头都可以设定一个地址,地址范围从0-255,其中地址0保留,地址255用于广播报文。
每个摄像头只处理地址和自己内部设定的地址相同的报文,地址不等当作无效报文.
报文类型:
定义具体的命令类型,主要命令见下表
报文类型(16进制)
命令说明
备注
0x01
测试摄像头
0x02
按照报文给定的图像参数拍照并传输图像数据,
一次传输完全部图象数据,注意该协议返回的数据长度是三个字节,没有状态字节,状态字节对应图象数据长度的高字节,
最大支持16M字节的图象大小。
0x03
设置对比度
未实现
0x04
设置亮度
0x05
按照报文给定的图象参数拍照,并返回图像长度
0x06
传输图像数据
0x08
关闭、打开红外灯
0x0a
修改波特率不保存
新的波特率不会保存,重新上电后仍然回复到原来的波特率
0x0b
修改波特率参数并保存参数
0x0c
强制摄像头进入低功耗状态
0x0d
修改摄像头的ID
0x12
一次传输完全部图象数据,注意该协议返回的数据长度是三个字节,没有状态字节,状态字节对应图象数据长度的高字节,
0x30
请求拍照,以默认的压缩比和图象大小进行拍照,拍照结束返回图象大小,如果修改过图象大小参数,会以最后一次的图象大小进行拍照
返回拍照的图片大小
0x31
请求传输指定包的图像数据
必须顺序传递,从第0包开始,不可以随机请求
0x32
设置分包传输的包大小
默认512字节,包大小必须是128的倍数
0x33
报告上次拍照命令拍摄的图片数据大小
0x34
设置默认的图象分辨率
0x30开始的命令主要用于分包传输协议,就是主机端没有大的缓存时可以使用这些指令。
报文长度:
定义报文的数据长度,只计算命令参数部分的数据长度。
CRC校验码:
从摄像头地址字节开始到命令参数结束部分数据的CRC校验码。
校验码错误的报文作为无效报文丢弃。
CRC校验码计算公式:
C语言算法代码如下:
staticconstunsignedshortcrc_ta[256]={/*CRC余式表*/
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};
unsignedshortcal_crc(unsignedchar*ptr,unsignedshortlen)
{
unsignedshortcrc;
unsignedcharda;
crc=0;
while(len-—!
=0){
da=(unsignedchar)(crc/256);
/*以8位二进制数的形式暂存CRC的高8位*/
crc<
<
=8;
/*左移8位,相当于CRC的低8位乘以*/
crc^=crc_ta[da^*ptr];
/*高8位和当前字节相加后再查表求CRC,再加上以前的CRC*/
ptr++;
}
return(crc);
}
上行报文的基本格式如下:
状态
数据<
(65536-9)
状态:
1字节的状态字节,反映了摄像头的当前状态
D7
D6
D5
D4
D3
D2
D1
D0
=1图像数据大于64K,请求续传
=0正常
保留
=1摄像头内部错误
=0正常
2、具体命令介绍
1、测试摄像头
命令类型:
0x01
命令长度:
0x0002
命令参数:
0x55aa
返回:
数据长度:
数据内容:
0xaa55
举例:
发送到摄像头:
90eb0101020055aa0000
返回:
90eb01010200aa550000
2、拍照并传输图像数据
命令类型:
0x02
命令参数:
字节1代表图像的分辨率,取值范围见下表
分辨率代码
分辨率
1
160*120
2
128*96
3
320*240
4
128*160
5
640*480
6
1152*864
7
1280*960
字节2代表图像的压缩比,取值范围0-4,共5个等级,0时压缩比最小,图像效果最好。
注意:
该上行报文取消了摄像头状态字节,该字节被图象长度的第三字节取代,该字节和数据长度两字节一起形成一个三字节的数据长度。
数据长度:
压缩后图象数据的大小
数据内容:
压缩后的完整jpeg数据
举例:
命令
90eb0102020005010000
其中90eb为包头,01摄象头id,02为拍照命令,0200为参数长度,05为分辨率,01为压缩比,0000为crc16.
返回拍照数据
90eb0102042306ffd8……..
其中的042306三个字节代表照片的数据长度是394275字节,后面跟的数据。
3、设置对比度
0x03
0x0001
对比度大小,对比度值以0x80为中间值上下波动。
返回:
状态字节:
00
设定的对比度值
4、设置亮度
0x04
亮度大小,亮度值以0x80为中间值上下波动。
设定的亮度值
5、拍照
0x05
字节1代表图像的分辨率,取值范围见上表
字节2代表图像的压缩比,取值范围0-4,共5个等级,0时压缩比最小,图像效果最好。
状态字节:
D7=1;
标识图像数据大于64K
0x0004
4字节压缩后图象数据的大小
6、传输图像数据
0x06
0x0000
无
标识图像数据大于64K,需要紧跟一个获取后续数据的报文,才可以取得完整的图象数据
7、红外灯控制
0x08
红外灯开关0x33=打开0xCC=关闭
红外灯开关值
8、修改波特率参数
01=4800
02=9600
03=19200
04=19200
05=57600
06=57600
无
例:
需要设置9600的波特率,命令如下:
90EBID0A010002CRC1CRC2
其它的波特率需要定制,无特别说明默认的波特率是57600,该命令修改后的波特率不会被保存,重新上电以后仍然回到原来的波特率。
9、修改波特率参数并保存
0x0b
命令长度:
02=9600
03=19200
05=57600
能修改4种拨特率,波特率为其他的波特率时,是不能修改波特率的。
其它的波特率需要定制,无特别说明默认的波特率是57600
例:
需要设置9600的波特率,命令如下:
90EBID0B02000202CRC1CRC2
该命令修改后的波特率会被保存,重新上电后使用新的波特率.
10、修改摄像头ID标识
新的ID标识号,可以取值范围为1-255
新的ID号
需要设置ID=2时,命令如下:
90EB原来ID号0D010002CRC1CRC2
11、拍照并传输黑白图像数据
0x12
128*120
320*240
128*160
640*480
1152*864
1280*960
字节2代表图像的压缩比,取值范围0-4,共5个等级,0时压缩比最小,图像效果最好。
该上行报文取消了摄像头状态字节,该字节被图象长度的第三字节取代,该字节和数据长度两字节一起形成一个三字节的数据长度。
90eb0102042306020000
其中的042306三个字节代表数据长度394275字节的数据长度
12、分包传输图像数据时请求拍照命令
拍照成功后返回图像数据的大小,一共4个字节,低字节在前。
0x0005
需要拍照时,命令如下:
90EBID号300000CRC1CRC2
90EBID号300700状态字节LEN1LEN2LEN3LEN4PLEN11PLEN2CRC1CRC2
比如命令为
90eb013000000000
返回
90EB0130070000793600001C00724E
其中0700为字节长度,00为状态字节,79360000为照片数据大小,1C00为包的数目,724E为CRC.
13、请求按分包传输图像数据
请求的图像数据包号,占两个字节,最大可达65536个数据包
返回指定包的图像数据的大小
图像数据
请求包号1的命令如下:
90EBID号3102000100CRC1CRC2
90EBID号31命令长度1命令长度2状态字节包号L包号H数据CRC1CRC2
返回的命令长度=指定包数据+包号2字节+状态1字节,如果不是最后一个包,包数据大小就是包长度。
按分包传输图像数据时,必须先发送分包拍照命令(0x30),拍照成功后必须从0包顺序传递,不可以随机传送任意包号的数据。
14、设置分包传输图像数据时的包大小,默认是512字节
数据包大小,占两个字节,包大小必须是128的整数倍,如12825651210242048等
0x0003
新的数据包大小
设定512包的命令如下:
90EBID号3202000002CRC1CRC2
90EBID号320300STA0002CRC1CRC2
15、设置分包拍照的默认图像分辨率
图像分辨率代码,见下表
设定640×
480的命令如下:
90EBID号34010005CRC1CRC2
90EBID号340200STA05CRC1CRC2
图示2:
分包传输时一幅完整图片采集流程1
此流程仅供参考,设计中应包含但不限于如下流程,即对一下采集流程兼容。