一、GM65 简介
GM65 条码识读模块,一款性能优良的扫描引擎,不仅能够轻松读取各类一维条码,而且可以高速读取二维条码,对线性条形码具有非常高的扫描速率,针对纸质条码及显示屏上的条码,也都能轻松扫描;GM65 条码识读模块是在图像智能识别算法及在此基础上开发出先进的条码解码算法,可以非常容易且准确地识读条码符号,极大的简化了条码识读产品的开发难度。GM65 是建立在符合最苛刻的扫描要求,提供在完全黑暗的环境,以及过大的温度范围内相一致的扫描性能。
部分类型的码没有默认开启,可以扫描手册相应的设置码开启全码识别。
可扫描的码和默认开启可读的码,如下图
二、通讯接口
GM65 识读模块提供 TTL 串行通讯接口与主机进行通讯连接。经由通讯接口,可以接收识读数据、对识读模块发出指令进行控制,以及更改识读模块的功能参数等。模块可以设置成 串行通讯接口/USB HID 接口/USB 虚拟串口
三、串行通讯接口
3.1 使用 USB转TLL模块 将 GM65识读模块 连接到电脑 USB 口上
3.2 使用GM65识读模块扫描“串口输出”设置码,将GM65识读模块设置为串口输出。注意扫描距离,可适当离远一些,差不多50cm左右,距离太近会识别不了二维码,扫描成功会有 ‘叮’ 提示音
3.3 打开串口助手,设置波特率 9600(默认)8位数据 1位停止 无校验,再打开USB转TTL工具的端口
然后使用GM65识读模块 扫描QR Code /Codabar类型二维码/条码,串口助手测可以收到对应的数据信息
“QR Code测试码”传送门
“Codeabar测试码”传送门
四、USB 虚拟串口
4.1 当识读模块与主机使用 USB 线连接时,可通过扫描“USB虚拟串口”设置码将识读模块配置成虚拟串口输出模式
“设置虚拟串口码”传送门
4.2 设置成功后可以在设备管理器找到该设备端口,WIN 10及以上的系统不需要用户自己安装驱动,Windows XP ~ Windows 7 x86 & x64 等系统则需要用户手动安装虚拟串口驱动。驱动文件及安装指导手册等资料可以留言获取
USB 虚拟串口也可以按照本文 3.3 章节测试, 注意需打开的是 USB虚拟串口端口
五、串口命令
用户可从主机发送串口指令对识读模块进行设置。识读模块与主机设备间必须在通讯参数配置完全匹配时才能实现正常通讯。识读模块默认的串行通讯参数:波特率 9600bps,无校验,8 位数据位,1 位停止位,无流控。
5.1 CRC 检验
注意串口命令需要 CRC 检验, 计算方法 :CRC_CCITT 校验值(2 bytes)。计算的范围:Types、Lens、Address、Datas计算的方法为 CRC_CCITT,特征多项式:X16+X12+X5+1,即多项式系数为 0x1021,初始值为全 0,对于单个字节来说最高位先计算,不需要取反直接输出。C 的参考代码如下:
unsigned int crc_cal_by_bit(unsigned char* ptr, unsigned int len)
{unsigned int crc = 0; while(len-- != 0)
{
for(unsigned char i = 0x80; i != 0; i /= 2)
{crc *= 2;
if((crc&0x10000) !=0) //上一位 CRC 乘 2 后,若首位是 1,则除以 0x11021
crc ^= 0x11021;
if((*ptr&i) != 0) //如果本位是 1,那么 CRC = 上一位的 CRC + 本位/CRC_CCITT
crc ^= 0x1021;
}
ptr++;
}
注:当用户不需要 CRC 校验功能时,可在 CRC 字节处填写 0xAB 0xCD,免校验
5.2 读标志位操作
对于设备标志位的读操作,最多可一次读取 256 个字节的标志位,注意命令为十六进制,命令格式:
输入:{Head1} {Types} {Lens} {Address} {Datas} {CRC}
其中 Head1 :0x7E 0x00(2 bytes)
Types :0x07(1 byte)
Lens :0x01(1 byte)
Address :0x0000~0x00FF(2 bytes)表示要读取的标志位的起始地址。
Datas :0x00~0xFF(1 byte) 表示要连续读取的标志位的字节数。
CRC :CRC_CCITT 校验值(2 bytes)
返回:{Head2} {Types} {Lens} {Datas} {CRC}
其中 Head2 :0x02 0x00
Types :0x00(读成功)
Lens :表示上传的 Datas 的字节个数
Datas :0x00~0xFF 表示读上来的数据
CRC : CRC_CCITT 校验值
示例:从标志位0x002A中读取数据,判断波特率,SS 检验位,可填 0xAB 0xCD,免校验
发送格式:7E 00 07 01 00 2A 02 SS SS
接收成功后返回:02 00 00 02 39 01 SS SS
5.2 写标志位操作
对于设备标志位的写操作最多可一次写入 255 个字节的标志位。写标志操作修改的内容在断电后会丢失,若需要掉电后保持,则需要进行将标志位保存带内部Flash的操作。注意命令为十六进制,命令格式:
输入:{Head1} {Types} {Lens} {Address} {Datas} {CRC}
其中 Head1 :0x7E 0x00(2 bytes)
Types :0x08(1 byte)
Lens :0x00~0xFF(1 byte) 表示该命令中 Datas 字段的字节数,同时也表示要进行连续
写操作的次数
Address :0x0000~0xFFFF(2 bytes) 表示要写入的标志位的起始地址
Datas :0x000xFF(1255 bytes) 表示写入标志位的数据,配置多个标志位时,必须按照
地址从低到高的顺序填充数据域。
CRC :CRC_CCITT 校验值(2 bytes)
返回:{Head2} {Types} {Lens} {Datas} {CRC}
1.写成功
其中 Head2 :0x02 0x00
Types :0x00(写成功)
Lens :0x01
Datas :0x00
CRC :CRC_CCITT 校验值(0x33 0x31)
2.下发 CRC 校验失败
无回应命令
3.未知命令应答
无回应命令
示例:设置模块为命令触发模式,照明灯常亮,普通瞄准,启动静音,开启解码成功LED提示,SS 检验位,可填 0xAB 0xCD,免校验
发送格式:7E 00 08 01 00 00 99 SS SS
接收成功后返回: 02 00 01 00 SS SS
示例:设置模块为感应模式,照明灯关闭,瞄准常亮,关闭静音,关闭解码成功LED提示,SS 检验位,可填 0xAB 0xCD,免校验
发送格式:7E 00 08 01 00 00 63 SS SS
接收成功后返回: 02 00 01 00 SS SS
标志位保存到内部 Flash 指令,若要将设备标志位列表保存到内部 Flash 中则需要发送保存命令。
注意:设备无法单独保存单个标志位配置,必须同时保持整个列表。
输入:{Head1} {Types} {Lens} {Address} {Datas} {CRC}
其中 Head1 :0x7E 0x00
Types :0x09
Lens :0x01
Address :0x0000
Datas :0x00
CRC :CRC_CCITT 校验值(0xDE 0xC8)
返回:{Head2} {Types} {Lens} {Datas} {CRC}
1.保存成功
其中 Head2 :0x02 0x00
Types :0x00(写成功)
Lens :0x01
Datas :0x00
CRC :CRC_CCITT 校验值(0x33 0x31)
2.下发 CRC 校验失败
无回应命令
3.未知命令应答
无回应命令