历史上的今天
今天是:2025年03月30日(星期日)
2020年03月30日 | 单片机小白学习之路(二十六)---EEPROM-IIC总线理解(一)
2020-03-30 来源:eefocus
目标:EEPROM-IIC总线理解(一)
1.IIC总线简介
IIC(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。由于其管脚少,硬件实现简单,可扩展性强等特点,因此被广泛的使用在各大集成芯片内。
I2C是一个通信协议,它拥有严密的通信时序逻辑要求,而EEPROM是一个器件,只是这个器件采样了I2C协议的接口与单片机相连而已,二者并没有必然的联系,EEPROM可以用其他接口,I2C也可以用在其它很多器件上。
1.1 IIC物理层
I2C通信设备常用的连接方式:

IIC物理层
单片机的电源(40脚)连接SDA和SCL不然就没法有高低电平变化了
特点:
(1)它是一个支持多设备的总线。
(2)I2C 总线只使用两条总线线路,SDA、SCL。
(3)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同 设备之间的访问。
(4)总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5)多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
(6)具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式。
(7)连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制
1.2 IIC协议层
I2C 的协议定义了通信的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。
(1)数据有效性规定

图片2.png?imageView2/2/w/550
要求时钟线在高电平的时候数据线也为高电平保持数据稳定来传输,只要时钟线是低电平是才允许数据进行变化
每次数据传输都以字节为单位,每次传输的字节数不受限制。
(2)起始和停止信号

起始信号和终止信号
起始信号与终止信号是由主机发出的,在数据线上表示
(3)应答响应

应答响应
应答响应是在发送完一个字节后(是以字节为单位进行传输的)从机发出的,表示一个字节发送完了,然后从机可继续接受数据
(4)总线的寻址方式
I2C总线寻址按照从机地址位数可分为两种,一种是7位,另一种是10位。采用7位的寻址字节(寻址字节是起始信号后的第一个字节)的位定义如下:

寻址方式
1~7是从机地址位,里面又分为固定地址和可编程部分组成,用来调整地址的个数
R/W是用来决定主机和从机吉安关系的,当R/W = 0,主机发送数据到从机,当R/W = 1,表示主机接收来自从机的数据
史海拾趣
|
Altium Protel DXP是第一套完整的板卡级设计系统,真正实现在单个应用程序中的集成。设计从一开始的目的就是为了支持整个设计过程,Protel DXP让你可以选择最适当的设计途径来按你想要的方式工作。Protel DXP PCB线路图设计系统完全利用了Windows X ...… 查看全部问答> |
|
我前几天下了个Cadence软件,主要是查看芯片封装信息的,其中主要有两个文件,一个是pad格式,可以打开,另一个是psm格式的文件 怎么也打不开。气死了,现在很急,希望哪位高手可以帮助我。。。:Q… 查看全部问答> |
|
MSP430F149单片机,中断发送函数 我理解的发送过程是这样的,大家先看下这样理解对不对?:首先,代码设置中断标志,UTXIFG1 = 1,程序进入发送中断函数发送一个字节,发送完毕后,MCU自动复位UTXIFG1 = 0, 然后退出 ...… 查看全部问答> |
|
2009中国嵌入式系统教学课件大赛----参赛费free,奖金最高3万元! 大赛评委由工业界、教育界资深专家共同担任。其中,院士3人,教育部教学指导委员会主任级专家4人,嵌入式知名企业的管理人员和技术工程师多人。 大赛面向 ...… 查看全部问答> |
|
gooogleman, 我听论坛的兄弟说你有WINCE下的 SKYPE软件, 不知能发给我一份吗? 我找了好几天了也没找到。急用. 非常感谢. EMAIL: LHEART@263.NET… 查看全部问答> |
|
程序如下 #include unsigned int count=0; unsigned int count1=0; sbit P15=P1^5 ;//蜂鸣器 main() { TMOD=0X01;//选择定时器0方式1 TH0=(65536-50000)/256;//定时器置初值,定时50ms ...… 查看全部问答> |
|
Rt_thread中如何用FinSH shell查看一个线程使用的栈最大深度 请教了:RT中定义堆栈是一个麻烦事,我们要怎样用FinSH shell来查看一个线程使用的栈的最大深度喃? 哪位说说看。。。。。… 查看全部问答> |




