iic-调试笔记

iic的协议就不做记录了,这个太简单了,以后忘了
摘要由CSDN通过智能技术生成

内核源码  linux/Document/i2c/instantialing-device文档,讲了iic设备的构建方法

a. 设备的4种构建方法
a.1 定义一个i2c_board_info, 里面有:名字, 设备地址
    然后i2c_register_board_info(busnum, ...)   (把它们放入__i2c_board_list链表)
                         list_add_tail(&devinfo->list, &__i2c_board_list);


链表何时使用:
i2c_register_adapter > i2c_scan_static_board_info > i2c_new_device    


    使用限制:必须在 i2c_register_adapter 之前 i2c_register_board_info
所以:不适合我们动态加载insmod




i2c_new_device   直接在init函数中调用次函数  //对应i2c_unregister_dev

                                 : 认为设备肯定存在,不论你的id_table中的addr是否存在它都会调用probe


i2c_new_probed_device//先检测设备地址是否有对应设备,如果有对应设备才i2c_new_device
probe(adap, addr_list[i])   /* 根据地址链表,确定设备是否真实存在 */找到设备驱动模型另一边的项后调用probe
info->addr = addr_list[i];
i2c_new_device(adap, info);     


i2c_new_device                               //在设备驱动模型中与i2c_add_driver对应,以上有i2c_add_driver的解释
a.3 从用户空间创建设备
创建设备
echo at24c08 0x50 > /sys/class/i2c-adapter/i2c-0/new_device    //在内核里边搜索new_device  会发现在i2c_core.c中 DEVICE_ATTR(new_device,** ,func)

在func中会调用i2c_new_device被调用


导致i2c_new_device被调用


删除设备
echo 0x50 > /sys/class/i2c-adapter/i2c-0/delete_device


导致i2c_unregister_device




a.4 前面的3种方法都要事先确定适配器(I2C总线,I2C控制器)
    如果我事先并不知道这个I2C设备在哪个适配器上,怎么办?去class表示的所有的适配器上查找
    有上一些I2C设备的地址是一样,怎么继续分配它是哪一款?用detect函数


static struct i2c_driver at24cxx_driver = {
.class  = I2C_CLASS_HWMON, /* 表示去哪些适配器上找设备 */
.driver = {
.name = "100ask",
.owner = THIS_MODULE,
},

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值