【C盘排爆】QQ音乐电脑版 AppData 顽固缓存深度逆向、存储路径 mklink 强制重构与本地临时音频文件恢复实战
2026/5/28 13:23:01
目录
前言
软件I2C的DTS配置参考
软件I2C的内核配置参考
总结
I2C(Inter-Integrated Circuit)是一种两线式串行通信协议,主要用于近距离、低数据速率的通信。它通过SDA(Serial Data Line)和SCL(Serial Clock Line)两根线实现数据传输。
I2C通信的基本内容包括:
1. 起始信号:SCL为高电平时,SDA由高变低。
2. 结束信号:SCL为高电平时,SDA由低变高。
3. 数据传输:SCL为高电平时,SDA保持稳定进行数据传输。
4. 应答信号:接收数据的IC在接收完数据后,向发送数据的IC发出特定的低电平信号进行应答。
在嵌入式开发过程中,由于主控芯片的I2C接口数量有限或者出于硬件画板的方便,我们可能需要将普通的GPIO模拟I2C接口使用。
其中硬件I2C和软件I2C是两种不同的实现方式,它们主要有以下区别:
1. 硬件I2C:
硬件I2C是通过专门的硬件电路实现的,通常由微控制器或其它集成电路上的硬件模块提供支持。硬件I2C具有以下优点:
2. 软件I2C:
软件I2C是通过软件控制GPIO管脚来模拟I2C协议的时序。软件I2C具有以下优点:
aliases { /* aliases用于为硬件设备定义和管理别名,方便操作系统在启动时根据设备别名动态识别硬件设备并加载对应的驱动程序。 */ i2c2 = &i2c2_gpio; }; i2c2_gpio: i2c@2 { compatible = "i2c-gpio"; /* 指定使用GPIO模拟I2C */ #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c2_gpio_c>; sda-gpios = <&gpioc 8 GPIO_ACTIVE_HIGH>; /* SDA引脚描述 */ scl-gpios = <&gpioc 9 GPIO_ACTIVE_HIGH>; /* SCL引脚描述 */ i2c-gpio,delay-us = <2>; /* “delay-us”:GPIO操作之间的延时参数,范围[0,10],例如需要总线频率为100KHz,则设置为2 */ status = "okay"; gt9xx@0x14 { /* I2C器件子节点,这里是GT9XX触摸屏的I2C器件子节点。 */ compatible = "goodix,gt9xx"; /* compatible属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序。 */ reg = <0x14>; /* 器件I2C从机地址 */ status = "okay"; /* 通过status字段确定是否启用此I2C器件,okay表示启用,disabled表示禁用。 */ ... }; da380_gs@0x27 { reg = <0x27>; /* 器件I2C从机地址 */ compatible = "miramems,da380-gs"; /* compatible属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序。 */ #address-cells = <1>; #size-cells = <0>; status = "okay"; /* 通过status字段确定是否启用此I2C器件,okay表示启用,disabled表示禁用。 */ }; }; pinctrl: pinctrl@xxx { pinctrl_i2c2_gpio_c:i2c2_c-grp { xxx,pins = "gpioc-8", "gpioc-9"; xxx,pin-pud = <ENABLE_PULL_UP>; /* 使能内部上拉 */ }; };CONFIG_I2C=y CONFIG_I2C_CHARDEV=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_GPIO=y总的来说,硬件I2C具有高速传输、低占用率和稳定性高的优点,适用于对传输速率和稳定性要求比较高的场景;而软件I2C具有灵活性高和可移植性强的特点,适用于没有硬件I2C支持或需要扩展硬件I2C功能的场景。