瑞芯微RK3399-I2C4掛載EEPROM的修改案例

ningmengzier發表於2022-07-22
小編將透過本篇文章為大家列舉和說明如何使用I2C4掛載at24c08(EEPROM)晶片。




修改結果
1、修改kernel/arch/arm64/boot/dts/rockchip/OK3399.dts,新增修改如下:

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯

2、摘除at24c08模組上的上拉電阻,飛線使用1.8V給模組供電,接入I2C4_SCL和I2C4_SDA。

修改思路
我們要新增一個I2C裝置的思路為: 在裝置樹中新增描述->在裝置樹描述中新增對應裝置驅動->裝置驅動新增到核心

按照思路,首先要在裝置樹I2C4節點下新增at24c08的裝置資訊。在 kernel/arch/arm64/boot/dts/rockchip/OK3399-C.dts檔案,找到I2C4節點如下:

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯

目前是disabled的狀態,並且沒有任何裝置資訊。新增裝置資訊如下:

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯

如上圖,透過裝置樹告訴核心,I2C4開始使用,並且掛載了一個EEPROM裝置,名字叫 at24c08@50,其使用的驅動是compatible=“”;

那麼我們現在缺少這個驅動,一般的I2C裝置所使用的驅動檔案對應的I2C廠家會提供,如果廠家說不需要驅動等,其實不是指的真的“不需要”驅動,而是他們的裝置是可以使用通用驅動的。

本文中的裝置就是這樣,與廠家溝通後表示沒有驅動檔案。那麼直接在核心目錄下查詢eeprom、at24這樣的字眼,找找看有沒有對應的通用驅動檔案。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯 切換為居中


可見有 kernel/drivers/misc/eeprom/at24.c檔案。

檢視其內容是如何匹配使用這個驅動的,正常來說驅動檔案中應該預留了.compatible= *** 作為裝置樹呼叫該驅動的介面,只要在裝置樹描述裡的compatible與 驅動檔案中的.compatible中描述的一致,就會匹配成功了。

但是這個at24.c中並沒有.compatible,只有一個at24_ids如下其中有”24c08”:

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯 切換為居中


對比同目錄的at25.c檔案就有.compatible沒有ids。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯


ids中描述的也是和.compatible一樣,是裝置樹用來識別匹配使用的,其中的三種識別匹配條件感興趣的可以深追一下。因與本文無關,不再贅述。所以找到了對應的驅動檔案,返回裝置樹新增描述。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯


現在這樣是告訴了核心我要使用I2C4,我的I2C4下有個EEPROM裝置,使用的是“24c08”驅動,但是還沒有將”24c08”這個檔案給到核心,那麼接下來的目的就是把驅動編進核心。

在kernel目錄下執行makemenuconfig,搜尋at24,如下:

瑞芯微RK3399-I2C4掛載EEPROM的修改案例


按下數字1,自動跳轉到對應選項,按下y選中,儲存退出。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例



因為makemenuconfig修改的是.config檔案,而編譯指令碼中每次都會重新生成.config檔案,所以為了讓修改生效,修改編譯指令碼,使其不重新生成.config檔案,如下:

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯

將生成.config檔案的命令註釋掉,編譯核心,這樣就將”24c08”給到核心,也透過裝置樹告訴核心,I2C4下有個EEPROM裝置要用“24c08”。

到此,我們的常規新增裝置思路就已經完成了:在裝置樹中新增描述->裝置樹描述對應裝置驅動->裝置驅動新增到核心

接下來就是編譯核心,燒寫boot映象到開發板,使用i2ctool的命令進行檢視,這裡也不贅述i2ctool命令的具體使用方法。使用命令:i2cdetect-l 、i2cdetect-y 4。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯

對應的地址已經被驅動註冊,但是沒有生成devices下的I2C4裝置,說明模組可能沒有正常工作,檢視模組相關資訊。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯



瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯 切換為居中


瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯 切換為居中


模組自帶I2C4上拉電阻,因為OK3399-C底板上也帶有上拉電阻如下圖,並且是1.8V上拉,為了電平匹配,不修改底板的狀態下,使用1.8V為基準,將模組帶有的上拉電阻摘除,使用1.8V配置。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯


再次修改裝置樹,新增上時鐘描述和裝置地址描述。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯


編譯後,燒寫核心,燒寫完畢啟動開發板。

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯

識別到I2C4下的裝置,然後進行讀寫測試即可,如下命令:
echo"hello my world" > /sys/bus/i2c/devices/1-0050/eeprom cat/sys/bus/i2c/devices/4-0050/eeprom

瑞芯微RK3399-I2C4掛載EEPROM的修改案例
編輯 切換為居中


至此一個新的I2C EEPROM裝置新增成功,對I2C裝置的讀寫操作也可以透過開發板中帶有的i2ctool相關命令操作。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989353/viewspace-2907181/,如需轉載,請註明出處,否則將追究法律責任。

相關文章