将Pin的配置改为上拉 在默认配置函数中HAL_SD_MspInit()对SDIO的Pin的默认配置是GPIO_NOPULL,但我在使用过程中发现,程序会卡死在SD_FindSCR()函数的以下这段代码中: /*卡在这个循环中出不去*/while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | S...
(SDIO->RESP1&SD_CARD_LOCKED)return SD_LOCK_UNLOCK_FAILED;//SD卡处于LOCKED状态 errorstatus=SDIO_SdCardFindSCR(RCA,scr); //得到SCR寄存器数据 if(errorstatus!=SD_OK)return errorstatus; if((scr[1]&SD_WIDE_BUS_SUPPORT)!=SD_ALLZERO) //支持宽总线 { SDIO_SendCmd(SD_CMD_APP_CMD,1,(u32...
staticu8 CardType=SDIO_STD_CAPACITY_SD_CARD_V1_1; //SD卡类型(默认为1.x卡) static u32 CSD_Tab[4],CID_Tab[4],RCA=0; //SD卡CSD,CID以及相对地址(RCA)数据 static u8 DeviceMode=SD_DMA_MODE; //工作模式,注意,工作模式必须通过SDIO_SdCardSetDeviceMode,后才算数.这里只是定义一个默认的模式...
利用SDIO模式读写sd卡,程序执行到返回SCR寄存器时(static SD_Error FindSCR(uint16_t rca, uint32_t...
调试中发现,初始化过程中,程序在 static SD_Error FindSCR(uint16_t rca, uint32_t *pscr)复制...
从函数SD_ERROR SD_INIT(VOID)跟下去。 函数首先调用了SDIO底层初始化,然后读卡,进行POWER ON了,上电成功就初始化。 先看看SDIO底层初始化了什么。 SD_ERROR SD_INIT(VOID){ __IO SD_ERROR ERRORSTATUS = SD_OK; /* SDIO PERIPHERAL LOW LEVEL INIT */ ...
[39:8]的内容为命令响应参数,如这个响应R1的内容即为卡状态。 再拿R6(属于短响应)来举例,格式为: command index 的内容为它响应的命令的编码,如当我们向SD卡发送CMD3(编码:000011)命令时,它返回的响应R6的command index 内容即为000011。 Argument field 的内容为命令响应参数,如这个响应R6的内容即为RCA(卡的...
函数 功能:选择sd卡,并且等待卡准备OK 函数返回值:0,成功;1,失败; */void SDCardSelectCS(void) { SDCARD_CS=0; SDCardWaitBusy();//等待成功}/* 函数 功能:等待卡准备好 函数返回值:0,准备好了;其他,错误代码 */void SDCardWaitBusy(void) ...
函数功能:SD卡底层接口,通过SPI时序向SD卡读写一个字节 函数参数:data是要写入的数据 返回值:读到的数据 */ u8 SDCardReadWriteOneByte(u8 DataTx) { return SPI_ReadWriteOneByte(DataTx); } (2)运行效果 3.3SDIO方式 如果想提高SD NAND的读写速度,可以采用SDIO协议,STM32本身有SDIO的硬件支持,配置好SDIO...