I2C是inter-integrated circuit的缩写,又名为TWI,只需要用两条物理线进行传输,分别命名为SDA和SCL, 用于传输serial data和serial clock。I2C工作时分为主从工作模式,而在同总线上可以存在多个主机。每一个连接到总线的器件都可以通过唯一的地址与总线连接,主机控制主机为发送器模式或是接收器模式。多个主机控制时可以通过冲突检测和仲裁防止数据被破坏。I2C总线有几种不同速率的工作模式,标准模式的速率为100kbps,快速模式下速率为400kbps,在高速模式下速率可达到3.4Mbps。整理下I2C基本的传输方式。
数据发送过程
发送从起始到结束为一次完整发送过程,如图所示一次完整的发送过程,起始后先发送地址信息,R/W表示写入或是读取数据,如果一次过程中,需要切换读写操作时,需要重新发送start。SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制,而每个字节后必须跟一个响应位。从机在处理其他事件而不能接收数据时,可以通过控制SCL保持低电平来等待数据接收,等到准备好继续传输时,释放SCL。在总线上每个模块具有唯一的地址,当然亦可以设计广播地址,通知所有其他模块。
启动和停止
当I2C不工作时,SDA和SCL一样都处于高位HIGH,SCL保持为HIGH,SDA由HIGH变LOW时表示开始传输,而SCL保持HIGH,SDA由LOW变为HIGH时表示停止传输。Sr和S完全相同,差别只是第一次Start之后没有进行stop,再次启动Start。
数据产生
SDA上传送的数据必须在时钟高电平时保持稳定,而数据的改变只有在SCL为低时进行,而SCL由主机控制产生。
冲突仲裁
主机在总线空闲时候启动传输。而当总线上有多个主机时,可能产生同时启动的冲突,因此需要仲裁。仲裁方式是,当SCL线是高电平时,仲裁在SDA线发生 这样在其他主机发送低电平时发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同,总线上的电平总是在一个输出为低时就为低。仲裁可以持续多位,当丢失仲裁的主机同时具有从机功能时,需要立即切换从机状态。
从机挂起数据发送示例
关键字:I2C总线 数据读取
引用地址:
带你理解I2C总线数据传输方式
推荐阅读最新更新时间:2024-05-03 02:55
NRF24L01使用外部中断读取数据的问题
NRF24L01读取数据不能使用中断的方式,原因如下: 首先NRF24L01中断触发时,IRQ引脚会一直保持低电平直到状态寄存器中的中断标志被重新清零。 stm32的外部中断触发方式只有上升沿或者下降沿触发,若配置成外部中断模式,当RX_DR中断触发时IRQ引脚会产生一个下降沿,stm32进入中断函数执行数据读取函数,读取完之后清除状态寄存器标志,IRQ引脚重新变为高电平。但,若在在清除中断标志之后刚好又来了一帧数据,而此时还没有出中断函数,IRQ引脚就会被置为低电平,然后退出中断函数,但IRQ引脚再也产生不了下降沿信号(因为中断标志位不会再被清除),也即再也进不了中断了。
[单片机]
数字多媒体存储式智能车载多媒体音响系统设计
随汽车电子技术的迅速发展,车载音频领域正在经历一个前所未有的技术变革,使用者对车载音频提出了功能多样化、操作人性化的要求,主要包括以下三个方面 :(1)具备更好的电台接收效果以及更简便的数字式调台操作;(2)支持多种外加存储设备,如支持大容量的U盘和SD卡等;(3)提供更加丰富的音效处理,如高音、重低音、等响度、平衡度等的调节以及提供流行、摇滚、爵士、古典等音效处理。以这些需求为出发点,设计了一款数字车载音响系统。 1 I2C协议 I2C总线作为同步串行数据输出总线,由一条串行数据线(SDA)和一条串行时钟线(SCL)组成。它是一个真正的多主机总线,如果多个主机同时进行初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。每个连
[单片机]
基于PC机的视频点播机顶盒的设计
机顶盒是视频点播(VOD)系统的终端设备,是用户与VOD服务器之间的智能接口。它用于视频业务的接收和用户请求的发送。因此,VOD系统中的数据传输被分成两个通路:下行通路用于把视频信息传送到用户;上行通路用于把用户的点播需求传送到发送端。基于PC机的机顶盒是将机顶盒的功能做成普通的PC插卡形式,利用计算机实现视频点播的所有功能。这样做有几点好处: 1 充分利用微机的软、硬件资源,从而降低了用户终端设备的成本; 2 兼容性好,可适应不同的接入网和不同类型的业务; 3 软件维护和升级方便,适应未来发展; 4 可设计易操作、美观和基于Windows95/98的用户界面。 该机顶盒由两块普通PC机插卡构成,
[家用电子]
如何使用C语言实现51单片机模拟I2C总线
电路原理图 EEPROM为ATMEL公司的AT24C01A。单片机为ATMEL公司的AT89C51。 软件说明 C语言为Franklin C V3.2。将源程序另存为testi2c.c,用命令 C51 testi2c.c L51 TESTI2C.OBJ OHS51 TESTI2C 编译,连接,得到TESTI2C.HEX文件,即可由编程器读入并进行写片,实验。 3.源程序 #include 《reg51.h》 #include 《intrins.h》 #define uchar unsigned char #define uint unsigned int #define AddWr 0xa0 /*器件地址选择及写标志*/ #d
[单片机]
Excel VBA 读取保存Keysight示波器数据 平均模式
示波器型号:Keysight MSO-X 4154A Excel版本:Microsoft Office Professional Plus 2010 引用: VISA-COM 5.9 Type Library Keysight VISA COM Resource Manager 平均模式时防止操作未完成发生错误: - 使能ESE中OPC,bit 0,&H01 - 使用Digitized采集:写入 :DIGitize ,写入 *OPC - 有采集请求时ESR使STB bit6位置1 - 检查STB中bit6位(&H20),置1开始读取数据 Public myScope As New
[测试测量]
STM32F103读取原始数据,上位机显示(附上微机和程序源码)
出现的几个问题总结: 1,printf 函数 蛋疼了,刚开始没有注意这个,导致一直输出错误的格式。 printf( %c ,0xA5);//输出A5的16进制A5 printf( %f ,0xA5);// 输出A5的ASCIC的形式61 附上一些格式: 2 MPU6050 输出数值的理解: PU6050数据是16位的数。它属于int16类型,即数据范围是-32768 到 32767。 正数范围是0-7FFF(0-32767), 负数范围是(1000-FFFF). 计算机中,负数是以补码的形式来表示的。什么叫补码呢?给大家复习
[单片机]
基于单片机的AT2402的I2C总线读写驱动程序
//此部分为AT2402的驱动程序使用I2C总线连接 #include Function.h //AT2402的功能函数 // 向有子地址器件发送多字节数据函数 //函数原型: bit ISendStr(UCHAR sla,UCHAR suba,ucahr /s,UCHAR no); //功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件 // 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。 // 如果返回1表示操作成功,否则操作有误。 //注意: 使用前必须已结束总线。 bit ISendStr(unsigne
[单片机]
I2C总线学习—查缺补漏—应答信号ACK
IIC协议规定,当主机作为接收设备时,主机对最后一个字节不应答,以向发送设备(从设备)标识数据传送结束。这是因为每次传输都应得到应答信号后再进行下一个字节传送。如果此时接收机应答了,那它就接收的不是最后一个字节了。如果是最后一个字节,第9个时钟周期发送的是非应答信号(此时发送的不是应答信号就是非应答信号),最后发送停止信号。 并非每传输8位数据之后,都会有ACK信号,有以下3中例外 当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始
[单片机]