当前位置:   article > 正文

I2C知识大全系列四 —— I2C驱动之Linux下的I2C_linux i2c

linux i2c

LinuxI2C体系结构

Linux系统定义了I2C驱动体系结构。在Linux系统中,I2C驱动由三部分组成,即I2C核心I2C总线驱动I2C设备驱动。这三部分相互协作,形成了非常通用、可适应性很强的I2C框架。

I2C核心

I2C核心提供了I2C总线驱动设备驱动注册注销方法I2C通信方法(即“Algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。

I2C总线驱动

I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。

I2C总线驱动主要包含了I2C适配器数据结构i2c_adapterI2C适配器的Algorithm数据结构i2c_algorithm控制I2C适配器产生通道信号的函数

经由I2C总线驱动的代码,可以控制I2C适配器以主控方式产生开始位停止位读写周期,以及以从设备方式被读写产生ACK等。

I2C设备驱动

I2C设备驱动(也称为客户驱动)是对I2C硬件体系结构中设备端的实现。设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据

I2C设备驱动主要包含了数据结构i2c_driveri2c_client,需要根据具体设备实现其中的成员函数。

Linux内核中,所有的I2C设备都在sysfs文件系统中显示,存于/sys/bus/i2c/目录,以适配器地址和芯片地址的形式列出。例如:

$ tree /sys/bus/i2c/

|—— devices

|         |—— 0-0058 -> ../../../devices/platform/PHYT0003:00/i2c-0/0-0058

|         |—— 0-0059 -> ../../../devices/platform/PHYT0003:00/i2c-0/0-0059

|         |—— 0-005a -> ../../../devices/platform/PHYT0003:00/i2c-0/0-005a

|         |—— i2c-0 -> ../../../devices/platform/PHYT0003:00/i2c-0

|         |—— i2c-1 -> ../../../devices/platform/PHYT0003:01/i2c-1

……

|—— drivers

|         |—— 88PM860x

|         |         |—— bind

|         |         |—— uevent

|         |         |—— unbind

|         |—— ab3100

|         |         |—— uevent

|         |—— at24

|         |         |—— bind

|         |         |—— i2c-INT0002:00 -> ../../../../devices/platform/PHYT0003:00/i2c-0/i2c-INT0002:00

|         |         |—— module -> ../../../../module/at24

|         |         |—— uevent

|         |         |—— unbind

……

|—— drivers_autoprobe

|—— drivers_probe

|—— uevent

I2C内核源码

Linux内核源代码中的drivers目录下有一个i2c目录,在i2c目录下又包含如下文件和文件夹:

1i2c-core.c

实现了I2C核心功能。

注:i2c-core.c2017531日被拆分成了i2c-core-base.ci2c-core-slave.ci2c-core-smbus.ci2c-core-of.ci2c-core-acpi.c,出于易于维护考虑。

2i2c-dev.c

实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备。通过适配器访问设备文件时的主设备号都为89,次设备号为0~255。应用程序通过“i2c-%d”(i2c-0i2c-1……)文件名并使用文件操作接口openwritereadioctlclose等来访问这个设备。

i2c-dev.c并不是针对特定的设备而设计的,只是提供了通用的readwriteioctl等接口,应用层可以借用这些接口访问挂接在适配器上的I2C存储空间或寄存器,并控制I2C设备的工作方式。

3busses文件夹

这个文件包含了一些I2C主机控制器的驱动,如i2c-tegra.ci2c-omap.ci2c-versatile.ci2c-s3c2410.c等。

4algos文件夹

实现了一些I2C总线适配器的通信方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/205840
推荐阅读
相关标签
  

闽ICP备14008679号