I am trying to create a device driver for the MMC-SD peripheral of our DM6446-based non-Linux system. I can successfully initialize the controller and identify a connected SD card. The problem I am having is when attempting data transfers to the device.
I have sent the SELECT_CARD command and gotten the expected response.
I have sent the SET_BLOCKLEN command (512 byte blocks) and gotten the expected response.
I have loaded the start address into the MMC argument registers, reset and configured the FIFO, enabled the interrupts and loaded the first 32 bytes into the FIFO.
I then send the WRITE_BLOCK command and I get interrupts indicating DXRDY and RSPDNE. In response to this I load the next 16 bytes (FIFOLEV = 0) but I get no more interrupts. So, I cannot complete the transfer. If I look at the MMCST1 register it indicated the FIFO and transmitter are empty.
The same issue happens when I send the READ_BLOCK command. I get one interrupt indicating DRRDY. In response I read the next 16 bytesfrom the FIFO but no more interrupts.
I have also tried using the DMA to do the transfer but it to never completes.
What could be causing this type of behavior?