項(xiàng)目15——I2C通信方式原理與應(yīng)用

I2C是各類傳感器與模塊與Arduino通信的最常用方式之一

I2C的全稱為:Inter-Integrated Circuit

中文名字:內(nèi)部集成電路

可以讀作"I-squared-C",在中國常被讀作"I方C"铣墨。

I2C是Philips公司在1980年代,為了讓主板、嵌入式系統(tǒng)用以連接低速周邊裝置泳赋,而開發(fā)的一種簡單的雙向二線制同步串行總線,現(xiàn)在被廣泛地使用在系統(tǒng)內(nèi)多個集成電路(IC)間的通訊对妄。


它具有如下特點(diǎn):

I2C是 master(主) & slave(從) 的設(shè)計(jì)??

整個線路上只可有一個 master, 其他的都是 slave?

只能 master 與 slave之間進(jìn)行通訊?

slave 與 slave 之間是不可以通訊的

只有 master 可以主動向 slave 發(fā)送資料或提出請求

slave 只可因應(yīng) master 的請求而回傳資料, 不可以主動發(fā)送資料給 master?????

主機(jī)(master)可以用作主機(jī)發(fā)送器和主機(jī)接收器

I2C總線上的每一個設(shè)備都可以作為主設(shè)備或者從設(shè)備轿钠,而且每一個設(shè)備都會對應(yīng)一個唯一的地址,主從設(shè)備之間就通過這個地址來確定與哪個器件進(jìn)行通信??

I2C總線上的主設(shè)備與從設(shè)備之間以字節(jié)(8位)為單位進(jìn)行?串行的八位雙向數(shù)據(jù)傳輸

半雙工通信方式

