分层思想

首先iic是一个总线,所以强大的linux肯定会利用常见的分层思想把他分成两个部分,一个部分肯定是通用的,总线驱动模型,一个部分是我们做的,设备驱动模型。

总线驱动模型

linux 总线 都是在干一件事,就是把相同总线的设备扔在总线上,其中肯定有注册机制乱七八糟的,在这个驱动中,主要做一件事:“I2C 适配器”。

struct i2c_adapter {struct module *owner;unsigned int class;       /* classes to allow probing for */const struct i2c_algorithm *algo; /* the algorithm to access the bus */void *algo_data;/* data fields that are valid for all devices    */struct rt_mutex bus_lock;int timeout;         /* in jiffies */int retries;struct device dev;      /* the adapter device */int nr;char name[48];struct completion dev_released;struct mutex userspace_clients_lock;struct list_head userspace_clients;struct i2c_bus_recovery_info *bus_recovery_info;const struct i2c_adapter_quirks *quirks;
};

其中比较重要的是 i2c_algorithm

struct i2c_algorithm {/* 如果适配器算法无法执行I2C级访问,请设置master_xfer
为NULL。 如果适配器算法可以执行SMBus访问,请设置
smbus_xfer。 如果设置为NULL,则模拟SMBus协议
使用常见的I2C消息*//* master_xfer应该成功返回消息数
已处理,或错误值为负*/int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,int num);int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,unsigned short flags, char read_write,u8 command, int size, union i2c_smbus_data *data);/* To determine what the adapter supports */u32 (*functionality) (struct i2c_adapter *);#if IS_ENABLED(CONFIG_I2C_SLAVE)int (*reg_slave)(struct i2c_client *client);int (*unreg_slave)(struct i2c_client *client);
#endif
};

linux iic驱动整理(一)相关推荐

  1. Linux音频驱动整理

    典型的数字音频系统电路组成如图所示: 通过PCM. IIS 或 AC97 这些音频接口连接外部的音频编解码器即可实现声音的 AD 和 DA 转换,图中的功放完成模拟信号的放大功能.音频编解码器是数字音 ...

  2. 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇

    简 介 该课程是正点原子手把手教你学Linux系列课程,该课程配套开发板为正点原子alpha/mini Linux开发板. 手把手教你学Linux之驱动开发篇: 第1讲 Linux驱动开发与裸机开发区 ...

  3. linux I2C驱动(Linux驱动开发篇)

    1.linux IIC驱动 由于裸机的驱动迎合驱动的分离和分层的思想,分为IIC主机驱动(接口驱动)和IIC设备驱动. 这种思想的好处,请看我写的另外一篇文章Linux驱动的分离和分层. 其中上面说的 ...

  4. 整理--linux设备驱动模型

    知识整理–linux设备驱动模型 以kobject为底层,组织类class.总线bus.设备device.驱动driver等高级数据结构,同时实现对象引用计数.维护对象链表.对象上锁.对用户空间的表示 ...

  5. linux下IIC驱动开发分析

    1.  IIC规范 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和 ...

  6. Linux驱动开发之IIC驱动实验【完整教程】

    本实验基于正点原子ALPHT开发板上的AP3216C作为实验开展对象 基础知识 1.IIC总线驱动   IIC总线驱动是对IIC硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在C ...

  7. linux iic 设备驱动,linux IIC设备驱动.doc

    linux IIC设备驱动 //---------------IIC的linux驱动------------------#include #include #include #include #inc ...

  8. Linux下IIC驱动编写,介绍IIC子系统框架的使用

    一.IIC协议介绍 说起IIC,搞单片机,嵌入式的那肯定是接触的比较多的.串口.IIC.SPI这3个协议在单片机阶段应该是用比较多的,很多的外设模块,芯片都是串口.IIC.SPI等协议与主控芯片进行通 ...

  9. Linux设备驱动 IIC驱动

    Linux 设备驱动篇之I2c设备驱动 fulinux 一.I2C驱动体系 虽然I2C硬件体系结构和协议都很容易理解,但是Linux I2C驱动体系结构却有相当的复杂度,它主要由3部分组成,即I2C设 ...

最新文章

  1. Possible MySQL server UUID duplication for server
  2. mysql mediumtext longtext
  3. oracle什么是全局锁,深入浅出oracle锁---原理篇
  4. 安卓能不能安装jar_Sentaurus TCAD安装之jedit+TCAD宏包
  5. java和python的语法有什么区别?
  6. android studio设置内存
  7. asm和file system之间数据文件的转换
  8. 有趣的守萝卜的兔子卡通动画404页面源码 自适应
  9. 苹果home键在哪里设置_苹果手机怎样添加辅助触控功能
  10. linux 创建 swap分区
  11. double函数和int函数
  12. 合租服务器禁用 fsockopen 函数,部分程序不正常的解决办法。
  13. 超硬核,Nacos实现原理详细讲解
  14. mysql多对一数据统计
  15. 会签2:会签的主要后台JAVA代码
  16. 爬取TIOBE的编程语言排行榜
  17. Hi3798CV200 Datasheet01-基本信息
  18. 人工神经网络与神经网络,人工神经网络基本概念
  19. 省常中集训Day7 2022.8.9
  20. POJ1376(A*)

热门文章

  1. Python人工智能之图片识别
  2. YYModel源码解读
  3. 避免骚扰用户?硅谷这样打造移动推送通知!
  4. 山西省第二届网络安全技能大赛(企业组)部分赛题WP(三)
  5. jetson nano 安装ros系统
  6. 做SEO首页代码怎么优化
  7. 全文检索:sphinx elasticsearch xunsearch 比较
  8. 星环科技TDH多模型统一架构VS CDH架构
  9. 简单理解Feign的原理与使用
  10. (1) Apache POI 概述