PCI-PCI桥在线读写EEPROM的技巧

2006-05-07 15:49:37来源: 互联网

PCI-PCI桥启动时,一般需要从EEPROM预读取配置数据。更改EEPROM中的数据一般需要专用的烧结器,这给调试过程带来不便。尤其是采用表贴封装的EEPROM。本文以Intel公司的Dec21554PCI-PCI桥为例,介绍一种在线读写EEPROM的方法。

EEPROM选用的是ATMEL公司生产的AT93LC66,4Kbit,按512×8bit组织。AT93LC66与Dec21554的硬件连线如图1所示。

Dec21554提供了一组寄存器,用于访问外接的串行ROM。寄存器位于CSR(控制状态寄存器组)空间中,基地址是PCI配置头部Secondary BAR2寄存器的值,文中定义为base。寄存器包括:

①ROM数据寄存器(RDR)。8位宽,用于存放读写数据。偏移地址是0x0CA。

②ROM地址寄存器(RAR)。24位宽,偏移地址是0x0CC,比特分配如下:

bit位置 23:11 10:9 8:7 6:0
意义 无用 操作码 操作码扩展 地址

操作码的意义:

01b——写(SROM_OpWrite);

10b——读(SROM_OpRead);

11b——擦;

00b——见操作码扩展位(SROM_OpGeneral)。

    操作码扩展位的意义:

00b——写无效;

01b——全写;

10b——全擦;

11b——写有效(SROM_GeneralWriteEnable)。

操作码扩展位同时兼作地址的7、8位。该寄存器上电后的默认值为0x000400。

③ROM控制寄存器(RCR)。各bit含义如表1所列。

表1 

bit位置 7:4 3 2 1 0
名称 Reserved SROM_POLL RW_CTL P_ROM_START ROM_START
意义 保留 反映串行ROM的查询结果 并行ROM读写控制 开始并行ROM的读写操作,并返回状态 开始串行ROM的读写操作,并返回状态

寄存器8位宽,偏移地址是0x0CF。

为了读取串行ROM垢数据,必须首先清除ROM控制寄存器的ROM_START位,然后进行如下操作:

①在ROM地址寄存器中写入读取数据的地址(address),以及读数据操作码。代码为

PUT32(base+0xCC,address|SROM_OpRead);

②在ROM控制寄存器中置ROM_START为1,开始读取;

PUT8(base+0xCF,ROM_START);

③当ROM_START位为0时,ROM数据寄存器中的值就是读取的值;

while(GET8(base+0xCF)&ROM_START)delay(1);

value=GET8(base+0xCA);

value就是读得的数据。那么,如何更改数据呢?

因为串行ROM在上电后,处于擦/写无效状态,所以在写数据之前,必须先设置擦/写为有效。步骤如下:

①在ROM地址寄存器中写入地址和操作码;

PUT32(base+0xCC,SROM_OpGeneral|SROM_GeneralWriteEnable);

②同时在ROM控制寄存器中设置ROM_START位为1;

PUT8(base+0xCF,ROM_START);

③当ROM_START位为0时,操作完成;

    while((value=GET8(base+0xCF))&ROM_START)delay(1);

一旦串行ROM擦/写有效后,就可以写数据了,步骤如下:

①在ROM地址寄存器中写入地址和操作码;

PUT32(base+0xCC,address|SROM_OpWrite);

②在ROM数据寄存器中写入8位数据;

PUT8(base+0xCA,data);

③在ROM控制寄存器中置ROM_START位为1;

PUT8(base+0xCF,ROM_START);

④当ROM控制寄存器中的ROM_START位为0时,将ROM_START位置为1,SROM_POLL位自动置为1,开始查询操作,以验证写操作是否完成;

while(GET8(base+0xCF)&ROM_START)delay(4);

PUT8(base+0xCF,ROM_START);

while(GET8(base+0xCF)&ROM_START);

⑤SROM_POLL位显示了查询操作的状态。如果为1,串行ROM还要接着查询,否则,写操作完成。

While(GET8(base+0xCF)&SROM_POLL){

PUT8(base+0xCF,ROM_START);

while(GET8(base+0xCF)&ROM_START);

}

这样就完成了EEPROM的写操作过程。我们可以读出刚才写入的数据,验证是否写的正确。在调试过程中,只需要编写两个短小的读写程序,就可以解除经常使用烧写器带来的不例,提高调试效率。

编辑: 引用地址:http://www.eeworld.com.cn/designarticles/memory/200605/1595.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved