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