串口摄像头通信协议
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口摄像头说明书
一、串口摄像头介绍
1、SXH485-V1串口摄像头是一款具有视频采集和图像压缩功能的摄像头,具有130万象素CMOS摄像头,最大分辨率可达到1280×960,它是一个内含有拍摄控制、
视频捕捉、图像数据采集、图像JPEG压缩、串口通讯等功能的齐全的工业用图像采集设备。
采用标准的JPEG图像压缩算法,本产品的图像输出格式与常用计算机完全兼容。
同时,本产品带有可选择的红外照明功能,能够实现自动照度补偿、在黑暗的光线下仍能较好的图片质量。
该摄像头的接口为标准的232接口,能够很方便和与各种计算机和嵌入式控制系统、数据传输系统相连。
同时使用485接口时可以方
便控制设备接入多个摄像头。
最大串口通讯速率可达115200bps。
支持的通讯速率为:4800、9600、19200、57600、115200,设备默认通讯波特率为115200,可以通过命令配置。
2、摄像头测试方法
具有485接口的摄像头连接pc进行镜头调试、参数设置的时候需要通过一个485转换器和PC的232接口连接。
485数据线只需要两根线,称为A、B或485+、485-。
连接的时候将摄像头的两根485数据线和转换器的两根数据线连接,转换器上的电源(+5v)和地不用连接。
另外给摄像头提供一个5v电源,接到摄像头的+5V和GND端即可。
注意485的数据线有正负之分,接错不会造成设备损坏,但不能正常通讯,此时交换一下即可。
摄像头的电源一定不能接错,否则会烧坏摄像头。
3、基本参数
1、通讯接口,RS232或485接口,支持通讯波特率为:4800、9600、19200、57600
2、工作电压为5V-12V宽电压设计。
3、支持分辨率为:
1280×960
640×480(其中又分为高、中、低三个质量的图片)
320×240(同上)
160×160(同上)
4、配备红外灯,在拍摄时,自动点亮,以实现夜视以及省电功能。
5、摄像头应该具备自适应功能,即对外界的光线强弱具备一定的适应性,以保证在任
何情况下都能获得在该情况下所能获得的最佳质量的图片。
6、应具备低功耗工作,在低功耗模式工作电流应小于或等于10mA,正常模式工作电
流应小于或等于120mA(不启动红外灯的状态)。
二、摄像头接口协议
1、基本报文格式介绍
串口摄像头采用可以支持232或485接口进行通讯,其通讯协议保持一致。
下行(到摄像头)报文的基本格式如下:
报文头:固定两个字节0X90EB,第一个字节是0XEB,第二个字节是0X90;
摄像头地址:每个摄像头都可以设定一个地址,地址范围从0-255,其中地址0保留,地址255用于广播报文。
每个摄像头只处理地址和自己内部设定的地址相同的
报文,地址不等当作无效报文。
报文类型:定义具体的命令类型,主要命令见下表
0x30开始的命令主要用于分包传输协议,就是主机端没有大的缓存时可以使用这些指令。
报文长度:定义报文的数据长度,只计算命令参数部分的数据长度。
CRC校验码:从摄像头地址字节开始到命令参数结束部分数据的CRC校验码。
校验码错误的报文作为无效报文丢弃。
CRC校验码计算公式:
C语言算法代码如下:
static const unsigned short crc_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
};
unsigned short cal_crc(unsigned char *ptr, unsigned short len)
{
unsigned short crc;
unsigned char da;
crc=0;
while(len--!=0) {
da=(unsigned char) (crc/256); /* 以8位二进制数的形式暂存CRC的高8位*/
crc<<=8; /* 左移8位,相当于CRC的低8位乘以*/
crc^=crc_ta[da^*ptr]; /* 高8位和当前字节相加后再查表求CRC ,再加上以前的CRC */
ptr++;
}
return(crc);
}
状态:1字节的状态字节,反映了摄像头的当前状态
2、具体命令介绍
1、测试摄像头
命令类型:0x01
命令长度:0x0002
命令参数:0x55aa
返回:
数据长度:0x0002
数据内容:0xaa55
举例:
发送到摄像头:90 eb 01 01 02 00 55 aa 00 00
返回:90 eb 01 01 02 00 aa 55 00 00
2、拍照并传输图像数据
命令类型:0x02
命令长度:0x0002
命令参数:字节1代表图像的分辨率,取值范围见下表
字节2 代表图像的压缩比,取值范围0-4,共5个等级,0时压缩比最小,图像效果最好。
返回:
注意:该上行报文取消了摄像头状态字节,该字节被图象长度的第三字节取代,该字节和数据长度两字节一起形成一个三字节的数据长度。
数据长度:压缩后图象数据的大小
数据内容:压缩后的完整jpeg数据
举例:
命令
90 eb 01 02 02 00 05 01 00 00
其中90eb 为包头,01 摄象头id, 02为拍照命令,0200 为参数长度,05为分辨率,01为压缩比,0000 为crc16。
返回拍照数据
90 eb 01 02 04 23 06 ff d8 ……..
其中的04 23 06三个字节代表照片的数据长度是394275字节,后面跟的数据。
3、设置对比度
命令类型:0x03
命令长度:0x0001
命令参数:对比度大小,对比度值以0x80为中间值上下波动。
返回:
状态字节:00
数据长度:0x0001
数据内容:设定的对比度值
4、设置亮度
命令类型:0x04
命令长度:0x0001
命令参数:亮度大小,亮度值以0x80为中间值上下波动。
返回:
状态字节:00
数据长度:0x0001
数据内容:设定的亮度值
5、拍照
命令类型:0x05
命令长度:0x0002
命令参数:字节1代表图像的分辨率,取值范围见上表
字节2 代表图像的压缩比,取值范围0-4,共5个等级,0时压缩比最小,图像效果最好。
返回:
状态字节:D7=1;标识图像数据大于64K
数据长度:0x0004
数据内容:4字节压缩后图象数据的大小
6、传输图像数据
命令类型:0x06
命令长度:0x0000
命令参数:无
返回:
状态字节:D7=1;标识图像数据大于64K,需要紧跟一个获取后续数据的报文,才可以取得完整的图象数据
数据长度:压缩后图象数据的大小
数据内容:压缩后的完整jpeg数据
7、红外灯控制
命令类型:0x08
命令长度:0x0001
命令参数:红外灯开关0x33 =打开0xCC =关闭
返回:
数据长度:0x0001
数据内容:红外灯开关值
8、修改波特率参数
命令类型:0x0a
命令长度:0x0001
命令参数:01 = 4800
02= 9600
03= 19200
04= 19200
05= 57600
06= 57600
返回:无
例:需要设置9600的波特率,命令如下:90 EB ID 0A 01 00 02 CRC1 CRC2 其它的波特率需要定制,无特别说明默认的波特率是57600,该命令修改后的波特率不会被保存,重新上电以后仍然回到原来的波特率。
9、修改波特率参数并保存
命令类型:0x0b
命令长度:0x0002
命令参数:01 = 4800
02 = 9600
03 = 19200
05 = 57600
注意:能修改4种拨特率,波特率为其他的波特率时,是不能修改波特率的。
其它的波特率需要定制,无特别说明默认的波特率是57600
返回:无
例:需要设置9600的波特率,命令如下:90EB ID 0B 02 00 02 02 CRC1 CRC2 其它的波特率需要定制,无特别说明默认的波特率是57600
该命令修改后的波特率会被保存,重新上电后使用新的波特率。
10、修改摄像头ID标识
命令类型:0x0d
命令长度:0x0001
命令参数:新的ID标识号,可以取值范围为1-255
返回:
数据长度:0x0001
数据内容:新的ID号
例:需要设置ID=2时,命令如下:90 EB原来ID号0D 01 00 02 CRC1 CRC2
11、拍照并传输黑白图像数据
命令类型:0x12
命令长度:0x0002
命令参数:字节1代表图像的分辨率,取值范围见下表
字节2 代表图像的压缩比,取值范围0-4,共5个等级,0时压缩比最小,图像效果最好。
返回:
注意:该上行报文取消了摄像头状态字节,该字节被图象长度的第三字节取代,该字节和数据长度两字节一起形成一个三字节的数据长度。
数据长度:压缩后图象数据的大小
数据内容:压缩后的完整jpeg数据
举例:
90 eb 01 02 04 23 06 02 00 00
其中的04 23 06三个字节代表数据长度394275字节的数据长度
12、分包传输图像数据时请求拍照命令
命令类型:0x30
命令长度:0x0000
命令参数:无
返回:拍照成功后返回图像数据的大小,一共4个字节,低字节在前。
数据长度:0x0005
例:需要拍照时,命令如下:90 EB ID号30 00 00 CRC1 CRC2
返回:90 EB ID号30 07 00 状态字节LEN1 LEN2 LEN3 LEN4 PLEN1 1PLEN2 CRC1 CRC2
比如命令为
90 eb 01 30 00 00 00 00
返回
90 EB 01 30 07 00 00 79 36 00 00 1C 00 72 4E
其中0700 为字节长度,00为状态字节,79 36 00 00为照片数据大小,1C 00 为包的数目,72 4E 为CRC.
13、请求按分包传输图像数据
命令类型:0x31
命令长度:0x0002
命令参数:请求的图像数据包号,占两个字节,最大可达65536个数据包
返回:返回指定包的图像数据的大小
数据长度:
数据内容:图像数据
例:请求包号1的命令如下:90 EB ID号31 02 00 01 00 CRC1 CRC2
返回:90 EB ID号31 命令长度 1 命令长度 2 状态字节包号L 包号H 数据CRC1 CRC2
返回的命令长度=指定包数据+包号2字节+状态1字节,如果不是最后一个包,包数据大小就是包长度。
按分包传输图像数据时,必须先发送分包拍照命令(0x30),拍照成功后必须从0包顺序传递,不可以随机传送任意包号的数据。
14、设置分包传输图像数据时的包大小,默认是512字节
命令类型:0x32
命令长度:0x0002
命令参数:数据包大小,占两个字节,包大小必须是128的整数倍,如128 256 512 1024 2048等
返回:返回指定包的图像数据的大小
数据长度:0x0003
数据内容:新的数据包大小
例:设定512包的命令如下: 90 EB ID号32 02 00 00 02 CRC1 CRC2
返回: 90 EB ID号32 03 00 STA 00 02 CRC1 CRC2
15、设置分包拍照的默认图像分辨率
命令类型:0x34
命令长度:0x0001
命令参数:图像分辨率代码,见下表
返回:返回指定包的图像数据的大小
数据长度:0x0002
数据内容:新的数据包大小
例:设定640×480的命令如下:90 EB ID号34 01 00 05 CRC1 CRC2
返回:90 EB ID号34 02 00 STA 05 CRC1 CRC2
图示2:分包传输时一幅完整图片采集流程1
注意:此流程仅供参考,设计中应包含但不限于如下流程,即对一下采集流程兼容。