[PATCH] SPI SD-Card: setup valid CRC-7 for STOP_TRANSMISSION command.

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Oct 4 08:14:44 UTC 2013


On 2013-10-04 09:34, Pavel Pisa wrote:
> From: Pavel Pisa <ppisa at pikron.com>
>
> STOP_TRANSMISSION command is used to finish READ_MULTIPLE_BLOCK
> command and its format is regular command format.
> It requires valid CRC-7 to have effect at least on
> some card brands else it is ignored and attempt
> to issue next READ or WRITE commands results in
> illegal command condition (0x04) preceded by strange
> (0x3f) for tested card.
>
> Signed-off-by: Pavel Pisa <ppisa at pikron.com>
> ---
>   c/src/libchip/i2c/spi-sd-card.c |    4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/c/src/libchip/i2c/spi-sd-card.c b/c/src/libchip/i2c/spi-sd-card.c
> index 5a30451..89d5fb5 100644
> --- a/c/src/libchip/i2c/spi-sd-card.c
> +++ b/c/src/libchip/i2c/spi-sd-card.c
> @@ -501,8 +501,12 @@ static int sd_card_send_register_command( sd_card_driver_entry *e, uint32_t comm
>   static int sd_card_stop_multiple_block_read( sd_card_driver_entry *e)
>   {
>   	int rv = 0;
> +	uint8_t crc7;
>
>   	SD_CARD_COMMAND_SET_COMMAND( e->command, SD_CARD_CMD_STOP_TRANSMISSION);
> +	SD_CARD_COMMAND_SET_ARGUMENT( e->command, 0);
> +	crc7 = sd_card_compute_crc7( e->command + 1, 5);
> +	SD_CARD_COMMAND_SET_CRC7( e->command, crc7);
>   	rv = rtems_libi2c_write_bytes( e->bus, e->command, SD_CARD_COMMAND_SIZE);
>   	RTEMS_CHECK_RV( rv, "Write stop transfer token");
>
>

Since the command uses only constants is it sufficient to use

SD_CARD_COMMAND_SET_ARGUMENT( e->command, 0);
SD_CARD_COMMAND_SET_CRC7( e->command, 0x7a);

?

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list