Skip to content

Commit

Permalink
disk: fixing the sending of commands with r1 response
Browse files Browse the repository at this point in the history
The sdhc_cmd_r1_raw() function doesn't take into account the existence
of commands with data response. Because of this, some datas were being
lost.

The commands that return a r1 response and a data are: SDHC_SEND_CSD,
SDHC_SEND_CID, SDHC_READ_SINGLE_BLOCK, SDHC_READ_MULTIPLE_BLOCK,
SDHC_WRITE_BLOCK, SDHC_WRITE_MULTIPLE_BLOCK.

In order to solve this, was juts necessary skip the byte discard when
the command is one of these.

This problem was affecting, for example, the sdhc initialization. The
token returned from SDHC_SEND_CSD was being lost and the initialization
was broken.

Fixes zephyrproject-rtos#15444.

Signed-off-by: Lucas Peixoto <[email protected]>
Signed-off-by: Peter A. Bigot <[email protected]>
  • Loading branch information
lucaspeixotot authored and pabigot committed Aug 1, 2019
1 parent 5b8488a commit a561e30
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion subsys/disk/disk_access_sdhc.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,11 @@ static int sdhc_cmd_r1_raw(struct sdhc_data *data, u8_t cmd, u32_t payload)
err = sdhc_skip_until_start(data);

/* Ensure there's a idle byte between commands */
sdhc_rx_u8(data);
if (cmd != SDHC_SEND_CSD && cmd != SDHC_SEND_CID &&
cmd != SDHC_READ_SINGLE_BLOCK && cmd != SDHC_READ_MULTIPLE_BLOCK &&
cmd != SDHC_WRITE_BLOCK && cmd != SDHC_WRITE_MULTIPLE_BLOCK) {
sdhc_rx_u8(data);
}

return err;
}
Expand Down

0 comments on commit a561e30

Please sign in to comment.