码迷,mamicode.com
首页 > 其他好文 > 详细

2019 5 19 IIC驱动程序

时间:2019-05-19 18:10:14      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:class   链表   适配   方法   info   too   构造   amp   3.4   

IIC驱动含有  IIC总线驱动  和  IIC设备驱动

 

IIC总线驱动中,核心是构造i2c_adapter结构体

在IIC设备驱动中,核心是构造i2c_driver结构体

    怎么写I2C设备驱动程序?
    1. 分配一个i2c_driver结构体
    2. 设置
          attach_adapter // 它直接调用 i2c_probe(adap, 设备地址, 发现这个设备后要调用的函数);
          detach_client  // 卸载这个驱动后,如果之前发现能够支持的设备,则调用它来清理
     
    3. 注册:i2c_add_driver

 

二者的联系靠i2c_client结构体

        .address  //设备地址

        .adapter  //适配器

        .driver     //设备驱动

 

 

linux3.4.2内核下的IIC驱动

\linux-3.4.2\linux-3.4.2\Documentation\i2c\instantiating-devices

提供了四种方法

1.3 bus-drv-dev模型及写程序
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
a.2 直接i2c_new_device, i2c_new_probed_device
  a.2.1 i2c_new_device        : 认为设备肯定存在
  a.2.2 i2c_new_probed_device :对于"已经识别出来的设备"(probed_device),才会创建("new")
      i2c_new_probed_device
     probe(adap, addr_list[i])   /* 确定设备是否真实存在 */
     info->addr = addr_list[i];
     i2c_new_device(adap, info);
a.3 从用户空间创建设备
创建设备
echo at24c08 0x50 > /sys/class/i2c-adapter/i2c-0/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函数
 
一般使用前三种方法
 
在msg传输时,使用smbus进行传输.....................smbus是i2c_transfer的一小部分,内核推荐使用\linux-3.4.2\linux-3.4.2\Documentation\i2c\smbus-protocol
 
 
 
使用内核中的驱动程序
\linux-3.4.2\linux-3.4.2\Documentation\i2c\dev-interface
主要是应用程序中如何对其进行使用
在网上下载i2c_tools,其中有一个i2c_dev.h,其中封装的read、write函数都是使用ioctl,比单纯的R/W更适合IIC驱动
 
 
 
 
 

2019 5 19 IIC驱动程序

标签:class   链表   适配   方法   info   too   构造   amp   3.4   

原文地址:https://www.cnblogs.com/calm-monkey/p/10890051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!