专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
Linux I2C设备驱动(一)——物理拓扑结构与协议
2019-07-13 05:57
发布
生成海报
站内文章
/
嵌入式Linux
14183
0
1567
data/attach/1907/3fn4jx2t81txiw5qgd806rsj385mefgr.jpgdata/attach/1907/hk5bt0p2ap91emwvwhouz0p6t67spujw.jpgdata/attach/1907/2rp8prqqfp1bbq7jtkohmzw8gugu1209.jpg
团队 承接嵌入式linux软硬件开发、机器视觉 图像处理、网络流等项目
微信号:hgz1173136060
1
-
1
:
I2C
总线知识
1
-
1
-
1
:
I2C
总线物理拓扑结构
I2C
总线在物理连接上非常简单,分别由
SDA(
串行数据线
)
和
SCL(
串行时钟线
)
两线串行总线
及
上拉电阻
组成。通信原理是通过对
SCL
和
SDA
线高低电平时序的控制,来产生
I2C
总线协议所需要的信号进行数据的传递。
总线
空闲
时,上拉电阻使
SDA
和
SCL
线都保持
高电平
。
各设备连接到总线的输出端必须是
开漏输出
或
集电极开路输出
的结构
(OC
门
)
1
-
1
-
2
:
I2C
总线特征
I2C
总线上的每一个设备都可以作为主设备或者从设备,主控能够控制数据的传输和时钟频率,
在任意时刻只能有一个主控
。而且每一个设备都会对应一个唯一的地址
(
可以从
I2C
器件的数据手册得知
)
,主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把
CPU
带
I2C
总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。
I2C
总线上可挂接的设备数量受总线的最大电容
400pF
限制,如果所挂接的是相同型号的器件,则还受器件地址位的限制。
I2C
总线数据传输速率在标准模式下可达
100kbit/s
,快速模式下可达
400kbit/s
,高速模式下可达
3.4Mbit/s
。一般通过
I2C
总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。
I2C
总线上的主设备与从设备之间以字节
(8
位
)
为单位进行双向的数据传输。半双工
1
-
1
-
3
:
I2C
总线协议
I2C
协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。
空闲:
SCL
高电平,
SDA
高电平
起始条件:
SCL
高电平,
SDA
下降沿
停止条件:
SCL
高电平,
SDA
上升沿
忙状态:正在进行数据传输的主从设备独
占
总线,其他设备无法访问
数据有效:在
SCL
的高电平期间,
SDA
保持稳定,数据有效。
SDA
的改变只能发生在
SCL
的低电平期间
ACK
信号:数据传输的过程中,接收器件每接收一个字节数据要产生一个
ACK
信号,向发送器件发出特定的
低电平
脉冲,表示已经收到数据。
如图所示:
数据传输
:
字节为单位,一个脉冲,一个数据位, 传输方向:从高位字节到低位的顺序传输 传输完一个字节,从设备发送
低电平
应答位
在了解起始条件和停止条件后,我们再来看看在这个过程中数据的传输是如何进行的。前面我们已经提到过,
数据传输以字节为单位
。
主设备在
SCL
线上产生
每个时钟脉冲
的过程中将在
SDA
线上传输
一个数据位
,
当一个字节按数据位
从高位到低位的顺序传输
完后,紧接着从设备将
拉低
SDA
线,回传给主设备一个
应答位
,此时才认为一个字节真正的被传输完成。当然,并不是所有的字节传输都必须有一个应答位,比如:当从设备不能再接收主设备发送的数据时,从设备将回传一个否定应答位。数据传输的过程如图所示
:
设备地址:高
7
位设备地址,最低位为读写位。
0
表示主设备向从设备写数据,
1
表示主设备向从设备读数据
在前面我们还提到过,
I2C
总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是
7
位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,
0
表示主设备向从设备写数据,
1
表示主设备向从设备读数据。如图所示:
1
-
1
-
4
:
I2C
总线操作
对
I2C
总线的操作实际就是主从设备之间的读写操作。大致可分为以下三种操作情况:
第一,主设备往从设备中写数据
。数据传输格式如下:
第二,主设备从从设备中读数据
。数据传输格式如下:
第三,主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。数据传输格式如下:
第三种操作在单个主设备系统中,重复的开启起始条件机制要比用
STOP
终止传输后又再次开启总线更有效率。
Ta的文章
更多
>>
Linux I2C设备驱动(一)——物理拓扑结构与协议
0 个评论
PIC18F25K80,timer0定时器中断
0 个评论
对6713boot_loader的理解
0 个评论
国庆七连测(二) 模模塔
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