OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4221|回复: 2

请问原子哥,SD获得CSD信息的问题

[复制链接]

6

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-6-13
在线时间
3 小时
发表于 2014-1-5 09:44:01 | 显示全部楼层 |阅读模式
通过JTAG仿真发现获得CSD这有点奇怪,不知是不是自己的逻辑问题,希望有知道的同学踊跃拍砖

原子哥是这样的,以下是STM32的SD卡例程,我把断点打在第10行,获取到的CSD数组的值为:
CSD[0]=0x00、CSD[1]=0x00 、CSD[2]=0x00 、CSD[3]=0x00 、
CSD[4]=0x00 、CSD[5]=0x00 、CSD[6]=0x00 、CSD[7]=0x00 、
CSD[8]=0x00 、CSD[9]=0x00 、CSD[10]=0x00 、CSD[11]=0x00 、
CSD[12]= 0x03、CSD[13]=0x09 、CSD[14]=0x00 、CSD[15]=0x08 
按以上获得的值,它是不应该跳到第12行的,而且csize计算出来的结果是0x76B3,我还以为是0x0001呢
就是这一部分看起来总是有点怪怪的,求原子哥指点指点

//获取SD卡的总扇区数(扇区数)   
//返回值:0: 取容量出错 
//       其他:SD卡的容量(扇区数/512字节)
//每扇区的字节数必为512,因为如果不是512,则初始化不能通过.  
1    u32 SD_GetSectorCount(void)
2    {
3        u8 csd[16];
4        u32 Capacity;  
5        u8 n;
6        u16 csize;      
7        //取CSD信息,如果期间出错,返回0
8        if(SD_GetCSD(csd)!=0) return 0;    
9        //如果为SDHC卡,按照下面方式计算
10        if((csd[0]&0xC0)==0x40) //V2.00的卡
11        {
12 csize = csd[9] + ((u16)csd[8] << 8) + 1;
13 Capacity = (u32)csize << 10;//得到扇区数   
14        }else//V1.XX的卡
15        {
16 n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
17 csize = (csd[8] >> 6) + ((u16)csd[7] << 2) + ((u16)(csd[6] & 3) << 10) + 1;
18 Capacity= (u32)csize << (n - 9);//得到扇区数   
19        }
20        return Capacity;
21    }

还有我自己的另一个程序获取到的CSD数组的值为:
CSD[0]=0x00、CSD[1]=0x00 、CSD[2]=0x00 、CSD[3]=0x00 、
CSD[4]=0x00 、CSD[5]=0x00 、CSD[6]=0x00 、CSD[7]=0x00 、
CSD[8]=0x00 、CSD[9]=0x00 、CSD[10]=0x00 、CSD[11]=0x00 、
CSD[12]= 0x41、CSD[13]=0x21 、CSD[14]=0x00 、CSD[15]=0x08 
就CSD[12]、CSD[13]跟上面的不一样,这是怎么回事(T _ T)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-6-13
在线时间
3 小时
 楼主| 发表于 2014-1-5 10:20:02 | 显示全部楼层
哈哈,不好意思,是编译器的的问题,CSD数组加上static就可以看到真正读出来的数值了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-6 08:56:59 | 显示全部楼层
回复【2楼】w277277w:
---------------------------------
我的没加也正确喔
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 09:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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