linux i2c总线协议(一)
来源:互联网 发布:spring 事务源码 编辑:程序博客网 时间:2024/06/07 01:03
应用:
触摸屏
电源管理
摄像头(控制接口)
一种两线式总线协议
SCL: 串行时钟线
SDA: 串行数据线
总线上可以同时挂接多个器件
两种设备类型
主机: 初始化发送、产生时钟信号、终止发送
从机: 被寻址
两种角色
发送器: 发送数据到总线上
接受器: 接受数据、产生应答
起始与停止
SCL 线是高电平时,SDA 线从高电平向低电平切换,表示起始条件;
SCL 线是高电平时,SDA 线由低电平向高电平切换,表示停止条件。
起始和停止条件由主机产生。
寻址
第一个字节的前7 位为从机地址,最低位是传输方向标志
0:主机向从机写数据
1:主机读取数据
字节格式
发送到SDA线上的每个字节必须为8 位,每次传输发送的字节数量不受限制;每个字节后必须跟一个响应位;首先传输的是数据的最高位(MSB)。
应答
接收器接收到一字节后,必须产生应答(通过拉低SDA线);否则传输将终止。
例外:
如果主机作为接收方,在读取最后一个字节后,通过产生非应答(保持SDA为高电平)标志不再读取数据,接着发送停止条件,终止该次传输。
示例:主机向从机写2字节
示例:主机读取2字节
inux下的i2c驱动,通过struct i2c_msg描述一次传输 /A 非应答,通知从机不再读取数据
addr 保存器件地址
flags bit0保存读写标志位
len 要操作的数据长度
*buff 如果是写操作,指向发送数据的起始地址
如果是读操作,指向返回数据的缓冲区
2. I2C 控制器
TWI_DATA -- 数据寄存器
写模式:保存需要发送的数据(包括从机地址)
读模式:保存接收到的数据
TWI_CNTR -- 控制寄存器
bit5:写1,控制器向总线上发送起始信号(获得总线控制权)
bit4:写1,控制器向总线上发送停止信号(释放总线控制权)
bit2:应答使能(读模式下使用)
TWI_STAT -- 状态寄存器
标示当前控制权状态
写模式:
读模式:
3. i2c驱动框架
分为3层:
硬件控制层(i2c-sum.c)
注册总线控制器
初始化i2c_adapter
驱动总线控制器收发数据
处理i2c中断
i2核心层(i2c-core.c)
维护adapter、client、driver
提供注册接口
提供通用的读写函数
i2c_transfer
驱动层
实现具体i2c设备的驱动
4. 硬件控制层
- linux i2c总线协议(一)
- I2C总线时序模拟(一)-加深理解总线协议
- I2C总线协议详解
- I2C总线协议(转载)
- I2C总线协议详解
- I2C串行总线协议
- i2c总线协议总结
- I2C总线协议
- I2C总线协议详解
- I2C总线协议
- i2c总线协议
- I2C总线协议详解
- 嵌入式 I2C总线协议
- I2C总线协议详解
- I2C总线协议详解
- I2C总线协议详解
- I2C总线协议详解
- I2C总线协议详解
- python 变量作用域
- Java中static的用法归纳
- 转:关于C++ const 的全面总结
- swift2 控制流
- JBoss调优(四)web服务器线程池调优
- linux i2c总线协议(一)
- CSS编码规范
- Java多线程服务端与客户端的交互小实例
- 面试中的红黑树问题
- hdu1513 Palindrome
- 【Android】Android客户端以线程的方式从服务器的PHP读取Mysql
- rop 入门(五)
- leetcode longestCommonPrefix
- curl 命令使用