当前位置:首页 > 单片机 > 单片机
[导读]1.硬件原理I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。I2C总线通过上拉电

1.硬件原理

I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。


I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。

每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。

1.1.数据位的有效性规定

I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

1.2.起始和终止信号

SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。

起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行。

1.3.数据传送

a、主机向从机发送数据,数据传送方向在整个传送过程中不变:

b、主机在第一个字节后,立即从从机读数据


c、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。

2.芯片手册

2.1.ATMEL公司的AT24C系列

AT24C01:128字节(128×8位);

AT24C02:256字节(256×8位);

AT24C04:512字节(512×8位)AT24C08:1K字节(1K×8位);

AT24C16:2K字节(2K×8位);

AT24C系列E2PROM芯片地址的固定部分为1010,A2、A1、A0引脚接高、低电平后得到确定的3位编码。形成的7位编码即为该器件的地址码。

2.2.写入

单片机进行写操作时,首先发送该器件的7位地址码和写方向位“0”(共8位,即一个字节),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为相应,单片机收到应答后就可以传送数据了。

传送数据时,单片机首先发送一个字节的被写入器件的存储区的首地址,收到存储器器件的应答后,单片机就逐个发送各数据字节,但每发送一个字节后都要等待应答。

AT24C系列器件片内地址在接收到每一个数据字节地址后自动加1,在芯片的“一次装载字节数”(不同芯片字节数不同)限度内,只需输入首地址。装载字节数超过芯片的“一次装载字节数”时,数据地址将“上卷”,前面的数据将被覆盖

当要写入的数据传送完后,单片机应发出终止信号以结束写入操作。写入n个字节的数据格式:

2.3.读出

单片机先发送该器件的7位地址码和写方向位“0”(“伪写”),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应。

然后,再发一个字节的要读出器件的存储区的首地址,收到应答后,单片机要重复一次起始信号并发出器件地址和读方向位(“1”),收到器件应答后就可以读出数据字节,每读出一个字节,单片机都要回复应答信号。当最后一个字节数据读完后,单片机应返回以“非应答”(高电平),并发出终止信号以结束读出操作。

3.mini2440电路图

由原理图可以看出,2440只有两根引脚和EEPROM连接。

4.S3C2440寄存器

IICCON控制寄存器,控制是否发生ACK信号,设置发送器时钟,开启IIC中断。

IICSTAT控制/状态寄存器,选择工作模式(从机接收、从机发生、主机接收、主机发送),发出S信号、P信号,使能接收/发送功能,并标识各种状态。

IICADDR从机地址

IICDS发送/接收寄存器,数据移位。

IICLC行控制寄存器

iic.h


/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:iic.h

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:IIC读写EEPROM.

*FunctionList:

*History:

******************************************************************/

#ifndef__IIC_H__

#define__IIC_H__

#defineDBG_IIC_LEVEL1

#defineDEV_ADDR0xa0

/*函数声明*/

voidIICInit(void);

voidIICTest(void);

#endif//__IIC_H__


iic.c


/*******************************************************************

*Copyright(C),2011-2012,XXX.

*FileName:iic.c

*Author:HuangYinqing

*Version:1.0

*Date::2012-04-22

*Description:IIC驱动(中断方式).

*FunctionList:

*History:

******************************************************************/

#include"common.h"

#include"core.h"

#include"iic.h"

unsignedcharpucIICBuffer[32][8];//IIC数据通讯缓存数组

unsignedcharg_bIICFlag=0;//应答标志

/********************************************************************

函数功能:IIC中断函数。

入口参数:无。

返回:无。

备注:无。

********************************************************************/

staticvoid__irqIICIntHandler(void)

{

rSRCPND=BIT_IIC;//Clearpendingbit

rINTPND=BIT_IIC;

g_bIICFlag=1;

}

/********************************************************************

函数功能:IIC初始化。

入口参数:无。

返回:无。

备注:无。

********************************************************************/

voidIICInit(void)

{

rGPECON&=0x0fffffff;

rGPECON|=0xa0000000;//GPE15:IICSDA,GPE14:IICSCL

rGPEUP|=3<<14;//Pull-updisable

//EnableACK,PrescalerIICCLK=PCLK/16,Enableinterrupt,

//TransmitclockvalueTxclock=IICCLK/16,

//IfPCLK50.7MHz,IICCLK=3.17MHz,TxClock=0.198MHz

rIICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);

rIICSTAT=0x10;//IICbusdataoutputenable(Rx/Tx)

#if0

rIICADD=0x10;//2440slaveaddress=[7:1]

rIICLC=(1<<2)|(1);//Filterenable,15clocksSDAoutputdelayaddedbyjunon

#endif

pISR_IIC=(unsignedint)IICIntHandler;

rINTMSK&=~(BIT_IIC);

}

/********************************************************************

函数功能:AT24c02a写函数。

入口参数:

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

下面小编为大家整理了电机驱动电路原理,你值得收藏!

关键字: 电机驱动电路原理 电源电路 iic

派瑞特旗下品牌,数字电视与广播接收器件的领先提供商迪康,将于2月23-25日出席在深圳举行的2012年国际集成电路研讨会暨展览会(IIC-China),展出用于数字电视与广播的可编程接收芯片Octop

关键字: 迪康 iic octop

明星涉及区块链早已不是什么新鲜事:韩国顶级女团T-ara在韩国发布了T-ara币;韩流明星权志龙也在自己的演唱会售票通道上开启了区块链token兑换区。而国内明星中,汪峰也在节目后台大谈区块链技

关键字: iic 区块链

IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半导体(现在被NXP收购)于1982年开发。主要是用来方便微控制器与外围器件的数据传输。它是一种半双工,由SDA(数据)和SCL...

关键字: iic 梦源科技 iic-bus

IICvs SPI         现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Inter

关键字: iic 总线协议

IIC(Inter-Integrated Circuit,I2C)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微处理器及其外围设备,它的最主要优点是简单和有效。它只需要数据线SDA和时钟线SCL,就能够实...

关键字: iic 寄存器 数据

移植环境1,主机环境:VMare下CentOS 5.5 ,1G内存。2,集成开发环境:Elipse IDE3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

关键字: mini2440 u-boot 移植 dm9000驱动

移植环境1,主机环境:VMare下CentOS 5.5 ,1G内存。2,集成开发环境:Elipse IDE3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

关键字: eeprom i2c mini2440 u-boot 移植

从NandFlash启动CPU的时候,CPU会自动通过其内部硬件结构复制NandFlash中的前4K代码到cpu的自带SRAM中,注意这是CPU自带的SRAM,区别于本文所讲的SDRAM,本文所指的SDRAM是外接SDR...

关键字: s3c2440 sdram 硬件篇

LPC2124有一个标准的I2C总线接口,可配置为主机或从机,总线时钟速率可调整,最高可支持400KHZ总线速率。使用I2C总线时,要将相应得引脚设置连接SCL和SDA,并且总线上要上拉电阻,阻值为1~10K&Omega...

关键字: iic 总线应用
关闭
关闭