总线技术|接口技术
400万+工程师在用
华为|鸿蒙开发者日
直播报名
400万+工程师在用
华为|鸿蒙开发者日
直播报名

电子发烧友网工程师

17年用户 16436经验值
擅长:可编程逻辑 MEMS/传感技术 测量仪表 模拟技术 控制/MCU RF/无线
私信 关注
[资料]

I2C总线器件应用

2008-8-13 17:54

<p><?xml:namespace prefix = p ns = "urn:schemas-microsoft-com:office:powerpoint" /><p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"></p:colorscheme><font face="Verdana">I2C总线器件应用<br/>第一节 I2C总线器件应用概述<br/>I2C总线工作原理<br/>I2C总线系统结构<br/>I2C总线系统结构如图7-1所示。<br/>其中,SCL是时钟线,SDA是数据线。总线上的各器件都采用漏极开路结构与总线相连,因此,SCL、SDA均需接上拉电阻,总线在空闭状态下均保持高电平。<br/>2.I2C总线工作方式<br/>图7-2&nbsp;&nbsp; I2C总线上进行一次数据传输通信格式<br/>图7-2为I2C总线上进行一次数据传输的通信格式。<br/>发送启动信号:在SCL为高电平期间,SDA出现下降沿则为启动信号。<br/>发送寻址信号:寻址信号由一个字节构成,高7位为地址位,最低位为方向位。<br/>应答信号:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它由接收设备产生,在SCL信号为高电平期间,接收设备将SDA拉为低电平,表示数据传输正确,产生应答。<br/><font face="Verdana">数据传输:主机发送寻址信号并得到从器件应答后,进行数据传输,每次一个字节。<br/>非应答信号: 当主机为接收设备时,主机对最后一个字节不应答,以向发送设备表示数据传送结束<br/>发送停止信号:在全部数据传送完毕后,主机发送停止信号,即在SCL为高电平期间,SDA上产生一上升沿信号。<br/>二、I2C总线数据传输方式模拟<br/>1、I2C总线软件包组成<br/>①启动信号子程序STA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ② 停止信号子程序STOP<br/>③停止信号子程序STOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ④发送应答位子程序MACK<br/>⑤发送非应答位子程序MNACK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ⑥应答位检查子程序CACK<br/>⑦单字节发送子程序WRBYT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ⑧单字节接收子程序RDBYT<br/>⑨n字节发送子程序WRNBYT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ⑩n字节接收子程序RDNBYT<br/>写操作: MOV&nbsp; SLA, #SLAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;寻址从器件写地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; NUMBYT, # n+1 ;确定写入字节数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LCALL&nbsp; WRNBYT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;以单片机数据缓冲区起始地址MTD中内容为从器 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 件写入首址,连续向从器件写入MTD+1单元起始的 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n个数据。<br/>读操作: MOV&nbsp; SLA, #SLAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;寻址从器件读地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp; NUMBYT, # n&nbsp;&nbsp; ;确写读取字节数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LCALL&nbsp; RDNBYT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;将从器件中指定地址开始n个数据读入单片机中以<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MRD作为起始地址的缓冲区中。<br/></font><font face="Verdana">第二节 E2PROM&nbsp; AT24C系列应用<br/>一、E2PROM存储器24LC16B的特点 <br/>是一个具有I2C总线接口的串行E2PROM器件。<br/>可解决掉电数据保持问题,且硬件电路简单。<br/>可对所存数据保存100年,并可多次擦写,擦写次数可达10万次。 <br/>二、E2PROM存储器24LC16B的工作原理<br/>1、引脚配置与引脚功能<br/>SCL:串行时钟输入端。<br/>SDA:串行数据输入/输出(或地址输入)<br/>端。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>WP:写保护输入端。用于硬件数据保护。<br/>A0、A1、A2:页面选择地址输入端。<br/>VCC:+5 V电源端。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>VSS:接地端。 <br/>2、存储结构与寻址<br/>24LC16B的存储容量为2K,内部分成8个存储区域,每个存储区容量为256个字节,操作时有芯片寻址及片内子地址寻址。<br/>芯片寻址:24LC16B的芯片地址为1010,其地址控制字格式为1010A2A1A0 R/W。其中A2、A1、A0为片内存储区域选择位,R/为芯片读写控制位,该位为0,表示对芯片进行写操作,该位为1,表示对芯片进行读操作。<br/>片内子地址寻址:芯片寻址可指定进行芯片读、写的8个存储区之一,具体寻址片内某个子地址(字节地址)另需一个字节的子地址,其寻址范围为00H~FFH<br/>3、读、写操作时序 字节写入:单片机在一次数据帧中只访问E2PROM一个单元。发<br/>送格式如下图所示:<br/>&nbsp;&nbsp;&nbsp; 页写入方式:单片机在一个数据写周期内可以访问1页E2PROM存储单元。页写入帧格式下图所示:<br/>三、读/写操作应用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下图为24LC16B芯片的应用电路。编写程序,将单片机内存中21H~26H中数据发送到24LC16B中以00H为首址的6个连续存储单元中,并将写入数据读回到单片机以38H为首址的接收缓冲区中。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本例中定义P1.5脚为E2PROM数据线(SDA),P1.4脚为时钟控制(SCL),发送数据缓冲区首址为20H,接收数据缓冲区首址为38H。编写程序如下:<br/>参考程序:<br/>SDA&nbsp; BIT&nbsp; P1.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义数据/地址引脚<br/>SCL&nbsp; BIT&nbsp; P1.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义时钟引脚<br/>SLAW&nbsp; EQU&nbsp; 0A0H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义器件写地址<br/>SLAR&nbsp; EQU&nbsp; 0A1H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义器件读地址<br/>SLA&nbsp;&nbsp; EQU&nbsp; 30H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义寻址字节(SLAW/R)存放单元<br/>MTD&nbsp; EQU&nbsp; 20H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义发送数据缓冲区首址&nbsp; <br/>MRD&nbsp; EQU&nbsp; 38H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义接收数据缓冲区首址<br/>NUMBYT&nbsp; EQU&nbsp; 10H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义读/写字节数存放单元<br/>MOV&nbsp; SP, #50H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;置堆栈指针<br/>MOV&nbsp; MTD,#00H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;置24LC16B芯片内读/写数据起始子地址<br/>MOV&nbsp; SLA , #SLAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;置器件写地址<br/>MOV&nbsp; NUMBYT, #07H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;置写入字节数(1个子地址字节,6个数据字节)<br/>CALL&nbsp; WRNBYT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;写入数据<br/>CALL&nbsp; DELAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;写入延时&gt;10ms<br/>MOV&nbsp; SLA , #SLAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;置器件写地址<br/>MOV&nbsp; NUMBYT,&nbsp; #01H<br/>CALL&nbsp; WRNBYT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;写入读起始地址,即MTD中内容00H<br/>CALL&nbsp; DELAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;写入延时<br/>MOV&nbsp; SLA , #SLAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;置器件读地址<br/>MOV&nbsp; NUMBYT,&nbsp; #06H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;置读出数据字节数<br/>CALL&nbsp; RDNBYT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;读出数据<br/>END</font></font></p>
<p><font face="Verdana">&nbsp;</p></font>
73lDzCEl.ppt (240 KB)
(下载次数: 16, 2008-8-13 17:39 上传)
<br/>

回帖(1)

龚仕清

2011-7-2 20:01:52
下载写详细研究,谢谢!

更多回帖

打开APP