简单介绍一下I2C总线原理:
IIC总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
IIC总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 (记住这个就够了,其他都是废话!)
II C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
注意到IIC总线是需要接上拉电阻的!因为连到IIC总线的器件的输出基本为开漏输出.
起始和终止信号 :SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。下图一目了然。
数据传送格式(1)字节传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
对数据时进行位操作,即来一个SCL始终高电平就写入或者读出一位数据,这个一定要清楚!
下面介绍ATMEL公司的串行E2PROM产品——AT24C系列
AT24C01:128字节(128×8位);
AT24C02:256字节(256×8位);
AT24C04:512字节(512×8位)AT24C08:1K字节(1K×8位);
AT24C16:2K字节(2K×8位);
本次实验用的是AT24C02,所以存储器的地址有256字节(在IIC总线寻址中读取存储器首地址时首地址的范围为0~256,因为AT24C02的容量为256字节)
下面是AT24C02的电路图,注意到SDA和SCL均有连接10K的上拉电阻,本实验中SDA接89C52的P2.0口,SCL接89C52的P2.1口。
AT24C02的芯片地址如下图,1010为固定,A0,A1,A2正好与芯片的1,2,3引角对应,为当前电路中的地址选择线,三根线可选择8个芯片同时连接在电路中,当要与哪个芯片通信时传送相应的地址即可与该芯片建立连接,TX-1B实验板上三根地址线都为0。最后一位R/W为告诉从机下一字节数据是要读还是写,0为写入,1为读出。
AT24C02的芯片地址(0xa0为写,0xa1为读)
任意地址写入数据和任意地址读取数据分别如下图所示
读取数据:
注意,读数据的时候也要先进行写操作,目的是写入器件地址以寻找合适的器件,当器件与地址匹配时,器件会发出一个应答信号,这样就可以让单片机确定该读哪个器件,这样就可以开始读取数据了.
写入数据:
下面是程序:
#include
#define uchar unsigned char
sbit sda=P2^0;
sbit scl=P2^1;
uchar a;
void delay() //延时2us
{ ;; }
void start() //开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons() //应答
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
void init() //初始化
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date) //写数据函数
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
// scl=0;
// delay();
}
scl=0;
delay();
sda=1; //数据总线释放,养成良好习惯
delay();
}
uchar read_byte() //读数据函数
{
uchar i,k;
scl=0;
delay();
sda=1; //数据总线释放,使总线处于空闲状态
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda; //一次读一位,从SDA的最低位读起
scl=0;
delay();
}
return k;
}
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
void main()
{
init();
write_add(23,0xaa);
delay1(100); //此延时非常重要,单片机在写和读数据之间需要加一延时,否则单片机不能
//正常响应读操作
P1=read_add(23);
while(1);
}
关键字:IIC总线 E2PROM 存储器数据
引用地址:
用IIC总线读取E2PROM存储器数据
推荐阅读最新更新时间:2024-03-16 14:42
对IIC总线时序的一点理解以及ACK和NACK(NAK)
关于IIC的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和这个响应位相关联。 在这个脉冲期间,发出响应的从设备必须将SDA拉低并在时钟脉冲的高电平期间保持住。这表示该设备给出了一个ACK。如果它不拉低SDA线,就表示不响应(NACK)。 另外,在从机(发送方)发送完最后一个字节后主设备(接收方)必须产生一个不响应位,用以通知从机(发送方)不要再发送信息了,这样从机就知道该将SDA释放了,而后,主机发出一个停止位给slaver。 总结下,IIC通讯中,SDA 和 SCL 都
[单片机]
AT24系列存储器数据串并转换接口的IP核设计
摘 要 AT24系列EEPROM芯片是基于I2C(Inter-Integrated Circuit)总线协议而设计的。该存储器与微处理器通信,需要把串行数据转换成并行数据,或把并行数据转换成串行数据后,通信过程才能进行。介绍用VHDL语言设计该存储器数据串并转换接口的IP核,从而通过硬件(FPGA或其他可编程芯片)实现AT24系列存储器与8位微处理器之间的并行通信。
关键词 I2C总线 AT24系列存储器 VHDL 串并转换 微处理器
1 I2C总线的基本概念
I2C总线协议是Philips公司推出的总线协议。它是多主机总线,通过2根线(SDA-aserial data line,SCL-a serial clock
[应用]
用单片机实现SRAM工艺FPGA的加密应用
在现代电子系统设计中,由于可编程逻辑器件的卓越性能、灵活方便的可升级特性,而得到了广泛的应用。由于大规模高密度可编程逻辑器件多采用SRAM工艺,要求每次上电,对FPGA器件进行重配置,这就使得可以通过监视配置的位数据流,进行克隆设计。因此,在关键、核心设备中,必须采用加密技术保护设计者的知识产权。 1 基于SRAM工艺FPGA的保密性问题 通常,采用SRAM工艺的FPGA芯片的的配置方法主要有三种:由计算机通过下载电缆配置、用专用配置芯片(如Altera公司的EPCX系列芯片)配置、采用存储器加微控制器的方法配置。第一种方法适合调试设计时要用,第二种和第三种在实际产品中使用较多。第二种方法的优点在于外围电路非常简单,体积较
[应用]
西部数据CEO信中求原谅,为收购东芝存储器业务妥协?
集微网综合报道,据路透社9月1日报道,在西部数据公司起诉东芝公司,以阻止存储芯片合资公司被出售给竞购方后,两家公司的关系陷入紧张。 一封落款日期为8月11日的信件显示,在西部数据试图通过起诉东芝避免双方的合资存储芯片公司被出售给另外一家竞购方后,西部数据CEO斯蒂芬·米利根(Stephen Milligan)曾向东芝CEO岗川智(Satoshi Tsunakawa)道歉。 “我理解,这一诉讼和悬而未决的争执让东芝公司的一些人感到了极大恶意。这令人遗憾,我对于公司造成的这种感觉深感抱歉,”米利根在信中表示。 米利根试图在信中打消东芝CEO Satoshi Tsunakawa的疑虑,让其相信,倘若与西部数据的交易能够达成,该公司会解决
[手机便携]
基于MSP430单片机的虚拟I2C总线软件包VIIC_M1.0
一、VIIC_M1.0软件包的组成 根据归一化设计的要求,主方式下虚拟I2CC总线由下列10个子程序组成: 1、时序模拟子程序4个 I2C_sta,I2C _stop,I2C _mack ,I2C _mnack 2、操作模拟子程序3个 I2C_ackn,I2C _wr_byte,I2C _rd_byte 3、数据读写子程序3个 I2C_wr_nbyte,I2C _rd_nbyte,I2C_wr_addr 二、应用对象 1、MSP430单片机 MSP430单片机为低功耗的16位单片机,有MSP430X11、MSP430X112、MSP430X1101、MSP430X13X、MSP430X14X、MSP430X31X/32X/33
[单片机]
如何正确选用IIC总线彩电的CPU
IIC总线彩电的CPU不同于普通遥控彩电,其内必须写入整机的控制软件。因此,在更换CPU时,不但要求硬件型号相同,软件版本也应相同,否则,机器无法工作。例如,康佳T2988P彩电使用的CPU型号有TMP87PM36N和TMP87CK36N两种。前者更换后必须使用工厂专用的遥控器按约定的程序写入参数,方可使用,而后者中已固化了软件参数,可以直接使用,故可以用后者直接替换前者,无须再写入参数。
另外,康佳T2988N彩电CPU也使用TMP87PM36N,其软件号为R0605,与T2988P型机的CPU型号相同,软件不同,二者不可互换。这种情况在康佳T3888、T3488、T2998系列机中也存在,但不管是上述哪种型号,只要
[嵌入式]
单片机小白学习之路(二十七)---EEPROM-IIC总线理解(二)
目标:EEPROM-IIC总线理解(二) 在实际的应用中,保存在单片机RAM中的数据,掉电后数据就丢失了,保存在单片机的FLASH中的数据,又不能随意改变,也就是不能用它来记录变化的数值。但是在某些场合,我们又确实需要记录下某些数据,而它们还时常需要改变或更新,掉电之后数据还不能丢失,比如我们的家用电表度数,我们的电视机里边的频道记忆,一般都是使用EEPROM来保存数据,特点就是掉电后不丢失。我们板子上使用的这个器件是24C02,是一个容量大小是2Kbit位,也就是256个字节的EEPROM。一般情况下,EEPROM拥有30万到100万次的寿命,也就是它可以反复写入30-100万次,而读取次数是无限的。 24C02是一个基于I
[单片机]
TMS320VC5410在线并行自举的实现
TMS320VC5410是德州仪器公司(TI)2000年推出的一款性价比极高的16位定点数字信号处理器,其操作速率最高可达100MIPS。他采用先进的修正哈佛结构,片内有8条总线、CPU、在片存储器和在片外围电路等硬件,加上高度专业的指令系统,使其具有功耗小、高度并行等优点,可以满足电信等众多领域的实时处理要求,但是TMS320VC5410片上的只读存储器(ROM)只能采用掩模编程的方式并且必须把代码交给DSP厂家,成本较高,因此一般用户在使用时需要外部扩展程序存储器,E2PROM可以在线擦写,且掉电后数据不会丢失,具有体积小、功耗低等特点,是作为TMS320VC5410外扩程序存储器的一种较好选择。通常情况下,要把CCS编译
[嵌入式]