當前位置:網站首頁>OKRK3399開發板預留I2C4掛載EEPROM
OKRK3399開發板預留I2C4掛載EEPROM
2022-07-23 14:21:50【卡卡羅特GT】
小編將通過本篇文章為大家列舉和說明如何使用I2C4掛載at24c08(EEPROM)芯片。
修改結果
1、修改kernel/arch/arm64/boot/dts/rockchip/OK3399.dts,添加修改如下:
2、摘除at24c08模塊上的上拉電阻,飛線使用1.8V給模塊供電,接入I2C4_SCL和I2C4_SDA。
修改思路
我們要添加一個I2C設備的思路為:在設備樹中添加描述->在設備樹描述中添加對應設備驅動->設備驅動添加到內核。
按照思路,首先要在設備樹I2C4節點下添加at24c08的設備信息。在kernel/arch/arm64/boot/dts/rockchip/OK3399-C.dts文件,找到I2C4節點如下:
目前是disabled的狀態,並且沒有任何設備信息。添加設備信息如下:
如上圖,通過設備樹告訴內核,I2C4開始使用,並且掛載了一個EEPROM設備,名字叫[email protected],其使用的驅動是compatible=“”;
那麼我們現在缺少這個驅動,一般的I2C設備所使用的驅動文件對應的I2C廠家會提供,如果廠家說不需要驅動等,其實不是指的真的“不需要”驅動,而是他們的設備是可以使用通用驅動的。
本文中的設備就是這樣,與廠家溝通後錶示沒有驅動文件。那麼直接在內核目錄下查找eeprom、at24這樣的字眼,找找看有沒有對應的通用驅動文件。
可見有kernel/drivers/misc/eeprom/at24.c文件。
查看其內容是如何匹配使用這個驅動的,正常來說驅動文件中應該預留了.compatible= *** 作為設備樹調用該驅動的接口,只要在設備樹描述裏的compatible與 驅動文件中的.compatible中描述的一致,就會匹配成功了。
但是這個at24.c中並沒有.compatible,只有一個at24_ids如下其中有”24c08”:
對比同目錄的at25.c文件就有.compatible沒有ids。
ids中描述的也是和.compatible一樣,是設備樹用來識別匹配使用的,其中的三種識別匹配條件感興趣的可以深追一下。因與本文無關,不再贅述。所以找到了對應的驅動文件,返回設備樹添加描述。
現在這樣是告訴了內核我要使用I2C4,我的I2C4下有個EEPROM設備,使用的是“24c08”驅動,但是還沒有將”24c08”這個文件給到內核,那麼接下來的目的就是把驅動編進內核。
在kernel目錄下運行makemenuconfig,搜索at24,如下:
按下數字1,自動跳轉到對應選項,按下y選中,保存退出。
因為makemenuconfig修改的是.config文件,而編譯脚本中每次都會重新生成.config文件,所以為了讓修改生效,修改編譯脚本,使其不重新生成.config文件,如下:
將生成.config文件的命令注釋掉,編譯內核,這樣就將”24c08”給到內核,也通過設備樹告訴內核,I2C4下有個EEPROM設備要用“24c08”。
到此,我們的常規添加設備思路就已經完成了:在設備樹中添加描述->設備樹描述對應設備驅動->設備驅動添加到內核。
接下來就是編譯內核,燒寫boot鏡像到開發板,使用i2ctool的命令進行查看,這裏也不贅述i2ctool命令的具體使用方法。使用命令:i2cdetect-l 、i2cdetect-y 4。
對應的地址已經被驅動注册,但是沒有生成devices下的I2C4設備,說明模塊可能沒有正常工作,查看模塊相關信息。
模塊自帶I2C4上拉電阻,因為OK3399-C底板上也帶有上拉電阻如下圖,並且是1.8V上拉,為了電平匹配,不修改底板的狀態下,使用1.8V為基准,將模塊帶有的上拉電阻摘除,使用1.8V配置。
再次修改設備樹,添加上時鐘描述和設備地址描述。
編譯後,燒寫內核,燒寫完畢啟動開發板。
識別到I2C4下的設備,然後進行讀寫測試即可,如下命令:
echo"hello my world" > /sys/bus/i2c/devices/1-0050/eeprom
cat/sys/bus/i2c/devices/4-0050/eeprom
至此一個新的I2C EEPROM設備添加成功,對I2C設備的讀寫操作也可以通過開發板中帶有的i2ctool相關命令操作。https://forlinx.com/
版權聲明
本文為[卡卡羅特GT]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207230825524720.html
邊欄推薦
- 【STM32學習】(21)STM32實現步進電機
- 繪制帶有查詢條件變量的table【grafana】
- 認識接口
- LABVIEW:創建一個VI
- 界面開發框架DevExtreme Gantt控件——可導出PDF、排序任務
- MySQL命令行導出導入數據庫和數據錶
- 有數大數據基礎平臺之智能運維平臺EasyEagle介紹:集群隊列篇
- 你記住JS中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX嗎?
- 【Azure 事件中心】Azure Event Hub 新功能嘗試 -- 异地灾難恢複 (Geo-Disaster Recovery)
- unity 照片牆
猜你喜歡
隨機推薦
- *精度優化*優化策略1:網絡+SAM優化器
- AXI協議詳解
- js--Date對象&三元錶達式
- leetcode-買賣股票的最佳時機含手續費
- unity中3dUI或者模型始終面向攝像機,跟隨攝像機視角旋轉丨視角跟隨丨固定視角
- JVM初探
- 移動端測試之appium環境部署【未完待續】
- 關於後臺掛載,進程管理的學習
- 讀《高效閱讀法-最劃算的自我投資》有感
- shell基本命令
- 從鍵盤輸入一串字符,輸出不同的字符以及每個字符出現的次數。(輸出不按照順序)運用String類的常用方法解題
- 2019_AAAI_ICCN
- 影響接口查詢速度的情况
- 《STL適配器》stack和queue
- 淺析緩存的讀寫策略
- 類和對象(1)
- 實驗二 YUV
- 大咖訪談 | 開源社區裏各種奇怪的現狀——夜天之書陳梓立tison
- synchronized是如何實現的
- 【arXiv2022】GroupTransNet: Group Transformer Network for RGB-D Salient Object Detection
- BGP機房的優點
- 真人踩過的坑,告訴你避免自動化測試常犯的10個錯誤
- 判斷是否為void類型
- C語言——幾道C語言經典習題
- openvino_datawhale
- C語言基礎知識梳理(一)
- Redis源碼與設計剖析 -- 7.快速列錶
- 比特,比特,字節,字的概念與區別
- 項目部署(簡版)
- JDBC的學習以及簡單封裝
- [pytho-flask筆記5]藍圖簡單使用
- Web Component-自定義元素的生命周期
- 數倉4.0筆記——業務數據采集
- 數倉4.0筆記——用戶行為數據采集四
- 對.h5文件的迭代顯示,h5py數據操作
- 常用數學知識匯總
- “東數西算”下數據中心的液冷GPU服務器如何發展?
- 硬件知識1--原理圖和接口類型(基於百問網硬件操作大全視頻教程)
- 鋼結構基本原理複習
- Unity3d:UGUI源碼,Rebuild優化