打印

为什么SDHC卡只能读0扇区??

[复制链接]
6876|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小鱼儿1045|  楼主 | 2012-6-2 12:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SDHC卡的初始化和读取写都以完成,但是发现,读写数据只能在0扇区完成,其他扇区就不行。在SD卡上格式化为FAT32格式后,能正确读会DBR(在0扇区)上的数据,读其它扇区数据就不行,即使有数据也都为00。
我用电脑在SD上面建立了一个txt的文件,并用winhex查看了txt文件内容所在的扇区。然后用单片机读这个扇区的地址,总是00。为什么?我读用的是CMD17的命令(读单扇区),是不是SD上了文件系统以后就不能随意读了?(但是不是FAT32也不能随意读写)
求大神指点迷津……谢了!

相关帖子

沙发
小鱼儿1045|  楼主 | 2012-6-3 13:46 | 只看该作者
自己顶一下……

使用特权

评论回复
板凳
小鱼儿1045|  楼主 | 2012-6-4 21:22 | 只看该作者
解决……结贴!

使用特权

评论回复
地板
hotyong| | 2012-6-5 11:00 | 只看该作者
最讨厌这种人,发个帖子求答,自己搞定了却不通报原因。。

使用特权

评论回复
5
小鱼儿1045|  楼主 | 2012-7-17 17:24 | 只看该作者
4# hotyong
因为没人回答……我说给谁听?

使用特权

评论回复
6
ayl439| | 2012-8-1 11:00 | 只看该作者
如何解决的?可以透露下吗?

使用特权

评论回复
7
amwrdfe| | 2012-8-1 12:17 | 只看该作者
能正确读0扇区,说明读操作正常,
不能正确读其他扇区,说明是传入参数有误,
文件系统基本单位是扇区,一般都是512byte,
而cmd17指令传的是地址,很多时候都是在这里疏忽了。

使用特权

评论回复
8
selfstudy| | 2012-8-13 09:23 | 只看该作者
7# amwrdfe
我也在操作sd卡,可以读,可以写。

但是读和写在一起,程序就不执行了,怀疑是跑飞了。

能否将你的程序给我学习;或者我将我的程序发给你,帮我测试一下。谢谢

我的硬件:单片机 atmega16+sdhc卡。

使用特权

评论回复
9
amwrdfe| | 2012-8-14 19:40 | 只看该作者
读写之前有没有判断忙?
类似如下代码
        SD_CS_SET();
        for(i=0;i<0xffff;i++) {
                tmp = SPI_Send_Data(EMPTY_COMMAND);
                if((tmp == 0xff)|(tmp == 0x00))
                        break;
                }
        SD_CS_CLR();
sd卡忙的时候不接收这些读写指令的。
俺是干硬件的,玩过的单片机不是很多... 你的平台俺没有。

使用特权

评论回复
10
longzhaocy| | 2012-9-6 17:43 | 只看该作者
我也在做这个,用的msp430f149,可以读写。但是每次读写后,都要延时200ms。才可以。可以交流下,qq331580858

使用特权

评论回复
11
zzf119| | 2013-1-8 22:47 | 只看该作者
请问一下,我的SDHC卡,用spi总线读取sdhc卡的内容,为什么读出的数据和用winhex查看的内容不符合呢?我已经能收到命令牌0xfe了的,难道地址不对?谢谢

使用特权

评论回复
12
wagner| | 2013-7-2 22:17 | 只看该作者
請問版大是怎麼讀到的,我也遇到相同問題,可以讀到eb 00 90,可是其他扇區就讀不到東西了

使用特权

评论回复
13
南宫云明| | 2013-7-3 07:01 | 只看该作者
要区分逻辑扇区和物理扇区,两种扇区编号是不一样的。。。

使用特权

评论回复
14
wagner| | 2013-7-3 10:13 | 只看该作者
南宫云明 发表于 2013-7-3 07:01
要区分逻辑扇区和物理扇区,两种扇区编号是不一样的。。。

可以請問一下南宮大大要怎樣才能讀到正確的扇區呢?是讀csd的資訊嗎?像sd ver1.x 我是去直接讀物理扇區位置就可以讀到我建的根目錄區跟檔案內容,可是sdhc的我要怎麼讀的到我要的根目錄跟檔案內容,有公式嗎或是範例可看嗎?

使用特权

评论回复
15
znmcu| | 2013-7-3 10:43 | 只看该作者
因为地址传错了。不要乘以512了。

使用特权

评论回复
16
znmcu| | 2013-7-3 10:51 | 只看该作者
你可能用的是我的老版sd驱动,你把addr<<9这句话去掉就行了

使用特权

评论回复
17
wagner| | 2013-7-3 11:28 | 只看该作者
znmcu 发表于 2013-7-3 10:51
你可能用的是我的老版sd驱动,你把addr<<9这句话去掉就行了

我沒有乘上512我是直接從0x0的位置開始讀,每次讀512筆資料一直循環到找到我要的資料

使用特权

评论回复
18
znmcu| | 2013-7-3 12:34 | 只看该作者
驱动你自己写的?

使用特权

评论回复
19
znmcu| | 2013-7-3 13:07 | 只看该作者
你是台湾人?

使用特权

评论回复
20
wagner| | 2013-7-3 13:20 | 只看该作者
znmcu 发表于 2013-7-3 13:07
你是台湾人?

是的,驅動自己看很多前輩範例去改得

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

1965

帖子

19

粉丝