i2c adapter、i2c总线控制器、I2C bus(帖子)

i2c adapter 是软件上抽象出来的i2c总线控制器接口
物理上一条i2c总线可以挂接多个硬件设备(slave),一个CPU可以挂接多条i2c总线(想象一下PCI总线)
i2c总线控制器 就是CPU访问I2C总线的硬件接口,也就是你说的那几个寄存器

Linux I2C框架搞那么复杂是为了通用性及为了符合Linux内核驱动模式而制定的。


简单点了, 你的开发板上有几个I2C接口,就有几个adapter , 也就是有几条I2C bus ,  I2C CLIENT 对应的就是你的外围I2C 设备,有几个就有几个CLIENT ,

把这些设备插入开发板, 对应其中的一条BUS, 那么相应的就对应了其中的一个ADAPTER , 接下来的就是  CLIENT 与 ADAPTER 勾搭成对了, 后面就是做该做的事了


一个I2C设备驱动的开发过程。实现的关键分为两个部分,1. 对I2C core的接口,必须实现 struct i2c_drvier数据结构中的几个特定的功能函数。这些函数是I2C驱动与I2C总线物理层(I2C控制器)和I2C设备器件之间通信的基础。2. 对用户应用层的接口,必须实现struct file_operation数据结构中的一些特定功能的函数,如 open ,release , read ,write,lseek等函数。以上两类接口中,对I2C core的接口是对I2C设备访问的基础,实现对I2C总线具体的访问方法;对用户应用层的接口则是方便应用程序开发,实现设备特定功能的必不可少的部分。


对I2C core层的接口函数的具体功能解释如下:
      attach_adapter:I2C driver在调用I2C_add_driver() 注册时,对发现的每一个I2C adapter(对应一条I2C 总线)都要调用该函数,检查该I2C adapter是否符合I2C driver的特定条件,如果符合条件则连接此I2C adapter,并 通过I2C adapter来实现对 I2C总线I2C设备的访问。
      detach_client:I2C driver在删除一个I2C device时调用该函数,清除描述这个I2C device的数据结构,这样以后就不能访问该设备了。
      command:针对设备的特点,实现一系列的子功能,是用户接口中的ioctl功能的底层实现
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`i2c_adapter` 结构体定义了 I2C 总线适配器的属性和操作函数,其变量含义如下: 1. `owner`:指向拥有该适配器的模块的指针。用于模块引用计数,确保适配器在使用时不会被卸载。 2. `name`:适配器的名称。一般用于标识不同的 I2C 总线适配器。 3. `class`:指向适配器的设备类别。用于将适配器与其他设备进行分类。 4. `algo`:指向 `i2c_algorithm` 结构体的指针,表示 I2C 传输算法。该算法描述了适配器用于传输数据的方法,如 START/STOP 信号的生成、时钟频率的设置等。 5. `algo_data`:传递给传输算法的私有数据。 6. `dev`:指向适配器的设备结构体指针。用于将适配器与底层硬件设备进行关联。 7. `nr`:适配器的编号。用于区分多个 I2C 总线适配器。 8. `class_dev`:适配器的类设备结构体指针。用于将适配器注册到 sysfs 中,以便用户空间可以对其进行配置和管理。 9. `dev_list`:用于将多个适配器连接成链表,以便内核可以通过链表遍历所有适配器。 10. `timeout`:I2C 传输的超时时间。当传输超过该时间时,将返回超时错误。 11. `retries`:I2C 传输的重试次数。当传输失败时,会自动重试指定次数。 12. `bus_lock`:用于保护 I2C 总线资源的自旋锁。 13. `bus_recovery_info`:指向 `i2c_bus_recovery_info` 结构体的指针。用于定义适配器的总线恢复机制,当总线出现错误时,可以通过该机制进行恢复。 14. `dev_released`:用于标记适配器是否已被释放。 这些变量定义了适配器的基本属性和操作函数,通过适配器结构体可以对 I2C 总线进行初始化、读写操作以及其他相关配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值