电子发烧友第七章I2C总线器件应用第一节I2C总线器件应用概述一、I2C总线工作原理1.I2C总线系统结构I2C总线系统结构如图7-1所示。图7-1I2C总线系统结构图电子发烧友其中,SCL是时钟线,SDA是数据线。总线上的各器件都采用漏极开路结构与总线相连,因此,SCL、SDA均需接上拉电阻,总线在空闭状态下均保持高电平。2.I2C总线工作方式图7-2为I2C总线上进行一次数据传输的通信格式。图7-2I2C总线上进行一次数据传输的通信格式发送启动信号:在SCL为高电平期间,SDA出现下降沿则为启动信号。发送寻址信号:寻址信号由一个字节构成,高7位为地址位,最低位为方向位。应答信号:它由接收设备产生,在SCL信号为高电平期间,接收设备将SDA拉为低电平,表示数据传输正确,产生应答。电子发烧友数据传输:主机发送寻址信号并得到从器件应答后,进行数据传输,每次一个字节。非应答信号:当主机为接收设备时,主机对最后一个字节不应答,以向发送设备表示数据传送结束发送停止信号:在全部数据传送完毕后,主机发送停止信号,即在SCL为高电平期间,SDA上产生一上升沿信号。二、I2C总线数据传输方式模拟1、I2C总线软件包组成①启动信号子程序STA②停止信号子程序STOP③停止信号子程序STOP④发送应答位子程序MACK⑤发送非应答位子程序MNACK⑥应答位检查子程序CACK⑦单字节发送子程序WRBYT⑧单字节接收子程序RDBYT⑨n字节发送子程序WRNBYT⑩n字节接收子程序RDNBYT2、软件包程序3、软件包应用电子发烧友写操作:MOVSLA,#SLAW;寻址从器件写地址MOVNUMBYT,#n+1;确定写入字节数LCALLWRNBYT;以单片机数据缓冲区起始地址MTD中内容为从器件写入首址,连续向从器件写入MTD+1单元起始的n个数据。读操作:MOVSLA,#SLAR;寻址从器件读地址MOVNUMBYT,#n;确写读取字节数LCALLRDNBYT;将从器件中指定地址开始n个数据读入单片机中以MRD作为起始地址的缓冲区中。电子发烧友第二节E2PROMAT24C系列应用一、E2PROM存储器24LC16B的特点是一个具有I2C总线接口的串行E2PROM器件。可解决掉电数据保持问题,且硬件电路简单。可对所存数据保存100年,并可多次擦写,擦写次数可达10万次。二、E2PROM存储器24LC16B的工作原理1、引脚配置与引脚功能SCL:串行时钟输入端。SDA:串行数据输入/输出(或地址输入)端。WP:写保护输入端。用于硬件数据保护。A0、A1、A2:页面选择地址输入端。VCC:+5V电源端。VSS:接地端。图7-324LC16B的引脚图2、存储结构与寻址24LC16B的存储容量为2K,内部分成8个存储区域,每个存储区容量为256个字节,操作时有芯片寻址及片内子地址寻址。电子发烧友芯片寻址:24LC16B的芯片地址为1010,其地址控制字格式为1010A2A1A0R/W。其中A2、A1、A0为片内存储区域选择位,R/为芯片读写控制位,该位为0,表示对芯片进行写操作,该位为1,表示对芯片进行读操作。片内子地址寻址:芯片寻址可指定进行芯片读、写的8个存储区之一,具体寻址片内某个子地址(字节地址)另需一个字节的子地址,其寻址范围为00H~FFH3、读、写操作时序字节写入:单片机在一次数据帧中只访问E2PROM一个单元。发送格式如下图所示:页写入方式:单片机在一个数据写周期内可以访问1页E2PROM存储单元。页写入帧格式下图所示:电子发烧友指定地址读操作:读指定地址单元的数据。读操作的数据帧格式如下图所示:指定地址连续读:此种方式的读地址控制与前面指定地址读相同。电子发烧友三、读/写操作应用下图为24LC16B芯片的应用电路。编写程序,将单片机内存中21H~26H中数据发送到24LC16B中以00H为首址的6个连续存储单元中,并将写入数据读回到单片机以38H为首址的接收缓冲区中。本例中定义P1.5脚为E2PROM数据线(SDA),P1.4脚为时钟控制(SCL),发送数据缓冲区首址为20H,接收数据缓冲区首址为38H。编写程序如下:电子发烧友SDABITP1.5;定义数据/地址引脚SCLBITP1.4;定义时钟引脚SLAWEQU0A0H;定义器件写地址SLAREQU0A1H;定义器件读地址SLAEQU30H;定义寻址字节(SLAW/R)存放单元MTDEQU20H;定义发送数据缓冲区首址MRDEQU38H;定义接收数据缓冲区首址NUMBYTEQU10H;定义读/写字节数存放单元MOVSP,#50H;置堆栈指针MOVMTD,#00H;置24LC16B芯片内读/写数据起始子地址MOVSLA,#SLAW;置器件写地址MOVNUMBYT,#07H;置写入字节数(1个子地址字节,6个数据字节)CALLWRNBYT;写入数据CALLDELAY;写入延时10msMOVSLA,#SLAW;置器件写地址MOVNUMBYT,#01HCALLWRNBYT;写入读起始地址,即MTD中内容00HCALLDELAY;写入延时MOVSLA,#SLAR;置器件读地址MOVNUMBYT,#06H;置读出数据字节数CALLRDNBYT;读出数据END参考程序:电子发烧友第三节IC卡应用技术一、存储式IC卡1、IC卡分类根据IC卡信号传输接口方式可分为:接触式IC卡、非接触式IC卡、两种接口方式合一的双面IC卡。根据IC卡的内部结构亦可分为三种类型:存储卡、逻辑加密卡、CPU卡。2、AT24C××系列存储卡简介IC卡标准与引脚定义1987年,国际标准化组织ISO专门为IC卡制定了国际标准,根据国际标准ISO7816对接触式IC卡的规定,在IC卡的左上角封装有IC芯片,其上覆盖有6或8个触点和外部设备进行通信,见下图所示。电子发烧友IC卡部分触点及其定义如表7-1所示。芯片触点触点定义功能C1VCC工作电压C2NC空脚C3SCL(CLK)串行时钟C4NC空脚C5GND地C6NC空脚C7SDA(I/O)串行数据(输入输出)C8NC空脚表7-1IC卡引脚定义AT24C××系列存储卡型号与容量ATMEL公司生产的AT24C××系列存储卡采用低功耗CMOS工艺制造,芯片容量规格比较齐全,工作电压选择多样化,操作方式标准化,因而使用方便,是目前应用较多的一种存储卡。这种卡实质就是前面介绍的AT24C系列存储器。该类IC卡型号与容量,见表7-2所示。电子发烧友表7-2AT24C系列存储卡型号与容量型号容量(K位)内部组态随机寻址地址位AT24C011128个8位字节7AT24C022256个8位字节8AT24C0442块256个8位字节9AT24C0884块256个8位字节10AT24C16168块256个8位字节11AT24C323232块128个8位字节123、AT24C××系列存储卡工作原理存储卡内部逻辑结构如下图所示。其中A2、A1、A0为器件/页地址输端,在IC卡芯片中,将此三端接地,并且不引出到触点上(如图中虚线所示)内部逻辑单元功能芯片信号线有两条:SCL时钟信号线和SDA数据信号线,数据传输采用I2C总线协议。当SCL为高电平期间,SDA上的数据信号有效;当SCL为低电平期间,允许SDA上的数据信号变化。电子发烧友①启动与停止逻辑单元。②串行控制逻辑单元。③地址/计数器单元。④升压定时单元。⑤E2PROM存储单元。芯片寻址方式①器件地址与页面选择IC卡芯片的器件地址为8位,即7位地址码,1位读/写控制码。如上图,与普通24××系列E2PROM集成电路相比,IC卡芯片的A2、A1、A0端均已在卡片内部接地,而没有引到外部触点上,在使用时,不同型号电子发烧友IC卡的器件地址码见表7-3所示。IC卡型号容量(K)B7B6B5B4B3B2B1B0AT24C0111010000R/AT24C0221010000R/AT24C044101000P0R/AT24C08810100P1P0R/AT24C16161010P2P1P0R/AT24C32321010000R/WW表7-3卡片地址与页面选择(容量以位表示)②字节寻址。在器件地址码后面,发送字节地址码。对于容量小于32K的卡片,字节地址码长度为一个字节(8位);对于容量为32K的卡片,采用2个8位数据字作为寻址码。第一个地址字只有低4位有效,此低4位与第二个字节的8位一起组成12位长的地址码,对4096个字节进行寻址。读、写操作对这种IC卡的读、写操作实质上就是对普通AT24C系列E2PROM的读写,操作方式完全一样,在此不再赘述。电子发烧友二、IC卡读写操作实训为了熟悉IC卡的读、写操作方式,利用下图电路实现IC卡的数据传输。本实训选用IC卡型号为24C01,存储容量为128个字节,1K位。前面已介绍过,IC卡通常有8个触点,实际应用的只有SDA、SCL、VCC、GND四个触点。工作时,IC卡需插入特制的IC卡装置中。电子发烧友本实训中该装置为10根引出线,各引脚功能见上图所示。需指出的是1、2脚用于IC卡插入检测开关,若有IC卡插入到位,则1、2脚被短接,否则两引脚处于断开状态。该电路中可通过检测P0.2引脚的电平来判断是否有IC卡插入。实训中可先插入IC卡,然后从00H地址开始写入8个数据,写完后拔出卡片;然后将卡片插入另一电路IC卡装置中(亦可用同一电路),将卡内数据读出,由此实现IC卡的数据写入与读出。实训中亦可对卡内其它地址单元进行读、写操作,但应注意,该卡的页写字节数为8。参考程序:ORG00SDABITP0.0SCLBITP0.1SLAWEQU0A0HSLAREQU0A1HSLAEQU30HMTDEQU20HMRDEQU40HNUMBYTEQU10H电子发烧友MAIN:MOVSP,#70HIICXIE:MOV20H,#00H;置IC卡存储单