在开发板调试过程中,若无法获取定位信息,开发者常陷入“排查代码”与“怀疑硬件”的博弈。为了快速打破僵局,最直接的方法是绕过软件逻辑,直接读取底层原始数据,通过解析 NMEA 报文来判定硬件状态。
我们的定位模块挂载在 /dev/ttyS7,可通过以下命令实时监测原始数据流:
cat /dev/ttyS7
根据输出内容,通常可以分为以下三种典型状态:
未定位(无数据)
$GBGGA,,,,,,0,00,,,M,,M,,*74
$GBGSA,A,1,,,,,,,,,,,,,,,,4*14
$GBRMC,,V,,,,,,,,0.0,E,N,V*50
$GBZDA,,,,,00,00*5A
$GBGST,,0.000,0.005,0.005,0.005,2097152,2097152,2097152*7A
• 特征:语句中只有逗号分隔符,没有坐标数值;RMC 状态为 V (Invalid);GGA 状态为 0。
• 场景:设备刚开机,或身处室内、隧道等无信号遮挡环境。
搜星同步(有时间无坐标)
$GBGGA,004748.510,,,,,0,00,,,M,,M,,*61
$GBGSA,A,1,,,,,,,,,,,,,,,,4*14
$GBGSV,2,1,08,37,,,45,4,,,44,1,,,42,10,,,41,1*7F
$GBGSV,2,2,08,23,,,40,7,,,38,3,,,32,2,,,31,1*45
$GBRMC,004748.510,V,,,,,,,,0.0,E,N,V*45
$GBZDA,004748.510,,,,00,00*4F
$GBGST,004748.510,0.000,1622.151,1622.151,51.982,2097152,2097152,2097152*5D
• 特征:出现 UTC 时间,GSV 语句显示有卫星编号及信号强度(SNR),但仍无坐标。 • 场景:天线已接收到卫星信号,正在下载星历 (Ephemeris) 数据。通常需要 30-60 秒稳定信号。
成功定位(数据完整)
$GBGGA,004834.000,2814.4355020,N,11248.7773357,E,1,07,4.26,121.519,M,-15.312,M,,*55
$GBGSA,A,3,10,37,07,01,30,04,23,,,,,,4.81,4.26,2.23,4*03
$GBGSV,3,1,09,10,66,171,41,37,62,124,45,3,55,185,33,7,54,169,38,1*74
$GBGSV,3,2,09,1,45,132,42,2,43,227,31,30,32,234,30,4,27,116,45,1*4A
$GBGSV,3,3,09,23,11,133,40,1*4B
$GBRMC,004834.000,A,2814.4355020,N,11248.7773357,E,0.000,149.43,220426,,,A,U*34
• 特征:坐标数据完整;RMC 状态为 A (Active);GGA 状态为 1 或 2;GSA 显示为 3 (3D 定位)。
• 场景:设备已锁定足够卫星,可提供精确的经纬度、高度和速度。
北斗 NMEA 0183 协议 简要说明
- $GBGGA:定位基本信息,包含 UTC 时间、经纬度坐标、定位质量指示(当前为 0,即未定位)、卫星数量及海拔高度。
- $GBGSA:当前卫星状态及精度因子,包含选用的 2D/3D 模式、参与定位的卫星编号以及 PDOP/HDOP/VDOP 精度强弱度。
- $GBRMC:推荐最简定位资料,集成时间、经纬度、地面速率、航向及日期,状态位
V表示当前数据无效。 - $GBZDA:时间与日期信息,专门输出当前的 UTC 时、分、秒以及日、月、年数据。
- $GBGST:定位标准偏差统计,用于评估定位误差,包含各维度(纬度、经度、高度)的误差标准差估计值。
- $GBGSV: 可视卫星状态。包含当前北斗星座在仰角范围内可见的卫星总数、各卫星的编号、仰角、方位角及信噪比(SNR/C/N0)。由于卫星较多,通常会分多条语句输出。
- $GBVTG: 地面速度信息。包含以真北和磁北为参考的地面航向(Track Good),以及以节(Knots)和公里/小时(km/h)为单位的地面速率。
- $GBGLL: 地理定位信息。包含纬度、经度、UTC 时间及当前定位状态(A=有效,V=无效),比 RMC 更简洁,专注于经纬度。
- $GBGRS: 卫星残差信息。用于计算每个可见卫星的伪距残差,通常配合自主完整性监测(RAIM)使用,以检测定位异常。
- GNGGA, $GNRMC):多系统混合定位。当接收机联合使用北斗、GPS 等多个星座进行定位时,会使用
GN作为前缀输出融合后的结果。 - $GPTXT: 文本传输。用于输出接收机状态的说明性文字,如启动模式、天线状态或软件版本信息。
- $GBS: 卫星故障检测。提供关于预期定位误差的信息,并能识别可能存在故障的特定卫星编号,是高可靠性应用的关键。