差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
digi:arm-embedded:ccmp2:dt-console [2024/11/06 22:42] robindigi:arm-embedded:ccmp2:dt-console [2024/11/06 23:41] (当前版本) robin
行 4: 行 4:
 通常USB转UART芯片,当没有连接电脑时,和MPU通信的UART方向,RX信号保持高电平最好(符合串口通信停止位为高电平的设计逻辑,即线路处理空闲状态)。有些芯片未经初始化之前,这个引脚对MPU来说是悬浮未偏置的高阻状态,这种状态如果被处理器认为是空闲无输入还不会引发问题,如果有扰动而被当作是有输入信号,U-Boot阶段会认为用户输入任意键中断了自动启动过程而停在U-Boot界面。在Digi的CCMP25开发板上,加了一个能自动侦测方向的电源转换隔离芯片NTS0102GT来避免低功耗模式时的外围电路的一些漏电流,它也刚好可以起到稳定RX在高电平的状态,如果没有这棵电源转换隔离芯片,可以在设备对中对console口的uart的输入引脚配置为上拉模式,确保正常启动。 通常USB转UART芯片,当没有连接电脑时,和MPU通信的UART方向,RX信号保持高电平最好(符合串口通信停止位为高电平的设计逻辑,即线路处理空闲状态)。有些芯片未经初始化之前,这个引脚对MPU来说是悬浮未偏置的高阻状态,这种状态如果被处理器认为是空闲无输入还不会引发问题,如果有扰动而被当作是有输入信号,U-Boot阶段会认为用户输入任意键中断了自动启动过程而停在U-Boot界面。在Digi的CCMP25开发板上,加了一个能自动侦测方向的电源转换隔离芯片NTS0102GT来避免低功耗模式时的外围电路的一些漏电流,它也刚好可以起到稳定RX在高电平的状态,如果没有这棵电源转换隔离芯片,可以在设备对中对console口的uart的输入引脚配置为上拉模式,确保正常启动。
  
-===其它隔离芯片可能存在的反作用===+===**其它隔离芯片可能存在的反作用**===
 注意,如果用普通电气隔离芯片,可能会起到相反的作用,以下图为例: 注意,如果用普通电气隔离芯片,可能会起到相反的作用,以下图为例:
-{{:digi:arm-embedded:ccmp2:pasted:20241106-223339.png |}}+{{:digi:arm-embedded:ccmp2:pasted:20241106-223339.png}}
  
 这里的隔离芯片,实测中发现: 这里的隔离芯片,实测中发现:
-如果USB线没有插上,且usb转uart芯片没有供电,那么在右侧(TX2)线路可能处于低电平状态。而在左侧(RX1)线路,它本应该处于浮空状态,但实际上可能会被芯片强制拉低,而取消内部上拉。+如果USB线没有插上,且usb转uart芯片没有供电,那么在右侧(TX2)线路可能处于低电平或浮空状态。而在左侧(RX1)线路,它本应该处于浮空状态,但实际上可能会被芯片强制拉低,这样,即便配置SOM的uart为内部上拉,也会因这里取消内部上拉。因此个芯片就起了反作用,它可能需要在TX2片就要添加个上拉,以确保左侧不会被拉低。 
 + 
 +这类情况并不罕见,原因是有些芯片只认高电平,而把浮空和低电平都等同起来,这样就会在左侧把浮空输入当低电平处理而强制拉低,这样即使MPU的GPIO口配置成内部上拉也不足以置高电平。因为在串口信号线上要注意避免这种情况。 
 + 
 +===**解决办法**=== 
 +好了,我们弄清楚了上面这个情况,就比较容易了。 
 + 
 +一种就是用外部上拉来解决问题,比如上面的情况,可以测试一下加个右侧上拉,是否就可以了。 
 + 
 +另一种就是不加这种隔离芯片,此时在没接USB线缆时,USB转UART给的RX信号线不论是浮空,还是低电平,只要会让MPU认为不是空闲状态,我们就需要对console口的RX内部配置成上拉,以便能确保启动。 
 + 
 +==如何配置console口引脚为内部上拉== 
 +需要在设备树源码片,更改pin脚定义,把原来的浮空状态改为上拉偏置。 
 +<code> 
 +                        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; 
 +                                }; 
 +                        }; 
 +</code> 
 + 
 +上面的pins1和pins2分别对应Tx和Rx引脚,默认是Bias-disable,需要改为bias-pull-up表示上拉偏置。 
 + 
 +===**关于别名**=== 
 +Linux中对串口的初始化需要在设备树里设置别名,比如: 
 + 
 + aliases { 
 +           serial5 = &uart5; 
 +           serial6 = &uart7; 
 +      };