查看I2C 总线精要的源代码
←
I2C 总线精要
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 概述 == 由 Philips (现 NXP) 于 80 年代开发,是一种很可靠的低速外设总线,广泛应用于 PC 和嵌入式系统:各种 I2C 接口的传感器、OLED 显示屏、SMBus (System Management Bus, )、PMBus (Power Management Bus)、IPMI (Intelligent Platform Management Interface)、DDC (Display Data Channel)、ATCA (Advanced Telecom Computing Architecture)...... 两根线: SCL 和 SDA,皆拉高 (pull-up) 时为总线空闲态 * SCL : Serial Clock Line, holds Clock signal * SDA : Serial Data Line, holds Data or address signal * IO must be open drain (or open collector in TTL) [[文件:I2C data transfer 640.png]] [[文件:I2c com.png]] '''空闲态、起始信号、停止信号、重复起始信号:''' * 空闲态:SCL SDA 皆为高 * 起始位:空闲态下,SDA 拉低 * 停止位:SCL 为高后(SCL 一个上升延后,维持高不变),SDA 出现由低拉高 * 重复起始:当两个起始信号之间没有停止信号时,即产生了重复起始信号。主机采用这种方法与另一个从机或相同的从机以不同传输方向进行通信(例如:从写入设备到从设备读出)而不释放总线。 '''数据传输:''' * 数据传输过程中,一个 SCL 时钟脉冲传输一个数据位,从机在 SCL 时钟的'''上升沿后'''获取 SDA 的数据(在 SCL 时钟为高时,SDA 必须是 stable 的,除非 Start/Stop condition) * 即 SDA 线只能在 SCL 时钟'''下降沿'''后(为低时)才可以改变 * 当起始信号产生后,主机立即传输数据的第一字节:7 位从机地址 + 读写位,读写位控制从机的数据传输方向 (0: w; 1: r)。被主机寻址的从机会通过在 '''第 9 个 SCL 时钟周期将 SDA 置低''' 作为应答 (ACK) * 7bit mode: 发送 7bit 的address (MSB) 及一位的 W(0) / R(1) 后,该 address 的 slave 端会发送一个 Ack (acknowledge) 位,ACK = 0 表设定成功,开始数据传送 * 每次传一个 byte ,都跟一个 ACK bit,由 Slave 端发送(把 SDA 拉 LOW),否则 Master 会认为 byte 写失败,发出 STOP 信号或是重新发送 START 信号 * 当主机作为接收器时,发生无响应信号 (NACK),从机释放 SDA 线,使主机产生停止信号或重复起始信号 * 在每个 byte 之间,Slave 端随时可以把 SCL 拉低来强制传输暂停 '''地址模式:''' * 7bit 地址,保留 16 个,可用 112;标准模式 (100 Kbit/s)、低速模式 (10 Kbit/s) * 10bit 地址;快速模式 (400 Kbit/s)、高速模式 (3.4 Mbit/s) '''10bit mode:''' 用两个 byte 来传送 address。第一个 byte 的前五位需为 “1111 0” 来表示要使用 10-bit addressing [[文件:I2c-10bit-addr.gif]] <br><br>
返回到
I2C 总线精要
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面