 i2c協議(yi)的特點是什么,老司機帶你深入(ru)了解
							時間:2018-04-20      來源:未知
							i2c協議(yi)的特點是什么,老司機帶你深入(ru)了解
							時間:2018-04-20      來源:未知 
							I2C總線(xian)(xian)(xian)是由Philips公(gong)司開發的一(yi)(yi)(yi)種簡(jian)單、雙向二線(xian)(xian)(xian)制同步串行總線(xian)(xian)(xian)。它只需(xu)要(yao)兩根(gen)線(xian)(xian)(xian)(一(yi)(yi)(yi)根(gen)數(shu)據線(xian)(xian)(xian)SDA,一(yi)(yi)(yi)根(gen)時鐘(zhong)線(xian)(xian)(xian)SCL)即可(ke)在連接于(yu)總線(xian)(xian)(xian)上的器件之間傳送(song)信(xin)息。
在(zai)I2C總(zong)線中, 各部分(fen)器件如下:
主機初(chu)始化發(fa)送,產生時鐘信號和終止(zhi)發(fa)送的(de)器件
從(cong)器件被主(zhu)機尋址(zhi)的器件
發送(song)(song)器發送(song)(song)數據(ju)到(dao)總線的器件(jian)
接收器從總線接收數據(ju)的器件
多(duo)主機(ji)同(tong)時有多(duo)于一個主機(ji)嘗試控制(zhi)總線但不破壞報文
仲裁是一個在有多(duo)個主機同時(shi)嘗(chang)試控制總(zong)線,但(dan)只允許(xu)其中一個控制總(zong)線并(bing)使報文不被破壞的過(guo)程
同步(bu)兩個(ge)(ge)或多個(ge)(ge)器件同步(bu)時鐘信(xin)號的過程(cheng)
主(zhu)(zhu)機(ji)用于啟動(dong)(dong)總線傳送(song)(song)數(shu)(shu)(shu)據(ju)(ju),并產(chan)(chan)生(sheng)時(shi)(shi)鐘(zhong)以開放傳送(song)(song)的(de)(de)器(qi)(qi)(qi)(qi)(qi)件,此時(shi)(shi)任何被(bei)尋址的(de)(de)器(qi)(qi)(qi)(qi)(qi)件均(jun)被(bei)認(ren)為(wei)是從(cong)器(qi)(qi)(qi)(qi)(qi)件.在(zai)總線上(shang)主(zhu)(zhu)和(he)從(cong)、發(fa)和(he)收(shou)(shou)的(de)(de)關(guan)系不(bu)是恒定的(de)(de),而(er)取決于此時(shi)(shi)數(shu)(shu)(shu)據(ju)(ju)傳送(song)(song)方向。如(ru)果主(zhu)(zhu)機(ji)要(yao)發(fa)送(song)(song)數(shu)(shu)(shu)據(ju)(ju)給(gei)從(cong)器(qi)(qi)(qi)(qi)(qi)件,則主(zhu)(zhu)機(ji)首先(xian)尋址從(cong)器(qi)(qi)(qi)(qi)(qi)件,然后主(zhu)(zhu)動(dong)(dong)發(fa)送(song)(song)數(shu)(shu)(shu)據(ju)(ju)至(zhi)從(cong)器(qi)(qi)(qi)(qi)(qi)件,最后由(you)主(zhu)(zhu)機(ji)終(zhong)止數(shu)(shu)(shu)據(ju)(ju)傳送(song)(song);如(ru)果主(zhu)(zhu)機(ji)要(yao)接(jie)收(shou)(shou)從(cong)器(qi)(qi)(qi)(qi)(qi)件的(de)(de)數(shu)(shu)(shu)據(ju)(ju),首先(xian)由(you)主(zhu)(zhu)機(ji)尋址從(cong)器(qi)(qi)(qi)(qi)(qi)件.然后主(zhu)(zhu)機(ji)接(jie)收(shou)(shou)從(cong)器(qi)(qi)(qi)(qi)(qi)件發(fa)送(song)(song)的(de)(de)數(shu)(shu)(shu)據(ju)(ju),最后由(you)主(zhu)(zhu)機(ji)終(zhong)止接(jie)收(shou)(shou)過程。在(zai)這種情況(kuang)下.主(zhu)(zhu)機(ji)負(fu)責(ze)產(chan)(chan)生(sheng)定時(shi)(shi)時(shi)(shi)鐘(zhong)和(he)終(zhong)止數(shu)(shu)(shu)據(ju)(ju)傳送(song)(song)。
I2C協議有如下幾(ji)個特(te)點:
1.在(zai)(zai)硬件上,I2C總線(xian)(xian)(xian)(xian)只需(xu)要(yao)(yao)一(yi)根數據線(xian)(xian)(xian)(xian)和一(yi)根時鐘線(xian)(xian)(xian)(xian)兩根線(xian)(xian)(xian)(xian),總線(xian)(xian)(xian)(xian)接口已(yi)經集成(cheng)在(zai)(zai)芯(xin)片內部,不需(xu)要(yao)(yao)特殊的(de)(de)接口電(dian)路,而且片上接口電(dian)路的(de)(de)濾波器(qi)可(ke)(ke)(ke)以(yi)濾去總線(xian)(xian)(xian)(xian)數據上的(de)(de)毛(mao)刺.因此(ci)I2C總線(xian)(xian)(xian)(xian)簡化(hua)了(le)硬件電(dian)路PCB布(bu)線(xian)(xian)(xian)(xian),降(jiang)低(di)了(le)系(xi)(xi)統(tong)成(cheng)本(ben),提高(gao)了(le)系(xi)(xi)統(tong)可(ke)(ke)(ke)靠性(xing)。因為(wei)I2C芯(xin)片除了(le)這兩根線(xian)(xian)(xian)(xian)和少量中斷線(xian)(xian)(xian)(xian),與系(xi)(xi)統(tong)再(zai)沒有連接的(de)(de)線(xian)(xian)(xian)(xian),用戶常用I2C可(ke)(ke)(ke)以(yi)很(hen)容易形成(cheng)標準化(hua)和模塊化(hua),便于重復利用。
2.發(fa)(fa)送到SDA 線(xian)(xian)上的每個(ge)字(zi)(zi)節(jie)(jie)必須為8 位(wei),每次傳(chuan)輸可(ke)以(yi)發(fa)(fa)送的字(zi)(zi)節(jie)(jie)數(shu)量不(bu)受限制。每個(ge)字(zi)(zi)節(jie)(jie)后(hou)(hou)必須跟一個(ge)響(xiang)應位(wei)。首先(xian)傳(chuan)輸的是數(shu)據(ju)(ju)的最高位(wei)(MSB),如果(guo)從機要完成一些其(qi)他功能后(hou)(hou)(例(li)如一個(ge)內部中斷服務程序)才能接收(shou)或發(fa)(fa)送下(xia)一個(ge)完整(zheng)的數(shu)據(ju)(ju)字(zi)(zi)節(jie)(jie),可(ke)以(yi)使(shi)時鐘(zhong)線(xian)(xian)SCL 保持(chi)低電平(ping),迫使(shi)主機進入等待(dai)狀態,當從機準備好(hao)接收(shou)下(xia)一個(ge)數(shu)據(ju)(ju)字(zi)(zi)節(jie)(jie)并釋放時鐘(zhong)線(xian)(xian)SCL 后(hou)(hou)數(shu)據(ju)(ju)傳(chuan)輸繼續(xu)。
3. I2C總線(xian)是(shi)一(yi)個(ge)(ge)真正的多主(zhu)(zhu)機總線(xian),如果兩個(ge)(ge)或多個(ge)(ge)主(zhu)(zhu)機同時(shi)初始化數據(ju)傳輸,可以通過沖突檢(jian)測(ce)和仲裁防止(zhi)數據(ju)破壞(huai),每個(ge)(ge)連接到總線(xian)上的器件(jian)都(dou)有(you)唯一(yi)的地址(zhi),任何器件(jian)既可以作(zuo)為主(zhu)(zhu)機也(ye)可以作(zuo)為從機,但同一(yi)時(shi)刻只(zhi)允(yun)許有(you)一(yi)個(ge)(ge)主(zhu)(zhu)機。數據(ju)傳輸和地址(zhi)設定(ding)由軟件(jian)設定(ding),非常靈活(huo)。總線(xian)上的器件(jian)增(zeng)加和刪(shan)除不(bu)影響其他器件(jian)正常工作(zuo)。
4. I2C總(zong)(zong)線上的(de)每一(yi)(yi)(yi)個設備(bei)都(dou)可(ke)以(yi)作(zuo)為主設備(bei)或者從(cong)(cong)設備(bei),而且每一(yi)(yi)(yi)個設備(bei)都(dou)會(hui)對(dui)應一(yi)(yi)(yi)個唯(wei)一(yi)(yi)(yi)的(de)地址(zhi)(可(ke)以(yi)從(cong)(cong)I2C器件(jian)的(de)數據手冊得知(zhi)),主從(cong)(cong)設備(bei)之間(jian)就通過(guo)這個地址(zhi)來確定與哪個器件(jian)進行通信,在通常的(de)應用中(zhong),我們把(ba)CPU帶(dai)I2C總(zong)(zong)線接(jie)口的(de)模(mo)塊(kuai)作(zuo)為主設備(bei),把(ba)掛接(jie)在總(zong)(zong)線上的(de)其他(ta)設備(bei)都(dou)作(zuo)為從(cong)(cong)設備(bei)。
I2C協(xie)議(yi)規定,總(zong)(zong)線上數據的傳輸(shu)必須以一個起(qi)始(shi)信(xin)號(hao)(hao)作(zuo)(zuo)為開(kai)始(shi)條件(jian),以一個結(jie)(jie)束信(xin)號(hao)(hao)作(zuo)(zuo)為傳輸(shu)的停(ting)(ting)止條件(jian)。起(qi)始(shi)和結(jie)(jie)束信(xin)號(hao)(hao)總(zong)(zong)是由(you)(you)主設(she)(she)備產生(sheng)。總(zong)(zong)線在(zai)(zai)空閑狀態時,SCL和SDA都保持著(zhu)高(gao)電平,當SCL為高(gao)電平而SDA由(you)(you)高(gao)到低的跳變,表示產生(sheng)一個起(qi)始(shi)條件(jian);當SCL為高(gao)而SDA由(you)(you)低到高(gao)的跳變,表示產生(sheng)一個停(ting)(ting)止條件(jian)。在(zai)(zai)起(qi)始(shi)條件(jian)產生(sheng)后(hou),總(zong)(zong)線處(chu)于忙狀態,由(you)(you)本(ben)次數據傳輸(shu)的主從設(she)(she)備獨占(zhan),其他I2C器件(jian)無法訪(fang)問總(zong)(zong)線;而在(zai)(zai)停(ting)(ting)止條件(jian)產生(sheng)后(hou),本(ben)次數據傳輸(shu)的主從設(she)(she)備將釋放總(zong)(zong)線,總(zong)(zong)線再次處(chu)于空閑狀態。
I2C的(de)通(tong)訊都由(you)主機(ji)發起,clk為(wei)高電平時(shi)(shi),sda從高到低(di); 從器(qi)(qi)件發現(xian)這樣一組信號,就(jiu)認為(wei)主機(ji)要(yao)開始(shi)操作(zuo)自己(ji)了,做(zuo)好接收的(de)準備工作(zuo)。主機(ji)發送了開始(shi)位(wei)后,把clk拉(la)低(di),只有clk拉(la)低(di),sda才(cai)可以做(zuo)高低(di)變(bian)化; 當clk被(bei)拉(la)高時(shi)(shi),從器(qi)(qi)件就(jiu)會(hui)去讀(du)取(qu)sda的(de)高低(di)電平值;clk再次被(bei)拉(la)低(di)時(shi)(shi),從器(qi)(qi)件認為(wei)此位(wei)已讀(du)取(qu)完(wan)畢,認為(wei)是(shi)有效位(wei),等待clk再次拉(la)高,讀(du)取(qu)下一位(wei)。
主(zhu)(zhu)機發送完8位(wei)(wei)后(hou),第(di)(di)9位(wei)(wei)是校驗(yan)(yan)位(wei)(wei),讀(du)(du)取到低電平為有效;主(zhu)(zhu)設備把(ba)clk拉(la)低,sdaio換成(cheng)輸入(ru)模式(上拉(la)電阻,默認高電平)讀(du)(du)取第(di)(di)9位(wei)(wei),clk再次拉(la)高,讀(du)(du)取從設備發來的(de)校驗(yan)(yan)位(wei)(wei)。
如圖所示時序圖
  
