亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

最近一段時(shí)間工作上比較忙,一直沒(méi)有抽出空來(lái)寫文章與大家分享,這兩天騰出些時(shí)間靜下心來(lái)沉淀一番。看標(biāo)題大家已經(jīng)知道了是來(lái)總結(jié)I2C總線,我相信大家或多或少的都接觸過(guò)I2C總線,這篇文章我們就由淺入深的仔細(xì)來(lái)研究研究,看看能不能挖掘些新東西,加深一下理解。

先說(shuō)概念

I2C英文全稱Inter-Integrated Circuit,字面意思是集成電路之間,也就是我們常說(shuō)的I方C總線—I2C bus。它是一種串行通訊總線,使用多主從架構(gòu),由飛利浦公司(恩智浦NXP的母公司)在80年代開(kāi)發(fā),用于主板、嵌入式系統(tǒng)連接周邊低速設(shè)備。

I2C由兩條雙向開(kāi)漏線組成,這是一個(gè)很大的優(yōu)勢(shì),接線簡(jiǎn)單。兩條線利用上拉電阻將電位上拉。典型電位為+3.3V或+5V。標(biāo)準(zhǔn)傳輸速率為100Kb/s,低速模式10Kb/s。

物理層

下圖為I2C總線的物理拓?fù)鋱D,大家可以看到一共只有兩條總線,一條SDA(serial data)數(shù)據(jù)線用來(lái)承載數(shù)據(jù)、一條SCL(serial clock line)時(shí)鐘線用來(lái)控制數(shù)據(jù)收發(fā)時(shí)序。所有I2C設(shè)備的SDA都接到了總線的SDA上,SCL都接到了總線的SCL上。每個(gè)設(shè)備都有自己的唯一地址,以保證設(shè)備之間訪問(wèn)的準(zhǔn)確性。

一篇文章講透I2C總線協(xié)議

I2C總線的物理拓?fù)鋱D

I2C在物理層的連接可以說(shuō)是非常簡(jiǎn)單,這也是它最大的優(yōu)勢(shì),原理就是通過(guò)控制SDA和SCL線的高低電平時(shí)序,來(lái)產(chǎn)生I2C總線協(xié)議所需要的信號(hào)進(jìn)行數(shù)據(jù)傳輸。在總線處于空閑狀態(tài)時(shí)SCL和SDA被上拉電阻拉高,保持高電平。

需要注意的是I2C的通訊方式為半雙工,因?yàn)橹挥幸粭l數(shù)據(jù)線,某一時(shí)刻只可能單向通訊。這也說(shuō)明了I2C不適合大數(shù)據(jù)量的傳輸應(yīng)用。

對(duì)于主機(jī)、從機(jī)的區(qū)分很簡(jiǎn)單,發(fā)布主要命令的就是主機(jī),接受命令的就是從機(jī),同一條I2C總線允許多個(gè)主機(jī)的存在。

協(xié)議層

作為基礎(chǔ)我們先來(lái)了解幾個(gè)重要的小概念。

1、初始狀態(tài)(即空閑狀態(tài)):SDA與SCL均為上拉電阻所致的高電平時(shí)為初始狀態(tài);
2、開(kāi)始信號(hào):當(dāng)SCL為高電平的時(shí)候,SDA被拉低,此為開(kāi)始信號(hào),表明通訊開(kāi)始。
3、終止信號(hào):當(dāng)SCL為高電平的時(shí)候,SDA被拉高,此為終止信號(hào),表明本次通訊結(jié)束。

一篇文章講透I2C總線協(xié)議

 

到這里大家有沒(méi)有發(fā)現(xiàn)點(diǎn)什么?當(dāng)SCL處于高電平的時(shí)候,SDA電平一旦變化就會(huì)是一種信號(hào),要么開(kāi)始要么是終止。所以在數(shù)據(jù)傳輸過(guò)程中SCL處于高電平時(shí),SDA必須保持狀態(tài)穩(wěn)定,只有SCL處于低電平時(shí)SDA才可以變化。

4、應(yīng)答信號(hào):當(dāng)發(fā)送器向接收器發(fā)送完一個(gè)字節(jié)/8位數(shù)據(jù)后,第9個(gè)時(shí)鐘周期內(nèi),接收器必須給發(fā)送器一個(gè)應(yīng)答信號(hào),這樣數(shù)據(jù)才算傳輸成功。高電平表非應(yīng)答,低電平表應(yīng)答。

一篇文章講透I2C總線協(xié)議

 

我們了解這幾個(gè)信號(hào)狀態(tài)后,來(lái)一步一步看看數(shù)據(jù)是如何傳輸?shù)摹?/p>

1、向從機(jī)設(shè)備的某一個(gè)寄存器寫一個(gè)字節(jié)數(shù)據(jù):開(kāi)始信號(hào)+設(shè)備地址(7位)+讀/寫(1位)+等待從機(jī)應(yīng)答+寄存器地址(8位)+等待從機(jī)應(yīng)答+要寫的數(shù)據(jù)(8位)+等待從機(jī)應(yīng)答+終止信號(hào)。下圖為24C02 EEPROM存儲(chǔ)器寫數(shù)據(jù)的時(shí)序圖。

