Linux下RK3288平台I2C总线波特率设置及查询方法求助
调整RK3288 Ubuntu系统的I2C总线波特率及查看方法
先给你划个重点:你之前尝试的dtparam语法是树莓派生态特有的设备树参数配置方式,RK3288的内核驱动并不支持这个格式,所以添加后自然不会生效。下面给你两种可行的修改方案,以及查看当前波特率的具体方法:
一、修改I2C总线波特率的方法
方案1:通过内核启动参数修改(无需编译设备树,快速生效)
RK3288的I2C驱动(i2c_rk3xxx)支持直接通过内核启动参数指定总线速率,操作步骤如下:
编辑你的启动配置文件:
sudo nano {boot-partition}/extlinux/extlinux.conf修改
label kernel-4.4下的append行,添加对应的内核参数:- 若要全局设置所有I2C总线为100KHz,添加:
i2c_rk3xxx.i2c_speed=100000 - 若只想指定某一条总线(比如i2c-1),添加:
i2c_rk3xxx.1.i2c_speed=100000(数字对应总线编号,0对应i2c-0,1对应i2c-1,以此类推)
修改后的完整
append行示例:append earlyprintk console=tty1 console=ttyS2,115200n8 rw root=/dev/mmcblk1p7 rootfstype=ext4 init=/sbin/init i2c_rk3xxx.i2c_speed=100000- 若要全局设置所有I2C总线为100KHz,添加:
保存文件后重启系统,参数即可生效。
方案2:修改设备树文件(更彻底,适合自定义内核场景)
如果你的系统用的是自定义编译的内核,直接修改设备树是更彻底的方式:
- 找到
rk3288-miniarm.dtb对应的源文件rk3288-miniarm.dts;如果只有dtb文件,可以用以下命令反编译得到:dtc -I dtb -O dts rk3288-miniarm.dtb -o rk3288-miniarm.dts - 在dts文件中找到目标I2C总线的节点,比如i2c1的节点通常长这样:
&i2c1 { status = "okay"; clock-frequency = <1000000>; // 这里是当前的1MHz配置 }; - 将
clock-frequency的值修改为<100000>,保存文件。 - 重新编译设备树:
dtc -I dts -O dtb rk3288-miniarm.dts -o rk3288-miniarm.dtb - 将编译好的
rk3288-miniarm.dtb替换到boot分区的对应位置,重启系统即可。
二、查看当前I2C总线波特率的方法
方法1:通过sysfs文件系统直接读取
每个I2C总线的配置都在sysfs中有记录,以i2c-0为例:
# 读取十六进制的时钟频率值并转换为十进制 cat /sys/bus/i2c/devices/i2c-0/of_node/clock-frequency | xxd -p -r | od -tu4
输出结果中的数字就是当前波特率(比如100000就是100KHz)。
方法2:查看内核启动日志
系统启动时,I2C驱动会输出总线速率信息,你可以通过dmesg快速查看:
dmesg | grep -i "i2c.*speed"
会输出类似这样的日志:
[ 1.234567] i2c_rk3xxx ff130000.i2c: bus speed set to 100000 Hz
方法3:用i2c-tools间接验证
先安装工具包:
sudo apt-get update && sudo apt-get install i2c-tools
然后用i2cdetect扫描目标总线,如果之前因速率过高无法扫描到设备,调整到100KHz后能正常扫描到设备,就间接验证了速率设置生效:
i2cdetect -y 0 # 0是总线编号,根据你的实际情况修改
内容的提问来源于stack exchange,提问作者Riur