對I2C總線的操(cao)作(zuo)實際就是主從設備之間的讀寫操(cao)作(zuo)。大致可(ke)分為(wei)以下三(san)種操(cao)作(zuo)情況:
第一種,主設備往從(cong)設備中(zhong)寫數據(ju)。數據(ju)傳輸格式如下:
  
第二(er)種(zhong),主設(she)備(bei)從從設(she)備(bei)中讀數據。數據傳輸(shu)格式如下:
  
第三種,主設備往從(cong)(cong)(cong)設備中(zhong)寫數據(ju),然(ran)后重(zhong)(zhong)啟(qi)起始條件,緊(jin)接著從(cong)(cong)(cong)從(cong)(cong)(cong)設備中(zhong)讀取(qu)數據(ju);或者(zhe)是主設備從(cong)(cong)(cong)從(cong)(cong)(cong)設備中(zhong)讀數據(ju),然(ran)后重(zhong)(zhong)啟(qi)起始條件,緊(jin)接著主設備往從(cong)(cong)(cong)設備中(zhong)寫數據(ju)。數據(ju)傳輸格(ge)式如下(xia):
 
第三種(zhong)操作在單(dan)個主設備系統中,重復的開啟起始條件機制要比用STOP終(zhong)止(zhi)傳(chuan)輸后又再次(ci)開啟總線更有效率。

