搜索
bottom↓
回复: 9

请各位高手给我解释一下外扩RAM读写存在的问题

[复制链接]

出0入0汤圆

发表于 2009-10-19 11:02:21 | 显示全部楼层 |阅读模式
我用AVR128单片机外扩了一个32K的STC62WV256 RAM芯片,地址译码电路图我粘不上来,就是把它设计成外部32K的低4K转到了高端地址的0x8000到0x8fff地址,外部RAM地址0x1100开始,加上内部4K的RAM,系统总共有36K的连续RAM空间。但是我读写外部RAM时发现存在问题,就是往指定地址空间只写一遍的数据总是在另外的地址范围被重写。我一直查不出问题所在。下面是我实验的一段程序的例子,我先定义了一个直接对地址空间读写的宏
  #define ExtSramPortCeShi(A) (*(volatile unsigned char *)(0x1100+A))
     
    uint map;
    for(map=0;map<160*10;map++)
      ExtSramPortCeShi(map)=0x22;
    for(map=160*10;map<160*21;map++)
      ExtSramPortCeShi(map)=0x23;   
    for(map=160*21;map<160*32;map++)
      ExtSramPortCeShi(map)=0x24;
    for(map=160*32;map<160*43;map++)
      ExtSramPortCeShi(map)=0x25;   
运行程序后在存储器窗口查看外部RAM空间,发现结果如下:

从地址0x1100到0x2be0正常写完,但从0x3100地址开始重写一遍,并且中间有间断从0x4000地址直接跳到0x8000地址才继续写完。又从0x9100开始又重写了一遍,中间无间断,到0xabe0地址正常结束。又从0xb100地址又重写了一遍,到0xc000地址结束,这一遍没有写完。

请问有经验的能不能帮我查找一下其中的原因,谢谢!

出0入0汤圆

 楼主| 发表于 2009-10-19 11:23:35 | 显示全部楼层
我外部XRAM接口是这样设置的,

    //MCUCR=0x80;       //外部存储器接口使能
    MCUCR=0Xc0;
    XMCRA=0x02;       //读写插入两个等待周期,输出新地址前再插入一个等待周期
    //XMCRA=0x00;       //读写插入两个等待周期,输出新地址前再插入一个等待周期
    XMCRB=0x80;       //外部存储器总线保持功能使能

出0入0汤圆

发表于 2009-10-19 14:36:57 | 显示全部楼层
先要看硬件电路。采用屏幕拷贝,然后贴图。

出0入0汤圆

 楼主| 发表于 2009-10-19 15:13:09 | 显示全部楼层
点击此处打开 ourdev_493402.jpg(文件大小:1.60M,只有400K以内的图片才能直接显示) (原文件名:译码电路.jpg)

出0入0汤圆

 楼主| 发表于 2009-10-19 15:29:09 | 显示全部楼层

(原文件名:电路图.JPG)

出0入0汤圆

 楼主| 发表于 2009-10-19 15:34:58 | 显示全部楼层
马老师,图贴上来了,上边上传那个图片太大了不能直接打开,又从新传了一个小的。右下角那一本分是看门狗电路的一部分,与存储器的无关。

出0入0汤圆

 楼主| 发表于 2009-10-20 10:41:12 | 显示全部楼层
有没有能给指导一下的啊?是硬件电路有问题,还是因为没有采用74AHC系列的锁存器?

出0入0汤圆

发表于 2009-10-20 19:26:10 | 显示全部楼层
原理图我没发现问题,同我M128书上的一样,但好象感觉不完整,请:

1。573的A3-A7应该连接在STC62WV256上吧
2。逐一检查硬件每根连接是否正确。
3。36K的最高地址为0x8fff,所以你只要从0X1100测试检查到0X8FFF就可以了
4。写入数据前,先写段代码,把0X1100-0X8FFF清为0,然后再写入测试的数据。
5。只要查到0X8FFF以前正确就行了。

出0入0汤圆

 楼主| 发表于 2009-10-21 09:06:47 | 显示全部楼层
很感谢马老师的指导!!573的8根地址线都连上了,已经标了A0---A7的8个网络标号。标<<A0、<<A1、<<A2的三个连接符号是在另一个模块复用的信号。我会按你说的方法来验证的。

出0入0汤圆

 楼主| 发表于 2009-10-21 12:41:31 | 显示全部楼层
谢谢马老师,我的问题解决了,我按你说的先仔细检查了每一根连线,问题还真是出在硬件连线上,原来A13和A15这两根线有一些虚焊,所以才总出现地址重写的问题。我原来是在外扩存储器模块的基础上调试照相机模块,通过单片机控制一个照相机拍照然后接收并存储图片数据。原先只实验了拍摄小尺寸图片,并且是定义了一个数组接收,没有直接用指针操作地址,在数据量小时并没有发现存储器读写有问题,所以我就一直以为存储器部分电路是没问题的。到后来我拍了一个大尺寸的图片试试,就发现有问题了,中间或前边接收的几包数据存储的正常位置总是被后面的数据覆盖,原来我以为是照相机程序编写有问题,就一直在这上面查找修改,但改来改去还是那个样。后来我定义指针操作地址,发现数据不但有被覆盖的而且后边地址空间总是有规律地被重写的,这时才意识到是存储器有问题。于是就专门测试存储器,但也没就想到就是硬件连线的问题,就没有一根一根仔细测完。这种硬件基础有问题,而没有查出来,只在软件层面上的修改调试最让人崩溃了。明明程序没问题就是结果不对,让人去怀疑不肯能的程序问题。总结下来还是检查错误的方法步骤不对,经验不够;再就是缺乏耐心去仔仔细细的查,太迷信程序了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 18:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表