導航:首頁 > 數據分析 > i2c高速數據傳輸線如何使用

i2c高速數據傳輸線如何使用

發布時間:2023-01-06 14:05:44

⑴ I2C匯流排的數據傳輸

數據傳輸必須帶響應,相關的響應時鍾脈沖由主機產生。在響應的時鍾脈沖期間發送器釋放SDA 線(高)。
在響應的時鍾脈沖期間,接收器必須將SDA 線拉低,使它在這個時鍾脈沖的高電平期間保持穩定的低電平。
通常被定址的接收器在接收到的每個位元組後,除了用CBUS 地址開頭的數據,必須產生一個響應。當從機不能響應從機地址時(例如它正在執行一些實時函數不能接收或發送),從機必須使數據線保持高電平,主機然後產生一個停止條件終止傳輸或者產生重復起始條件開始新的傳輸。
如果從機接收器響應了從機地址,但是在傳輸了一段時間後不能接收更多數據位元組,主機必須再一次終止傳輸。這個情況用從機在第一個位元組後沒有產生響應來表示。從機使數據線保持高電平,主機產生一個停止或重復起始條件。
如果傳輸中有主機接收器,它必須通過在從機發出的最後一個位元組時產生一個響應,向從機發送器通知數據結束。從機發送器必須釋放數據線,允許主機產生一個停止或重復起始條件。 所有主機在SCL線上產生它們自己的時鍾來傳輸I2C匯流排上的報文。數據只在時鍾的高電平周期有效,因此需要一個確定的時鍾進行逐位仲裁。
時鍾同步通過線與連接I2C 介面到SCL 線來執行。這就是說SCL 線的高到低切換會使器件開始數它們的低電平周期,而且一旦器件的時鍾變低電平,它會使SCL 線保持這種狀態直到到達時鍾的高電平。但是如果另一個時鍾仍處於低電平周期,這個時鍾的低到高切換不會改變SCL 線的狀態。因此SCL 線被有最長低電平周期的器件保持低電平。此時低電平周期短的器件會進入高電平的等待狀態。
當所有有關的器件數完了它們的低電平周期後,時鍾線被釋放並變成高電平。之後,器件時鍾和SCL線的狀態沒有差別,而且所有器件會開始數它們的高電平周期。首先完成高電平周期的器件會再次將SCL線拉低。
這樣產生的同步SCL 時鍾的低電平周期由低電平時鍾周期最長的器件決定,而高電平周期由高電平時鍾周期最短的器件決定。

⑵ iic的應用

