1. RK3588 I2C硬件资源详解
RK3588作为Rockchip新一代旗舰级SoC,在I2C控制器设计上做了不少优化。这颗芯片总共集成了9个独立的I2C控制器,每个控制器都支持标准模式(100kHz)、快速模式(400kHz)和高速模式(3.4MHz)。实际项目中我经常用它们连接各种传感器和桥接芯片,比如IMX415图像传感器或者LT9211显示转换芯片。
这些控制器的命名规则很有意思,采用I2Cx_My的格式。其中x代表控制器编号(1-9),y表示复用位置(0-4)。比如I2C3_M0表示第三个I2C控制器的第一个复用位置。这里有个重要限制:同一个控制器的不同复用位置不能同时使用。也就是说,如果你选了I2C1_M0,就不能再用I2C1_M1到I2C1_M4中的任何一个。这个坑我踩过,当时调试了半天才发现是复用冲突。
电平匹配是另一个容易出问题的地方。RK3588的I2C电平由VCCIOx电源域决定,比如VCCIO4供电的I2C5和I2C8默认就是1.8V电平。如果外设是3.3V的,就需要电平转换电路。我有次调试LT9211时就因为没注意这个,直接把3.3V设备接到1.8V总线上,结果通信完全不稳定。
硬件设计时还要特别注意上拉电阻。虽然RK3588内部可以配置上拉,但实际测试发现外部4.7kΩ上拉电阻更可靠。特别是总线长度超过20cm时,建议在SCL和SDA线上都加外部上拉。我有个项目因为省成本没加外部上拉,结果在高温环境下频繁出现通信错误。
2. DTS配置全攻略
内核设备树(DTS)配置是I2C开发的关键环节。RK3588的DTS文件通常位于/arch/arm64/boot/dts/rockchip/目录下。基础配置包括时钟、中断和引脚复用三大部分。以I2C3_M0为例,这是最常用的配置模板:
&i2c3 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c3m0_xfer>;
clock-frequency =


55

被折叠的 条评论
为什么被折叠?



