最近在调试一个新板子的时候,发现一个问题,板子使用的是一个国产的处理器芯片,表现为如果板子232串口的发送和接收与电脑串口连接时,板子可以正常进入系统。
但是如果板子与电脑只接232串口的发送信号,不接232串口的接收信号或者232串口的发送和接收信号都不接,板子不能进入系统,只能进入到UBOOT,并且log打印还会有乱码。
这块板子的处理器芯片串口部分的电路示意图是这个,串口信号从处理器出来是1.8V,经过一个1.8V转3.3V的电平转换芯片变成3.3V的串口信号,再经过一个MAX3232芯片,将3.3V串口信号变成RS232电平的串口信号,最后经过TVS防护电路连接到连接器。
发送信号是从板子处理器端出来,在电脑端接收;
接收信号是从电脑端出来,板子处理器端接收;
板子处理器芯片在系统启动时会一直发送log信息,也就是启动时串口的发送信号会在一段时间内一直有数据,但是在电脑端只要不按按键,接收信号一般不会有数据。
在板子连接了232串口的发送和接收信号时,我们测量232串口的发送和接收信号,当有发送信号有数据时,波形是这一个。
这个黄色的是发送信号,蓝色的是接收信号。
可以看到接收信号一直是一个负值,也就是232电平的逻辑1。
当板子没有连接232串口的接收信号只连接了发送信号时,我们测量232串口的发送和接收信号, 波形是这一个。
大家可以看到,232串口接收信号在发送信号变化时,也会莫名其妙的产生信号。
我们再看下串口232的接收信号和3.3V的接收信号。
大家可以看到由于232接收上莫名其妙的信号 导致3.3V的接收上也会有数据。
讲到这里也就解释了为什么不接232串口的接收信号,板子会进入到UBOOT,因为当系统启动时,在UBOOT界面会等待两秒,如果这两秒时间内你在电脑界面按任意的按键,进程就会就会进入到UBOOT而不会进入后面的系统,
但是我们在电脑端明明是没有按按键的,结合测量的波形,我猜测系统检测到有按键按下是由于232串口上莫名其妙的信号组成个了某个按键,从而导致启动时错误的进入了UBOOT。
知道了启动进入UBOOT的原因是由于串口接收端上这些莫名其妙的信号,接下来我们分析串口接收端上这些莫名其妙的信号是怎么来的。
我们再来看到板子没有连接232串口的接收信号只连接了发送信号时,232串口接收和发送的波形。
大家可以看到只有发送信号跳变的时候,接收信号才会产生这个莫名其妙的信号,并且从这个波形看这个莫名其妙信号很像电容的充放电。
但是整个串口电路上没有放电容啊,经过排查,最后我发现是因为串口的防护电路部分引入了电容,防护电路接了三个TVS管,大家都知道TVS管是有结电容,查数据手册才知道这个TVS管的结电容在1nF左右。
然后MAX3232芯片内部在接收端是有一个5K的下拉电阻的。
再加上TVS管的结电容,就构成了一个RC电路,由于电容两端电压不能进行突变,所以在串口发送信号的上升沿和下降沿,电容会进行放电和充电,也就很好的与我们测量的这个波形相对应了。
知道了原因,整改的话当然也就很容易了,我们只需要换结电容比较小的TVS管即可。