当两个芯片的通讯IO口的电平不一样时,就需要进行电平转换,使信号能正常通讯,严重的有可能把芯片烧坏。比较常见就有I2C/URAT通信。
那么使用什么电路可以进行电平转换呢?其实可以选择的方法有几种。
一种是直接使用专门的电平转换芯片,电压直接转换,这种方法成本比较高,但稳定性和方便性高。
一种是使用MOS管来做电平转换的电路。这种办法是比较经济实惠的,价格就是一颗MOS管的价钱,里面用到了MOS管体二极管的作用。
第三种办法就是直接使用一个二极管就可以了,这种方法简单便宜了。当然相对可靠性没有那么高。其原理和MOS管运用是差不多的。二极管常用于单向传输数据线,比如UART的RX信号。
比如说UART_RX信号线(对MCU来言),一边是SOC 的发送信号端,电压域是3.3V,一边是MCU的接收端,电压域是1.8V。这个时候通过一个二极管可以进行电平转换,不让3.3V电串到MCU端。如下图:
当SOC端发送低电平信号(0V),MCU端接了上拉电阻到1.8V,二极管导通。那么MCU收到的信号电平最大0.7V(0+二极管导通电压),0.7V还是属于低电平阈值,可以识别到。
当SOC端发送高电平信号(3.3V),MCU端接了上拉电阻到1.8V,二极管不满足导通条件。那么MCU收到的信号电平就是上拉的电压1.8V,被识别成高电平。
很明显整个传输过程,高低电位的时间点是对的,只是电平大小从3.3V变成1.8V了,数据通信不受影响。
值得注意的是,这种电路中,SOC发送时候低电平电压不要太大,不然叠加了二极管导通电容,电平太高可能造成误判断;另外二极管要选择导通电压低的,不然同样会导致这个问题。