*/err = mmc_send_io_op_cond(host,0, &ocr);if(!err) {if(mmc_attach_sdio(host, ocr)) { mmc_claim_host(host);/* try SDMEM (but not MMC) even if SDIO is broken */if(mmc_send_app_op_cond(host,0, &ocr))gotoout_fail;if(mmc_attach_sd(host, ocr)) mmc_power_off(host); ...
return err; } return SDMMC_OK; } sdmmc_err_t sdmmc_init_io(sdmmc_card_t* card) { /* IO_SEND_OP_COND(CMD5), Determine if the card is an IO card.* Non-IO cards will not respond to this command.*/ sdmmc_err_t err = sdmmc_io_send_op_cond(card, 0, &card->oc...
sdmmc_err_t sdmmc_send_cmd_go_idle_state(sdmmc_card_t* card); sdmmc_err_t sdmmc_send_cmd_send_if_cond(sdmmc_card_t* card, uint32_t ocr); sdmmc_err_t sdmmc_send_cmd_send_op_cond(sdmmc_card_t* card, uint32_t ocr, uint32_t *ocrp); ...
SD_APP_OP_COND; err = sdmmc_send_app_cmd(card, &cmd); } else { /* MMC mode */ cmd.arg &= ~MMC_OCR_ACCESS_MODE_MASK; cmd.arg |= MMC_OCR_SECTOR_MODE; cmd.opcode = MMC_SEND_OP_COND; err = sdmmc_send_cmd(card, &cmd); } if (err != ESP_OK) { if (--err_cnt ==...
mmc_send_op_cond 发送CMD1指令,SEND_OP_COND 这里会设置card的工作电压寄存器OCR,并且通过busy位(bit31)来判断card的上电复位过程是否完成,如果没有完成的话需要重复发送。 完成之后,mmc card进入ready state。 mmc_all_send_cid 这里会发送CMD2指令,ALL_SEND_CID 广播指令,使card回复对应的CID寄存器的值。
* mmc_go_idle is needed for eMMC that are asleep */ mmc_go_idle(host); /* The extra bit indicates that we support high capacity */ err = mmc_send_op_cond(host, ocr | (1 << 30), &rocr); if (err) goto err; /* * For SPI, enable CRC as appropriate. */ if (mmc_host_...
A Build Template for the STM32 Processor. Contribute to geoffreymbrown/STM32-Template development by creating an account on GitHub.
= pattern) { ESP_LOGD(TAG, "%s: received=0x%x expected=0x%x", __func__, response, pattern); return ESP_ERR_INVALID_RESPONSE; } return ESP_OK; } esp_err_t sdmmc_send_cmd_send_op_cond(sdmmc_card_t* card, uint32_t ocr, uint32_t *ocrp) { esp_err_t err; /* If the host...