在硬件上,I2C 总线是由时钟总线 SCL 和数据总线 SDA 两条线构成,连接到总线上的所有器件的 SCL 都连到一起,所有 SDA 都连到一起。I2C 总线是开漏引脚并联的结构,因此我们外部要添加上拉电阻。对于开漏电路外部加上拉电阻,就组成了线“与”的关系。总线上线“与”的关系就是说,所有接入的器件保持高电平,这条线才是高电平,而任何一个器件输出一个低电平,那这条线就会保持低电平,因此可以做到任何一个器件都可以拉低电平,也就是任何一个器件都可以作为主机,如图14-1所示,我们添加了 R63 和 R64 两个上拉电阻。
图14-1 I2C 总线的上拉电阻
虽然说任何一个设备都可以作为主机,但绝大多数情况下我们都是用单片机来做主机,而总线上挂的多个器件,每一个都像电话机一样有自己唯一的地址,在信息传输的过程中,通过这唯一的地址就可以正常识别到属于自己的信息,在 KST-51 开发板上,就挂接了2个 I2C 设备,一个是 24C02,一个是 PCF8591。
我们在学习 UART 串行通信的时候,知道了通信流程分为起始位、数据位、停止位这三部分,同理在 I2C 中也有起始信号、数据传输和停止信号,如图14-2所示。
图14-2 I2C 时序流程图
从图上可以看出来,I2C 和 UART 时序流程有相似性,也有一定的区别。UART 每个字节中,都有一个起始位、8个数据位、1位停止位。而 I2C 分为起始信号、数据传输部分、停止信号。其中数据传输部分,可以一次通信过程传输很多个字节,字节数是不受限制的,而每个字节的数据最后也跟了一位,这一位叫做应答位,通常用 ACK 表示,有点类似于 UART 的停止位。
下面我们一部分一部分的把 I2C 通信时序进行剖析。之前我们已经学过了 UART,所以学习 I2C 的过程我尽量拿 UART 来作为对比,这样有助于更好的理解。但是有一点大家要理解清楚,就是 UART 通信虽然用了 TXD 和 RXD 两根线,但是实际一次通信中,1条线就可以完成,2条线是把发送和接收分开而已,而 I2C 每次通信,不管是发送还是接收,必须2条线都参与工作才能完成,为了更方便的看出来每一位的传输流程,我们把图14-2改进成图14-3。
图14-3 I2C 通信流程解析
起始信号:UART 通信是从一直持续的高电平出现一个低电平标志起始位;而 I2C 通信的起始信号的定义是 SCL 为高电平期间,SDA 由高电平向低电平变化产生一个下降沿,表示起始信号,如图14-3中的 Start 部分所示。
数据传输:首先,UART 是低位在前,高位在后;而 I2C 通信是高位在前,低位在后。其次,UART 通信数据位是固定长度,波特率分之一,一位一位固定时间发送完毕就可以了。而 I2C 没有固定波特率,但是有时序的要求,要求当 SCL 在低电平的时候,SDA 允许变化,也就是说,发送方必须先保持 SCL 是低电平,才可以改变数据线 SDA,输出要发送的当前数据的一位;而当 SCL 在高电平的时候,SDA 绝对不可以变化,因为这个时候,接收方要来读取当前 SDA 的电平信号是0还是1,因此要保证 SDA 的稳定,如图14-3中的每一位数据的变化,都是在 SCL 的低电平位置。8位数据位后边跟着的是一位应答位,应答位我们后边还要具体介绍。
停止信号:UART 通信的停止位是一位固定的高电平信号;而 I2C 通信停止信号的定义是 SCL 为高电平期间,SDA 由低电平向高电平变化产生一个上升沿,表示结束信号,如图14-3中的 Stop 部分所示。
关键字:单片机 I2C 时序
引用地址:
单片机 I2C 时序介绍
推荐阅读最新更新时间:2024-03-16 15:45
基于AVR单片机的数字滤波器滤除工频干扰的快速算法
工频干扰广泛存在各种工业现场中,其产生的途径主要包括输电馈线、照明设备、发动机以及各种电子仪器设备等。一般可以通过滤波电路消除工频干扰,但这必将增加硬件结构的复杂程度。实际上,还可以采用数字信号处理的相关算法,通过软件滤波器滤除工频干扰。软件滤波算法的采用,无疑会在简化电路结构的同时,使系统的硬件资源得到更加充分的利用,并达到降低产品成本的要求。 AVR 单片机是Atmel 公司生产的8位精简指令集(RISC)单片机。与同类单片机相比,在运算速度、外设资源、灵活性等方面性能均衡,性价比较高。 AVR 单片机适合C语言开发,Mega 系列AVR 单片机还有一个内部硬件乘法器单元。这些特点都为软件滤波器的实现提供了极大的便利。 1
[单片机]
51单片机模拟 SPI 总线的方法
1 引言 SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。由于SPI系统总线一共只需3~4位数据线和控制即可实现与具有S
[单片机]
以MSP430F149单片机为控制核心的点光源跟踪系统设计
1 系统方案论证 1.1 系统各模块方案的选择与论证 (1)电机驱动模块。采用L298驱动芯片组成驱动电路,可以通过控制中心输出的高低电平对电动机的方向进行控制,并且可以通过PWM波直接控制电动机的速度。电路较为简 ~单,容易实现,驱动能力和抗干扰能力强,性价比高。 (2)LED灯电流调节与光源检测模块。发射端通过直流稳压电源来点亮白光LED,通过调节白光LED两端的电压来调节电流从而调节亮度,接收端采用多个光敏电阻,通过光敏电阻阻值的变化来判断光源的位置。 (3)LED电流检测模块。在LED的下端串联一0.1Ω的电阻,电阻的另一端接地,采用OPA335精密放大器对0.1 Ω电阻的压降进行放大,再通过AD采样处理,从而测量
[单片机]
对I2C总线协议的一些理解
1、无论读与写,都是在时钟线为低时把数据送到数据总线上,在高时采样数据,把数据锁存到内部,所以读之前先把时钟线拉低,做好准备(数据线为高表示释放数据线),为接下来读数据做好准备。也就是时钟信号为低时,数据线上的高低电平才允许变化,时钟信号为高时,数据总线上的数据必须保持稳定。
2、起始信号产生后,总线为被占用状态(SDA拉低);终止信号产生后,总线为空闲状态(SCL被释放了)。
3、接收器件收到一个完整的数据字节后有可能需要完成一些其它工作,如处理中断,可能无法立刻接收下一字节,这时从机将SCL拉成低电平,从而使主机处于等待状态。直到从机准备好接收下一字节,再释放SCL线使之为高,从而数据传送可继续进行。数据线上
[嵌入式]
I2C学习之STC15F204EA---GPIO端口模拟--简单控制PCF8574AT
一定要记得加4.7K左右的上拉电阻----与器件类型不同导致的地址不一样! ------------------------------------------------------i2c.h----------头文件----------------------- #ifndef __I2C_H #define __I2C_H #define I2C_SCL_1() P32=1 //SCL = 1 #define I2C_SCL_0() P32=0 //SCL = 0 #define I2C_SDA_1() P33=1 //SDA = 1 #define I2C_SDA_0() P33=0 //SDA = 0 #defi
[单片机]
一种太阳能报警器系统设计
0 引言 我国是世界上受自然灾害影响最为严重的国家之一,近年来由于滥砍滥伐严重,自然资源过度开采,造成地质灾害和自然灾害发生的频率增多,破坏程度也越来越严重,2008年的四川汶川大地震、2010年的贵州玉树地震都造成了严重的人员死亡和经济损失,还有各地频发的各种泥石流、山体滑坡和水灾等都造成了不同程度的破坏,随时威胁着人民的生命财产安全。每年国家在防灾、抗灾和救灾方面都要花费大量的人力物力。如果能在灾害监测和预警方面下大力气,做到准确预测灾害的来临,灾前做好充分的准备工作,可以将灾害所造成的人员伤亡和经济损失减到最低,也为国家节省大量的救灾资金。 太阳能防空防灾电声警报器为各自独立的功能部件用积木形式集成安装在可移动的防水机
[单片机]
基于STM32单片机采集数据&数据上云
前言 以往采集数据均是采用Arduino开发板、esp32wifi模块等,本次实验采用的是STM32单片机,STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,功能非常强大,为本次实验提供了无限可能。 参考博客:https://blog.csdn.net/weixin_43271542/article/details/117384011?spm=1001.2014.3001.5502 1.实验原理 本项目采用ARM结构中最为代表的Cortex-M4系列的芯片,选用STM32F407ZGT6开发板进行项目开发,选用的传感器为常见通用的DHT11温湿度传感器。传感器将采
[单片机]
采用单片机C8051F310实现光伏电池MPPT控制器的设计
1 引 言 能源是人类社会存在和发展的重要物质基础,随着社会的发展,能源日渐减少,并伴随着环境问题日益突出,使得越来越多的国家把目光投向可再生能源。太阳能作为重要能源之一,以其永不枯竭,无污染等优点,正得到迅速的发展。但是太阳能电池在其工作过程中,由于受环境(主要包括日照强度,温度)的影响,其输出具有明显的非线性特性,造成电池与负载之间的不匹配,从而不能使太阳能最大效率地转化为电能输出。为了实现光伏发电系统的功率输出最大化,就需要对光伏电池的最大功率点进行跟踪控制,即MPPT(MaximumPower Point Tracking)控制。 在光伏控制技术上,MPPT控制方法有很多种,目前市场上常用的是使用CVT(恒定电压跟踪)
[单片机]