一篇文章講透I2C總線協(xié)議

 

2、寫我們見(jiàn)識(shí)了,那讀一個(gè)試試:下圖為讀取24C02當(dāng)前地址一個(gè)字節(jié)數(shù)據(jù)的時(shí)序圖,是不是一目了然了。值得注意的是當(dāng)讀的時(shí)候地址7位后的讀寫狀態(tài)位為1。這里說(shuō)一下為什么最后是NO ACK,在“讀”這個(gè)操作下,主機(jī)為接收器,主機(jī)的NO ACK表示停止接收24C02的數(shù)據(jù),不然24C02會(huì)繼續(xù)發(fā)。

一篇文章講透I2C總線協(xié)議

 

3、我們?cè)僮x一個(gè)長(zhǎng)一點(diǎn)的:下圖為讀取24C02任意地址一個(gè)字節(jié)數(shù)據(jù)的時(shí)序圖。開(kāi)始信號(hào)+設(shè)備地址(7位)+寫(1位)+等待從機(jī)應(yīng)答+數(shù)據(jù)地址(8位)+等待從機(jī)應(yīng)答。前面這一步為假寫,目的是告訴24C02要讀哪個(gè)地址的數(shù)據(jù)。繼續(xù),開(kāi)始信號(hào)+設(shè)備地址(7位)+讀(1位)+等待從機(jī)應(yīng)答+讀到的數(shù)據(jù)(8位)+等待主機(jī)(接收機(jī))應(yīng)答+終止信號(hào)

一篇文章講透I2C總線協(xié)議

 

補(bǔ)點(diǎn)干貨

1、設(shè)備的地址。I2C設(shè)備的地址為8位,但是時(shí)序操作時(shí)最后一位不屬于地址,而是讀or寫狀態(tài)位。這就是為什么arduino的SH1106庫(kù)里操作的地址不是0x7-而是0x3-,因?yàn)橛杏玫氖乔?位,地址整體右移一位處理了。再一個(gè)設(shè)備地址的前四位是固定死的,是廠家用來(lái)表示設(shè)備類型的,比如接口為I2C的溫度傳感器類設(shè)備地址前四位一般為1001即9X、EEPROM存儲(chǔ)器地址前四位一般為1010即AX、oled屏地址前四位一般為0111即7X等等。

2、I2C接口的致命缺點(diǎn)就是傳輸距離近同時(shí)速度慢。大家在使用I2C總線接口的時(shí)候切記不要長(zhǎng)線傳輸,盡量只在PCB板內(nèi)傳輸,不然偶爾丟數(shù)據(jù)甚至讀不到數(shù)據(jù)會(huì)讓人崩潰,不要問(wèn)我是怎么知道的,問(wèn)只有眼淚。

3、關(guān)于兩線為什么設(shè)計(jì)成開(kāi)漏,這個(gè)問(wèn)題我記得我之前在寫《STM32單片機(jī)I/O的8種工作模式》時(shí)給大家埋下過(guò)伏筆。今天就來(lái)說(shuō)一下具體原因。主要有兩點(diǎn)①防止短路:大家想想如果不設(shè)為開(kāi)漏,而設(shè)為推挽,幾個(gè)設(shè)備連在同一條總線上,這時(shí)某一設(shè)備的某個(gè)IO輸出高電平,另有一臺(tái)設(shè)備的某一個(gè)IO輸出低電平,這時(shí)你會(huì)發(fā)現(xiàn)這兩個(gè)IO的VCC和GND短路了;但是開(kāi)漏就不會(huì)有這個(gè)問(wèn)題,如下圖示:

一篇文章講透I2C總線協(xié)議

 

第二個(gè)原因是“線與”,我們想個(gè)場(chǎng)景:如果總線上的一個(gè)A設(shè)備將SDA拉高,這時(shí)總線上另一個(gè)B設(shè)備已將SDA拉低,這時(shí)由于1&0=0,所以A設(shè)備檢查SDA的時(shí)候會(huì)發(fā)現(xiàn)不是高電平而是低電平,這就表明總線上已經(jīng)有其他設(shè)備占用總線了,A只好放棄,如果檢測(cè)是高電平那就可以使用。如下圖示為24C02芯片內(nèi)部圖,可以看到狀態(tài)檢測(cè)腳。

一篇文章講透I2C總線協(xié)議

 

總結(jié)

I2C總線作為一個(gè)常見(jiàn)的總線協(xié)議,是非常值得我們來(lái)仔細(xì)研究琢磨的,通透以后我們?cè)偈褂萌我釯2C接口的設(shè)備時(shí)就可以信手拈來(lái)了。我一直覺(jué)得在學(xué)習(xí)的過(guò)程中,“會(huì)使用”不一定就是我們追求的終點(diǎn),會(huì)用的同時(shí)把一些更深的東西搞懂搞透會(huì)收獲意想不到的喜悅。

分享到:
標(biāo)簽:總線 協(xié)議 I2C
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定