文章目录
- 一、NMEA0183协议
- 1、NMEA基本框架·
- 2、常用语句
- 1)GNGGA
- 2)GNGLL
- 3)GNGSA
- 4)GPGSV
- 5)GNRMC
- 6)GNVTG
- 7)GNZDA
- 8)PAIRCLK等
- 二、异或校验和代码
- 1、网址在线计算BCC
- 2、BCC校验和代码
一、NMEA0183协议
NMEA0183协议协议解析,详细 NMEA协议标准参考 http://www.nmea.org/,NMEA详细协议下载链接:链接:https://pan.baidu.com/s/14dkAlVcFhPjCho5t37GRQw ,提取码:uxss 。图1是接收到一包GPS数据,包含30行数据。
1、NMEA基本框架·
以第1行数据为例:$GNGGA,081729.804,,,,,0,0,,,M,,M,,*5F<CR><LF>
$
是起始符,所有的语句都是以$
开始
<CR><LF>
是回车换行符为结束序列,所有的语句都是以<CR><LF>
结束
<CR>
:ASCII 13, \r
<LF>
:ASCII 10, \n
*5F
,*
后面跟的是校验和,其中5F
代表校验和,对$
和*
之间的数据(不包括这两个字符)按字节进行异或运算的结果,以十六进制表示。
2、常用语句
1)GNGGA
以第1行数据为例:$GNGGA,081729.804,,,,,0,0,,,M,,M,,*5F<CR><LF>
。GNGGA的GN
是发送器的标识符,表示是GNSS,定义如下:
发送器 | 标识符 |
---|---|
北斗导航卫星系统(BDS) | BD |
全球定位系统(GPS、SBAS、QZSS) | GP |
全球导航卫星系统(GLONASS) | GL |
全球导航卫星系统(GNSS) | GN |
自定义信息 | P |
GGA
:输出接收机时间、位置及定位相关的数据。
格式:$--GGA,UTCtime,Lat,uLat,Lon,uLon,FS,numSv,HDOP,Msl,uMsl,Sep,uSep,DiffAge,DiffSta*CS<CR><LF>
081729.804
表示UTC时间8h:17min:29.804s,UTC时间格式是hhmmss.sss,北京时间需要在此基础上+8h
。
因为这一包数据是未定位数据,所以有,,,,,
少了四个数据对应经纬度信息。
,0,0
,第一个0表示当前定位不可用或无效,第2个0表示用于定位的卫星数量为0。
,M,,M
,这2个M都是固定字符,高度的单位米。
2)GNGLL
$GNGLL,,,,,081729.804,V,N*6D<CR><LF>
。
同上因为未定位,无经纬度信息,多以有5个,
。
081729.804表示UTC时间同上。
V
和N
均表示数据无效。
6D
表示BCC校验和。
3)GNGSA
$GNGSA,A,1,,,,,,,,,,,,,,,,1*1D<CR><LF>
A
表示自动切换
1
表示定位无效
4)GPGSV
$GPGSV,4,1,13,10,69,178,35,196,64,139,25,194,61,094,,32,53,007,35,1*65<CR><LF>
$GPGSV,4,2,13,25,51,063,28,31,48,279,27,22,38,330,,23,37,158,,1*69<CR><LF>
$GPGSV,4,3,13,26,21,204,,12,19,044,,195,12,154,,29,07,124,,1*5E<CR><LF>
$GPGSV,4,4,13,21,05,290,,1*5B<CR><LF>
4
表示该条GSV语句中有4个参数组。
1
表示该条是第1句,后面有$GPGSV,4,2
、$GPGSV,4,3
、$GPGSV,4,4
。
因为总共卫星数为13>4,所以需要13/4=3余1,也就是需要四个语句。以第一个语句为例,包含了四颗卫星的信息,分别是10,69,178,35
、196,64,139,25
、194,61,094,,
、32,53,007,35
,其中第3组信息中载噪比为空,表示没有跟踪到编号194的卫星。
5)GNRMC
$GNRMC,081729.804,V,,,,,,,111022,,,N,V*21<CR><LF>
081729.804表示UTC时间同上。
V
表示数据无效。
111022表示22年10月11日,数据格式为ddmmyy(先日后月再年)
N所在位是定位模式标志,表示数据无效。
6)GNVTG
$GNVTG,,T,,M,,N,,K,N*32<CR><LF>
对应解析数据即可。T、M、N、K
均是固定字符。
7)GNZDA
$GNZDA,081729.804,11,10,2022,,*42<CR><LF>
081729.804表示UTC时间同上。
11,10,2022
表示日/月/年。
8)PAIRCLK等
P
表示的是自定义消息。
二、异或校验和代码
1、网址在线计算BCC
计算BCC(Block Check Character)校验和的网址:http://www.ip33.com/bcc.html,选择Ascii码作为输入。
验证GPS数据包中第1行数据进行BCC校验计算验证,结果为0x64与数据包中的一致。
2、BCC校验和代码
unsigned char getBcc(unsigned char *data, unsigned int length)
{
unsigned int i;
unsigned char bcc = 0; // Initial value
#if 1
while(length--)
{
bcc ^= *data++;
}
#else
for ( i = 0; i < length; i++ )
{
bcc ^= data[i]; // crc ^= *data;
}
#endif
return bcc;
}
int main(void)
{
unsigned char data[] = "GNGGA,081729.804,,,,,0,0,,,M,,M,,"; //ASCII输入
// unsigned char data[] = {0xFF, 0x0A, 0x0B, 0x0C}; //Hex输入
unsigned char bcc;
bcc = getBcc(data, sizeof(data));
for(unsigned int i = 0; i < sizeof(data); i++) {
printf("data[%d]:%02X\n", i, data[i]);
}
printf("bcc:%02X\n", bcc);
}
BCC校验和代码也为0x5F,结果正确。