分享

常用EEPROM以IIC总线连接单片机的编程方法 第2页

 yj_99 2016-03-18

  传送数据完成后,总线要有一个STOP(结束位)位,来通知总线本次传输已结束,它的要求是,SCL为高时,SDA有一个从低到高的电平跳变动作,正好和START位相反。在编程时要注意:不要在SCL为高电平时改变SDA的电平状态,否则可能会被误认为是停止位,而使得操作失败。

  FC总线每接收完一个字节(8个二进制位)后,在第9个时钟信号时,会在SDA上回应一个低电平的ACK应答信号,以此表明当前受控的器件已接收完一个字节,可以开始下一个字节的传送了。时序图可以参看图4。

  单片机编程时可以在传送完一个字节后,把连接SDA的I/O口线设置回读数据状态,如使用51系列的单片机时就要把I/O口置高电平,然后在SCL.脚设置一个脉冲,在SCL为高电平时读取SDA,如不为低电平就说明器件状态不空闲或出错。需要注意,因为SDA是双向的I/O,无论是微处理器接收还是器件接收,每个字节完成后,接收方都可以发送一个ACK回应给发送方。

  I2C总线在操作受控器件时,需要先发送受控器件的器件地址,24景列的EEPROM也不例外,在每次命令前需要先发送一个字节的器件地址和读写标识,也可称为器件录址。图5是24C64的器件寻址命令中每个位所代表的意思。A2、A1、A0位是器件地址,它是对应于芯片的A2、A1、A0引脚,也就是说如果芯片A0引脚被设置成高电平时,在发送器件地址命令时字节中的A0位要设置为1,A0引脚为低电平时A0位设置为0。这样在同一总线上就可以连接8个24C64。

  ATMEL公司的24C系列芯片24C32及以上的型号使用16位地址进行寻址。24C32之前的型号因为使用的是8位地址,所以在超过256字节的8位地址型号中会占用到A0、A1、A2位来做页地址,每页有256字节,以此解决地址位不足的问题。所以不同型号的器件地址位定义就有所不同,各型号的器件地址字节定义见图5~图7。

  在设计电路选择器件时要注意的是,24C01是没有器件地址的,还有24C16/16A的A0~A2已被页地址占用完,也就是说这三个型号的芯片只能在同一总线上连接一个。器件地址字节中的R/W位是用于标识当前操作是读器件还是写器件,写器件时R/W位设置0,读器件时R/W位设置1。

  24C系列芯片的读写指令格式只有几种,下面以24C64芯片的指令格式来说明。

  写入单个字节

  写入字节指令每次只能向芯片中的一个地址写入一个字节的数据。首先发送开始位来通知芯片开始进行指令传输,然后传送设置好的器件地址字节,R/W位应置0,接着是分开传送十六位地址的高低字节,再传送要写入的数据,最后发送停止位表示本次指令结束。图8是写入单个字节的时序图。

  页写入

  24C64支持32字节的页写入模式,它的操作和字节写入模式基本一样,不同的是它需要发送第一个字节的地址,然后一次性发送32字节的写入数据后,再发送停止位。写入过程中其余的地址增量由芯片内部完成。

  图9为页写入的时序图。无论哪种写入方式,指令发送完成后,芯片内部才开始写入,这时SDA会被芯片拉高,直到写入完成后SDA才会重新变得有效,在编写微处理器程序时可以在写入的时候不停地发送伪指令并查询是否有ACK返回,如果有ACK返回则可以进行下一步操作。

  读当前地址

  这种读取模式是读取当前芯片内部的地址指针指向的数据。每次读写操作后,芯片会把最后一次操作过的地址作为当前的地址。在这里要注意的是在微处理器接收完芯片传送的数据后不必发送低电平的ACK给芯片,直接拉高SDA等待一个时钟后发送停止位。图10是读当前地址时序图。

  读任意地址

    “读当前地址”可以说是读的基本指令,读任意地址时只是在这个基本指令之前船一仑“伪操作”,这个伪操作传送一个写指令,但这个写指令在地址传送完成后就要结束,这时芯片内部的地址指针指到这个地址上,再用读当前地址指令就可以读出该地址的数据。图11是读任意地址的时序图。

  连续读取

  连续读取操作时只要在上面两种读取方式中芯片传送完读取数据后,微处理器回应给芯片一个低电平的ACK.应答,那么芯片地址指针自动加1并传送数据,直到微处理器不回应并停止操作。图12是连续读取的时序图。

  ATMEL公司的24C系列的其他型号的读写操作方式和上面介绍的基本相同,只是在8位寻址的芯片中地址位只用一个字节,还有就是在24C01中没有器件地址,地址位只占用高7位,最低位为R/W位。其他公司的24系列EEPROM芯片的驱动方式也和以上所介绍的基本一样。

  图13是笔者设计的制作简单的24C读写器。可以用它来做24C芯片的驱动程序编写实验,也可以配合上位机程序(见本期配刊光盘“EEPROM读写器”)进行24C的读写。

  该读写器的电路由一片AT89C2051芯片作为主控芯片,用于连接电脑的RS232和驱动24C芯片,晶振使用11.0592MHz。RS232电平转换由两个NPN三极管组成。电源部分则直接在RS232上的4、7引脚取电,取电时需要在用软件控制这两脚为+9V~+12V之间,再通过VD5稳压得到5.1V,无需外加电源。


本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!

为何要做网络广告     广告联系

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多