2015年12月7日 星期一

GPIO Open Drain?






GPIO 表示此pin可設定為 output 或 input。

GPIO 設為output mode


若設為output 表示此pin有 source或sink 電流的能力 。表示若pin設成High,可以成為電流輸出的來源端(Source); 若pin設成Low,可以成為電流流入的汲端(sink)。

GPIO的邏輯方塊圖 (內部由兩顆電晶體來控制High或Low)



若手冊上說明此為pin 為open drain, 表示此pin僅能作為電流流入的sink (如下圖, 將Port Latch Data 設定為low狀態)。同樣的, 如下圖, 將Port Latch Data 設定為high狀態,因為drain端為open, 沒有連接電源,故無法作電流的輸出來源端, 。因此,若drain端為open, 欲輸出為high 的狀態, 則要加上提升電阻(pull up resister) 接到電源才行 (這才有具備電流輸出能力)。

那為什麼要設計open drain呢? 因為連接到電源端,可以你自己決定要接到多大的電源, 以決定電流的大小。因為可能你要控制的設備,其驅動電流要比較大。



 pin 為Open-Drain Output (只有下方一顆電晶體,且Drain 為open)

GPIO 設為input mode

 若設定為input 則pin為 floating 狀態, pin反應外部high/low的狀態。一般IC 內部設計pin為Hi-Z(High Impedance)高阻抗的狀態。也就是輸入pin的內阻很大。

V_pin = V_signal x Z_pin / (Z_source + Z_pin) 

V_signal為外部訊號, 若V_pin要完美得到V_signal, 則Z_pin須遠大於Z_source。

另外,因為內阻很大, 也使得流入電流極小(I_input=0)。














If you feed IOs with voltage exceeding VDD plus diode forward voltage (3.3 + Vf = 3.6, this is the max rated input voltage), the diode will start to clamp and maintain acceptable voltage.
So the GPIO can handle whatever input voltage, as long as, input current is limited (by current limiting resistor, of course).
Those ESD diodes can only withstand few mA, say, 5 mA (I took this value from STM32 MCU datasheet), you can calculate the minimum resistor value with this rough formula:
Rlimit=VinputVDD5mA

You can even feed mains voltage to GPIO (if you want) if it's protected by proper resistor.

沒有留言 :

張貼留言