ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

u-blox一直输出$GxTXT且无法定位?串口日志排查指南

u-blox一直输出$GxTXT且无法定位?串口日志排查指南 串口助手打开的那一刻屏幕上刷刷刷滚出来的全是$GNTXT开头的文本等了一分多钟也没见到一条$GPGGA或者$GNRMC更别说经纬度了。这个场景我前前后后遇到过七八次自己也栽过一次第一反应基本都是模块是不是让我焊坏了或者固件是不是刷死了。这里先把结论放在前面$GxTXT是NMEA协议里的文本报文u-blox接收机拿它来打印启动日志、状态切换和部分警告它既不是定位数据也不是严格意义上的故障码。这篇就以u-blox一直输出$GxTXT且无法定位为线索把整套排查思路写透包括TXT内容怎么读、供电天线怎么查、u-center实测怎么做、NMEA输出配置怎么救给调单片机、ROS小车、飞控地面站、车载导航这类项目时被GNSS模块折磨的朋友一个可以直接照着排的顺序。1. 串口里只有一堆$GxTXT先别急着认为是模块坏了先说一个很容易被忽略的事实$GxTXT里的x不是乱码而是NMEA的Talker ID。$GNTXT代表多星座GNSS引擎在输出$GPTXT则一般代表GPS单系统模式。也就是说光是看到$GNTXT这个前缀就能判断接收机内部起码是活着的而且串口的波形、电平、波特率大概率也没问题。如果真的是硬件彻底挂了串口上往往是啥都没有而不是有条有理地吐文本。一直输出$GxTXT这句话在实际项目里其实对应好几种完全不同的现场我梳理了一下至少有这么几类现象特征串口上的表现最可能的直接原因A. 启动文本周期性反复出现每隔几秒重复出现ROM CORE、PROTVER等启动文本接收机反复复位重点查供电、复位脚、DTRB. 开机只出现一次TXT之后串口就沉默了启动时几条TXT之后再也没有任何NMEA语句消息配置、波特率切换、输出协议被改过C. 定期出现未定位/定位成功这类状态TXT一直出现未定位直到某刻变成定位成功收星不足属于接收机正常的状态提示D. 特定波特率下才能看到TXT换个波特率全是乱码9600下偶尔有TXT38400/115200下是乱码模块被配置成了别的波特率启动后又切换了E. 反复出现天线相关的TXTAUTOANTENNA OPEN / AUTOANTENNA SHORT有源天线馈电、馈线或天线本身出问题排查前先把这几种情况对号入座很重要因为它们的解决方向完全不同。有人拿着现象B去换天线折腾半天没用有人拿现象C当成故障关掉TXT输出后以为解决了结果定位依然没有纯属自己骗自己。我自己的习惯是拿到一个异常串口输出先不急着搜代码而是把串口数据原样存下来看几十秒内的内容分布。是同一份文本反复出现还是不同文本一条一条来这个观察几十秒就能完成却能直接决定下一步是查电还是查天线还是查配置。2. 把$GxTXT当成一份启动日志来读u-blox想告诉你什么$GxTXT的NMEA结构长这样$GNTXT,总数,序号,文本标识,文本内容*校验和。前两个字段表示这条文本被分成了几段、当前是第几段文本标识在u-blox里通常是02最后面的才是真正有用的内容。以一块典型的NEO-M8N为例正常上电后会在串口上依次打出类似这样的TXT$GNTXT,01,01,02,ROM CORE 1.00 (59842)*xx $GNTXT,01,01,02,PROTVER 14.00*xx $GNTXT,01,01,02,GNSS OTP programmed*xx $GNTXT,01,01,02,FIS flash programmed*xx $GNTXT,01,01,02,UPID 0000*xx例子里的*xx是校验位我这里懒得去算实际串口上会显示完整值。很多刚接触模块的人看到这几个字符串会慌其实这是非常标准的启动自检输出是好事。真正要注意的是下面几种文本EEPROM default接收机发现掉电保存区里没有有效配置正在用出厂默认值跑。这不影响定位但如果之前重配过波特率、卫星系统那说明配置没写进去。AUTOANTENNA OPEN接收机检测到天线断路常见于使用有源天线但没给天线供电或者IPEX座子虚焊。AUTOANTENNA SHORT天线端短路常见于馈线破损、天线焊盘连锡、SMA头中心针与外壳短路。ANTSTATUS OK天线检测正常可以排除天线馈电问题。读到这一层$GxTXT就不是噪音了而是接收机自己写的诊断日志。上电启动文本只出现一次说明芯片复位和启动过程是完整的反复出现同样一段启动文本说明它在不断重启出现OPEN、SHORT说明天线链路上有实打实的物理问题。这里还要多提一句市面上大量标着ublox兼容的模块比如常见的ATGM336H、ATGM332D系列用的其实不是u-blox自家芯片而是国产的AT6558方案但引脚和NMEA输出习惯都照着u-blox兼容设计。这类模块有个典型行为就是会通过$GNTXT直接输出中文状态$GNTXT,01,01,02,未定位*xx $GNTXT,01,01,02,定位成功*xx如果你在串口上看到的是中文TXT先别用u-blox官方文档里的指令集去硬套很多配置寄存器是不通用的。这时候的一直输出$GxTXT大概率是模块在告诉你我现在真的没有定位成功。这不是故障而是真实状态。3. 硬件这一关不过配置啥都白搭供电、天线与串口很多无法定位的问题到最后都不是软件配置而是硬件基础没打牢。这一节按优先级排序先把最常见的坑一个个过。3.1 供电不稳导致启动文本反复刷屏如果现象A成立也就是ROM CORE、PROTVER这些启动文本每隔几秒就重复出现第一嫌疑不是天线而是供电。u-blox M8系列在捕星阶段峰值电流能到六七十毫安如果再带一个有源天线整条链路电流可能逼近小一百毫安。很多开发板上那个3.3V是从USB转串口芯片或者主控板上引出来的压降一大模块瞬间掉电接着又复位于是启动日志一遍一遍重放。处理办法很朴素用独立的3.3V稳压器给模块供电不要用MCU的3.3V输出口直接带尤其不要和舵机、电机、4G模组共电源。在模块的VCC引脚旁边加一个100nF高频退耦电容再加一个10uF左右的钽电容或者陶瓷电容做能量缓冲这是数据手册上白纸黑字要求的基础布置很多人却跳过了。如果模块的RESET_N被接到了USB转串口芯片的DTR上还会出现一个经典假象串口工具每次打开端口、切换波特率、甚至某些软件周期性翻转DTR信号时模块就被复位一次串口上就看到一直有TXT在刷新。这时候把DTR/RTS线断开只在串口工具里勾选关闭DTR/RTS控制很多刷新问题直接消失。3.2 天线的天空视野比你想的更苛刻导航模块定位的前提是能够收到足够多的卫星信号而卫星信号极其微弱任何遮挡、屏蔽、干扰都会让接收机状态停留在未定位。我见过最多的失败场景就是测试者把模块放在室内桌子正中央周边全是混凝土墙和金属机箱然后干等半小时。无源陶瓷天线必须要有相对开阔的天空视野严格来说最好能放在窗边甚至室外。更重要的是陶瓷天线底下需要一个完整的金属地平面很多小模块板载天线、或者直接买来的裸陶瓷天线如果下面没有铜箔做大面积地增益会掉得很难看。我实测过同一块陶瓷天线平放在木质桌面上时信噪比只有20dBHz上下放到一片铜箔上方之后立刻稳定到35dBHz以上差别非常大。如果用的是有源天线比如IPEX接口的GPS天线、或者吸盘式外置天线就必须确认天线供电有没有送到。有些开发板默认没给有源天线前置LNA供电接收机的天线检测引脚就会报AUTOANTENNA OPEN。u-blox模块的ANT_引脚本身可以配置为天线供电输出但默认配置不一定开供电电压和限流也可能不对。调试时先用万用表量一下天线座中心针有没有电有源天线常见的供电是3.3V到5V视具体天线型号而定。3.3 串口接线和波特率切换会造成定位消息人间蒸发默认情况下u-blox模块的UART波特率是9600NMEA语句按固定周期输出。但很多二手模块、拆机模块里保存的是前一个用户的配置可能被改成了38400、57600或者115200。你如果固定在9600下监听会看到启动时第一条TXT还能勉强对上等模块运行到用户配置切换点输出波特率一变后面全是乱码表现就是只有TXT没有定位语句。遇到这种情况最笨也最有效的做法是从9600开始把波特率依次换成38400、57600、115200每个波特率各观察十几秒。不要嫌麻烦这一步能把一半以上的没有定位数据问题当场解决。另外串口电平也值得确认一下模块的TX/RX是3.3V电平最好用3.3V逻辑的USB转串口板。用5V TTL电平直接怼轻则通信不稳重则损伤模块。还有一招用逻辑分析仪或者示波器直接看模块TX引脚有没有波形翻转。如果能抓到规律性脉冲基本说明数据在物理层是通的如果完全是一条平线那问题才真正在模块自身。4. 用u-center做一次收星与解算的隔离实验硬件基础没有问题之后就要把定位失败拆成两个子问题接收机能不能收到卫星以及收到卫星后为什么解算不出来。这两个问题的排查方向截然不同强烈建议用官方工具u-center来做一次隔离实验。4.1 用u-center看天空图先判断射频链路是否健康把模块通过USB转串口接到电脑打开u-center在Receiver菜单里选择对应串口号和波特率。连接成功后打开View菜单里的Text Messages窗口这时候刚才那些$GxTXT会被解读成可读文本比用串口助手看原始帧舒服得多。紧接着打开View里的Skyplot或者GNSS View这个窗口会画出当前接收到的卫星位置和信噪比柱状图。这一步是整个排查里最关键的一步如果天空图上有不少卫星且信噪比普遍在30dBHz以上说明射频链路、天线、LNA都正常问题出在解算侧。需要看历书、星历、时间和星座配置。如果天空图上空空如也或者只有一两颗卫星且信噪比低于20dBHz那射频链路肯定有毛病这时候不管怎么改软件配置都不可能定位。回到天线、馈线、干扰源的方向去查。如果能看到卫星但信噪比忽高忽低怀疑是附近有干扰源。USB3.0集线器、开关电源、4G模块天线、甚至某些显示器的排线都会对GPS频段产生干扰。把天线挪远一点往往立竿见影。这一步做完了你就能把是否收到卫星这个变量单独隔离开不用再靠猜。4.2 收到了卫星却不出定位结果问题在解算侧如果天空图正常卫星数量也不少接收机却始终不报告定位接下来按顺序查三件事。第一冷启动没给足时间。u-blox模块在没有星历、没有RTC后备电池的情况下冷启动需要逐个从卫星信号里解调星历数据这个数据速率很慢理想开阔环境下可能要几十秒到数分钟。如果上一秒刚上电就急着问怎么还没定位往往只是耐心不够。在u-center底部状态栏可以看到当前的定位状态区分No Fix、2D Fix、3D Fix。第二星座配置可能被改过。很多模块默认支持GPS北斗或者GPSGLONASS但如果前一段配置只保留了GPS在特定时间段、特定地区GPS卫星几何分布不佳就可能出现有星但长期不固定的情况。在u-center的Configuration View里找到GNSS配置页把接收机支持的星座全部勾上再保存配置。这里要注意不同型号固件支持的星座组合不同老一些的M8N型号对不同星座组合有限制具体看芯片的协议文档。第三可以用UBX-MON-STATUS或者UBX-MON-HW这类二进制监控报文看接收机内部状态。比如MON-HW里有干扰指示位如果数值持续偏高说明天线附近存在同频干扰MON-STATUS里的复位计数如果一直在涨说明接收机反复在内部重启。这些在u-center的Packet Console里能看到原始帧虽然新人看到十六进制会头大但对照协议文档逐字段翻译几次收获比瞎改配置大得多。4.3 附加实验拔掉天线和接上天线的输出对比u-center里还有一个非常实用的定性实验把天线拔掉观察接收机行为再接上天线再观察一次。天线断开时接收机收不到任何卫星信号如果它还在按周期输出GGA/RMC这些语句里的定位状态会是V无效经纬度字段是空的。接回天线后如果状态在几十秒内从V变成A说明硬件链路和解算引擎都没问题。这个小实验还能帮你在有源天线馈电异常和模块本身故障之间做区分。拔天线后如果串口里冒出AUTOANTENNA OPEN的TXT那模块的天线检测功能是正常的问题出在天线端如果接回天线后依然没有任何反应再考虑是不是SMA座、IPEX连接器、馈线或者天线本身坏了。5. 定位消息怎么会人间蒸发TXT之外还有哪些NMEA配置排到这一步接收机明明活着卫星也能收到却仍然只有TXT没有GGA/RMC那就得检查输出消息配置了。很多人把没有定位理解为没有任何定位数据输出其实这两件事要分开看。5.1 检查你用的解析器是不是只认$GPRMC在GPS单系统时代NMEA里最常见的是$GPRMC。但现在模块普遍是多星座NMEA 4.0以上协议会用$GNRMC、$GNGGA这类GN前缀来表示多星座组合输出。很多教程里的解析代码写死了只认$GPRMC开头的帧实际串口里明明有定位数据程序却视而不见最后表现为只能看到TXT其他什么都没有。这种问题在串口助手肉眼观察时尤其容易迷惑人因为你在原始串口里确实能看到一堆GNGGA但代码里没打印出来。排查方法很简单用串口助手直接看原始数据流如果能看到$GNGGA、$GNRMC、$GPGSV、$GLGSV这些语句说明定位数据根本没丢丢的是解析逻辑。要么把解析器改成支持GN前缀要么在u-center里把NMEA协议版本切到2.3这种老版本让模块用GP前缀输出两种办法各有取舍但至少能定位问题在哪一层。5.2 用u-center调整NMEA消息速率让GGA/RMC回来如果原始数据流里确实只有TXT没有GGA/RMC那就是消息输出被配置成了关闭状态。u-blox的NMEA语句输出是逐个消息单独配置的在u-center的Configuration View里找到MSG配置页把NMEA Standard下的GGA、GLL、GSA、GSV、RMC、VTG这些语句对当前使用的UART口的Rate设成1也就是每个导航周期输出一次。其余不用的语句设成0省带宽也省解析负担。改完之后别急着断电把配置保存进模块的掉电存储区不然重启后一切恢复原样。u-center里一般是在配置页做好设置后通过CFG-CFG相关的接口发起保存命令。如果嫌麻烦也可以直接给模块恢复出厂默认配置很多情况下出厂默认会把常用的NMEA语句全部打开。不过要提醒一句恢复出厂默认配置是有代价的波特率很可能变回9600之前改过的其他参数比如输出星座组合、动态模式也都会被清掉。操作完之后重新按实际需求配一遍然后保存。5.3 关于关掉TXT输出的正确理解很多人觉得$GxTXT碍眼想在代码或者模块配置里把它关掉。对真正的u-blox模块来说TXT输出受INF信息控制在u-center的Configuration View里找到INF配置页把NMEA通道上的Notice、Warning这类开关关掉$GNTXT就会明显减少甚至消失。这个操作不影响定位只影响诊断信息的可见性。但对ATGM336H这类兼容模块来说中文TXT状态提示是芯片固件写死的没有公开的配置项能彻底关闭只能靠上位机解析层做过滤遇到以$GNTXT开头的行直接跳过。这里要注意一个逻辑陷阱模块输出未定位这个TXT本身就是告诉你当前没有定位成功。把TXT过滤掉只是让日志变干净并不会让模块变成已定位根本问题还是得靠解决收星和解算去处理。6. 一张表结束排查故障现象、根因与处理对照最后把上面这些内容压缩成一张排查对照表遇到问题直接从现象出发不用把整篇文章从头再看一遍。核心现象优先排查项大概率处理方式启动TXT文本反复出现周期固定供电压降、复位脚电平、DTR/RTS控制换独立稳压电源加电容断开DTR复位脚上拉只看到TXT没有GGA/RMC/GSV波特率是否被切换、MSG消息速率、GN前缀解析依次试9600/38400/57600/115200恢复默认配置或改解析器TXT提示AUTOANTENNA OPEN/SHORT有源天线馈电、接线、SMA/IPEX座子检查天线供电与接触换天线、换馈线TXT显示未定位且无中文以外的信息天线视野、卫星信噪比移去开阔处等待冷启动查看GSV确认收星天空图有卫星但始终No Fix星历下载时间、星座配置、时间与位置不连续等待冷启动完成在GNSS配置中启用支持的星座必要时冷复位天空图几乎没有卫星或信噪比很低天线位置、遮挡、干扰源、地平面远离干扰源补充天线地平面换高增益天线这套顺序我建议当成默认流程执行先存日志、读TXT内容再查供电和天线然后接u-center看收星最后才动配置。顺序反过来的话很容易陷入改了配置看不出效果的泥潭。6.1 几个值得长期记住的教训板载天线或者贴片陶瓷天线的高度和位置比很多人想象中敏感。我试过把GPS模块放在金属机箱角落一个卫星都搜不到把天线挪到机箱顶部的开孔位置瞬间收到十颗以上。GNSS天线对天空视野和地平面的要求几乎是刚性的这是射频物理特性决定的不是任何软件能解决的。串口助手里看到重复的TXT时先怀疑DTR/RTS触发了复位再怀疑供电这两个原因占了现象A的大头。我第一次遇到这个问题时折腾了半天以为是模块坏了最后发现是开发板的DTR误接了复位引脚把线一断立刻安静了。国产兼容模块的TXT虽然不是纯正的u-blox输出但未定位这三个字是很有用的状态信号。你可以利用它做测试时的快速判断上电后如果一直输出未定位说明模块正常上电但没有收星输出变成定位成功时基本可以确认定位链路打通了。把这个TXT当成一个免费的状态灯用比接LED还直观。遇到一直输出$GxTXT的局面先把它当成一份日志而不是故障码来读。接收机大概已经尽力告诉你是哪一环出了问题只是它用的是TXT这种不起眼的文本帧而大多数教程从来没教过怎么去看它。把这个习惯养成之后以后再碰到任何诡异的GNSS输出都会从容很多。
返回列表