关于I2C的总结

发布者:烟雨江湖最新更新时间:2015-09-25 来源: eefocus关键字:I2C  总线信号  时序总结 手机看文章 扫描二维码
随时随地手机看文章
这两天在看I2C,为了加深印象,把我遇到的一些问题写出来吧。

 

1——————

最先遇到的问题是AT24C02的操作时序,AT24C02内部有一个指针,指向储存空间的某一个字节,另外AT24C系列支持页操作,对于AT24C02一个页是8字节,也就是说地址的高5位是页地址,在同一次写入中,页地址不变,低3位地址一次增加,当增加到7之后再加1就变成0了,而由于页地址不变,相当于指针回到了页首,如果继续写那前面的内容会被覆盖。写数据的时序,先是I2C的开始信号,发送设备地址,之后写入希望写入的数据地址,然后依次写入数据。当然,可以只写一个字节的数据。

对于读取,是不存在页的概念的,时序是先发送启动信号,然后发送设备地址(注意,是写设备的时候的地址,也就是说最低位是1),接着发送数据地址,完了之后重新发送一次启动信号,接着就可以读取了,读取完一个字节的数据后要发送一个ACK,对于最后一个字节的数据要发送一个NACK来告诉AT24C数据已经接收完毕,之后发送结束信号断开连接即可。也可以只接收一个数据,这时候一个ACK都没有,第一次接收好直接发送一个NACK。

 

 

24C02的内部有连续的子地址空间,对这些空间进行n个字节的连续读/写时,都具有地址自动加1功能。只要设定好要读/写的器件内起始子地址及字节数,就能完成整个操作。
注意:对于24C02连续写的字节数不应超过页容量8,一次连续写所形成的总线传送结束后(主机发出停止信号后),24C02执行内部擦写过程,大约需要10ms左右,24C02不再应答主器件的任何请求。
24C02内有一个8位的地址计数器,连续读操作时,24C02每次输出一个数据字节后,地址计数器自动加1,当地址计数器加到255,并输出一个字节数据后,地址计数器将翻转到0,并继续输出数据字节,这样整个存储区域可以在一个读操作内全部读完。

 

 

#define SLAW 0xA0
uchar delay(uchar j)
{ uchar k,l;
for(l=0;l<=j;l++)
for(k=0;k<=250;k++);
return 0;
}
void main()
{
uchar sbuf[5]={0x00,0x12,0x55,0x30,0x12};
uchar rbuf[5];
I2C_SendStr(SLAW,0x10,tbuf,0x5);

delay(100);
I2C_RcvStr(SLAW,0x10,rbuf,0x5);

while(1);
}
}

 

 

 

2——————

在次我只发表对I2C确认信号的看法,至于它的一整套时序就不多罗嗦了。

1) MASTER向SLAVE发送数据:
MASTER没向SLAVE端发送8位数据后,就会将SDA置1,等待SLAVE端的确认;SLAVE端如果正确接受到数据,就会自动将SDA置0。我们程序员所能做的只能是检测确认信号,即每发送完8位数据后就检测一次SDA的状态,如果是0,则让程序继续往下执行,如果是1则强迫MASTER将刚才的8位数据再发送一遍;当然,如果SDA一直是1,也就是SLAVE一直未能正确接受到数据,我们也不能一直让MASTER反复发送,要做TIMEOUT处理,以防系统死机!

2) MASTER从SLAVE读取数据
MASTER从SLAVE端读取数据,情况与发送数据有所区别,在读到最后8位数据时,要将SDA置1,也就是做UNACK动作,让系统知道读取数据到此结束;这个置1动作由程序员来做,而不是MASTER本身,因为数据读到哪里结束,只有我们程序员知道!

3) 说明:MASTER 指主控制端,在一般系统中就是我们常说的单片机了;SLAVE是指具备I2C协议的专用IC,比如ATMEL的24系列(24C16、14C32等)和PHILPS的SAA711X系列(VIDEO DECODER)。

关键字:I2C  总线信号  时序总结 引用地址:关于I2C的总结

上一篇:***WARNING L15: MULTIPLE CALL TO SEGMENT错误信息的处理
下一篇:I2C总线读写AT24c02的程序

推荐阅读最新更新时间:2024-03-16 14:33

