根据smbus-protocol文档,i2c_smbus_write_byte_data函数的时序和 EEPROM的写操作时序完全一样,所以用它。第一个参数at24cxx_client在 probe函数中已经做了记录。 */ if (!i2c_smbus_write_byte_data(at24cxx_client, addr, data)){ return 2;//如果写成功,返回写成功字节 } else { printk("at24cxx_...
i2c_dev = get_free_i2c_dev(adap); if (IS_ERR(i2c_dev)) return PTR_ERR(i2c_dev); /* register this i2c device with the driver core */ i2c_dev->dev = device_create(i2c_dev_class, &adap->dev, MKDEV(I2C_MAJOR, adap->nr), NULL, "i2c-%d", adap->nr); if (IS_ERR(i2c_dev...
normal_i2c 是从设备地址列表,填写的LCD 或者转接IC 的从设备地址以及i2c 索引。 以probe 函数是否被调用来决定你是否可以开始使用I2C。 用i2c_smbus_write_byte_data 或者i2c_smbus_read_byte_data 来读写可以满足大部分场景。 #define IT66121_SLAVE_ADDR 0x4c #define IT66121_I2C_ID 0 static const struc...
s32i2c_smbus_read_byte_data(conststructi2c_client*client,u8command): 功能:指定地址的单字节读 参数: client结构指针。 command:内部地址。 返回值:读到的数据,失败返回负数。 单字节写函数 s32i2c_smbus_write_byte_data(conststructi2c_client*client, u8command,u8value) 功能:指定地址的单字节写入数据 参...
void *data) { struct device *dev = data; switch (action) { case BUS_NOTIFY_ADD_DEVICE: return i2cdev_attach_adapter(dev, NULL); case BUS_NOTIFY_DEL_DEVICE: return i2cdev_detach_adapter(dev, NULL); } return 0; } 紧接着看下i2cdev_attach_adapter函数: ...
struct i2c_msg *msgs,399int num);400int(*smbus_xfer)(struct i2c_adapter *adap,u16 addr,401unsignedshort flags,char read_write,402 u8 command,int size,union i2c_smbus_data *data);403 404/* To determine what the adapter supports */ 405 u32 (*functionality)(struct i2c_adapter *);.....
I2C是Philips开发的一种两线通信协议,常用于一些对速度要求不高的小型器件上。SMBus是系统管理总线,基于I2C协议,大部分情况下二者兼容。 这次使用mpu6050作为I2C外设,学习Linux下I2C的应用开发。 树莓派默认I2C可能没有打开,需要配置重启,具体方法这里不赘述。最终会在/dev下生成i2c-1设备。
400int(*smbus_xfer)(struct i2c_adapter *adap, u16 addr, 401unsignedshort flags,char read_write, 402 u8 command,int size,union i2c_smbus_data *data); 403 404/* To determine what the adapter supports */ 405 u32 (*functionality)(struct i2c_adapter *); ... 411}; 第398行,master_...
5. void *data) 6. { 7. struct device *dev = data; 8. 9. switch (action) { 10. case BUS_NOTIFY_ADD_DEVICE: 11. return i2cdev_attach_adapter(dev, NULL); 12. case BUS_NOTIFY_DEL_DEVICE: 13. return i2cdev_detach_adapter(dev, NULL); ...
//3.I2C设备驱动发起硬件操作时序要求// 此要求最终由I2C总线驱动来完成// I2C总线驱动操作I2C控制器发起// I2C设备驱动要求的时序, I2C设备驱动只需调用内核提供的SMBUS//接口函数即可完成相关的请求:kmma.data = i2c_smbus_*(...,0x0D);//kmma.data = 0x5A//4.拷贝内核缓冲区的数据到用户缓冲区copy...