我仔细的看了下,发现问题在这里,可是又没发现问题,
sd_size=SD_GetSectorCount();程序调用这个来读内存,
////获取SD卡的总扇区数(扇区数)
//返回值:0: 取容量出错
// 其他:SD卡的容量(扇区数/512字节)
//每扇区的字节数必为512,因为如果不是512,则初始化不能通过.
u32 SD_GetSectorCount(void)
{
u8 csd[16];
u32 Capacity;
u8 n;
u16 csize;
//取CSD信息,如果期间出错,返回0
if(SD_GetCSD(csd)!=0) return 0;
//如果为SDHC卡,按照下面方式计算
if((csd[0]&0xC0)==0x40) //V2.00的卡
{
csize = csd[9] + ((u16)csd[8] << 8) + 1;
Capacity = (u32)csize << 10;//得到扇区数
}else//V1.XX的卡
{
n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
csize = (csd[8] >> 6) + ((u16)csd[7] << 2) + ((u16)(csd[6] & 3) << 10) + 1;
Capacity= (u32)csize << (n - 9);//得到扇区数
}
return Capacity;
}
可是结果是内存为0,就是说 ((取CSD信息,如果期间出错,返回0))这个问题,再看一下,
u8 SD_GetCSD(u8 *csd_data)
{
u8 r1;
r1=SD_SendCommand(CMD9,0,0x01);//发CMD9命令,读CSD
if(r1==0)
{
r1=SD_receivedata(csd_data, 16,RELEASE);//接收16个字节的数据
}
SetSD_CS//取消片选
if(r1)return 1;
else return 0;
}
是这个函数问题,可是我是用原子哥的程序,怎么会这样呢,求元子哥 |