3 S3C44B0X与M12模块的接口程序设计
接收终端使用S3C44B0X的COM0口向M12模块发出控制指令和接收定位信息。M12模块支持Motorola二进制格式和NMEA0183格式两种的数据输出模式。在Motorola二进制模式下,M12以9600 b/s的速率输出数据和接收指令;在NMEA0183,M12以4800 b/s的速率输出数据和接收指令。默认状态下,M12模块工作在Motorola二进制模式下。为了获取更高的数据传输速度,本研究使用M12模块默认的工作模式,即Motorola二进制模式。在该模式下,串行数据传输格式为:8位数据位,1位停止位,无奇偶校验和硬件流控制。
S3C44B0X以通过向M12发送AT指令的方式对其进行控制。根据Motorola GPS Products-Oncore User'sGuide所列举的内容,Motorola的AT I/O指令一共有69条,其中M12模块所支持的指令有51条。利用这些指令可以很方便的对M12模块进行日期时问设定、自定义坐标设定和定位信息读取等操作。在接收终端中,只需要读取M12模块的定位信息,因此程序中只用到51条指令中的1条指令:
@@EqmC<CR><LF>
该指令用于控制M12模块输出定位信息。其中“@@”是I/O指令的前缀;“Eq”是指令的关键字;“m”是M12模块输出(响应)信息模式选择,其数值可以是0~255之间的整数,当“m”为0时,响应信息只输出一次,当“m”为1时,响应信息每秒钟输出一次,当“m”为2时,响应信息每2 s输出一次,如此类推,当“m”为255时,响应信息每255 s输出一次;“C”是指令的校验和(Checksum)数据;“<CR>”是回车符;“<LF>”是换行符。为了便于采集定位数据,将“m”的数值设置为0,使M12模块每接收一次指令就回复一次定位数据。
M12模块在默认状态下只能接受以Motorola二进制形式输入的指令。所谓的Motorola二进制形式是指将指令的前缀、关键字和后缀(回车和换行)变换成相应的ASCII码后,加上模式“m”与校验和“C”组合成的二进制指令代码。本研究中所用到的“@@EqmC”指令格式转换如下:
Message format:@@EqmC<CR><LF>
Hexadecimal:40 40 45 71 00 34 0D 0A
其中,校验和“C”是指“E”、“q”和“m”三个的校验和,即0x45、0x71和0x00之间的校验和(将0x45和0x71按位异或的结果再和0x00进行按位异或),结果为0x34。输入指令时,只需要按照9600 b/s、8位数据位、1位停止位、无奇偶校验和硬件流控制的串口格式,将0x40、0x40、0x45、0x71、0x00、0x34、0x0D和0x0A八个数从M12模块的串口连续输入进去即可,M12模块在接收到其可识别的指令之后会在1 s之内做出响应。
在接收和识别指令“@@EqmC”之后,M12模块在接收到正常的GPS卫星信号时会以相同的串口数据格式和速率输出以下格式的定位信息:
@@Eq,mm,dd,YY,hh,mm,ss,dd,mm.mmmm,n,ddd,
mm.mmmm,w,shhhh.h,sss.s,h,m,t,dd.d,nn,rrrr,aa,CC<CR><LF>
该信息是按照ASCII码的形式输出的,每段信息均以逗号相隔。根据Motorola GPS Products-Oncore User'sGuide对于该信息的解释,该信息按照所描述的内容可以拆分成7大部分,其拆分示意格式如下:
@@Eq,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>
其中,第1部分信息为日期信息。“mm”是指月,数值为01~12;“dd”是指日,数值为01~31;“yy”是指年,数值为98~18。
第2部分信息是UTC(Universal Coordinated Time)时间信息。其中,“hh”为时,数值为00~23;“mh”为分,数值为00~59;“s”是秒,数值为00~60。
第3部分信息是纬度信息。其中,“dd”是度,数值为00~90;“mm.mmmm”是分,数值为00.0000~59.9999;n为方向,他有两个取值,一是“N”,代表北纬,二是“S”代表南纬。
第4部分信息是经度信息。其中,“ddd”是度,数值为000~180;“mm.mmmm”是分,数值为00.0000~59.9999;w为方向,他有两个取值,一是“w”,代表西经,二是“E”代表东经。
第5部分信息是海拔高度。其中,“s”是符号,有“+”和“-”两个取值;“hhhh.h”是以米为单位的高度数据。海拔高度信息的数值范围为:-1000.0~+18000.0。
第6部分信息是速度信息。其中“sss.s”是以节为单位的速度数据,其数值为000.0~999.9;“hhh.h”为以度为单位前进方位角数据,其数值为000.0~359.9。