資料介紹
此鏈接為預覽,僅您自己可見知道
1. 簡介
RK3588從入門到精通
本?介紹在rockchip平臺下如何配置i2c接口的方法并且添加調試驗證i2c外設的例子
開發板:ArmSoM-W3
Kernel:5.10.160
OS:Debian11
2. i2c接口概述
i2c 總線控制器通過串行數據(SDA)線和串行時鐘 (SCL)線在連接到總線的器件間傳遞信息。
i2c總線一些特征:
只有兩根線分別是串行數據線(SDA),串行時鐘線(SCL)。
每個器件都有一個唯一的地址識別
使用串行8位雙向數據傳輸方式。
可以使用普通GPIO口模擬I2C,但要需要將GPIO配置成OD模式(開漏模式)
3. 芯片i2c資源
RK3588旗艦芯片上可使用的I2C有9組,ArmSoM SOM-3588-LGA核心板采用LGA 506引腳封裝方式將I2C資源全部引出,ArmSoM-W3板子上接有部分i2c外設以及40PIN資源如下:


4. i2c使用
RK3588使用I2C 的驅動是i2c-rk3x.c,參考文件 kernel/Documentation/devicetree/bindings/i2c/i2c-rk3x.txt。
4.1 DTS配置
i2c資源使用只需要在設備樹下進行配置,例如上述RTC芯片的配置如下:
&i2c6 {
status = "okay";
//i2c-scl-rising-time-ns = <265>;
//i2c-scl-falling-time-ns = <11>;
//clock-frequency = <400000>;
hym8563: hym8563@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
#clock-cells = <0>;
clock-frequency = <32768>;
clock-output-names = "hym8563";
pinctrl-names = "default";
pinctrl-0 = <&rtc_int>;
interrupt-parent = <&gpio0>;
interrupts = ;
};
};
參數說明:
clock-frequency: 默認 frequency 為 100k 可不配置,其它 I2C 頻率需要配置,最大可配置頻率由i2c-scl-rising-time-ns 決定;例如配置 400k,clock-frequency=<400000>。
i2c-scl-rising-time-ns:SCL 上升沿時間由硬件決定,例如測得 SCL 上升沿 365ns,i2c-scl-rising-time-ns=<365>。(默認可以不配置)
i2c-scl-falling-time-ns: SCL 下降沿時間, 一般不變, 等同于 i2c-sda-falling-time-ns。(默認也可以不配置)
在使用i2c設備樹配置的時候,有些方面需要注意:
1.上述rtc使用的引腳是I2C6_SDA_M0和I2C6_SCL_M0,硬件接口有些可以使用I2C6_SDA_M1,或者I2C6_SDA_M3,要修改默認配置
i2c6: i2c@fec80000 {
compatible = "rockchip,rk3588-i2c", "rockchip,rk3399-i2c";
reg = <0x0 0xfec80000 0x0 0x1000>;
clocks = <&cru 146>, <&cru 138>;
clock-names = "i2c", "pclk";
interrupts = <0 323 4>;
pinctrl-names = "default";
pinctrl-0 = <&i2c6m0_xfer>;//&i2c6m1_xfer、&i2c6m3_xfer
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
i2c地址主要由7bit的二進制數值組成,最低位是讀寫標志位,0表示寫,1表示讀
比如:讀,0A3H 寫,0A2H 在linux驅動中要取這個ic設備的從設備地址,就是0xA3或者0xA2右移一位得到
4.2 GPIO 模擬 I2C
I2C 用 GPIO 模擬,內核已經有實現,請參考文檔:Documentation/devicetree/bindings/i2c/i2c-gpio.txt 下面是使用的例子,dts 下配置 I2C 節點。
i2c@4 {
compatible = "i2c-gpio";
gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>, /* sda */
<&gpio5 8 GPIO_ACTIVE_HIGH>; /* scl */
i2c-gpio,delay-us = <2>; /* ~100 kHz */
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&i2c4_gpio>;
status = "okay";
gt9xx: gt9xx@14 {
compatible = "goodix,gt9xx";
reg = <0x14>;
touch-gpio = <&gpio5 11 IRQ_TYPE_LEVEL_LOW>;
reset-gpio = <&gpio5 10 GPIO_ACTIVE_HIGH>;
max-x = <1200>;
max-y = <1900>;
tp-size = <911>;
tp-supply = <&vcc_tp>;
status = "okay";
};
};
一般不推薦使用 GPIO,效率不高。
5. 檢查i2c設備
5.1 IIC 第三方工具
I2C tool 是一個開源工具,需自行下載進行交叉編譯,代碼下載地址: https://www.kernel.org/pub/software/utils/i2c-tools/或者 編譯后會生成 i2cdetect,i2cdump,i2cset,i2cget 等工具,可以直接在命令行上調試使用,I2C tool 是開源的,編譯與使用參考里面的 README 與幫助說明。
ArmSoM-W3板子對應的出廠固件已經在系統下集成了這個工具,可以直接使用,比如掃描I2C總線上的RTC設備:
root@linaro-alip:~# i2cdetect -y 6
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@linaro-alip:~#
掃描到對應的RTC芯片的I2C地址為0X51
常用的命令還有以下幾個。
#檢測當前系統有幾組i2c總線
i2cdetect -l
#查看i2c-0接口上的設備
i2cdetect -a 6
#讀取指定設備的全部寄存器的值。
i2cdump -f -y 6 0x51
#讀取指定IIC設備的某個寄存器的值,如下讀取地址為0x51器件中的0x01寄存器值。
i2cget -f -y 6 0x51 0x01
#寫入指定IIC設備的某個寄存器的值,如下設置地址為0x51器件中的0x01寄存器值為0x1a;
i2cset -f -y 3 0x51 0x01 0x1a
5.2 RTC使用
Linux系統下包含兩個時間:系統時間和RTC時間。
linux命令中的date和time等命令都是用來設置系統時間的,而hwclock命令是用來設置和讀寫RTC時間的。
root@linaro-alip:~# hwclock -r
2018-05-24 16:38:13.115443+00:00 //查看硬件時間
root@linaro-alip:~# date
2018年 05月 24日 星期四 16:38:21 UTC //查看系統時間
root@linaro-alip:~# date -s "2023-10-24 11:45:00"
2023年 10月 24日 星期二 11:45:00 UTC //重新設置系統時間
root@linaro-alip:~# hwclock -w //同步系統時間到rtc上,掉電不丟失時間
root@linaro-alip:~# hwclock -r
2023-10-24 11:45:17.694727+00:00
5.3 I2C 常見問題
如果調用 I2C 傳輸接口返回值為 -6(-ENXIO)時候,表示為 NACK 錯誤,即對方設備無應答響應

這種情況一般為外設的問題,常見的有以下幾種情況:
I2C 地址錯誤;
I2C slave 設備處于不正常工作狀態,比如沒有上電,錯誤的上電時序以及設備異常等;
I2C 時序不符合 slave 設備所要求也會產生 NACK 信號,比如 slave 設備需要的是 stop 信號,而不是
repeat start 信號的時候;
I2C 總線受外部干擾導致的,用示波器測量可以看到是一個 ACK 波形。
當出現 I2C 的 log 類似:"timeout, ipd: 0x80, state: 1"時,看到 ipd 為 0x80 打印,可以說明當前 SCL 被 slave 拉住,要判斷被哪個 slave 拉住: 一是排除法,適用于外設不多的情況,而且復現概率高; 二是需要修改硬件,在 SCL 總線上串入電阻,通過電阻兩端產生的壓差來確定,電壓更低的那端 外設為拉低的 slave,電阻的選取以不影響 I2C 傳輸且可以看出壓差為標準,一般上拉電阻的 1/20 以上都可以,如果是 host 拉低也可以看出。 常見的情況是 sda 被拉低,證明是誰拉低的。
有時候i2c初始化有問題時速率可以降低看有沒有改善。遇到的 I2C 問題最好的辦法是抓取 I2C 出錯時候的波形,通過波形來分析 I2C 問 題,I2C 的波形非常有用,大部分的問題都能分析出來。
6. 讀取eeprom數據實驗
本章介紹通過IIC接口讀寫eeprom(AT24C08)的數據。 本次實驗會以i2c-7做為示例,接其他i2c引腳操作也是一樣的 當然,并不是只能用這個eeprom這個模組,這只是做個簡單的示例,如果您沒有這個模塊,可以通過學習操作eeprom的方式操作您想要操作的i2c設備。
6.1 硬件連接
將eeprom接入到ArmSoM-W3開發板的i2c-7的總線上,如下圖所示

板子eeprom3.3V(1)VCCGND(39)GNDSCL(5)SCLSDA(3)SCA
6.2 軟件配置
在文件kernel\arch\arm64\boot\dts\rockchip\rk3588-armsom-w3.dts文件下添加下面代碼:
&i2c7 {
pinctrl-names = "default";
pinctrl-0 = <&i2c7m3_xfer>;
clock-frequency = <100000>;
status = "okay";
eeprom@50 {
status = "okay";
compatible = "at,24c08";
reg = <0x50>;
};
};
eeprom驅動在drivers/misc/eeprom/下面,如果是其他i2c接口芯片在kernel目錄下沒有驅動,可以去對找對應芯片廠商提供驅動文件

將eeprom的驅動編譯進內核測試
6.3 讀寫數據測試
找到模塊位置:
root@linaro-alip:~# find / -name "at24"
/sys/bus/i2c/drivers/at24
讀eeprom內容:

寫eeprom內容:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
- MSPM0 C系列MCU硬件开发指南0次下载
- BQ769x2 软件开发指南0次下载
- Rockchip I2C开发指南0次下载
- 兆易创新GD32W51x快速开发指南5次下载
- 兆易创新GD32W51x硬件开发指南0次下载
- 兆易创新AN074 GD32E23x系列硬件开发指南3次下载
- 兆易创新AN057 GD32F3x0系列硬件开发指南1次下载
- 兆易创新AN069 GD32L233系列硬件开发指南2次下载
- AN061 GD32E103和GD32C103硬件开发指南0次下载
- Atlas 200 AI加速模块硬件开发指南.pdf25次下载
- Rockchip I2C开发指南资料免费下载4次下载
- C#上位机实战开发指南0次下载
- 彩光灯开发指南0次下载
- A64开发板LCD开发指南0次下载
- I2C Guid I2C指南36次下载
- Verilog 测试平台设计方法 Verilog FPGA开发指南694次阅读
- GitHub Copilot+ESP开发实战-I2C641次阅读
- RT-Thread驱动开发指南进阶篇-动手驱动先楫未适配的外设LCD3125次阅读
- 迅为RK3568开发板驱动开发指南-输入子系统1149次阅读
- Prometheus的基本原理与开发指南1342次阅读
- I2C上拉电阻如何选择合适的阻值?7887次阅读
- I2C通信协议及其工作原理5304次阅读
- Linux I2C驱动入门知识科普1856次阅读
- 什么是I2C通信协议?7973次阅读
- fireflyAIO-3399J主板I2C使用介绍2075次阅读
- fireflyAIO-3288C主板I2C简介1500次阅读
- fireflyAIO-3399C--I2C主板控制器介绍1504次阅读
- Firefly-RK3288--I2C主板的使用介绍2863次阅读
- Firefly-RK3399--I2C开发板介绍2665次阅读
- I2C总线是什么?基于I2C总线的Linux系统有哪些优点?2920次阅读
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論