基础知识:
第一点:主机驱动由原厂完成,一定是ok的,外设驱动是针对具体外设的,摄像头,声卡等
第二点:内核重要结构体 i2c_driver i2c_msg i2c_transfer
第三点:内核IIC-API:i2c_del_driver/i2c_add_driver/I2C_BOARD_INFO
第四点:查询IIC设备地址,接了哪些外设,用了哪些IIC ls /sys/bus/i2c/devices/
3-0038→I2C_3_SCL(addr:datasheet中查0x38)
查询i2c设备名称:cat /sys/bus/i2c/devices/3-0038/name
第五点:给内核添加驱动,给从机添加地址 /arch/arm/mach-exynos/mach-itop4412.c
i2c_devs3[]中添加
{
I2C_BOARD_INFO("i2c_test", 0x70>>1),//外设地址为 0x38 ,因为0x70/2
}
cat /sys/bus/i2c/devices/3-0038/name结果是i2c_test//确保是和自己内核中添加的驱动名一致
第六点: struct i2c_msg {
__u16 addr; /* slave address*/
__u16 flags;
#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
#define I2C_M_RD 0x0001 /* read data, from slave to master */
#define I2C_M_STOP 0x8000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_NOSTART */
#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_RECV_LEN 0x0400 /* length will be first r
第一点:主机驱动由原厂完成,一定是ok的,外设驱动是针对具体外设的,摄像头,声卡等
第二点:内核重要结构体 i2c_driver i2c_msg i2c_transfer
第三点:内核IIC-API:i2c_del_driver/i2c_add_driver/I2C_BOARD_INFO
第四点:查询IIC设备地址,接了哪些外设,用了哪些IIC ls /sys/bus/i2c/devices/
3-0038→I2C_3_SCL(addr:datasheet中查0x38)
查询i2c设备名称:cat /sys/bus/i2c/devices/3-0038/name
第五点:给内核添加驱动,给从机添加地址 /arch/arm/mach-exynos/mach-itop4412.c
i2c_devs3[]中添加
{
I2C_BOARD_INFO("i2c_test", 0x70>>1),//外设地址为 0x38 ,因为0x70/2
}
cat /sys/bus/i2c/devices/3-0038/name结果是i2c_test//确保是和自己内核中添加的驱动名一致
第六点: struct i2c_msg {
__u16 addr; /* slave address*/
__u16 flags;
#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
#define I2C_M_RD 0x0001 /* read data, from slave to master */
#define I2C_M_STOP 0x8000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_NOSTART */
#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_RECV_LEN 0x0400 /* length will be first r