它是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線赛不,可發(fā)送和接收數(shù)據(jù),兩根通訊線一根為控制時鐘線(SCL——Serial Clock用于同步設(shè)備間的數(shù)據(jù)傳輸時鐘罢洲;另一根為數(shù)據(jù)線(SDA——Serial Data)用于攜帶數(shù)據(jù)




Arduino nano的相關(guān)引腳:A4 (SDA), A5 (SCL)

其他arduino板子相關(guān)引腳:

相關(guān)引腳

相關(guān)庫的使用:

Arduino中使用I2C通信可直接調(diào)用Wire.h庫踢故,這個庫允許Arduino鏈接其他I2C設(shè)備文黎,以類的形式對I2C通信協(xié)議進(jìn)行了封裝。

Wire庫以外掛庫的形式放置于libraries文件夾內(nèi)殿较。

與內(nèi)建庫不同的是耸峭,用戶在使用I2C庫時,需要手動加入I2C庫的頭文件:

#include <Wire.h>

同時淋纲,為方便用戶使用劳闹,庫文件預(yù)創(chuàng)建了Wire對象,這樣用戶就可以在程序中直接使用Wire實(shí)現(xiàn)I2C通訊了洽瞬。

它從軟件上徹底屏蔽了I2C的底層協(xié)議內(nèi)容本涕,這也是Arduino的設(shè)計(jì)原則,讓用戶更加關(guān)注業(yè)務(wù)層面伙窃,而不是實(shí)現(xiàn)層面菩颖。


通信原理:

通過對SCL和SDA線高低電平時序的控制,來產(chǎn)生I2C總線協(xié)議所需要的信號進(jìn)行數(shù)據(jù)的傳遞为障。在總線空閑狀態(tài)時晦闰,這兩根線一般被上面所接的上拉電阻拉高,保持著高電平鳍怨。

信號種類:

1. 起始信號.

定義:SCL線為高電平期間呻右,SDA線由高電平向低電平的變化。

2. 終止信號

定義:SCL線為高電平期間京景,SDA線由低電平向高電平的變化

3. 讀寫數(shù)據(jù)信號

I2C總線進(jìn)行數(shù)據(jù)傳送時窿冯,時鐘信號為高電平期間骗奖,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定确徙,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高低電平狀態(tài)才允許變化执桌。

4. 應(yīng)答信號

I2C總線協(xié)議規(guī)定鄙皇,每傳送一個字節(jié)數(shù)據(jù),都要有一個應(yīng)答信號以確定數(shù)據(jù)傳送是否被對方接收仰挣。應(yīng)答信號由接收設(shè)備產(chǎn)生伴逸,在SCL為高電平期間,接收設(shè)備將SDA拉低為低電平膘壶,表示數(shù)據(jù)傳輸正確错蝴。


wire庫中常用的函數(shù)(使用時在其前面加上——wire.):

1.Begin()、Begin(address)

初始化Wire庫颓芭,并針對性初始化為主機(jī)或是從機(jī)顷锰。

上述兩種形式的區(qū)別如下:

Begin()初始化為主機(jī),

Begin(address)初始化為從機(jī)亡问,并為從機(jī)設(shè)置地址(0-127)官紫。

2.Write()

主機(jī)向從機(jī)寫數(shù)據(jù),或從機(jī)為響應(yīng)主機(jī)請求向主機(jī)寫數(shù)據(jù)。

注意:當(dāng)工作于主機(jī)向從機(jī)寫數(shù)據(jù)時束世,

該語句要位于beginTransmission()和endTransmission()語句之間酝陈。

有以下三種具體形式,描述如下:

Wire.write(value) – 寫字符毁涉。

Wire.write(string)–寫字符串

Wire.write(data, length)-寫指定長度的數(shù)組data沉帮。

3.requestFrom()

用于主機(jī)向從設(shè)備請求數(shù)據(jù),

此后就可以用available()和read()來具體操作從設(shè)備返回的數(shù)據(jù)了贫堰。

形式為:Wire.requestFrom(address,quantity)Address指明從設(shè)備的地址遇西,quantity指明請求的字節(jié)數(shù)。

4.Available()

返回接收緩存(數(shù)組)里的字符數(shù)严嗜,以便后續(xù)使用read()具體讀取粱檀。

具體使用中,對主機(jī)而言漫玄,必須事先調(diào)用requestFrom函數(shù)茄蚯;對從機(jī)而言,常在onReceive事件中使用睦优。

5.Read()

從接收緩存(數(shù)組)中讀取數(shù)據(jù)渗常。

6.注冊事件

除了上述幾個方法外,Wire庫還定義了兩個事件:

onReceive()和onRequest()汗盘。

都是為從設(shè)備注冊一個事件函數(shù)皱碘,用于響應(yīng)不同的事件。

onReceive()用于從機(jī)接收到主機(jī)字符的響應(yīng)隐孽,事件中執(zhí)行從設(shè)備的寫操作癌椿。

onRequest()用于從機(jī)接收到主機(jī)上傳數(shù)據(jù)通知的響應(yīng),事件中執(zhí)行從設(shè)備的讀操作菱阵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踢俄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晴及,更是在濱河造成了極大的恐慌都办,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虑稼,死亡現(xiàn)場離奇詭異琳钉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛛倦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門歌懒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胰蝠,你說我怎么就攤上這事歼培≌鸾” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵躲庄,是天一觀的道長查剖。 經(jīng)常有香客問我,道長噪窘,這世上最難降的妖魔是什么笋庄? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮倔监,結(jié)果婚禮上直砂,老公的妹妹穿的比我還像新娘。我一直安慰自己浩习,他們只是感情好静暂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谱秽,像睡著了一般洽蛀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疟赊,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天郊供,我揣著相機(jī)與錄音,去河邊找鬼近哟。 笑死驮审,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吉执。 我是一名探鬼主播疯淫,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鼠证!你這毒婦竟也來了峡竣?” 一聲冷哼從身側(cè)響起靠抑,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤量九,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颂碧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荠列,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年载城,在試婚紗的時候發(fā)現(xiàn)自己被綠了肌似。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谓苟。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡纠吴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出系枪,到底是詐尸還是另有隱情,我是刑警寧澤固额,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布眠蚂,位于F島的核電站,受9級特大地震影響斗躏,放射性物質(zhì)發(fā)生泄漏逝慧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一啄糙、第九天 我趴在偏房一處隱蔽的房頂上張望笛臣。 院中可真熱鬧,春花似錦隧饼、人聲如沸沈堡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踱蛀。三九已至,卻和暖如春贵白,著一層夾襖步出監(jiān)牢的瞬間率拒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工禁荒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猬膨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓呛伴,卻偏偏與公主長得像勃痴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子热康,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 在使用單片機(jī)的過程中沛申,I2C 通信可以說是最被廣泛使用和采納的協(xié)議之一,采用 I2C 協(xié)議可以占用更少的資源姐军,鏈接...
    noparkinghere閱讀 2,161評論 0 8
  • 做單片機(jī)開發(fā)時UART,SPI和I2C都是我們最經(jīng)常使用到的硬件接口奕锌,我收集了相關(guān)的具體材料對這三種接口進(jìn)行了詳細(xì)...
    梁睿坤閱讀 67,970評論 7 31
  • http://dpinglee.blog.163.com/blog/static/1440977532011223...
    簡柏舟閱讀 2,189評論 0 0
  • 版權(quán)聲明:本文為小斑馬學(xué)習(xí)總結(jié)文章著觉,技術(shù)來源于韋東山著作,轉(zhuǎn)載請注明出處惊暴! 一饼丘、I2C協(xié)議與EEPROM I2C協(xié)...
    ZebraWei閱讀 7,569評論 2 11
  • 精英聯(lián)盟3.0第四次聯(lián)合會20181021@fenket 會議主題:專注帶來心流體驗(yàn),番茄工作法深進(jìn)學(xué)習(xí) 學(xué)員分享...
    fenket2018閱讀 211評論 0 0