Linux-I2C驱动简单介绍

基础知识:
第一点:主机驱动由原厂完成,一定是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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值