I2C匯流排是各種匯流排中使用信號線最少,並具有自動定址、多主機時鍾同步和仲裁等功能的匯流排。因此,使用I2C匯流排設計計算機系統十分方便靈活,體積也小,因而在各類實際應用中得到廣泛應用。下面舉二個應用示例。
I2C的運用比如在鐵電存儲器中,用鐵電存儲數據就是用的I2C匯流排協議。 目前,51、96系列的單片機應用很廣,但是由於它們都沒有I2C匯流排介面,從而限制了在這些系統中使用具有I2C匯流排介面的器件。通過對I2C匯流排時序的分析,可以用51單片機的兩根I/O線來實現I2C匯流排的功能。接I2C匯流排規定:SCL線和SDA線是各設備對應輸出狀態相「與」的結果,任一設備都可以用輸出低電平的方法來延長SCL的低電平時間,以迫使高速設備進入等待狀態,從而實現不同速度設備間的時鍾同步。因此,即使時鍾脈沖的高、低電平時間長短不一,也能實現數據的可靠傳送,可以用軟體控制I/O口做I2C介面。下面就是用GMS97C2051的通用I/O口來作為I2C匯流排介面,並由軟體控制實現數據傳送的例子,圖6為其連線圖。
在單主控器的系統中,時鍾線僅由主控器驅動,因此可以用51系列的一根I/O線作為SCL的信號線,將其設置為輸出方式,並由軟體控制來產生串列時鍾信號。在實際系統中使用了P1.3。另一根I/O線P1.2作為I2C匯流排的串列數據線,可在軟體控制下在時鍾的低電平期間讀取或輸出數據。系統傳輸數據的過程如下:先由單片機發出一個啟始數據信號,接著送出要訪問器件的7位地址數據,並等待被控器件的應答信號。當收到應答信號後,根據訪問要求進行相應的操作。如果是讀入數據,則數據線可一直設為輸入方式,中間不需要改變SDA線的工作方式,每讀入一個位元組均應依次檢測應答信號;如果是輸出數據,則首先將SDA設置為輸出方式,當發送完一個位元組後,需要改變SDA線為輸入方式,此時讀入被控器件的應答信號就完成了一個位元組的傳送。當所有數據傳輸完畢後,應向SDA發出一個停止信號,以結束該次數據傳輸。 下面給出51系列用匯編語言實現啟始、停止、讀、寫、應答的程序,讀者也可以根據I2C匯流排時序在96系列或其它單片機上實現I2C匯流排介面。
a.啟動位程序
ACK:CLR P1.3
NOP
NOP
SETB P1.2
NOP
NOP
NOP
CPL P1.3 ;P1.3=1
NOP
NOP
NOP
DENGDAI:JB P1.2,DENGDAI
RET
b.讀數據程序
讀位元組可以在當前地址讀(CURRENT
READ),也可以隨機讀(RANDOM READ),讀出數據的最後一個位元組後不用加應答信號。
READ:PUSH 0EH
CLR P1.4
LCALL BSTART ;START
MOV A,#0A0H ;SEND THE CNOTROL BYTE
LCALL SENDBYTE
LCALL ACK
MOV A,R1 ;SEND THE ADDRESS
LCALL SENDBYTE
LCALL ACK
LCALL BSTART ;START
MOV A,#0A1H ;SEND THE CNOTROL BYTE
LCALL SENDBYTE
LCALL ACK
LCALL READBYTE
LCALL BSTOP
POP 0EH
RET
送位元組程序:
SENDBYTE:PUSH 0EH
PUSH 00H
MOV R0,#08H
LOOP1:CLR P1.3
NOP
NOP
RLC A
MOV P1.2,C
CPL P1.3 ;P1.3=1
NOP
NOP
DJNZ R0,LOOP1
POP 00H
POP 0EH
RET
讀位元組子程序:
READBYTE:PUSH 0EH
PUSH 00H
MOV R0,#08H;READ THE CONTENT
CLR A
LOOP4:CLR P1.3
NOP
NOP
NOP
SETB P1.3 ;P1.3=1
MOV C,P1.2
RLC A
DJNZ R0,LOOP4
MOV R2,A
POP 00H
POP 0EH
RET
c.寫數據程序:
WRITE:PUSH 0EH
CLR P1.4
LCALL BSTART
MOV A,#0A0H
CLALL SENDBYTE ;SEND THE CONTROL BYTE
LCALL ACK
MOV A,R1 ;SEND THE ADDRESS
LCALL SENDBYTE
LCALL ACK
MOV A,R2 ;WRITE THE CONTENT
LCALL SENDBYTE
LCALL ACK
LCALL BSTOP
POP 0EH
RET
連續寫的兩個位元組之間最好是有10ms的延時。當然,也可以進行頁寫(PAGE
WRITE),即一次性連續寫8個位元組,但採用頁寫方式時每個位元組後要有一個應答信號。
d.停止位程序:
BSTOP:CLR P1.3
NOP
NOP
CLR P1.2
NOP
NOP
NOP
SETB P1.3
NOP
NOP
NOP
SETB P1.2
RET // IIC開始
void Start()
{
SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;
}
// IIC 結束
void Stop()
{
SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;
}
// IIC 讀取應答
void RACK()
{
SDA=1;NOP4();SCL=1;NOP4();SCL=0;
}
// IIC 發送非應答
void NO_ACK()
{
SDA=1;SCL=1;NOP4();SCL=0;SDA=0;
}
// IIC向從設備寫入一位元組數據
void Write_A_Byte(uchar b)
{
uchar i;
for(i=0;i<8;i++)
{
b<<=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0;
}
RACK();
}
// IIC 向從設備的指定地址寫入數據
void Write_IIC(uchar addr,uchar dat)
{
Start();
Write_A_Byte(0xa0);
Write_A_Byte(addr);
Write_A_Byte(dat);
Stop();
DelayMS(10);
}
// IIC 從從設備讀取數據
uchar Read_A_Byte()
{
uchar i,b;
for(i=0;i<8;i++)
{
SCL=1;b<<=1;B|=SDA;SCL=0;
}
return b;
}
// IIC 從從設備的當前地址讀取數據
uchar Read_Current()
{
uchar d;
Start();
Write_A_Byte(0xa1);
d=Read_A_Byte();
NO_ACK();
Stop();
return d;
}
// IIC 從從設備的任意地址讀取數據
uchar Random_Read(uchar addr)
{
Start();
Write_A_Byte(0xa0);
Write_A_Byte(addr);
Stop();
return Read_Current();
}

閱讀全文

與i2c高速數據傳輸線如何使用相關的資料

熱點內容
電腦沒聯網怎麼拷貝文件 瀏覽:224
wps工具欄怎麼換成中文 瀏覽:338
win7和xp共享文件 瀏覽:883
蘋果4代音量鍵沒反應 瀏覽:827
怎樣打開tif文件 瀏覽:153
java下載文件zip 瀏覽:440
qq瀏覽器壓縮文件怎麼設密碼 瀏覽:526
黃埔數控編程哪裡好 瀏覽:406
mac109升級1010 瀏覽:691
在java的菜單如何導入文件 瀏覽:982
現在什麼網站銷量最高 瀏覽:760
angularjsclass定義 瀏覽:157
ug數控編程怎麼導出程序 瀏覽:466
cmdb文件 瀏覽:710
鵯文件夾 瀏覽:763
網路輿情應對的基本理念是什麼 瀏覽:433
word2007層次結構 瀏覽:456
去掉文件名的數字 瀏覽:713
word公司 瀏覽:710
淘寶店數據包怎麼上傳 瀏覽:341

友情鏈接