Console口是用户指定的心板的某一个UART接口,它用于同处理器通信和调试。现代电脑一般都只有usb接口,所以传统上会用一根USB转UART线缆来作为调试线缆。不过随着USB转UART芯片应用越来越广泛,成本越来越低,在设备目标板上集成一个USB转UART芯片作为调试通道成为越来越多工程师的选择。不过这类芯片品牌众多,有像FDTI这类贵族芯片,也有国产沁恒这种物美价廉的芯片,同一品牌的也有不同型号,有时要实测才知道效果。这个电路设计上要注意的是,MPU的接口处的UART输入线是否会被芯片嵌位到低电平,由于来决定是否需要上拉电路,或是需要处理器内部配置上拉,以确保不会因为低电平而让console口认为有输入信号而影响启动。

通常USB转UART芯片,当没有连接电脑时,和MPU通信的UART方向,RX信号保持高电平最好(符合串口通信停止位为高电平的设计逻辑,即线路处理空闲状态)。有些芯片未经初始化之前,这个引脚对MPU来说是悬浮未偏置的高阻状态,这种状态如果被处理器认为是空闲无输入还不会引发问题,如果有扰动而被当作是有输入信号,U-Boot阶段会认为用户输入任意键中断了自动启动过程而停在U-Boot界面。在Digi的CCMP25开发板上,加了一个能自动侦测方向的电源转换隔离芯片NTS0102GT来避免低功耗模式时的外围电路的一些漏电流,它也刚好可以起到稳定RX在高电平的状态,如果没有这棵电源转换隔离芯片,可以在设备对中对console口的uart的输入引脚配置为上拉模式,确保正常启动。

**其它隔离芯片可能存在的反作用**

注意,如果用普通电气隔离芯片,可能会起到相反的作用,以下图为例:

这里的隔离芯片,实测中发现: 如果USB线没有插上,且usb转uart芯片没有供电,那么在右侧(TX2)线路可能处于低电平或浮空状态。而在左侧(RX1)线路,它本应该处于浮空状态,但实际上可能会被芯片强制拉低,这样,即便配置SOM的uart为内部上拉,也会因这里而被取消内部上拉。因此个芯片就起了反作用,它可能需要在TX2片就要添加个上拉,以确保左侧不会被拉低。

这类情况并不罕见,原因是有些芯片只认高电平,而把浮空和低电平都等同起来,这样就会在左侧把浮空输入当低电平处理而强制拉低,这样即使MPU的GPIO口配置成内部上拉也不足以置高电平。因为在串口信号线上要注意避免这种情况。

**解决办法**

好了,我们弄清楚了上面这个情况,就比较容易了。

一种就是用外部上拉来解决问题,比如上面的情况,可以测试一下加个右侧上拉,是否就可以了。

另一种就是不加这种隔离芯片,此时在没接USB线缆时,USB转UART给的RX信号线不论是浮空,还是低电平,只要会让MPU认为不是空闲状态,我们就需要对console口的RX内部配置成上拉,以便能确保启动。

如何配置console口引脚为内部上拉

需要在设备树源码片,更改pin脚定义,把原来的浮空状态改为上拉偏置。

                        usart2-0 {
                                u-boot,dm-pre-reloc;
                                phandle = <0x15>;

                                pins1 {
                                        pinmux = <0x407>;
                                        bias-disable;
                                        drive-push-pull;
                                        slew-rate = <0x00>;
                                        u-boot,dm-pre-reloc;
                                };

                                pins2 {
                                        pinmux = <0x809>;
                                        bias-disable;
                                        u-boot,dm-pre-reloc;
                                };
                        };

上面的pins1和pins2分别对应Tx和Rx引脚,默认是Bias-disable,需要改为bias-pull-up表示上拉偏置。

**关于别名**

Linux中对串口的初始化需要在设备树里设置别名,比如:

aliases {

         serial5 = &uart5;
         serial6 = &uart7;
    };