不同層面上操控I2C進行讀寫操作

2021-06-26 18:29:50 字數 1183 閱讀 5335

最近一直在做有關i2c控制方面的工作。主要內容就是控制i2c,實現通過i2c對其上面掛載的從裝置的相關操作,即對從裝置的指定暫存器進行讀寫。

我實現了在三個層面上控制i2c對其從裝置進行讀寫的操作,分別是基於uboot環境,基於核心態環境和在使用者空間環境的。下面做一下簡單的介紹。

1.在uboot環境下:

在uboot中,實現對i2c的控制,主要方法有兩種:

1)在開發板上啟動uboot後,直接使用uboot的i2c操作的命令。

注意:這裡的位址都是十六進製制的,暫存器號和資料也是十六進製制的。

2)在編譯uboot的時候,新增自己的命令來實現控制i2c的讀寫操作。具體的在uboot中新增自己設定的命令方法在之前的文章中介紹過的。

主要是在命令處理檔案中新增部分函式操作就可以了。

首先,新增標頭檔案宣告,即#include ;其次,使用兩個相關的函式,即i2c_reg_write(address,reg,value),address是裝置的從位址,reg是對應的暫存器,value是要寫入的數值。對應的讀操作函式與其類似的,即i2c_reg_read();呼叫這兩個函式就可以實現讀寫暫存器操作了。

2.在核心空間中:

最常用的方法就是編寫乙個驅動模組,再動態載入進核心了。至於核心模組的編寫不再多說了。在函式中,呼叫相關的函式介面就能實現目的了。

相應的函式是:i2c_sambus_write_byte_data()和i2c_sambus_write_word_data()。前者是向暫存器中寫八位的資料,而後者是向暫存器中寫十六位的資料。這兩個函式都有三個引數,分別是i2c_client結構體的指標,暫存器號和資料。而相關的從裝置位址,是在i2c_client的結構體成員變數中設定的。

至於相關的讀操作,與之類似的。

3.在使用者空間中:

這裡主要會用到相關的系統呼叫函式的。

首先,是利用檔案操作函式,開啟i2c裝置節點進行操作。

其次,使用ioctl函式進行系統呼叫操作。

然後,利用我們最為熟悉的檔案寫函式,對該從裝置的暫存器進行讀寫就可以了。

引數分別是所開啟檔案的返回值,要傳送的資料,寫操作的資料數量。這裡要注意的是,我們必須對第二個引數進行處理,其實際是乙個指標。我們是將從裝置的暫存器號和相應的資料都封裝到這個引數之中了。這樣,整體的傳了進來。熟悉i2c的讀寫協議的話就很好理解了。

由於學習i2c的時間還是比較段,理解上還是存在很多偏差的,暫且寫到這裡。

Kafka針對JVM層面上做了哪些優化?

kafka為什麼要在jvm層次上進行優化?為了充分利用網路,提高吞吐量,實現高效網路通訊。kafka客戶端會將傳送給kafka伺服器的訊息先放入自身的記憶體緩衝中,多條訊息組成乙個batch,之後通過一次網路通訊傳送出去,避免了一條訊息一次網路請求。當網路傳輸完成之後 位於kafka客戶端 也就是j...

安全不只是意識層面上的

在資訊提高班兩年的時間裡,安全 二字一直縈繞在我們的身邊。雖然沒有發生過太大的事情的,但正像公尺老師所言,安全問題,無小事。加之最近的幾次危險事件,更要提高警惕,加深認識。但要清楚安全不只是意識層面上的東西。正如今天,徐霜師妹所言,發生事情要首先在自身上找問題。近期多次發生熱得快點燃紙張事件,我首先...

譚俊 從思想層面上做好幣改準備

7月19日晚,layers capital合夥人 language 創始人,原管理諮詢公司合夥人譚俊在fcoin幣改教育群作了主題為從 思想層面上做好幣改準備 的精彩分享。譚俊 做乙個成功的幣改,需要完成三個層面的準備和實施 思想層面 制度層面 操作層面。其中最虛的也是最重要的是思想層面的準備。區塊...