www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式云IOT技術圈
[導讀]在說驅動之前,咱們可以先來了解下通信的基本原理。

微信公眾號:morixinguan
關注可了解更多的教程。問題,請公眾號留言,如有侵權,請聯系刪除。
如果你覺得本文對你有幫助,歡迎贊賞



▲長按圖片保存可分享至朋友圈

在說驅動之前,咱們可以先來了解下通信的基本原理:

數據通信的種類有:串行通信、并行通信。不管是什么類型的通信,再怎么復雜的,也是在這兩種上面衍生出來的。

數據通信的傳輸方向又有:單工、半雙工、全雙工。它們之間各有什么樣的特點,我舉了車輛過道的實例,通俗易懂的跟大家講明白了。

數據通信的方式還可以分為:同步、異步。什么是同步?什么是異步?相信大家現在已經有個概念了吧?同步就是根據一定的時鐘周期,做一定的事情,這里我舉了廣場舞的例子,那異步又是什么呢?異步就是隨時都可以,但怎么來區(qū)分開始,動作和結束呢?這就需要一幀數據里面安插開始傳輸位、數據內容、結束位以作區(qū)分,然后還需要一定的傳輸頻率,這樣才能將數據發(fā)送出去。

而串口協議又是什么東西呢?串口協議就是一種串行異步通信協議。有協議還不行,得有硬件接口嘛,具體是什么就不說了。然后雙方都約定好,比如通信雙方都設置波特率115200,一次發(fā)8bit數據,0個校驗位,1個停止位。接下來就開始發(fā)數據,這時候就按照協議的規(guī)范,發(fā)送端開始發(fā)送一個起始位,通常是0,然后開始傳輸8bit數據,如果需要校驗,那么就傳輸校驗位,最后再傳輸1bit的停止位,這樣一幀數據就發(fā)完了。

這節(jié),我們來說說I2C協議,I2C協議是什么鬼?I2C是(Inter-Integrated Circuit)的英文縮寫,是Philips公司開發(fā)的一個通信協議,只有兩根線是用來通信的。簡單的來說,如下圖:



我先來說下上面這幅圖具體是什么含義,然后接下來再來說說I2C是怎么操作數據的。I2C總線就是通過SDA總線(數據)、SCL總線(時鐘)來傳輸數據的,那為什么I2C總線上還要接兩個上拉電阻呢?根據I2C規(guī)格設計上手冊上了解到,由于I2C接口設計大多采用的是集電極開路或者是開漏輸出的接口,當總線為空閑的時候,兩根線均為高電平,由于I2C的SDA和SCL都具有線與功能,什么是線與?線與就是有0為0,同1為1,這是數字電路邏輯相關的了。也就是說只要有一個節(jié)點對總線(SCL或者SDA)發(fā)送了低電平,那么這整根線就會呈現為低電平,你想想,協議都說了,空閑要高電平,你突然給它來個低電平,這不逗死人嘛?這還叫協議?這明顯就是亂搞嘛,是不是?所以既然是協議,那I2C就肯定會有約束條件嘛,這個上拉電阻的其中一個作用就在這里了,給硬件電路的IO口提供一個確定的電平信號。

說到這里,可能有人要問了,我是寫代碼的,硬件我不太熟悉或者根本就不懂?。克麄兛赡軙岢鲞@樣的問題:什么是集電極開路輸出?什么是開漏輸出?什么是上拉電阻?上拉電阻取值要取什么值,這個電阻取大取小對I2C通信的時候有什么影響,應該取什么值最合適?既然有上拉電阻,那是不是有下拉電阻?為什么我看有些I2C的外設接在MCU的IO口里,也沒有看見接上拉電阻啊,那為什么通信也正常?

下面咱們就來說說這些問題該怎么來解答,那什么問題好解釋,我們先從硬件電路開始下手,一步一步的分析上面的這些問題。

我們先來看一個簡單的電路:

想象一下,如果現在把B點上面那一部分去掉了,變成下面這樣:

學習數字電路后我們知道,電路的輸出狀態(tài)有三種:

1、高電平  2、低電平  3、高阻態(tài)

如圖(5),這種無法確定電路狀態(tài)到底是高電平還是低電平,就是高阻態(tài)。

什么是高阻態(tài)?

答:電路分析時高阻態(tài)可做開路理解。你可以把它看作輸出(輸入)電阻非常大。它的極限狀態(tài)可以認為懸空(開路)。也就是說理論上高阻態(tài)不是懸空,它是對地或對電源電阻極大的狀態(tài)。而實際應用上與引腳的懸空幾乎是一樣的。

