溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

S5PV210-arm-裸機-i2c

發(fā)布時間:2020-08-09 10:17:41 來源:網(wǎng)絡(luò) 閱讀:556 作者:小溢 欄目:開發(fā)技術(shù)









I2C協(xié)議,是同步的,串行通信方式。有兩個線,一根SCLOCK時鐘線,一根SDA數(shù)據(jù)線,時鐘是右SOC提供的,SOC和外設(shè)用I2C通信時,使用的是一個時鐘,數(shù)據(jù)線是兩者傳輸信息用的。一般在通信的過程中,分為主設(shè)備和從設(shè)備,如果主設(shè)備要向從設(shè)備發(fā)送信息時,從設(shè)備不可以發(fā)送東西。

可以一對一進行I2C通信,也可以一對多進行I2C通信,在一對多I2C通信時,主設(shè)備像往常一樣先把SDA,SCL拉高,SCL維持高電平的這一段時間里,SDA產(chǎn)生了一個由高電平到低電平的變化,就成功發(fā)送了一個起始位,這時,所有的從設(shè)配都開始把自己的耳朵豎起來聽了, 因為所有從設(shè)備都是連接在這兩條總線上的。發(fā)送完起始位后,主設(shè)備開始發(fā)送八位數(shù)據(jù)了,分別在SCL的每一個上升沿讀取SDA數(shù)據(jù)線的高電平和低電平對應(yīng)的0和1,這八位數(shù)據(jù)包括七位的從設(shè)備的地址,和一位(0或1)代表讀或者寫。當從設(shè)備發(fā)現(xiàn)發(fā)送過來的地址后,就趕緊把這個地址和自己的地址進行對比(每個從設(shè)備都有一個自己固定的地址(在一個電路板上)),如果從設(shè)備發(fā)現(xiàn)發(fā)送過來的地址和自己的地址相符合,就知道這時主設(shè)備就要開始和自己進行通信了。如果發(fā)現(xiàn)發(fā)送過來的地址和自己的地址不符合,那么從設(shè)備就不給予理會,因為它知道不是在叫他。當發(fā)現(xiàn)地址和自己的地址一樣時,這個設(shè)備就開始讀取了第八位,從而知道主設(shè)備是要跟它進行寫還是讀,確認是讀或者寫后,接收方要給發(fā)送發(fā)一個應(yīng)答信號ACK,來告訴一聲發(fā)送放,證明它收到了,它知道了。當接收方看見這個ACK信號后,就知道他已經(jīng)應(yīng)答了,回復了,接著就開始發(fā)送真正的數(shù)據(jù)了。也是八位的數(shù)據(jù),因為I2C在通信時,一次傳輸?shù)臄?shù)據(jù)是一個字節(jié)。接收方接受到這些數(shù)據(jù)后,也要發(fā)送一位應(yīng)答信號,來告訴發(fā)送方我已經(jīng)接收完畢了。接著發(fā)送方就可以發(fā)送一個停止位,證明這次通信結(jié)束了。停止位是SCL維持在一個高電平的時間段內(nèi),SDA由一個低電平到一個高電平的變化。




在兩個設(shè)備在進行I2C通信時,主設(shè)備發(fā)完起始位后,就要開始發(fā)送地址,去尋找要進行通信的那個從設(shè)備,這個地址一共由八位組成,其中高7位是地址,低一位是R/W,讀或者寫,一般如果主設(shè)備要接收從設(shè)備的數(shù)據(jù)時,低一位為1,反之為0.



一般是發(fā)送一個起始信號,在發(fā)送一個字節(jié)的地址信息,包括RW位,一共八位,接著等從設(shè)備發(fā)送ACK響應(yīng),我們在接收一個字節(jié)的數(shù)據(jù),這八位就是我們要讀的數(shù)據(jù)。讀完后,我們要給從設(shè)備發(fā)送一個ACK,告訴它我們讀完了,接著我們在給發(fā)送一個停止位,或者不發(fā)送停止位,繼續(xù)讀。




代碼的框架:

整個代碼的框架包括兩部分,一部分是I2C的代碼,稱為物理層,就負責I2C的時序,起始位,發(fā)送數(shù)據(jù),接受數(shù)據(jù)應(yīng)答的時序等。

另一份部分是G - secsor傳感器的代碼,這部分代碼稱為應(yīng)用層,協(xié)議層,傳輸層,負責控制自己內(nèi)部的寄存器,如果是通過總線給自己寫數(shù)據(jù)的話,也就是說如果是SOC控制I2C的物理層給Gsensor的數(shù)據(jù)的話,就是在Gsensor協(xié)議層去操作,去調(diào)用I2C的發(fā)送數(shù)據(jù)的函數(shù),將數(shù)據(jù)寫入到自己的相應(yīng)的寄存器中。

如果是SOC控制Gsensor通過I2C總線讀取數(shù)據(jù)到SOC的話,就是在Gsensor的協(xié)議層代碼中通過調(diào)用I2C的接收

函數(shù),將寄存器中的數(shù)據(jù)通過I2C的總線傳輸?shù)絊OC中去。

所以整個代碼框架是分兩個部分的,一部分是I2C的代碼叫做物理層,一部分是Gsensor的代碼,叫做協(xié)議層,或者應(yīng)用層,或者傳輸層。

在協(xié)議層寫代碼時,只要知道自己的工作流程即可,不用去關(guān)心I2C物理層的代碼是怎么實現(xiàn)的。












向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI