调试串口首先要搞清楚串口的TX和RX端。
TX为输出,RX为输入
TXD 发送数据 Transmit(tx) Data 的简写形式
RXD 接收数据 Receive(rx) Data 的简写形式
模块连接手机主板的时候,模块是作为输入端的,所以是模块的TX连接主板串口的RX,模块的RX连接主板的TX。
搞清楚这个,后面遇到数据发送接收异常的时候好排查是模块问题还是主板问题。
调试模块首先要确认模块自身接收数据和对发送的指令响应是否正常。
1 确认模块是否上电,找驱动和硬件,一般是通过GPIO控制模块上电下电
2 确认模块上电的情况下,焊模块的串口TX和RX线,连接电脑端的串口工具,选择对应的波特率,确认模块能够正常输出报文。
注意
如果确认上电,电脑端的串口工具收不到数据,可以模块的TX连接示波器看是否有电平变化。
如果模块有数据发送,串口连接电脑数据不是预期数据,排查是否波特率不匹配。
2 手机端安装串口工具.apk,选择串口节点和波特率,确认是否有报文输出
注意Selinux权限和串口节点权限,可以看下团队笔记
串口功能验证调试
如果模块输出正常,手机端未正常输出, 请找硬件驱动确认。
1)
模块到手机端的TX和RX线是否连接正常?
焊主板端TX和RX线,短接TX和RX,使用串口工具APK发送,看是否可以正常接收,如果可以正常接收,说明主板端通讯正常。
找硬件确认模块和主板的连接稳定性
2)目前项目遇到一种情况,在未短接主板端TX和RX的情况下,串口工具.apk发送数据,和接收数据一致。排查发现,是模块的TX接到了主板的TX。
3 调试过程中如果遇到 电脑端的串口工具可以收到预期数据,手机端数据非预期,或者无法收到,可以排查是否有多个线程应用在读取串口数据。
4 串口大数据输入的时候需要注意串口稳定性,目前展锐和MTK平台在调试RTK定位模块的时候当发送串口数据超过1K的时候出现了数据丢失。需要打开DMA通道,可以找驱动确认。
另外我们可以通过短接主板端的TX和RX,模拟收发确认发送和接收的数据是否一致,验证串口的稳定性。
5 有时候需要发送指令给模块进行交互,我们会发现指令发送不成功,可以先确认指令是否可以通过电脑端工具直接发送给模块交互成功。
电脑端工具的TX连接模块的RX,电脑端工具RX连接模块的TX,模拟发送指令。
如果发送成功,可以在用电脑端的工具的TX和RX均连接模块的RX,接收选择十六进制,看发送的指令的
十六
进制,比对我们应用或者C等代码中发送指令的
十六
进制是否一致。
上述发现十六进制相同的时候,如果发送代码指令发送还是不成功,确实一下串口节点打开方式是否是只读模式。
- state->fd = open(GPS_CHANNEL_NAME,
O_RDONLY
); // support poll behavior
+ state->fd = open(GPS_CHANNEL_NAME, O_RDWR | O_NOCTTY | O_NONBLOCK); // support poll behavior
6 有种情况需要注意,有的模块上电后需要等待一段时间发送串口指令。