首先要明確一點,電路中無論是高還是低的「阻」態,都是相對於某個參考點而言的,明確了這一點i/o口的工作狀態理解起來就簡單了。
上一張atmel的8051硬體手冊裡面的圖。
上圖中可以很明顯地看到,沒有「上拉電阻」的p0口相比有「上拉電阻」(internal pull-up)的p1口在i/o口引腳(p0.x pin)和vcc/gnd之間相連是通過一對推挽狀的fet實現的。再往內就是控制io的邏輯閘電路了,這個略過不談。
一對管子組成的推挽結構,從電路上來講可以通過調配管子的引數輕鬆實現輸出大電流,提高帶載能力。兩個管子根據通斷狀態不同有4種組合。上下管都導通相當於把電源和gnd短路了,這種情況是不允許出現的。從數字邏輯的角度上來講,上管開-下管關相當於io口與vcc直接相連,io口輸出高電平「1」。上管關-下管開時io口與gnd直接相連,io口輸出低電平「0」。這種結構下如果沒有外接上拉電阻,輸出「0」的狀態就是俗稱的「開漏」(open-drain:漏極開路)狀態。有的資料上也把這種狀態稱為「低阻態」,因為io引腳是通過乙個管子接地的,並不是直接使用導線連線,而一般的mos在導通狀態也會有mω級別的導通電阻。
分析到這裡就很明白了,「低阻態」是io口相對於gnd而言的,那「高阻態」也是相對於gnd而言的啦。怎麼把gnd和io口隔離起來達到類似開路的狀態?把下管置於截止狀態就可以了。這時候推挽的一對管子都是截止狀態,忽略讀取邏輯的話io口引腳相當於與mcu內部電路開路。考慮到實際電路的mos截止時並不是完美的開路,有少許的漏電流,所以稱為「高阻態」。
有的資料也把這種狀態稱為「浮空」(floating),這是因為管子的pn結會帶來結電容,通過io引腳給電容充電需要一定的時間,那io引腳處的對地的真實電壓和水面上的浮標隨波漂動類似了。電壓的大小(浮標的位置)不僅和外界輸入的電壓有關,還與時間相關。在高頻io的情況下,這種現象不能被忽略。io引腳處通過結電容接地,電壓「浮」起來了,非常有意思。
重疊i 0非同步socket模型
因為相信,每個qq頭像亮著的背後,電腦前都坐著乙個孤獨的人。你的個性簽名不再更新,qq頭像不再亮,所以我相信你在生活中是開心的。天橋還是那座天橋,車樑還是會從下面經過,路燈還是兩排。只是我們都回不去那樣的場景了。錯過好幾次約會,上班遲到扣了好幾次工資,為得到一點成就感,現在放出來。include s...
對檔案I 0緩衝的認識
或許很多初學檔案i o時會認為read 或write 系統呼叫會直接對磁碟中的檔案發起訪問,其實不然,此倆個呼叫只會使使用者空間緩衝區與核心的高速緩衝區之間複製資料。write fd,12345 例如上述操作,當write返回後,在之後的某個時刻核心會將該資料寫入 重新整理至 磁碟 所以系統呼叫其實...
linux裝置驅動之阻塞與非阻塞I 0
一 基本概念 阻塞操作是指在執行裝置操作時,若不能獲取資源,則掛起當前程序,直到滿足可操作的條件再進行操作。掛起的程序放到等待佇列,當條件滿足時,恢復執行。非阻塞操作是指當執行裝置操作時,若不能獲取資源,則立刻返回,不等待。二 阻塞i o 阻塞i o的是用等待佇列實現的。乙個程序的i o操作被阻塞時...