?
飛凌嵌入式OK3399-C開發(fā)板預(yù)留出了I2C4引腳接口,位于P32插針引腳上,分別是I2C4_SCL和I2C4_SDA。小編將通過本篇文章為大家列舉和說明如何使用I2C4掛載at24c08(EEPROM)芯片。


修改結(jié)果
1、修改kernel/arch/arm64/boot/dts/rockchip/OK3399.dts,添加修改如下:

?
2、摘除at24c08模塊上的上拉電阻,飛線使用1.8V給模塊供電,接入I2C4_SCL和I2C4_SDA。
修改思路
我們要添加一個(gè)I2C設(shè)備的思路為:在設(shè)備樹中添加描述->在設(shè)備樹描述中添加對(duì)應(yīng)設(shè)備驅(qū)動(dòng)->設(shè)備驅(qū)動(dòng)添加到內(nèi)核。
按照思路,首先要在設(shè)備樹I2C4節(jié)點(diǎn)下添加at24c08的設(shè)備信息。在kernel/arch/arm64/boot/dts/rockchip/OK3399-C.dts文件,找到I2C4節(jié)點(diǎn)如下:

?
目前是disabled的狀態(tài),并且沒有任何設(shè)備信息。添加設(shè)備信息如下:

?
如上圖,通過設(shè)備樹告訴內(nèi)核,I2C4開始使用,并且掛載了一個(gè)EEPROM設(shè)備,名字叫at24c08@50,其使用的驅(qū)動(dòng)是compatible=“”;
那么我們現(xiàn)在缺少這個(gè)驅(qū)動(dòng),一般的I2C設(shè)備所使用的驅(qū)動(dòng)文件對(duì)應(yīng)的I2C廠家會(huì)提供,如果廠家說不需要驅(qū)動(dòng)等,其實(shí)不是指的真的“不需要”驅(qū)動(dòng),而是他們的設(shè)備是可以使用通用驅(qū)動(dòng)的。
本文中的設(shè)備就是這樣,與廠家溝通后表示沒有驅(qū)動(dòng)文件。那么直接在內(nèi)核目錄下查找eeprom、at24這樣的字眼,找找看有沒有對(duì)應(yīng)的通用驅(qū)動(dòng)文件。

?
可見有kernel/drivers/misc/eeprom/at24.c文件。
查看其內(nèi)容是如何匹配使用這個(gè)驅(qū)動(dòng)的,正常來說驅(qū)動(dòng)文件中應(yīng)該預(yù)留了.compatible= *** 作為設(shè)備樹調(diào)用該驅(qū)動(dòng)的接口,只要在設(shè)備樹描述里的compatible與 驅(qū)動(dòng)文件中的.compatible中描述的一致,就會(huì)匹配成功了。
但是這個(gè)at24.c中并沒有.compatible,只有一個(gè)at24_ids如下其中有”24c08”:

?
對(duì)比同目錄的at25.c文件就有.compatible沒有ids。

?
ids中描述的也是和.compatible一樣,是設(shè)備樹用來識(shí)別匹配使用的,其中的三種識(shí)別匹配條件感興趣的可以深追一下。因與本文無關(guān),不再贅述。所以找到了對(duì)應(yīng)的驅(qū)動(dòng)文件,返回設(shè)備樹添加描述。

?
現(xiàn)在這樣是告訴了內(nèi)核我要使用I2C4,我的I2C4下有個(gè)EEPROM設(shè)備,使用的是“24c08”驅(qū)動(dòng),但是還沒有將”24c08”這個(gè)文件給到內(nèi)核,那么接下來的目的就是把驅(qū)動(dòng)編進(jìn)內(nèi)核。
在kernel目錄下運(yùn)行makemenuconfig,搜索at24,如下:

?
按下數(shù)字1,自動(dòng)跳轉(zhuǎn)到對(duì)應(yīng)選項(xiàng),按下y選中,保存退出。

?
因?yàn)閙akemenuconfig修改的是.config文件,而編譯腳本中每次都會(huì)重新生成.config文件,所以為了讓修改生效,修改編譯腳本,使其不重新生成.config文件,如下:

?
將生成.config文件的命令注釋掉,編譯內(nèi)核,這樣就將”24c08”給到內(nèi)核,也通過設(shè)備樹告訴內(nèi)核,I2C4下有個(gè)EEPROM設(shè)備要用“24c08”。
到此,我們的常規(guī)添加設(shè)備思路就已經(jīng)完成了:在設(shè)備樹中添加描述->設(shè)備樹描述對(duì)應(yīng)設(shè)備驅(qū)動(dòng)->設(shè)備驅(qū)動(dòng)添加到內(nèi)核。
接下來就是編譯內(nèi)核,燒寫boot鏡像到開發(fā)板,使用i2ctool的命令進(jìn)行查看,這里也不贅述i2ctool命令的具體使用方法。使用命令:i2cdetect-l 、i2cdetect-y 4。

?
對(duì)應(yīng)的地址已經(jīng)被驅(qū)動(dòng)注冊(cè),但是沒有生成devices下的I2C4設(shè)備,說明模塊可能沒有正常工作,查看模塊相關(guān)信息。

?

?

?
模塊自帶I2C4上拉電阻,因?yàn)镺K3399-C底板上也帶有上拉電阻如下圖,并且是1.8V上拉,為了電平匹配,不修改底板的狀態(tài)下,使用1.8V為基準(zhǔn),將模塊帶有的上拉電阻摘除,使用1.8V配置。

?
再次修改設(shè)備樹,添加上時(shí)鐘描述和設(shè)備地址描述。

?
編譯后,燒寫內(nèi)核,燒寫完畢啟動(dòng)開發(fā)板。

?
識(shí)別到I2C4下的設(shè)備,然后進(jìn)行讀寫測(cè)試即可,如下命令:
echo"hello my world" > /sys/bus/i2c/devices/1-0050/eeprom
cat/sys/bus/i2c/devices/4-0050/eeprom

?
至此一個(gè)新的I2C EEPROM設(shè)備添加成功,對(duì)I2C設(shè)備的讀寫操作也可以通過開發(fā)板中帶有的i2ctool相關(guān)命令操作。
-
ARM
+關(guān)注
關(guān)注
135文章
9553瀏覽量
391915 -
嵌入式
+關(guān)注
關(guān)注
5198文章
20449瀏覽量
334104 -
Linux
+關(guān)注
關(guān)注
88文章
11760瀏覽量
219043
發(fā)布評(píng)論請(qǐng)先 登錄
RK3576平臺(tái)PCA9548 I2C開關(guān)設(shè)備樹配置與生效全解析
一文打通Rockchip DP調(diào)試:從原理到實(shí)戰(zhàn),覆蓋RK3399/RK3576/RK3588全平臺(tái)
RA MCU眾測(cè)寶典 | I2C讀取EEPROM
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板實(shí)現(xiàn)GPIO功能復(fù)用
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板實(shí)現(xiàn)I2C功能復(fù)用
33A66-B1 rk3399開發(fā)板規(guī)格書
RK3399:性能與能效的嵌入式先鋒,解鎖多場(chǎng)景應(yīng)用潛力
RK3506開發(fā)板Linux開發(fā)板極致性價(jià)比之選
HZ-EVM-RK3399-技術(shù)規(guī)格說明書
一文掌握RK3568開發(fā)板Android13掛載Windows共享目錄
RK3568開發(fā)板教程:以iTOP-RK3568開發(fā)板為例 Android13通過CIFS協(xié)議掛載Windows共享目錄
RK3399開發(fā)板I2C4掛載EEPROM實(shí)例
評(píng)論