4392|7

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教SD卡读写的问题 [复制链接]

  我在2440的开发板上使用SD卡用作U盘,在我的电脑上可以看到 <可移动磁盘>,也可以读写文件,但经常写一部分就出错,比如同时写200多个文件,写了几十个或100多个文件时(已经写进去的文件是好的,可以用读卡器读到),就出现错误。
  停止仿真程序后发现错误出在读写SD卡上(USB通讯是好的)。
  
程序:
  wt_cnt=0x00;
  while(wt_cnt <512*block)
  {
          status=rSDIFSTA;
          if((status&0x2000)==0x2000)
          {
                  dat = *Rx_buffer++ < <24;
                  dat = dat|*Rx_buffer++ < <16;
                  dat = dat|*Rx_buffer++ < <8;
                  dat = dat|*Rx_buffer++;
                  rSDIDAT = dat;
                  wt_cnt = wt_cnt + 4;
                  status = rSDIFSTA;
           }
}


SDI寄存器中内容:
0x5a000000  00000011 00000003 00084400 00000259
0x5a000010  00000019 00000900 31202020 10E7C037
0x5a000020  D5008C27 007FFFFF 00000200 00133040
0x5a000030  00000000 00000010 00000040 00000000
0x5a000040  00000000 00000000 00000000 00000000

出现的情况:写0x40个数据块时,SDIDCNT(0X5A000030)已经计数到0,SDIDSTA(0x5a000034)也检测
            到数据结束(0x10),但是wt_cnt只计数到0x00004040(40个数据块应该为0x00008000),然后就
            在这进行死循环,不知为什么wt_cnt没有计数到0x00008000?
            
            此时FIFO(0x5a000030)中已有0x40个数据,但是不再往SD卡中写入,所以内存中数据也就不能再
            写入FIFO中,程序出现死循环。

高手们帮帮忙啊!!!!!!

最新回复

    我是第一次学习使用ARM,SDRAM也是第一次使用,USB和SD卡都是第一次接触,所以以前没有经历过。     “另一块SDRAM中”是指同一片芯片的另一块区域,我后来在程序中加了一句,把wt_cnt存储到另外一块区域中(上面给出的例子中没有),等到死循环时停止,观察另一块区域中的内容。     SDRAM是在买来的开发板的核心芯片上,型号为HY57V561620FTP,开发板自带Win Ce系统,虽然不支持用USB和电脑连接,但在Win Ce环境下从SD卡上复制到SD卡上,数据都是正确的,也就是说,用作缓冲的SDRAM应该是好的,而且程序也是在SDRAM中运行的。     我现在也重新看SDRAM的参数。     请问 guopeixin,bib是什么意思?     谢谢 guopeixin !   详情 回复 发表于 2009-8-31 08:44
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
关注
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
有没有人回答啊!帮帮我啊!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
两个问题,期待回答:
1. 我的电脑上可以看到 <可移动磁盘>,也可以读写文件
你是在电脑上操作,还是在device上操作?
2. 经写进去的文件是好的,可以用读卡器读到
仅仅这样确定文件的好坏么?

下一个问题根据你的回复来定
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 guopeixin 的回复:
两个问题,期待回答:
1. 我的电脑上可以看到 <可移动磁盘>,也可以读写文件
你是在电脑上操作,还是在device上操作?
2. 经写进去的文件是好的,可以用读卡器读到
仅仅这样确定文件的好坏么?

下一个问题根据你的回复来定



1. 在电脑上对U盘(即开发板上的SD卡)进行读写。
2. SD卡在读卡器上用电脑读写,比如可以打开里面的 *.txt 文档,可以用图片浏览器观看SD卡里的 *.jpg 文档,等等......。通过这个方法判断写到SD卡中的文档是好的。

    在此谢谢 guopeixin的关心。

    现在通过调试进一步发现问题出在 SDRAM(不是SD卡上),即wt_cnt 在循环计数的时候数据会跳变,我把每次的wt_cnt 数据保存在另一块SDRAM中,等到SD卡数据传输结束后发现,计数值(wt_cnt )从0到         0x4BA0 ,然后又从 0x0BA4 往下计数(也可能是别的跳变情况)。
   
    不知道这是什么回事?SDRAM中的数据就被改变了。
   
    于是我用3个计数器计数(增加wt_cnt1、wt_cnt2),发现仅仅计数,则计数就是正确的,如果用于判断循环,即while(wt_cnt <512*block),不管用wt_cnt、wt_cnt1、wt_cnt2,都计数不正常。

    有哪位朋友帮忙解释以下!在此谢谢了!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
哪位大侠帮帮我呀?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
那就是SDRAM的问题了?
1. 以前在这个项目发现过SDRAM出问题么?有人反映过SDRAM出现问题么?
2. 我在猜测,有关的内存配置导致出问题的可能性比较大,类似bib或者sdram的参数等等
顺便问一下,你怎么保证访问到“另一块SDRAM中”
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 guopeixin 的回复:
那就是SDRAM的问题了?
1. 以前在这个项目发现过SDRAM出问题么?有人反映过SDRAM出现问题么?
2. 我在猜测,有关的内存配置导致出问题的可能性比较大,类似bib或者sdram的参数等等
顺便问一下,你怎么保证访问到“另一块SDRAM中”


    我是第一次学习使用ARM,SDRAM也是第一次使用,USB和SD卡都是第一次接触,所以以前没有经历过。
    “另一块SDRAM中”是指同一片芯片的另一块区域,我后来在程序中加了一句,把wt_cnt存储到另外一块区域中(上面给出的例子中没有),等到死循环时停止,观察另一块区域中的内容。
    SDRAM是在买来的开发板的核心芯片上,型号为HY57V561620FTP,开发板自带Win Ce系统,虽然不支持用USB和电脑连接,但在Win Ce环境下从SD卡上复制到SD卡上,数据都是正确的,也就是说,用作缓冲的SDRAM应该是好的,而且程序也是在SDRAM中运行的。
    我现在也重新看SDRAM的参数。
    请问 guopeixin,bib是什么意思?
    谢谢 guopeixin !

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表