推挽输出
输出寄存器输出为1时P-MOS导通,N-MOS断开,输出接到VCC输出高电平。输出寄存器输出为0时P-MOS断开,N-MOS导通,输出接到VDD输出低电平
开漏输出
只有N-MOS有效,输出寄存器输出为1时,N-MOS断开,输出呈现高阻态。输出寄存器输出为0时,N-MOS导通,输出接到VDD输出为低电平。
如果将IO口外接一个上拉电阻到5V的电源,则可以输出5V的电平,可以兼容5V的设备
推挽输出和开漏输出
- IIC开漏输出速度上要比SPI推挽输出慢,因为IIC高电平采用的是上拉电阻加高电平的形式,因此上升沿上升的缓慢会有弯曲
- 推挽输出不能实现线与功能,因为如果两个输出引脚,一个输出高电平P-MOS管导通,一个输出低电平N-MOS管导通,则P-MOS管上方的高电平会经过P-MOS->N-MOS->地,整个通路上没有外接电阻,因此电阻很小相当于高电平直接接到低电平造成了短路
IIC为什么会选择开漏输出
在一主多从的模式下SCL可以采用推挽输出,但是SDA必须采用开漏输出,由于IIC是半双工的协议,如果总线时序没协调好极有可能发生主机和从机均处于输出状态,如果采用推挽输出一方输出高电平,一方输出低电平,那么就会处于电源短路的状态。因此IIC禁止所有设备输出高电平,SDA和SCL采用开漏输出并且SDA和SCL线上连接上拉电阻连接VDD的形式,这样输出高电平就不能抵消低电平造成电源短路了。
SPI避免各设备MISO冲突
从机采用推挽输出的模式就会导致多个从机输出的时候造成冲突,那么SPI在协议规定,如果从机没被选中,它的MISO引脚要保持高阻态