字节格式
发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整数据,比如说服务一个内部中断,那么它可以将时钟线SCL拉低来强制使主机进入wait状态.当从机准备好新的字节数据传输时,释放时钟线SCL,数据传输便继续进行.
ACK和NACK
每个字节后都有ACK发生.ACK应答位允许接收器通知发送器字节成功接收了下一个字节可以发送了.主机产生所有的时钟脉冲,包括应答位的第9个时钟脉冲.
ACK应答信号是如下定义的:在ACK的第9个时钟脉冲中发送器释放SDA线,所以接收器可以将SDA拉低,使得在这个时钟脉冲的高电平期间保证SDA是低电平.建立和保持时间也应该计算在内.
当在第9个时钟脉冲期间SDA仍然是高,这时定义为NACK信号.这时主机可以产生一个终止条件来终止传输,或者一个重复的开始条件来开始一个新的传输.这里有5中情况导致NACK的产生:
1.总线当前的传输地址上没有接收器,所以没有设备用ACK来响应.
2.因为接收者正在处理一些实时的功能,尚未准备与主机的通信,所以接收者不能收发.
3.在传输期间,接收者收到不能识别的数据或者命令.
4.在传输期间,接收者无法接收更多的数据字节.
5.主-接收器要通知从-发送器传输的结束.
时钟同步
在空闲总线上两个主机可以同时开始传输,所以必须要有一个方法来决定哪个主机来控制总线并完成其数据传输.这个方法就是时钟同步和仲裁.在单主机系统中,时钟同步和仲裁不需要了.
时钟同步通过使用I2C接口与SCL线的线与连接实现.意味着SCL线从高到低期间会引起主机开始计算它的低电平周期,一旦主机时钟变低,它会保持SCL线处于这种状态直到时钟到达高电平.然而,如果另一个时钟依旧是低电平,时钟的从低到高的变化并不会改变SCL线的状态.SCL拉低的时间由最长的低电平周期决定.短一些的低电平周期的主机在这时进入HIGH wait-state.
当所有的主机的低电平周期都结束了,时钟线才回到高电平.这时主机时钟和SCL的状态一致,所有的主机开始计数他们的高电平周期.第一个结束高电平的主机将SCL线重新拉低.
这样的话,同步的SCL时钟的低电平周期由所有主机中最长的低电平周期决定,高电平周期由最短的高电平周期决定.
仲裁
仲裁和同步一样,都是在系统中多于一个主机条件下协议要求的一部分.从机不参与仲裁处理.只有当总线空闲时,主机才可以开始一个传输.两个主机可能在开始条件规定的最小保持时间(tHD;SDA)内产生一个开始条件,结果总线上产生一个有效的开始条件.这个时候就需要仲裁来决定哪个主机完成它的传输.
仲裁处理是逐个bit进行的.在每个bit,当SCL为高,每个主机都check一下来看看SDA的电平是否和它发送的电平吻合.这个过程可能会持续很多个bit.只要传输是同一的,那么两个主机可以无误的完成完整的传输.当一个主机试着发送高,但是检测到SDA为低,那么这个主机知道自己失去仲裁然后关掉自己的SDA输出.另外的主机就会去完成它的传输.
在仲裁处理过程中没有信息丢失.失去仲裁的主机在它失去仲裁的字节末尾处产生时钟脉冲,当总线空闲时必须重启它的传输.
如果一个主机包含从机的功能,当它在寻址阶段丢失仲裁,那么赢得仲裁的主机可能会寻址它.丢失仲裁的主机必须立即切换到它的从模式.
下图显示了两个主机的仲裁处理.在主机产生的DATA1和SDA线的实际电平的值出现不同时,DATA1的输出就关掉了.主机1失去了仲裁.赢得仲裁的主机2的传输数据不受影响.
因为I2C总线只是仅由地址来控制,数据只由赢得仲裁的主机发送,这里没有最重要的主机,在总线上也没有优先级顺序.
在仲裁处理正在进行的时候,一个主机发送重复的开始条件或者是终止条件而另一个主机仍然在发送数据,那么这时候有一个未定的状态.换句话说,下面的条件下会出现这种情况:
主机1发送重复的开始条件,主机2发送一个数据位
主机1发送终止条件,主机2发送一个数据位
主机1发送重复的开始条件,主机2发送终止条件
关键字:I2C I2C总线 字节格式 时钟同步 仲裁
引用地址:I2C之知(三)--I2C总线的字节格式、时钟同步和仲裁
发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整数据,比如说服务一个内部中断,那么它可以将时钟线SCL拉低来强制使主机进入wait状态.当从机准备好新的字节数据传输时,释放时钟线SCL,数据传输便继续进行.
ACK和NACK
每个字节后都有ACK发生.ACK应答位允许接收器通知发送器字节成功接收了下一个字节可以发送了.主机产生所有的时钟脉冲,包括应答位的第9个时钟脉冲.
ACK应答信号是如下定义的:在ACK的第9个时钟脉冲中发送器释放SDA线,所以接收器可以将SDA拉低,使得在这个时钟脉冲的高电平期间保证SDA是低电平.建立和保持时间也应该计算在内.
当在第9个时钟脉冲期间SDA仍然是高,这时定义为NACK信号.这时主机可以产生一个终止条件来终止传输,或者一个重复的开始条件来开始一个新的传输.这里有5中情况导致NACK的产生:
1.总线当前的传输地址上没有接收器,所以没有设备用ACK来响应.
2.因为接收者正在处理一些实时的功能,尚未准备与主机的通信,所以接收者不能收发.
3.在传输期间,接收者收到不能识别的数据或者命令.
4.在传输期间,接收者无法接收更多的数据字节.
5.主-接收器要通知从-发送器传输的结束.
时钟同步
在空闲总线上两个主机可以同时开始传输,所以必须要有一个方法来决定哪个主机来控制总线并完成其数据传输.这个方法就是时钟同步和仲裁.在单主机系统中,时钟同步和仲裁不需要了.
时钟同步通过使用I2C接口与SCL线的线与连接实现.意味着SCL线从高到低期间会引起主机开始计算它的低电平周期,一旦主机时钟变低,它会保持SCL线处于这种状态直到时钟到达高电平.然而,如果另一个时钟依旧是低电平,时钟的从低到高的变化并不会改变SCL线的状态.SCL拉低的时间由最长的低电平周期决定.短一些的低电平周期的主机在这时进入HIGH wait-state.
当所有的主机的低电平周期都结束了,时钟线才回到高电平.这时主机时钟和SCL的状态一致,所有的主机开始计数他们的高电平周期.第一个结束高电平的主机将SCL线重新拉低.
这样的话,同步的SCL时钟的低电平周期由所有主机中最长的低电平周期决定,高电平周期由最短的高电平周期决定.
仲裁
仲裁和同步一样,都是在系统中多于一个主机条件下协议要求的一部分.从机不参与仲裁处理.只有当总线空闲时,主机才可以开始一个传输.两个主机可能在开始条件规定的最小保持时间(tHD;SDA)内产生一个开始条件,结果总线上产生一个有效的开始条件.这个时候就需要仲裁来决定哪个主机完成它的传输.
仲裁处理是逐个bit进行的.在每个bit,当SCL为高,每个主机都check一下来看看SDA的电平是否和它发送的电平吻合.这个过程可能会持续很多个bit.只要传输是同一的,那么两个主机可以无误的完成完整的传输.当一个主机试着发送高,但是检测到SDA为低,那么这个主机知道自己失去仲裁然后关掉自己的SDA输出.另外的主机就会去完成它的传输.
在仲裁处理过程中没有信息丢失.失去仲裁的主机在它失去仲裁的字节末尾处产生时钟脉冲,当总线空闲时必须重启它的传输.
如果一个主机包含从机的功能,当它在寻址阶段丢失仲裁,那么赢得仲裁的主机可能会寻址它.丢失仲裁的主机必须立即切换到它的从模式.
下图显示了两个主机的仲裁处理.在主机产生的DATA1和SDA线的实际电平的值出现不同时,DATA1的输出就关掉了.主机1失去了仲裁.赢得仲裁的主机2的传输数据不受影响.
因为I2C总线只是仅由地址来控制,数据只由赢得仲裁的主机发送,这里没有最重要的主机,在总线上也没有优先级顺序.
在仲裁处理正在进行的时候,一个主机发送重复的开始条件或者是终止条件而另一个主机仍然在发送数据,那么这时候有一个未定的状态.换句话说,下面的条件下会出现这种情况:
主机1发送重复的开始条件,主机2发送一个数据位
主机1发送终止条件,主机2发送一个数据位
主机1发送重复的开始条件,主机2发送终止条件
上一篇:I2C之知(一)--I2C的简介和特性
下一篇:I2C之知(五)--I2C总线的10bit地址以及通用广播地址
推荐阅读最新更新时间:2024-05-03 00:01
STM32HAL库学习笔记--硬件I2C读写AT24C512
一、CubeMx配置 开启I2C1,其余参数默认 在旧版本的CubeMx中,HAL库实现的I2C初始化带有一些BUG,比如需要在I2C引脚复用GPIO配置前加上I2C的时钟使能,不过这些BUG在新版本的CubeMx中似乎得到了解决,直接使用其生成的初始化程序和HAL库的I2C接口就可以实现成功的读写操作 二、读AT24C512DataSheet AT24Cxx系列芯片内存大小各异,页数和每页字节数也不同,要根据数据手册来确定该型号芯片的内存结构(Memory Organization) 由DS可知AT24C512的内存一共有 512 Pages x 128 Bytes = 65536 Bytes = 512 kbits
[单片机]
IEEE 1588精密时钟同步协议测试技术
1 引言 以太网 技术由于其开放性好、价格低廉和使用方便等特点,已经广泛应用于电信级别的网络中,以太网的数据传输速度也从早期的10M提高到100M,GE,10GE。40GE,100GE正式产品也将于2009年推出。 以太网技术是“即插即用”的,也就是将以太网终端接到IP网络上就可以随时使用其提供的业务。但是,只有“同步的”的IP网络才是一个真正的电信级网络,才能够为IP网络传送各种实时业务与数据业务的多重播放业务提供保障。目前,电信级网络对时间同步要求十分严格,对于一个全国范围的IP网络来说,骨干网络时延一般要求控制在50ms之内,现行的互联网网络时间协议NTP(Network Time Protocol),简单
[测试测量]
纳芯微I2C总线接口类芯片产品,为客户提供一站式解决方案
信号链芯片及其解决方案提供商苏州纳芯微电子股份有限公司(以下简称“纳芯微”)日前宣布推出五款I2C总线接口类芯片产品,适用于各种工业、企业和消费类应用中的控制总线设计,例如安防、电力电子、个人电脑、企业交换机、服务器等领域。该系列新产品包括I2C/SMBus通用总线I/O扩展器NCA9555、I2C/SMBus热插拔缓冲器NCA9511、四通道I2C/SMBus多路复用器NCA9545、I2C/SMBus双路双向缓冲器NCA9617以及I2C/SMBus电平转换器NCA9306,这五款芯片可在-40℃至85℃的宽温工作范围内稳定运行,闩锁性能超过100mA,均符合JESD78II类规范,兼容绝大部分MCU I/O电平,提高系统集成
[嵌入式]
【STM32Cube_14】使用硬件I2C读写环境光强度传感器(BH1750)
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): BH1750模块 BH1750FV1是两线式串行总线接口(IIC)的16位数字输出型环境光强度传感器,利用它的高分辨率可以探测较大范围内的光照强度变化(1lx - 65535lx)。 BH1750的原理图如下: 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; 2.生成MDK工程 选择芯片型号 打开STM32CubeMX,打开
[单片机]
15W I2C 电源管理器以 3.5A 电流给 LiFePO4 电池充电
加利福尼亚州米尔皮塔斯 (MILPITAS, CA) – 2012 年 3 月 15 日 – 凌力尔特公司 (Linear Technology Corporation) 推出大功率、I2C 控制和高效率的电源通路 (PowerPath™) 管理器、理想二极管控制器及磷酸铁锂 (LiFePO4) 电池充电器 LTC4156,该器件适用于单节电池设备,例如便携式医疗和工业设备、备份设备以及其他高功率密度电池供电应用。该 IC 可高效地从各种电源传输高达 15W 的功率,同时最大限度地降低功耗并减轻热量的限制。LTC4156 的开关电源通路拓扑结构可无缝地管理从两个输入源 (例如:一个墙上适配器和 USB 端口) 至器件的可再充 Li
[电源管理]
在P87LPC764单片机I2C总线系统中扩展LCD显示器
1 引言
I2C总线是Philips公司推出的芯片间串行传输总线。它仅用串行数据线(SDA)和串行时钟线(SCL)两根连线便实现了完善的全双工同步数据传送,并可很方便地构成多机系统和外围器件扩展系统。
本文介绍在P87LPC764单片机中利用I2C总线系统中典型的LCD驱动控制器件PCF8577C来扩展256段静态LCD的电路设计方法。
2 硬件电路设计
2.1 P87LPC764单片机的I2C总线接口
P87LPC764是Philips公司生产的一种小封装、低成本、高性能的单片机(具体内容见参考文献2)。它采用80C51加速处理器结构,片内带有支持I2C总线的硬件接口。当激活I2C总线时,P87L
[单片机]
【InterFace】STM32 I2C 死锁问题
#背景 其实这篇文章在很久之前就写过解决方法了。在经过不断的实践和深究后发现,硬件 I2C 死锁的问题在ST的官方手册中的勘误手册(errata)中早就提供解决方案,只是我没有重视官方的文档,一直在网络寻求帮助。 即使已经有官方的解决方案,但是还有很多人(包括以前的我)在怀疑 STM32 系列的 I2C 有硬件 BUG。这也告诉我们:网上资源虽丰富,但还是得通过“金睛火眼”来辨别。 讲真的,为了解决 I2C 问题,我在网上看了 N 多篇的文章、Blog 和帖子,还没看到几个人说 “STM32 硬件 I2C 没问题”,反而是看到很多类似这样的:“都听说STM32 硬件 I2C 有问题,一试,发现还真是有问题,改用 IO 模拟
[单片机]
【51单片机快速入门指南】4: 软件 I2C
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》 I2C 介绍 I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单, 器件封装形式小,通信速率较高等优点。I2C 总线只有两根双向信号线。一根是数据线 SDA,另一根是时钟线 SCL。由于其管脚少,硬件实现简单,可
[单片机]