本帖最后由 ddf6d 于 2014-10-11 17:59 编辑
简单说,我用的ST官方驱动“stm32_eval_sdio_sd.c”版本4.4,TF卡容量为金士顿1GB,大概是2007年买的,格式化后为Fat32,簇大小512Byte。
用以下代码读从0地址连续读512Byte的数据进行测试:
void SD_TEST(void){
Status = SD_Init();
Status = SD_GetCardInfo(&SDCardInfo);
Status = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16));
Status = SD_EnableWideBusOperation(SDIO_BusWide_4b);
Status = SD_SetDeviceMode(SD_DMA_MODE);
if (Status == SD_OK)
{
// 从地址0开始读取512字节
Status = SD_ReadBlock(Buffer_Block_Rx, 0x0, 512);
}
if (Status == SD_OK)
{
// 返回成功的话,串口输出SD卡测试成功信息
USART_OUT(USART1, " \r\n CardType is :%d ", SDCardInfo.CardType );
USART_OUT(USART1," \r\n CardCapacity is :%d ", SDCardInfo.CardCapacity );
USART_OUT(USART1, " \r\n CardBlockSize is :%d ", SDCardInfo.CardBlockSize );
USART_OUT(USART1, " \r\n RCA is :%d ", SDCardInfo.RCA);
USART_OUT(USART1, " \r\n ManufacturerID is :%d \r\n", SDCardInfo.SD_cid.ManufacturerID );
}
}
仿真看数组Buffer_Block_Rx[]变量中的数据,跟我用WinHex软件查看的数据相同。同时,串口输出如下:
CardType is :1
CardCapacity is :1584
CardBlockSize is :512
RCA is :2
ManufacturerID is :27
首先,串口数据“CardCapacity is :1584 ”貌似很异常!!!,继续测试
但是我将 SD_ReadBlock函数中的地址更换为根目录的首地址0x01000000时,即 SD_ReadBlock(Buffer_Block_Rx, 0x01000000, 512);同样仿真看Buffer_Block_Rx[]中的数据,结果全都是0。
但是WinHex查看根目录的数据如下
我又将地址更换为:0x00000200,也就是第2号扇区的首地址,读回来的数据又正常,不知道为什么。
望大家积极发表见解
|