|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
I2C總線 |
| 作者:榮豹 欄目:技術(shù)交流 |
那位大俠能給小弟細(xì)講一下I2C總線呀, 看了半天還是有點(diǎn)迷茫,謝謝! |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2006/3/15 17:21:00 發(fā)布:
把協(xié)議好好讀幾遍,比在這里問(wèn)更有效果。 有具體的點(diǎn)不明白時(shí),才拿上來(lái)問(wèn)。 |
|
| 3樓: | >>參與討論 |
| 作者: 榮豹 于 2006/3/15 17:27:00 發(fā)布:
謝謝 協(xié)議已經(jīng)讀料好幾遍了,但是對(duì)于SDA,SCL線的作用還是有點(diǎn)迷茫,在傳送一個(gè)8位字節(jié)前和傳送后他們的變化,不好意思,第一次用,謝謝了computer00,在給講一下吧 |
|
| 4樓: | >>參與討論 |
| 作者: computer00 于 2006/3/15 17:43:00 發(fā)布:
SDA就是數(shù)據(jù)線,SCL就是時(shí)鐘線。 空閑時(shí)兩個(gè)都為高。 在數(shù)據(jù)正常發(fā)送過(guò)程中,只有當(dāng)SCL為低時(shí)才能改變狀態(tài)。 如果SCL為高時(shí),SDA改變狀態(tài),就會(huì)產(chǎn)生啟始或停止條件。 具體是:如果SCL為高,SDA由高到低,則產(chǎn)生啟始條件(或者是重復(fù)啟始條件)。 如果SCL為高,SDA由低到高,則產(chǎn)生停止條件。 數(shù)據(jù)必須在啟始條件后發(fā)送,第一個(gè)字節(jié)為設(shè)備地址。 這些在協(xié)議里面都寫(xiě)得很清楚,自己去看吧,暈菜~~~~~~~~~ |
|
| 5樓: | >>參與討論 |
| 作者: 吳明詩(shī) 于 2006/3/15 17:54:00 發(fā)布:
多讀幾遍 |
|
| 6樓: | >>參與討論 |
| 作者: 榮豹 于 2006/3/15 18:05:00 發(fā)布:
多謝 /*****************************************uchar RcvB()***************************************** 該函數(shù)是字節(jié)數(shù)據(jù)傳送函數(shù),功能是用來(lái)接收從器件傳來(lái)的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),發(fā)完后 調(diào)用應(yīng)答函數(shù) ***********************************************************************************************/ uchar RcvB() { uchar retc; uchar BitCnt; retc=0; Sda_I2C=1; /*置數(shù)據(jù)線為輸入方式*/ for(BitCnt=0;BitCnt<8;BitCnt++) { _NOP(); Scl_I2C=0; /*置時(shí)鐘線為低準(zhǔn)備接受數(shù)據(jù)位*/ _NOP(); /*時(shí)鐘低電平周期*/ _NOP(); _NOP(); _NOP(); _NOP(); Scl_I2C=1; /*置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/ _NOP(); _NOP(); retc=retc<<1; if(Sda_I2C==1) retc=retc+1; /*讀數(shù)據(jù)位,接收到數(shù)據(jù)位放入retc中*/ _NOP(); _NOP(); } Scl_I2C=0; _NOP(); _NOP(); return(retc); } 這是MCU從從器件中讀書(shū)據(jù)的函數(shù),幫忙分析一下, 尤其是 Scl_I2C=1;/*置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/ 難道非要SCL為高M(jìn)CU才能讀到數(shù)據(jù)嗎? if(Sda_I2C==1) retc=retc+1;難道從器件每發(fā)送一個(gè)BIT都要把SDA置高嗎? |
|
| 7樓: | >>參與討論 |
| 作者: computer00 于 2006/3/15 18:30:00 發(fā)布:
協(xié)議里面不是寫(xiě)得好清楚嗎??? “6.1 數(shù)據(jù)的有效性 SDA 線上的數(shù)據(jù)必須在時(shí)鐘的高電平周期保持穩(wěn)定數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL 線的時(shí)鐘 信號(hào)是低電平時(shí)才能改變見(jiàn)圖4)。” if(Sda_I2C==1) retc=retc+1;難道從器件每發(fā)送一個(gè)BIT都要把SDA置高嗎? 這句話的意思是,如果Sda_I2C為高(即Sda_I2C等于1),那么retc就加1,加1就相當(dāng)于把最后一位置1。 這樣就表示收到了一個(gè)1,并把它放在retc的最低位。如果Sda_I2C不等于1,即收到一個(gè)0,retc就 不加1,也就是最低位為0,表示收到一個(gè)0。如果還需要接收其它的位,則將retc往左移動(dòng)一位 (即上面那句retc=retc<<1;或者寫(xiě)成retc<<=1;),然后又跟上面的過(guò)程一樣,把接下來(lái)收到的一位放到最后。 |
|
| 8樓: | >>參與討論 |
| 作者: 榮豹 于 2006/3/16 8:27:00 發(fā)布:
非常感謝 非常感謝computer00,有機(jī)會(huì)請(qǐng)你吃飯:) |
|
| 9樓: | >>參與討論 |
| 作者: ←Amani 于 2006/3/16 8:56:00 發(fā)布:
只要把時(shí)序看明白了,按照時(shí)序?qū)懢蚈K了 |
|
| 10樓: | >>參與討論 |
| 作者: computer00 于 2006/3/16 9:08:00 發(fā)布:
謝謝。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào) |