sdmmc: don't whitelist the opcodes when handling response timeout
All the commands which do not have a response must have their flags set accordingly. Therefore the host will not send RTO interrupt if response is not expected. It is a bug in the code logic if it happens otherwise.
This commit is contained in:
parent
f02cff13cc
commit
5fc6fb58ea
1 changed files with 4 additions and 6 deletions
|
@ -287,18 +287,16 @@ static void process_command_response(uint32_t status, sdmmc_command_t* cmd)
|
||||||
cmd->response[3] = 0;
|
cmd->response[3] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (status & SDMMC_INTMASK_RTO) {
|
||||||
if ((status & SDMMC_INTMASK_RTO) &&
|
// response timeout is only possible when response is expected
|
||||||
cmd->opcode != MMC_ALL_SEND_CID &&
|
assert(cmd->flags & SCF_RSP_PRESENT);
|
||||||
cmd->opcode != MMC_SELECT_CARD &&
|
|
||||||
cmd->opcode != MMC_STOP_TRANSMISSION) {
|
|
||||||
cmd->error = ESP_ERR_TIMEOUT;
|
cmd->error = ESP_ERR_TIMEOUT;
|
||||||
} else if ((cmd->flags & SCF_RSP_CRC) && (status & SDMMC_INTMASK_RCRC)) {
|
} else if ((cmd->flags & SCF_RSP_CRC) && (status & SDMMC_INTMASK_RCRC)) {
|
||||||
cmd->error = ESP_ERR_INVALID_CRC;
|
cmd->error = ESP_ERR_INVALID_CRC;
|
||||||
} else if (status & SDMMC_INTMASK_RESP_ERR) {
|
} else if (status & SDMMC_INTMASK_RESP_ERR) {
|
||||||
cmd->error = ESP_ERR_INVALID_RESPONSE;
|
cmd->error = ESP_ERR_INVALID_RESPONSE;
|
||||||
}
|
}
|
||||||
if (cmd->error != 0) {
|
if (cmd->error != ESP_OK) {
|
||||||
if (cmd->data) {
|
if (cmd->data) {
|
||||||
sdmmc_host_dma_stop();
|
sdmmc_host_dma_stop();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue