stm硬件iic读不出数据_一天一个设计实例IIC协议及FPGA实现

本文详细介绍了IIC总线规范,包括其特性、标准模式总线规范、电路设计要点、位传输、数据传输协议、仲裁与时钟发生等内容。还探讨了在FPGA中实现IIC协议的具体方法,包括起始位、结束位、数据位的产生代码,并提供了仿真验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1.1IIC 总线规范简介

1) IIC 总线特性介绍

在现代电子产品开发过程中,为了简化系统,提高系统的可靠性,缩短产品开发周期,增加硬件构成的灵活性,推出了一种高效、可靠、方便的 IIC串行总线。二线制的 IIC 串行总线使得各电路单元之间只需要简单的两线连接,总线接口都集成在器件中,可实现电路系统的模块化、标准化设计。在 IIC 总线上,各单元电路相互之间没有其它连线,常用的单元电路基本上与系统电路无关,极易形成自己的标准化、模块化设计。

2) IIC 标准模式总线规范

IIC总线可通过串行数据(SDA)和串行时钟(SCL)线与总线上的任何一个器件连接,每 个器件都有一个唯一的地址,都可以作为一个发送器或接收器。各器件在执行数据传输时也都可被看做是一个主机或从机。

发送器

本次传送中发送数据(不包括地址和命令)到总线的器件;

接收器

本次传送中从总线接收数据(不包括地址和命令)的器件;

主机

初始化发送、产生时钟信号和终止发送的器件,它可以是发送器或接收器, 主机通常是微控制器;

从机

被主机寻址的器件,它可以是发送器或接收器。

IIC总线是一个多主机的总线,可以连接多个能控制总线的器件到总线。当两个以上能控制总线的器件同时发生传输时,只能有一个器件能真正控制总线而成为主机,并使报文不被破坏,这个过程叫做仲裁。与此同时,能使多个能控制总线的器件产生同步的时钟信号。

SDA 和 SCL 都是双向线路,连接到总线的器件的输出级必须是漏极开路或集电极开路,该器件通过一个电流源或上拉电阻连接到正的电源电压,实现线与功能。当总线空闲时,这两条线路都是高电平。IIC总线上数据的传输速率在标准模式下可达100kb/s,在快速模式下可达400kb/s,在高速模式下可达3.4Mb/s。连接到总线的接口数量由总线电容是400pF的限制决定。

3)  IIC总线电路设计要点

bb0f6ab9474067291b0aab301ac32ce2.png

图2‑1  I2C总线电路设计要点

4) 位传输

IIC 总线上每传输一个数据位必须产生一个时钟脉冲。

(1) 数据的有效性。SDA 线上的数据必须在时钟线 SCL 的高电平周期保持稳定, 数据线的电平状态只有在 SCL 线的时钟信号是低电平时才能改变,如图 2.11 所示。 在标准模式下,高低电平宽度必须大于等于 4.7us。

d36f61106d08ec0cf6f073b76ed5666b.png

图2‑2 数据有效性

24583a660304877b2dbb96995a9a5fb7.png

图2‑3 IIC总线控制的位传输

 (2) 起始和停止条件。在 IIC 总线中,唯一违反上述数据有效性的是起始(S)和停止(P)条件,如图2‑4 所示。

起始条件(重复起始条件): 在 SCL 线是高电平时,SDA 线从高电平向低电平切换。

停止条件: 在 SCL 线是高电平时,SDA 线由低电平向高电平切换。

26f9bb398d1a9c659a59adaa03ebfc1a.png

图2‑4 起始位和停止条件

起始和停止条件一般由主机产生。起始条件是作为一次传送的开始,在起始条件后,总线被认为处于忙的状态。停止条件是作为一次传送的结束,在停止条件的某段时间后,总线被认为再次处于空闲状态。重复起始条件既作为上次传送的结束,也作为下次传送的开始。

5) 数据传输

(1) 字节格式。发送到 SDA 线上的每个字节必须为 8 位。每次传输可以发送的字节数量不受限制,每个字节后必须跟一个应答位。首先传输的是数据的最高位(MSB), 如图2‑5所示。

