|
硬件:STM32L431RCT6 ,接线如下

使用配置的CUBEMX:SD 4Bits Wied Bus 使用SDMMC1 DMA收发共用,SDIO时钟频率为32Mhz,2 ,4,8分频都试过。
代码如下:
printf("Micro SD Card Test... \r\n");
uint8_t status = HAL_SD_Init(&hsd1); /* 初始化 */
if(status != HAL_OK)
{
printf("SD card initialize failed!\n");
}
HAL_SD_CardStateTypeDef state = HAL_SD_GetCardState(&hsd1);
HAL_SD_CardCIDTypeDef SD_CardCID;
if(state == HAL_SD_CARD_TRANSFER)
{
HAL_SD_GetCardCID(&hsd1, &SD_CardCID);
printf("\nInitialize SD card sucessfully!\r\n");
printf("\nSD card information\r\n");
printf("\nCapacity :%llu\r\n", ((unsigned long long)hsd1.SdCard.BlockSize*hsd1.SdCard.BlockNbr));
printf("\nBlockSize :%d\r\n", hsd1.SdCard.BlockSize);
printf("\nRCA :%d\r\n", hsd1.SdCard.RelCardAdd);
printf("\nCardType :%d\r\n", hsd1.SdCard.CardType);
printf("\nManufacturerID :%d\r\n", SD_CardCID.ManufacturerID);
}
result = f_mount(&fs ,"0:" , 1); //0:不挂载 1:挂载
if(result != FR_OK)
{
printf("挂载文件系统失败 (%s)\r\n", FR_Table[result]);
}
const char* filename = "0:data.csv";
result = f_open(&file , filename , FA_OPEN_ALWAYS|FA_WRITE); //如果文件存在则打开,如果文件不存在则创建并打开
if(result != FR_OK)
{
printf("打开文件失败 (%s)\r\n", FR_Table[result]);
}
调试结果如下:
[16:50:46.463]收←◆Micro SD Card Test...
Initialize SD card sucessfully!
SD card information
Capacity :31266439168
BlockSize :512
RCA :1
CardType :1
ManufacturerID :254
挂载文件系统失败 (FR_NOT_READY:物理驱动没有工作)
打开文件失败 (FR_DISK_ERR:底层硬件错误)
写入文件失败 (FR_INVALID_OBJECT:文件或者目录对象无效)
关闭文件失败 (FR_INVALID_OBJECT:文件或者目录对象无效)
即可以读到sd卡信息,但挂载不成功,换过几个sd卡,结果都一样,不知道从哪下手了,
|
|