Information

Enhanced Secure Digital Host Controller
MPC8308 PowerQUICC II Pro Processor Reference Manual, Rev. 1
11-56 Freescale Semiconductor
If the suspend command is sent and the transfer is later resumed by means of the resume command, the
eSDHC takes the command as a normal one accompanied with data transfer, and it is left for the driver to
set all the relevant registers before the transfer is resumed. If there is only one block to send when the
transfer is resumed, XFERTYP[MSBSEL, BCEN] and IRQSTT[AC12EN] are set. However, the eSDHC
automatically sends CMD12 to mark the end of a multi-block transfer.
11.6.3.3 Transfer Error
This section discusses the following errors:
CRC
Internal DMA
Auto CMD12
11.6.3.3.1 CRC Error
At the end of a block transfer, a write CRC status error or read CRC error may occur. For this type of error,
the last block received should be discarded because the integrity of the data block is not guaranteed. It is
recommended to discard the following data blocks and re-transfer the block from the corrupted one. For a
multi-block transfer, the host driver should issue CMD12 to abort the current process and start the transfer
by a new data command. In this scenario, even when the XFERTYP[AC12EN, BCEN] are set, the eSDHC
does not automatically send CMD12 because the last block is not transferred. On the other hand, if it is
within the last block that CRC error occurs, Auto CMD12 is sent by the eSDHC. In this case, the driver
should resend or re-obtain the last block with a single block transfer.
11.6.3.3.2 Internal DMA Error
During the data transfer with the internal DMA, if the DMA engine encounters an error on the CSB bus,
the DMA operation is aborted and a DMA error interrupt is sent to the host system. When acknowledged
by such an interrupt, the driver should calculate the start address of the data block where the error occurred.
The start address can be calculated by either of the following methods:
Read the DSADDR[DSADDR] field. Depending on initial value of this field and block size, the
start address of the corrupted block can be obtained.
Read the BLKATTR[BLKCNT] field. The start address of the corrupted block can be calculated
by the number of blocks left, the total number to transfer, the start address of transfer, and the size
of each block. However, if BCEN is not set, the contents of the block attribute register does not
change and this method does not work.
When a DMA error occurs, it is recommended to abort the current transfer by means of CMD12 (for
multi-block transfer), apply a reset for data, and restart the transfer from the corrupted block to recover the
error.
11.6.3.3.3 Auto CMD12 Error
After the last block of a multi-block transfer is sent or received and XFERTYP[AC12EN] is set when the
data transfer is initiated by the data command, the eSDHC automatically sends CMD12 to the card to stop