一些中档增强型内核 PIC16 单片机器件具有主同步串行端口(Master Synchronous Serial Port,MSSP)。MSSP 模块可用于实现 I2CTM 或 SPI 通信协议。在本应用笔记中,将介绍 I2C 从协议的基础知识。然后读者应该更好地了解 MSSP 模块以及它如何用于 I2C 总线上的从机通信。还将提供代码示例以帮助读者将模块实现到他们自己的设计中。
I2C 总线规范
内部集成电路 (I2C) 总线是由 Philips® Inc. 开发的广泛使用的行业标准,用于在集成电路(例如串行 EEPROM 或其他微控制器)之间传输数据。设备在主/从环境中通信,其中主设备始终发起通信,从设备通过寻址进行控制。I2C 总线可以有一个或多个主设备和一个或多个从设备。主设备是在总线上发起数据传输的设备,负责生成总线上使用的串行时钟。任何寻址的设备都被视为从设备。I2C 协议支持 7 位或 10 位寻址模式。从 MSb 开始,一次执行 8 位数据传输。
总线的物理接口由两条双向开漏线组成,一条线用于串行时钟(SCL),另一条线用于串行数据(SDA)。每条线路都需要一个上拉电阻来为线路提供电压。将线拉到地面被认为是逻辑低点,而让线浮动被认为是逻辑高点。当总线空闲时,SDA 和 SCL 均为逻辑高电平。数据传输速率在标准模式下高达 100 kbits/s,在快速模式下高达 400 kbits/s,在快速模式 Plus 下高达 1 Mbits/s,或在高速模式下高达 3.4 Mbits/s模式。在时钟的高电平期间,SDA 线上的数据必须是稳定的。SDA 线上的任何变化只能在 SCL 线上的时钟信号为低电平时发生。为每个传输的数据位生成一个时钟脉冲。
I2C 规范将启动条件定义为 SDA 线从高电平变为低电平状态,而 SCL 线为高电平。启动条件始终由主机生成,表示总线从空闲状态转换为活动状态。I2C 规范规定在开始时不会发生总线冲突;但是,如果 MSSP 模块在将 SDA 线置为低电平之前对其进行采样,则可能会发生总线冲突。
停止条件是 SDA 线从低到高状态的转换,而 SCL 线为高。在停止有效之前,必须至少出现一个 SCL 低电平时间。因此,如果 SDA 线变为低电平,然后再次变为高电平,而 SCL 线保持高电平,则仅检测到启动条件。
图 1 I2C 启动和停止条件
只要停止有效,重新启动或重复启动就有效。如果主机希望在终止当前传输后保持总线,它可以发出重新启动。Restart 对从机具有与 Start 相同的效果,重置所有从机逻辑并准备它在地址中计时。主站可能想要寻址同一个或另一个从站。这对于许多 I2C 外设很有用,例如非易失性 EEPROM 存储器,其中 I2C 写操作和读操作连续完成。在这种情况下,写操作指定要读取的地址,读操作获取数据字节。由于主设备在将内存地址写入设备后并没有释放总线,因此执行一个Restart序列来读取内存地址的内容。
图 2 I2C 重启条件
在 10 位寻址从机模式下,主机需要重启才能将数据从寻址的从机中取出。一旦从设备被完全寻址,匹配高地址字节和低地址字节,主设备就可以发出重启并发送设置了 R/W 位的高地址字节。然后从逻辑将保持时钟并准备输出数据。在 10 位模式下与 R/W 清除完全匹配后,设置并保持先前匹配标志。在停止条件之前,具有 R/W 清除或高地址匹配的高地址失败。
编辑:hfy
-
单片机
+关注
关注
6030文章
44487浏览量
631868 -
I2C
+关注
关注
28文章
1476浏览量
123022 -
PIC16
+关注
关注
2文章
151浏览量
34893
发布评论请先 登录
相关推荐
评论