所以,我們可以認為,B點在開關斷開的時候,相當于懸空引腳,沒有辦法確定它的狀態(tài),而一般情況下,為了給它確定一個電平,通常就會給IO口加一個上拉電阻,也就是圖(4)看到的情況,也就是當按鍵沒按下的時候,B點為高電平,MCU讀取B點也為高電平。而當按鍵按下的時候,則情況相反,這就是上拉電阻的其中一個作用------確定電路的狀態(tài)。那么下拉電阻也同樣是這么一個功能,該怎么分析,就不用我說了,道理是一樣的。

那么,最前面我們在分析I2C為什么要接上拉電阻的問題,其中一個原因是因為集電極開路輸出和漏極開路輸出,先來搞明白第一個問題,什么是集電極開路輸出?

什么是集電極開路輸出?集電極是什么指的什么東西?

答:集電極是三極管的其中一個電極,這里我們形象的把它畫出來:



那么怎么解決這么不能確定c點到底輸出多少的問題呢?上拉電阻閃亮登場!?。?!確定電路狀態(tài),這無疑就是個寶貝,關鍵時刻可以用到了,我們來看看怎么改變它。

由此可見,當集電極開路的時候,比如就上面說的,當三極管處于截止狀態(tài)的時候。也就相當于bc之間沒有形成通路的時候,那么c點的電平無法確定,也就是說,將一個無法確定電平的線路接在I2C總線的SDA和SCL上,當I2C為空閑的時候,能保證SDA和SCL輸出高電平嗎?不能?那不能的話,假設輸出低電平,由于I2C總線的線與關系,那不就相當于違背了I2C協議所說的條件了嗎?所以這就是上拉電阻存在的必要性了。集電極開路也被稱為OC開路,OC,就是Open Collector的英文縮寫。

那么講到這里,有人可能就要問了,那現在我輸入1時,最終就要輸出1,不要反向,我現在輸入0的時候,我就要輸出0,不要被反向,那如何來實現呢?很簡單,我們接兩個反向器不就得了?來看看怎么接:


但通常在MCU中,不會這么接,但最終的效果是一樣的,原理還是有所區(qū)別。于是經過改造就有了如圖(10)所示的電路,由兩只三極管共同控制,當電平不同的時候,總有一只三極管是導通的,當我把上拉電阻換成開關的時候,這個電路就稱為推挽輸出電路。

那么什么又是漏極輸出呢?漏極又是什么東西?漏極是場效應管中的一個極:如圖(11)所示,場效應晶體管(Field Effect Transistor縮寫(FET))簡稱場效應管。主要有兩種類型(junction FET—JFET)和金屬 - 氧化物半導體場效應管(metal-oxide semiconductor FET,簡稱MOS-FET)。由多數載流子參與導電,也稱為單極型晶體管。它屬于電壓控制型半導體器件。具有輸入電阻高(107~1015Ω)、噪聲小、功耗低、動態(tài)范圍大、易于集成、沒有二次擊穿現象、安全工作區(qū)域寬等優(yōu)點,現已成為雙極型晶體管和功率晶體管的強大競爭者。

場效應管(FET)是利用控制輸入回路的電場效應來控制輸出回路電流的一種半導體器件,并以此命名。

因此為什么I2C總線外要接兩個上拉電阻的原因就在于此。這時候疑問就來了,為什么有些MCU不需要加上拉電阻也可以正常驅動I2C總線呢?

答:有些MCU內部帶了弱上拉電阻,這樣也可以與I2C總線實現線與的功能,這樣可以保證I2C在空閑的時候都為高電平。但考慮到驅動能力的問題,畢竟由芯片輸出的驅動能力有限,所以在外部接上拉電阻可以增加驅動能力。

至于電阻的大小取什么值,可以參考博客末尾的文章。

關于協議部分,常用的參考以下博客即可,寫得通俗易懂,也很好理解,以下這篇文章考慮的只是主-從模式,而多主機模式在這篇文章中并沒有涉及,建議還是看I2C官方的User Spec來了解,畢竟官方的是最標準的。

http://blog.csdn.net/w89436838/article/details/38660631


一網友寫的一個51單片機的程序,非常好理解,截取過來:





完整PPT:

http://download.csdn.net/download/morixinguan/10205419



免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
關閉
關閉