subsys_initcall(i2c_gpio_init);staticvoid__exiti2c_gpio_exit(void){ platform_driver_unregister(&i2c_gpio_driver); } module_exit(i2c_gpio_exit); platform_driver 直接看它的platform_driver结构i2c_gpio_driver #ifdefined(CONFIG_OF)staticconststructof_device_idi2c_gpio_dt_ids[] ={ { .compatible...
i2c_gpio: i2c-gpio { /* gpio模拟iiccompatiable必须为i2c-gpio */ compatible = "i2c-gpio"; /* 指定子节点的reg addr为1个32为表示, 没有size */ #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default"; /* 设置引脚配置 */ pinctrl-0 = <&pinctrl_i2c_gpio>; /* 指定...
#define I2C_SDA_READ() (GPIOB->IDR & GPIO_Pin_7)// 读取SDA电平状态/*** @brief CPU产生一个时钟,读取应答信号ACK* @param 无* @retval 返回0表示应答信号,返回1表示非应答信号*/uint8_ti2c_WaitAck(void){uint8_tre;I2C_SDA_1();// CPU释放SDA总线Delay();I2C_SCL_1();// CPU拉高SCL电...
1. 理解i2c-gpio 我们需要理解i2c-gpio的工作原理。i2c-gpio通过配置GPIO引脚的输入输出状态来模拟I2C总线的时钟和数据线。在设备树中,我们需要指定哪些GPIO引脚用作时钟线,哪些用作数据线,以及它们的引脚编号、极性等信息。 2. 查找设备树文档 在编写设备树之前,我们需要先查找硬件评台的设备树文档。这些文档通常会包...
这是一个platform驱动,不是I2C设备驱动 在linux无论是x86和arm都是可以直接使用现成i2c-gpio.ko驱动实现GPIO模拟I2C Bus 加载后就可以通过i2cdetect扫描到总线下有什么i2c设备了 驱动分析 1.判断使用of或者platform获取GPIO信息 if (np) { of_i2c_gpio_get_props(np, pdata); ...
1)GPIO(General Purpose Input Output )为通用输入/输出,通用端口,总线扩展器, 利用工业标准I2C、SMBus™或SPI™接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。
使用gpio口模拟i2c 在kernel内核是一个已经实现的驱动,具体实现流程如下: 1. 配置menuconfig CONFIG_I2C_GPIO=y 2. 配置dts, 可以参考以下文档进行配置: Documentation/devicetree/bindings/i2c/i2c-gpio.txt 下面基于rk平台举例子: i2c@2 { compatible = "i2c-gpio"; ...
I2C转GPIO的IO扩展芯片输出电流不足-PCF8574 板子上因为IO口不够用,采用了一个I2C转8路GPIO的芯片PCF8574(tssop20),控制Darlington管MC1413,驱动后端的7个Relay。 控制逻辑简图: 问题: 调试中发现,前面的控制逻辑都是正确的,但是Darlington管前级的电压只有0.9V左右,这个电压明显不能使管子打开。
1.GPIO(通用输入输出)GPIO是最简单的通信形式,它允许微控制器和外设之间进行基本的输入和输出。作为物理接口,GPIO用于传感器读取和控制执行器,适用于需要简单控制功能的应用场合。不过,使用GPIO进行复杂通信可能会导致引脚资源浪费,因此在需要扩展I/O时,GPIO常常需要借助其他通信协议来实现。 2.I2C (Inter-Integrated Ci...
首先,GPIO(通用输入输出)是一种基本的接口方式,常用于控制与监控设备。它的灵活性使得用户能够根据具体需要自定义输入或输出功能。然而,当微控制器的I/O端口不足时,GPIO通常需要与其他通信协议结合使用,如I2C或SPI,来提供更好的扩展性能。 I2C(Inter-IC bus)是由飞利浦公司开发的一种两线制串行通讯协议,其优点在...