i2c_transfer 函数会调用 I2C 适配器中 i2c_algorithm里面的 master_xfer 函数, 对于 IMX6U 而言是 i2c_imx_xfer 这个函数。inti2c_transfer(structi2c_adapter*adap,structi2c_msg*msgs,intnum)adap:所使用的I2C适配器,i2c_client会保存其对应的i2c_ada
int i2c_master_send(struct i2c_client *client,const char *buf ,int count); int i2c_master_recv(struct i2c_client *client, char *buf ,int count); 上边三个函数用于实现与I2C设备之间的数据交换。i2c_transfer函数可以进行复杂的多消息传输,而i2c_master_send和i2c_master_recv函数用于单个数据消息的发...
I2C适配器的Algorithm,用具体适配器的xxx_xfer()函数填充i2c_algorithm的master_xfer指针,并把i2c_algorithm指针赋值给i2c_adapter的algo指针。 总结: 不管是平台总线还是IIC总线都都有这样的调用路线: 当系统发现了新设备或者新驱动就会掉用相应总线的Match()进行匹配,当找到后就会掉用相对应的总线的Probe函数,最后Pro...
i2cdev_read函数在内核中分配一个缓冲区,使用i2c_master_recv函数从I2C设备中接收数据,并将接收到的数据复制到用户空间。i2cdev_ioctl i2c_driver i2c_register_driver将驱动程序注册到I2C驱动核心,并在注册完成后处理所有已经存在的适配器。注册完成后,驱动核心会调用probe()函数来匹配并初始化所有匹配...
I2C是一种常用的串行总线,由串行数据线SDA 和串线时钟线SCL组成。I2C是一种多主机控制总线,它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以,而 I2C 是基于multimaster机制,一条总线上可允许多个master。 系统的I2C模块分为I2C总线控制器和I2C设备。I2C 总线控制器是CPU提供的控制I2C...
I2C是一种常用的串行总线,由串行数据线SDA 和串线时钟线SCL组成。I2C是一种多主机控制总线,它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以,而 I2C 是基于multi master机制,一条总线上可允许多个master。 系统的I2C模块分为I2C总线控制器和I2C设备。I2C 总线控制器是CPU提供的控制...
I2C adapter 主要实现对 I2C 总线访问的算法,master_xfer()函数就是 I2C adapter 底层对 I2C 总线读写方法的实现。同时 I2C adapter 中还实现了对 I2C 控制器中断的处理函数。 I2C 设备驱动(I2C driver) I2C driver 是对 I2C 从设备的软件实现。I2C driver 中提供了一个通用的 I2C 设备的驱动程序,实现了字符...
上边三个函数用于实现与I2C设备之间的数据交换。i2c_transfer函数可以进行复杂的多消息传输,而i2c_master_send和i2c_master_recv函数用于单个数据消息的发送和接收。 这些函数提供了对于I2C总线读写操作的基本支持,简化了I2C设备驱动的开发,有了这些接口我们就不用关注I2C协议方面的代码了,只需要调用该接口即可完成数据的...
可以看到,master_xfer 函数用于数据传送和读取,functionality 用来获取 IIC 控制器支持情况,根据 xxx_i2c_probe 分析可知,在调用这个 xxx_i2c_probe 的时候,已经将其操作集 i2c_algorithm 挂接到了 i2c_adapter 结构,一并注册到了 i2c 核心。 /* i2c bus registration info */ static const struct i2c_algorithm...
主设备(Master):控制总线并启动通信的设备。 从设备(Slave):响应主设备请求的设备,具有唯一的地址。 寄存器:设备内部用于存储数据的特定位置。 相关优势 简单性:仅需两根线即可实现多设备通信。 灵活性:支持多种数据速率和多种设备类型。 低功耗:适合电池供电的设备。