AnsweredAssumed Answered

Multi-block write using SDHC

Question asked by harish kasi on Jun 9, 2011
Latest reply on Apr 30, 2014 by vallinath s

Hi Everyone,


I have been struggling with this issue for a week now. I am using the Kinetis K60 evaluation board. 

I am able to successfully implement multi-block read using the SDHC controller. The multi-block write fails. I am attaching the piece of code below. The code uses MQX ESDHC driver directly. MFS is not used.


The code is written according to reference manual section " Normal Write". After issuing CMD25 and writing one block of data, the SD Card status has to be polled. The code fails(hangs monitoring IRQSTAT[CC] to set) when attempting to obtain the SD Card status using SEND_STATUS (CMD13). 


Please help,






* Initialization and identification code

* Setup SD Card in 4 bit mode and set BLOCK_LEN = 512


/* Send CMD25 for multi-block write */ 

command.COMMAND = ESDHC_CMD25;    

command.TYPE = ESDHC_TYPE_NORMAL;     

command.ARGUMENT = sector;     

command.READ = FALSE;     

command.BLOCKS = BLOCK_COUNT;           

error_code = ioctl (esdhc_fd, IO_IOCTL_ESDHC_SEND_COMMAND, &command);     

if (ESDHC_OK != error_code)      {        printf("\nioctl send command failed %d", error_code);        _task_block ();      }


/* Write one block of data */

error_code = fwrite(data_ptr, 1, BLOCK_SIZE, esdhc_fd);


/* Check SD Card status to see if it is ready to receive more data */

command.COMMAND = ESDHC_CMD13;         

command.TYPE = ESDHC_TYPE_NORMAL;         

command.ARGUMENT = rca;         

command.READ = FALSE;         

command.BLOCKS = 0;         

error_code = ioctl (esdhc_fd, IO_IOCTL_ESDHC_SEND_COMMAND, &command);         // HANGS HERE

if (ESDHC_OK != error_code)          {            printf("ioctl failed with 0x%0x\n", error_code);            _task_block ();          }