STM32F4之模拟I2C通信协议的实现
一,何为IIC? I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。 IIC是半双工通信方式。 二,IIC通信的6种状态 1.空闲状态 2.开始信号 3.停止信号 4.应答信号 5.数据的有效性 6.数据传输 三.用代码实现I2C协议的模拟 1.空闲状态:当SDA以及SCL两条总线都处于高电平状态时,处于空闲状态 void IIC_in
[单片机]
STM32F4之模拟<font color='red'>I2C</font>通信协议的实现
I2c程序 51系列及 AVR系列
keil c编译 51 #define uchar unsigned char #define uint unsigned int #include reg51.h #include intrins.h sbit Scl=P3^3; //串行时钟 sbit Sda=P3^4; //串行数据 /*发送起始条件*/ void Start(void) /*起始条件*/ { Sda=1; Scl=1; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Sda=0; _nop_ (); _nop_ (); _nop_
[单片机]
基于I2C总线的单主多从单片机之间的通信
  引言   随着单片机控制系统的不断扩大以及控制功能不断增多,有限的单个单片机通用I/O口已不能满足同一系统中控制多个受控对象需要,随着FC总线研究的深入,用I2C总线扩展单片机I/O口的方法在全自动、半自动仪器的开发领域得到了广泛应用,本文介绍了一个测试系统通过FC总线扩展I/O口实现了系统的多个功能。给出了系统的硬件连接以及Atmega128与三个Atmega168之间的软件通信流程图。   2 系统的硬件结构   图1是作者所研究的测试系统的整体框图,本系统中主要芯片PHILIPS公司的LPC2292,在此系统中键盘上其中三个按钮分别控制三个电机,系统的主要功能是LPC2292将扫描到的键盘信息发给Atmega128
[嵌入式]
STM32 I2C总线 自我总结学习
前几天在学习STM32的485通信,基本搞清楚了原理,也实际操作成功---后续还将进一步学习---与变频器通信,从而去控制380V电机! 现在打算彻底搞清楚STM32的I2C总线通信----首先是对AT24C02的读写----手上有PCF8574的IO扩展芯片,也是I2C协议的,希望实现多个控制! STM32的I2C有自带的硬件驱动,也可以使用GPIO模拟-----先总结一下硬件驱动下的问题。 ----------------------------------硬件下-----以AT24C02与PCF8574为例--------------- ------第一部分是简单宏定义------- #define
[单片机]
STM32 <font color='red'>I2C</font><font color='red'>总线</font> 自我<font color='red'>总结</font>学习
虚拟I2C总线串行显示电路介绍
  本文主要介绍了虚拟I2C总线串行显示电路,其中包括SAA1064引脚功能介绍、硬件电路设计、片内可编程功能以及程序举例。   1.SAA1064引脚功能   ① VDD、VEE:电源、接地端。电源4.5~15V;   ② P1~P16:段驱动输出端。分为两个8位口:   P1~P8;P9~P16。P8、P16为高位。口锁存器具有反相功能,置1时,端口输出0。   ③ MX1、MX2:位码驱动端。静态显示驱动时,一片SAA1064可驱动二位LED数码管;动态显示驱动时,按图9-10连接方式,一片SAA1064可驱动四位LED数码管;   ④ SDA、SCL:I2C总线数据端、时钟端;   ⑤ CE
[嵌入式]
I2C 协议之软件模拟时序
1.1 I2C 简介 I2C 总线时 PHILIPS 公司推出的一种串行总线,具备多主机系统所需的包括总线仲裁和高低速器件同步功能的高性能串行总线。它只需要两跟双向的信号线,一根数据线 SDA,一个是时钟线 SCL。在 I2C 总线上面,每个器件都有自己相应的 I2C 地址,所以在两个器件之间进行通信的时候,都要首先呼叫你想要通信的器件地址,然后等待相应的从器件进行应答之后才开始通信。首先我们来看一下,一个 I2C 信号传输的一个过程,如图: 从图上我们可以看出在 I2C 上面一个完整信号的传输过程,一定要有一个始信号,还有一个结束信号,在每个字节传输结束的时候,从机还要提供一个应答信号。一个完整的信号传输就是
[单片机]
<font color='red'>I2C</font> 协议之软件模拟<font color='red'>时序</font>
STM32F0单片机快速入门九 用 I2C HAL 库读写24C02
1.24C02介绍 24C02 现在基本是开发板的标配,对于需要掉电存储的应用来说确是不二选择。现在单片机因为内部集成了Flash存储器,一般也都支持数据的掉电保存,但相对于 24C02 这种 EEPROM 来说,使用单片机内部的 Flash 有一些需要注意的问题: Flash 写入数据之前需要先执行擦除操作,而且擦除以扇区为单位。 Flash读写次数比 EEPROM 少很多。 容易误操作,把 Flash 内部的代码擦除掉。 影响中断的响应时间。 24C02 有 256 字节的数据,一般说来也够用了。它的地址是可以通过引脚配置的,这样一条 I2C 总线上就可以挂多个 24C02。如下: 我们把 A2,A1
[单片机]
MAX517与单片机的I2C总线数据通信
摘要:介绍了I2C总线的特点及数据通信的基本协议,并以AT89C51单片机与美国MAXIM公司的8位电压输出DAC数模转换器MAX517之间的通信为例,详细介绍了通过I2C总线进行数据通信的具体硬件电路连接和其通信子程序的编程方法。 关键词:I2C总线;AT89C51;MAX517;数据通信 1 I2C总线的特点及基本通信协议 I2C总线是Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线串行数据线和串行时钟线即可使连接于总线上的器件之间实现信息传送,同时可通过对器件进行软件寻址,而不是对硬件进行片选寻址的方式来节约通信线数目,从而减少了硬件所占空间。因为总线已集成在片内,所以大大缩短了设计时间,
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved