伟杰龙电子
首页 | 产品中心 | 文章中心 | 下载中心 | 电子博客 | 电子论坛 | 开发板商城 | 各地代理 | 淘宝店 | 拍拍店 | 百度店
文章首页  |  业界动态  |  单片机  |  嵌入式系统  |  DSP  |  FPGA/CPLD  |  EDA技术  |  软件编程  |  元器件
电源技术  |  模拟电子  |  高频电子  |  无线通信  |  网络通信  |  消费电子  |  汽车电子  |  接口电路  |  职场人生
您现在的位置: 首页 >> 文章中心 >> 单片机 >> 用单片机模拟I2C总线实现串行E2PROM的读写
用单片机模拟I2C总线实现串行E2PROM的读写

来源:网络  作者:未知  人气:429  时间:2008-05-24 22:45:31


摘要:在单片机系统中广泛使用E2PROM作为数据存储器。本文简要介绍了I2C总线及AT24C系列串行E2PROM,给出了8031单片机与串行E2PROM通讯的硬软件实现方法和实用的读/写子程序。

  关键词:单片机;I2C总线; E2PROM 

1 I2C总线简介

  I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。在
I2C总线上传送的一个数据字节由八位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。数据传送首先传送最高位(MSB),数据传送按图1所示格式进行。首先由主机发出启动信号“S”(SDA在SCL高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据。启动信号后的第一个字节数据具有特殊含义:高七位是从机的地址,第八位是传送方向位,0表示主机发送数据(写),1表示主机接收数据(读)。被寻址到的从机设备按传送方向位设置为对应工作方式。标准I2C总线的设备都有一个七位地址,所有连接在I2C总线上的设备都接收启动信号后的第一个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应在第九位答时钟脉冲时向SDA线送出低电平作为应答。除了第一字节是通用呼叫地址或十位从机地址之外(详细内容见[1]),第二字节开始即数据字节。数据传送完毕,由主机发出停止信号“P”(SDA在SCL高电平期间由低电平跳变为高电平)。

  AT24C系列串行E2PROM具有I2C总线接口功能,功耗小,宽电源电压(根据不同型号2.5V~6.0V),工作电流约为3mA,静态电流随电源电压不同为30μA~110μA,存储容量见表1。

  (1) AT24C系列 E2PROM接口及地址选择

  由于I2C总线可挂接多个串行接口器件,在I2C总线中每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位数据(即一个I2C总线系统中理论上可挂接128个不同地址的器件),它和1位数据方向位构成一个器件寻址字节,最低位D0为方向位(读/写)。器件寻址字节中的最高4位(D7~D4)为器件型号地址,不同的I2C总线接口器件的型号地址是厂家给定的,如AT24C系列E2PROM的型号地址皆为1010,器件地址中的低3位为引脚地址A2A1A0,对应器件寻址字节中的D3、D2、D1位,在硬件设计时由连接的引脚电平给定。

  对于E2PROM的片内地址,容量小于256字节的芯片(AT24C01/02),8位片内寻址(A0~A7)即可满足要求。然而对于容量大于256字节的芯片,则8位片内寻址范围不够,如AT24C16,相应的寻址位数应为11位(211=2048)。若以256字节为1页,则多于8位的寻址视为页面寻址。在AT24C系列中对页面寻址位采取占用器件引脚地址(A2、A1、A0)的办法,如AT24C16将A2、A1、A0作为页地址。凡在系统中引脚地址用作页地址后,该引脚在电路中不得使用,作悬空处理。AT24C系列串行E2PROM的器件地址寻址字节如表1所示,表中P0P1P2表示页面寻址位。

  (2) AT24C系列 E2PROM读写操作

  对AT24C系列 E2PROM的读写操作完全遵守I2C总线的主收从发和主发从收的规则。

  连续写操作 连续写操作是对E2PROM连续装载n个字节数据的写入操作,n随型号不同而不同,一次可装载字节数见表1。SDA线上连续写操作数据状态如图2。

器件地址(写) 片内地址    ≤ n个字节数据

图2  SDA线连续写操作数据状态

  AT24C系列片内地址在接收到每一个数据字节地址后自动加1,故装载一页以内规定数据字节时,只须输入首地址,若装载字节多于规定的最多字节数,数据地址将“上卷”,前面的数据被覆盖。

  连续读操作 连续读操作时为了指定首地址,需要两个伪字节写来给定器件地址和片内地址,重复一次启动信号和器件地址(读),就可读出该地址的数据。由于伪字节写中并未执行写操作,地址没有加1。以后每读取一个字节,地址自动加1。
在读操作中接收器接收到最后一个数据字节后不返回肯定应答(保持SDA高电平)随后发停止信号。连续读操作SDA上数据状态如图3。

器件寻址(写) 片内地址   器件寻址(读)读出数据

图3 SDA线连续读操作数据状态

3 8031单片机与AT24C系列 E2PROM通讯的硬软件实现

  (1)硬件电路

  图4是用8031P1口模拟I2C总线与E2PROM连接电路图(以AT24C16为例),由于AT24C16是漏极开路,图中R1、R2为上拉电阻(5.1k)。A0~A2地址引脚、TEST测试脚均悬空。

图4 8031P1口与E2PROM连接电路图

  (2)软件实现

  由前述分析和图4的硬件电路,我们编制了E2PROM的读写子程序。两者的主要区别在于读子程序需发器件地址(写)和片内地址作为伪字节,之后再发一次开始信号和器件地址(读命令)。

  读写子程序如下:

;写串行E2PROM子程序EEPW

; (R3)=器件地址

; (R4)=片内字节地址

; (R1)=欲写数据存放地址指针

; (R7)=连续写字节数n

EEPW: MOV P1,#0FFH

  CLR  P1.0  ;发开始信号

  MOV  A,R3  ;送器件地址

  ACALL  SUBS

  MOV  A,R4  ;送片内字节地址

  ACALL SUBS

AGAIN: MOV A,@R1

  ACALL SUBS ;调发送单字节子程序INC   R1

  DJNZ  R7,AGAIN;连续写n个字节

  CLR    P1.0  ;SDA置0, 准备送停止信号

  ACALL DELAY ;延时以满足传输速率要求

  SETB   P1.1  ;发停止信号

  ACALL DELAY

  SETB   P1.0

  RET


SUBS: MOV R0,#08H ;发送单字节子程序

LOOP: CLR P1.1

  RLC  A

  MOV  P1.0,C

  NOP

  SETB P1.1

  ACALL DELAY

  DJNZ R0,LOOP ;循环8次送8个bitCLR  P1.1

  ACALL DELAY

  SETB P1.1

REP: MOV C,P1.0

  JC  REP  ;判应答到否,未到则等待

  CLR  P1.1

  RET

DELAY: NOP

  NOP

  RET


;读串行E2PROM子程序EEPR

;(R1)=欲读数据存放地址指针

;(R3)=器件地址

;(R4)=片内字节地址

;(R7)=连续读字节数

EEPR: MOV P1,#0FFH

收藏此页】【打印】【关闭窗口】   

 相关产品
  WJ89S52V2.1单片机开发板 ¥380元 (2007-10-22)
  WJ430F149V2.0单片机开发板 ¥480元 (2007-11-08)
  WJ89C52V1.2单片机开发板 ¥280元 (2008-07-05)
  WJ51PV2.1 51单片机编程器 ¥180元 (2007-09-17)
  ICD2.5 PIC单片机仿真器 ¥280元 (2007-03-13)
  WJ16F877AV2.0单片机开发板 ¥380元 (2007-03-13)
 相关文章
  单片机入门  (2008-03-10 00:46:13)
  用单片机模拟I2C总线实现串行E2PROM的读写  (2008-05-24 22:45:31)
  单片机与MMC卡的接口  (2008-03-09 00:47:27)
  12位A/D转换器ADS7804与51单片机的接口及程序设计  (2008-03-10 01:11:41)
  单片机显控系统中的汉字输入  (2008-03-10 01:03:03)
  80C51单片机与MCS-51单片机的区别  (2008-05-24 22:37:06)
  基于MSP430单片机和nRF905的无线通信系统  (2008-04-28 14:21:52)
  基于单片机控制的高精密直流电流源的设计  (2008-04-28 14:28:57)
  51单片机与串行AD转换器TLC2543的接口设计  (2008-05-24 22:30:04)
  基于C8051F单片机的红外轴温探测器零点校正技术  (2008-04-28 14:13:16)
 
   MSP430并口仿真器
   ATMEL ISP下载线
   WJ89C52V1.2单片机开发板
   WJ1C6V2.0 FPGA开发板
   PIC16F877A
   SST89E516 仿真芯片
   STC89C52
   USB AVRISP/STK500下载器
   WJ430F149V2.0单片机开发板
   WJ89S52V2.1单片机开发板
   WJ89S52V2.1单片机开发板
   1602字符型液晶屏
   Altera ByteBlasterII下载线
   USB BLASTER下载线
   128*64图形液晶屏
   WJ430F149V2.0单片机开发板
   WJ1C6V2.0 FPGA开发板
   WJ89C52V1.2单片机开发板
   WJ51PV2.1 51单片机编程器
   AT89S52
   程序的书写规则(程序的编码规
   c8051f单片机使用经验总结
   纯c语言实现动态分配多维数组
   从Cygnal C8051F看8位单片机
   51单片机控制的DS1302时钟程
   几种常用单片机介绍
   DSP开发中值得注意的几个问题
   德州仪器认为DSP技术正快速推
   Linux内核技术分析
   Linux操作系统12则经典应用技
   Linux操作系统发展简史
   教你一招 Linux常见紧急情况
   嵌入式Linux操作系统的驱动程
   基于嵌入式Linux平台多协议路
   系统学习linux的十一点
   单片机入门
   89S51与89C51的不同之处
   Keil C51程序设计中几种精确
   汇编程序编写的一些原则
   用单片机模拟I2C总线实现串行
   单片机与MMC卡的接口
   12位A/D转换器ADS7804与51单
   单片机显控系统中的汉字输入
   80C51单片机与MCS-51单片机的
   用FIFO实现高速模数转换器与
   基于MSP430单片机和nRF905的
   C51编程规则讲述
   基于单片机控制的高精密直流
   8051的汇编控制指令
   51单片机与串行AD转换器TLC2
关于我们 -- 各地代理 -- 付款方式 -- 购物流程 -- 售后服务 -- 淘宝店 -- 百度店 -- 拍拍店
Copyright © 2006-2008 伟杰龙电子 All Rights Reserved 沪ICP备08014295号
陈先生:QQ: 手机:13818903490 Email:
李先生:QQ: 手机:13622090409 Email:
宋先生:QQ: 手机:15881645409 Email:
电话:021-22819431 传真:021-66341252 地址:上海市宝山区大华路1380弄37号