|
背景
用户使用DB62模组,通信串口使用UART1,下载口用URAT0,用UART1串口通信出现乱码情况,串口波特率设置115200,ttl直接连到gpio05,GPIO06,共GND,稳压电源供电3.3V
过程
一、客户原理图和PCB射频部分设计
原理图除了pin脚名称没有问题,PCB走线也是没有问题的,重点看一下客户实际板子的焊接和接线情况,也排除了接线问题
二、检查软件配置
固件是客户自己烧录的,首先检查menuconfig 有没有开启at指令,【./build.sh menuconfig】-【SecuritySettings】-【TEE HUKS demosupport】
客户已经开启支持TEE HUKS DEMO AT命令
三、复现客户问题
1、开发板用UART1通信
DB62出场固件AT串口是URAT0 下载SDK之后AT串口是UAR1,通过查看开发板的原理图可知,想用UART1直接选择Standard——“SiHcon Labs Dual CP210x USB- to UAR didre: Standard COM Portl”
要把GPIO5——UART1_TXD;GPIO6——UART1_RXD用杜邦线接上,因为排针这块标注的UART1只是板子的UART1,模组真正的UART1是GPIO5/6
通信正常
2、尝试和客户一样飞线,用USB转TTL接GPIO05 GPIO06 gnd vcc 【因为VDD_IO和VCC已经连接起来,所以不用接】
复现出来通信异常,出现乱码情况
输出乱码通常有两种可能: 1:波特率误差较大 2:串口波形异常
3、此时用示波器测量开发板 GPIO06端口,测量输出的波形,如下图所示是输出乱码时的波形:
可以看到实际的波特率为192.16k bps,而解码时按照正常部件的115200bps来设置,波特率误差大于4%,因此会导致解码结果不正确
顺便测试一下板子上通信正常的UAT1_TX
将板子和 pc 相连,板子端输出字符串“OK”,OK对应的ascii 码值为4f4b ,串口波形为 100111101001011,此时用示波器测量开发板 uart1 tx端口,测量输出的波形,如下图所示是输出“OK”时的波形:
可看到实际波特率为 115.25k
(152500-115200)/115200=0.000434028误差远小于 2%,因此该波特率可接受
四、进一步分析波特率漂移问题
查询资料的时候发现同样用HI3861L芯片的模组有强调
【上电复位 (POR:Power On Reset)期间,GPIO2/GPIO6/GPIO8 不能输入高电平,否则芯片可能出现未知异常,如出现 Flash 被写保护等问题。任何在上电器件可能出现高电平的应用都禁止接入到 GPIO2/GPIO6/GPIO8,如 PIR 输入、按键输入、USB 插入检测。待 Hi3861L 上电完成 POR后,这些管脚可以输入高电平。】
为了验证这个说法,示波器分别抓UART1_TX和GPIO06的上电时序
UART1_TX上电时序 GPIO06(TX)上电时序
UART1_TX会有一个延时,推测是因为我们的cp2105芯片有一个延时上电的机制
通过对比发现时序确实存在差异,我们上电先不给GPIO06上电,然后发现通信正常
结论
por期间 GPIO06不能输入高电平,建议客户做一个1ms的上电延时
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|