I2C子系统之总结
来源:互联网 发布:windows安全配置 编辑:程序博客网 时间:2024/06/01 08:53
I2C子系统的结构是符合内核总的驱动模型。
I2C 子系统主要包含4大部件
1.i2c bus
2.adapter device
3.client device
4.adapter driver
其中i2c bus是用于管理的,并非是通信总线。i2c bus上挂着
adapter(主机) device、client(从机) device、adapter driver。
为了统一操作,adapter device、client device、adapter driver并非直接
通过注册函数注册到i2c bus上的。而是通过platform来实现
首先将包含adapter相关信息的platform_device注册到platform bus上。
然后再将platform_device对应的platform_driver注册到platform上。
此时,platform_device和platform_driver将会匹配成功,然后会调用
platform_driver中的probe函数。
最后在probe函数中实现向i2c bus注册adapter device的操作。
而adapter driver想i2c bus的注册操作则在i2c字符驱动注册中实现。
系统把i2c设备统一作为字符设备来处理,并且通过通用的fops来操作。
adapter driver驱动注册后在/dev下就创建好了adapter对应的设备文件。
而所有的adapter通过系统调用后调用到的都是同样的字符设备操作集fops中的方法。
那不同的adapter使用的操作方法肯定不同,这个怎么实现呢?实现方法具体如下。
首先通过系统调用open()调用到通用fops中的open()方法i2cdev_open()。
在i2cdev_open()中根据open(“/dev/i2c-x”,)的第一个参数可以找到adapter的设备号。
找到这个设备号就可以找到具体的adapter,而adapter在驱动注册的时候已经初始化了adapter的算法
i2c->adap.algo = &s3c24xx_i2c_algorithm;
在platform_driver的probe方法中初始化好了。
这个algo才是用于实现不同i2c adapter的发送数据功能的。
然后说下主机的发送
主机的发送是通过msg结构来实现的。
需要发送的数据保存在msg.buf中,其它如发送数据的长度
从机地址等信息则保存在msg.len msg.addr等中。
系统发送根据msg条数来发送信息,msg之间不会发送stop信号
之后当最后一则msg发送完毕才会发送一个stop信号。
而系统实现的write 和read这两个操作每次固定只能发送一个msg。
使得调用一次write read之后就会产生一个stop信号。
这对某些器件的某些操作来说是不合法的时序,比如说at24c02的random read操作
发送多则msg可以通过ioctl来实现,所以at24c02的random read只能通过
ioctl操作实现。
- I2C子系统之总结
- 协议[I2C]_I2C子系统之总结
- i2c子系统学习总结
- i2c子系统之write()
- I2C子系统之ioctl()
- Linux驱动子系统之I2C
- i2c子系统之at24c02简介
- i2c子系统之__i2c_first_dynamic_b…
- i2c子系统之__i2c_first_dynamic_b…
- Linux驱动子系统之I2C
- linux驱动之--I2C子系统
- i2c子系统之内核中I2C子系统的结构
- i2c子系统
- i2c子系统
- I2C子系统
- i2c 子系统
- linux设备模型之I2C子系统
- linux设备模型之i2c子系统
- eclipse 搭建C++开发环境
- 命令历史
- 在排序数组中,找出给定数字的出现次数
- 《Unix环境高级编程》:打印指定的描述符的文件标志
- 关于网络的一些专业名词
- I2C子系统之总结
- Vista/Win7下的直接磁盘写入
- Compute Shader (DX11)
- 黑马程序员_JAVA学习日记_JAVA中的IO流
- service iptables stop
- 黑马程序员_JAVA学习日记_JAVA中的多线程补充
- JVM学习之:GC的算法简述
- Servlet开发
- FAT32文件系统磁盘I/O参数揭密