本發(fā)明涉及I2C通信領(lǐng)域,具體說(shuō)是一種基于廣播方式來(lái)查找I2C設(shè)備地址的方法。
背景技術(shù):
I2C(Inter-Integrated Circuit)總線(xiàn)是一種由PHLIPS公司開(kāi)發(fā)的兩線(xiàn)式總線(xiàn),用于連接微控制器及其外圍設(shè)備。I2C總線(xiàn)產(chǎn)生于80年代,最初為音頻和視頻設(shè)備開(kāi)發(fā),如今主要在服務(wù)器管理中使用,其中包括單個(gè)組件狀態(tài)的通信,其主要優(yōu)點(diǎn)是簡(jiǎn)單性和有效性。由于接口直接設(shè)置在組件之上,因此I2C總線(xiàn)占用的空間非常小,能夠有效減少電路板空間和芯片管腳數(shù)量,降低了設(shè)備之間的互聯(lián)成本。其另一個(gè)優(yōu)點(diǎn)是支持多主控,其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線(xiàn)。一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。如今,I2C通訊方式在嵌入式系統(tǒng)技術(shù)領(lǐng)域應(yīng)用越來(lái)越多,越來(lái)越廣。
I2C總線(xiàn)支持任何IC生產(chǎn)過(guò)程(NMOS、CMOS、雙極性),兩線(xiàn)(即串行數(shù)據(jù)SDA和串行時(shí)鐘SCL線(xiàn))在連接到總線(xiàn)的器件間傳遞信息。每個(gè)器件都有一個(gè)唯一的地址識(shí)別,而且都可以作為一個(gè)發(fā)送器或接收器。器件在執(zhí)行數(shù)據(jù)傳輸時(shí)也可以被看作是主機(jī)(Master,即主I2C設(shè)備)或從機(jī)(Slave,即從I2C設(shè)備),主機(jī)是初始化總線(xiàn)的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r(shí)鐘信號(hào)的器件,此時(shí),任何被尋址的器件都被認(rèn)為是從機(jī)。
I2C總線(xiàn)數(shù)據(jù)傳輸時(shí),SCL線(xiàn)為高電平時(shí),SDA線(xiàn)若保持穩(wěn)定,那么SDA上是在傳輸數(shù)據(jù)bit;若SDA發(fā)生跳變,則用來(lái)表示一個(gè)會(huì)話(huà)的開(kāi)始(SDA由高電平向低電平跳變)或結(jié)束(SDA由低電平向高電平跳變);SCL線(xiàn)為低電平時(shí),SDA線(xiàn)才能改變傳輸?shù)臄?shù)據(jù)bit。主機(jī)每發(fā)送完8bit數(shù)據(jù)后等待從機(jī)的應(yīng)答(ACK),即在第9個(gè)時(shí)鐘clock,若從機(jī)發(fā)送應(yīng)答(ACK),SDA線(xiàn)會(huì)被拉低,若從機(jī)沒(méi)有響應(yīng)應(yīng)答(ACK),則SDA線(xiàn)會(huì)被置高,將引起主機(jī)發(fā)生RESTART或STOP流程。
I2C總線(xiàn)的數(shù)據(jù)傳輸過(guò)程基本過(guò)程為:主機(jī)發(fā)出開(kāi)始信號(hào);主機(jī)接著送出1字節(jié)的從機(jī)地址信息,其中最低位為讀寫(xiě)控制碼(1為讀、0為寫(xiě)),高7位為從機(jī)器件地址代碼;從機(jī)發(fā)出認(rèn)可信號(hào)(ACK);主機(jī)開(kāi)始發(fā)送信息,每發(fā)完一字節(jié)后,從機(jī)發(fā)出認(rèn)可信號(hào)給主機(jī);主機(jī)發(fā)出停止信號(hào),結(jié)束輸出傳輸過(guò)程。
I2C總線(xiàn)上主機(jī)寫(xiě)從機(jī)寄存器的標(biāo)準(zhǔn)流程為:
1.主機(jī)發(fā)起START
2.主機(jī)發(fā)送I2C addr(7bit)和W操作0(1bit),等待從機(jī)ACK
3.從機(jī)發(fā)送ACK
4.主機(jī)發(fā)送reg addr(8bit),等待從機(jī)ACK
5.從機(jī)發(fā)送ACK
6.主機(jī)發(fā)送data(8bit),即要寫(xiě)入寄存器中的數(shù)據(jù),等待從機(jī)ACK
7.從機(jī)發(fā)送ACK
8.第6步和第7步可以重復(fù)多次,即寫(xiě)多個(gè)寄存器
9.主機(jī)發(fā)起STOP
I2C總線(xiàn)上主機(jī)讀從機(jī)寄存器的標(biāo)準(zhǔn)流程為:
1.主機(jī)發(fā)送I2C addr(7bit)和W操作1(1bit),等待從機(jī)ACK
2.從機(jī)發(fā)送ACK
3.主機(jī)Master發(fā)送reg addr(8bit),等待從機(jī)ACK
4.從機(jī)發(fā)送ACK
5.主機(jī)發(fā)起START
6.主機(jī)發(fā)送I2C addr(7bit)和R操作1(1bit),等待從機(jī)ACK
7.從機(jī)發(fā)送ACK
8.從機(jī)發(fā)送data(8bit),即寄存器里的值
9.主機(jī)發(fā)送ACK
10.第8步和第9步可以重復(fù)多次,即順序讀多個(gè)寄存器
因此大多數(shù)基于I2C通信協(xié)議進(jìn)行通信的設(shè)備都包括主機(jī)和從機(jī),如果主機(jī)不知道其從機(jī)的地址,則無(wú)法完成主機(jī)與指定從機(jī)的通信。在I2C通信過(guò)程中,由于從I2C的地址可變,在沒(méi)有保存的情況下,就會(huì)發(fā)生I2C地址丟失,導(dǎo)致難以再建立通信連接,因此目前急需一種主機(jī)查找從機(jī)I2C地址的方法。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)丟失從I2C地址的問(wèn)題,本發(fā)明的目的在于提供一種基于廣播的方式來(lái)查找I2C地址的方法,通過(guò)廣播的方式設(shè)置一個(gè)臨時(shí)的地址給從I2C,然后通過(guò)該地址跟從I2C通信,從而得到真正的從I2C地址,進(jìn)而可以進(jìn)行正常的通信。
本發(fā)明提供了一種基于廣播方式來(lái)查找I2C設(shè)備地址的方法,包括以下步驟:
步驟1,將需要查找地址的I2C設(shè)備作為從I2C設(shè)備,主I2C設(shè)備通過(guò)廣播命令方式將臨時(shí)虛擬地址發(fā)送給所述從I2C設(shè)備;
步驟2,該從I2C設(shè)備啟用通過(guò)廣播命令獲得的所述臨時(shí)虛擬地址;
步驟3,所述主I2C設(shè)備使用所述臨時(shí)虛擬地址讀取所述從I2C設(shè)備原來(lái)所使用的真實(shí)地址;
步驟4,所述主I2C設(shè)備使用所述臨時(shí)虛擬地址將從I2C設(shè)備的地址設(shè)置為原來(lái)所使用的真實(shí)地址。
在上述技術(shù)方案中,在所述步驟1之前將所述從I2C設(shè)備與所述主I2C設(shè)備單獨(dú)組網(wǎng)。
在上述技術(shù)方案中,所述步驟1中所述主I2C設(shè)備向從I2C設(shè)備發(fā)送的廣播命令中包括有待設(shè)置給從I2C設(shè)備的臨時(shí)虛擬地址。
在上述技術(shù)方案中,所述步驟1中的廣播命令的格式為:
起始位+廣播地址(W)+寄存器地址(2bytes)+寄存器內(nèi)容(2bytes)+結(jié)束位
其中,寄存器地址為對(duì)應(yīng)存放臨時(shí)虛擬地址的寄存器序號(hào);寄存器內(nèi)容為給所述從I2C設(shè)備分配的臨時(shí)虛擬地址。
在上述技術(shù)方案中,所述步驟3中,所述主I2C設(shè)備向所述從I2C設(shè)備發(fā)出的讀取命令的格式為:
起始位+設(shè)備地址1(W)+寄存器地址(2bytes)+起始位+設(shè)備地址2(R)+寄存器內(nèi)容(2bytes)+結(jié)束位
其中,設(shè)備地址1和設(shè)備地址2為臨時(shí)虛擬地址;寄存器地址為所述從I2C設(shè)備中存放有原來(lái)所使用的真實(shí)地址的寄存器序號(hào);寄存器內(nèi)容為等待從I2C設(shè)備應(yīng)答的寄存器內(nèi)容。
在上述技術(shù)方案中,所述步驟4中,所述主I2C設(shè)備通過(guò)設(shè)置命令將從I2C設(shè)備的地址設(shè)置為從I2C設(shè)備原來(lái)所使用的真實(shí)地址。
在上述技術(shù)方案中,所述設(shè)置命令的格式為:
起始位+設(shè)備地址(W)+寄存器地址(2bytes)+寄存器內(nèi)容(2bytes)+結(jié)束位
其中,設(shè)備地址為臨時(shí)虛擬地址;寄存器地址為復(fù)位寄存器的寄存器序號(hào);寄存器內(nèi)容為從I2C設(shè)備原來(lái)所使用的真實(shí)地址。
本發(fā)明取得了以下技術(shù)效果:本發(fā)明能夠通過(guò)發(fā)廣播的方式虛擬一個(gè)地址給從I2C,并且通過(guò)該虛擬地址來(lái)找到真正的從I2C地址,方法簡(jiǎn)單有效;本發(fā)明還可以提供一種基于上述方法的I2C通信系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,沒(méi)有添加任何外部輔助設(shè)備,能夠簡(jiǎn)單快速的獲取從機(jī)地址,成本低廉,易于操作,適于廣泛推廣。
附圖說(shuō)明
圖1為本發(fā)明的方法執(zhí)行流程圖。
具體實(shí)施方式
為了便于本領(lǐng)域普通技術(shù)人員理解和實(shí)施本發(fā)明,下面結(jié)合附圖及具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
由此,本發(fā)明提供的一種基于廣播的方式來(lái)查找I2C地址的方法,包含以下幾個(gè)步驟:
0.將需要查找地址/確認(rèn)地址的I2C設(shè)備作為從I2C設(shè)備與主I2C設(shè)備單獨(dú)組網(wǎng),使該I2C總線(xiàn)上僅有主I2C設(shè)備和需要查找地址/確認(rèn)地址的I2C設(shè)備。
1.主I2C設(shè)備通過(guò)廣播方式將臨時(shí)虛擬地址發(fā)送給從I2C設(shè)備。
主I2C設(shè)備向I2C總線(xiàn)上的從I2C設(shè)備發(fā)送廣播命令,廣播命令中包含主I2C設(shè)備發(fā)給從I2C設(shè)備的虛擬地址A,格式如下:
起始位+廣播地址(W)+寄存器地址(2byte)+寄存器內(nèi)容(2byte)+結(jié)束位
其中,寄存器地址對(duì)應(yīng)存放虛擬的I2C地址寄存器序號(hào),例如0x28;寄存器內(nèi)容存放臨時(shí)給從I2C設(shè)備分配的虛擬地址A。
從I2C設(shè)備寄存器地址分配規(guī)劃舉例如下:
2.從I2C設(shè)備啟用通過(guò)廣播命令獲得的臨時(shí)虛擬地址,即從I2C設(shè)備接收到該廣播命令后就自動(dòng)將寄存器內(nèi)容中的虛擬地址A作為從I2C設(shè)備的地址(即,從I2C設(shè)備根據(jù)接收到的廣播命令將寄存器地址(如步驟1中的舉例,此處為0x28)的內(nèi)容修改為由廣播命令發(fā)送來(lái)的虛擬I2C地址,并將其作為自己的I2C地址);
3.主I2C設(shè)備發(fā)送普通讀取命令給從I2C設(shè)備,格式如下:
起始位+設(shè)備地址1(W)+寄存器地址(2)+起始位+設(shè)備地址2(R)+寄存器內(nèi)容(2)+結(jié)束位
此時(shí)的設(shè)備地址1和設(shè)備地址2就是在步驟2中剛剛設(shè)置的虛擬地址A;寄存器地址是從I2C設(shè)備上存放原來(lái)真實(shí)I2C地址的寄存器地址(如步驟1中的舉例,此處為0x29);該寄存器內(nèi)容就是從I2C設(shè)備返回給主I2C設(shè)備的其原來(lái)真實(shí)I2C地址B。通過(guò)該讀取命令,主I2C設(shè)備利用虛擬地址A讀取從I2C設(shè)備之前所使用的真實(shí)I2C地址(即真實(shí)地址B)。
4.主I2C設(shè)備發(fā)送設(shè)置命令給從I2C設(shè)備,將其地址設(shè)置為真實(shí)I2C地址,格式如下:
起始位+設(shè)備地址(W)+寄存器地址(2)+寄存器內(nèi)容(2)+結(jié)束位
在發(fā)送此命令時(shí),使用的設(shè)備地址為虛擬I2C地址(即虛擬地址A),寫(xiě)入的寄存器地址為復(fù)位寄存器(如步驟1中的舉例,此處為0x30),寄存器內(nèi)容為真實(shí)I2C地址B。
5.此時(shí)主I2C設(shè)備可以使用從I2C設(shè)備原有地址與從I2C設(shè)備進(jìn)行正常通信。
由于此時(shí)已經(jīng)正確獲得從I2C設(shè)備原來(lái)所使用的地址(真實(shí)地址B),可將將可將從I2C設(shè)備接入原來(lái)的/或其他新的I2C總線(xiàn)上正常使用。
在此過(guò)程中省略了通信過(guò)程中從I2C設(shè)備接收到主I2C設(shè)備命令后,對(duì)主I2C設(shè)備命令的正常ACK響應(yīng)。
以上實(shí)施例僅為本發(fā)明的一種實(shí)施方式,其描述較為具體和詳細(xì),但不能因此而理解為對(duì)本發(fā)明專(zhuān)利范圍的限制。其具體地址/內(nèi)容分配和命令應(yīng)答可根據(jù)實(shí)際需要進(jìn)行相應(yīng)的調(diào)整。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。