You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux下RK3288平台I2C总线波特率设置及查询方法求助

调整RK3288 Ubuntu系统的I2C总线波特率及查看方法

先给你划个重点:你之前尝试的dtparam语法是树莓派生态特有的设备树参数配置方式,RK3288的内核驱动并不支持这个格式,所以添加后自然不会生效。下面给你两种可行的修改方案,以及查看当前波特率的具体方法:

一、修改I2C总线波特率的方法

方案1:通过内核启动参数修改(无需编译设备树,快速生效)

RK3288的I2C驱动(i2c_rk3xxx)支持直接通过内核启动参数指定总线速率,操作步骤如下:

  1. 编辑你的启动配置文件:

    sudo nano {boot-partition}/extlinux/extlinux.conf
    
  2. 修改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
    
  3. 保存文件后重启系统,参数即可生效。

方案2:修改设备树文件(更彻底,适合自定义内核场景)

如果你的系统用的是自定义编译的内核,直接修改设备树是更彻底的方式:

  1. 找到rk3288-miniarm.dtb对应的源文件rk3288-miniarm.dts;如果只有dtb文件,可以用以下命令反编译得到:
    dtc -I dtb -O dts rk3288-miniarm.dtb -o rk3288-miniarm.dts
    
  2. 在dts文件中找到目标I2C总线的节点,比如i2c1的节点通常长这样:
    &i2c1 {
        status = "okay";
        clock-frequency = <1000000>; // 这里是当前的1MHz配置
    };
    
  3. clock-frequency的值修改为<100000>,保存文件。
  4. 重新编译设备树:
    dtc -I dts -O dtb rk3288-miniarm.dts -o rk3288-miniarm.dtb
    
  5. 将编译好的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

火山引擎 最新活动