42921e475609f33a2c17524e282b999b.png

图2‑5 IIC总线的数据传输

 (2) 应答。相应的应答时钟脉冲由从机产生。在应答的时钟脉冲期间,发送器释放 SDA线(高),与此同时,接收器必须将 SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平,如图2‑5中时钟信号SCL 的第 9 位。

一般说来,被寻址匹配的从机或可继续接收下一字节的接收器将产生一个应答。若作为发送器的主机在发送完一个字节后没有收到应答位(或收到一个非应答位),或作为接收器的主机没有发送应答位(或发送一个非应答位),那么,主机必须产生一个停止条件或重复起始条件来结束木次传输。若从机(接收器)不能接收更多的数据字节,将不产生这个应答位 :主机(接收器)在接收完最后一个字节后不产生应答, 通知从机(发送器)数据结束。

6) 仲裁与时钟发生

(1) 同步。时钟同步是通过各个能产生时钟的器件“线与” 连接到 SCL 线上来实现的,各器件可能都有自己独立的时钟 各个时钟信号的频率、周期、相位和占空比可能都不相同,由于 “线与” 的结果,在 SCL 线上产生的实际时钟的低电平宽度由低电平持续时间最长的器件决定,他高电平宽度由高电平持续时间最短的器件决定。

(2) 仲裁。当总线空闲时,多个主机同时启动传输,可能检测到不止一个主机满足起始条件,而同时获得主机权,这样就要进行仲裁。当SCL 线是高电平时,仲裁在 SDA 线发生,当其他主机发送低电平时,发送高电平的主机将丢失仲裁,因为总线上的电平与它自己的电平不同。

仲裁可以持续多位,它的第一个阶段是比较地址位,如果每个主机都尝试寻址相同的器件,仲裁会继续比较数据位,或者比较响应位。因为 IIC 总线的地址和数据信息由赢得仲裁的主机决定,所以在仲裁过程中不会丢失信息。

(3) 用时钟同步机制作伪握手。器件可以快速接收数据字节,但可能需要更多时间保存接收到的字节或准备一个要发送的字节。此时,这个器件可以使 SCL 线保持低电平, 迫使与之交换数据的器件进入等待状态,直到准备好下一字节的发送或接收 。

7) 传输协议

(1) 寻址字节。主机产生起始条件后,发送的第一个字节为寻址字节。该字节的头 7位(高7 位)为从机地址,最低位(LSB)决定了报文的方向,“0”表示主机写信息到从机, “1”表示主机读从机中的信息,如图 2.14 所示。当发送了一个地址后,系统中的每个器件都将头 7 位与它自已的地址比较。如果一样,器件会应答主机的寻址,至于是从机-接收器还是从机-发送器都由R / W7d81f9b3891bd7a70c4b5c096d883291.png 位决定。

0c48c226130438317800e67b83bb6b6c.png

图2‑6 起始条件后的笫一个字节

从机地址由一个固定的部分和一个可编程的部分构成。例如,某些器件有 4 个固定的位(高4位)和 3 个可编程的地址位(低 3 位),那么同一总线上共可以连接 8 个相同的器件。IIC 总线委员会协调 IIC 地址的分配,保留了 2 组 8 位地址(0000XXX 和 1111XXX), 这 2组地址的用途可查阅有关资料。

(2) 传输格式。主机产生起始条件后,发送一个寻址字节,收到应答跟着就是数椐传输,数据传输一般由主机产生的停止位来终止。但是,如果主机仍希望在总线上通信,它可以产生重复起始条件(Sr)且寻址另一个从机,而不是首先产一个停止条件。在这种传输中,可能有不同的读/写格式结合。

数据的传输格式有以下三种 :

① 主机-发送器发送数据到从机-接收器,见图 2.15, 寻址字节的 “R/W” 位为 0,数据传输的方向不改变。

② 寻址字节后,主机-接收器立即读从机-发送器中的数据,见图 2.16,寻址字节的R/W

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值