We have developed a software controller for writing and reading an SD card. Our code uses ADMA and multi-block transfer mode as the Zynq-7000 technical reference manual explains. The problem is that the data transfer between SDIO and ADM is too slow (1 sector of 512 B per ms for writing transfers).
We have got this time by measuring the cycles between the CMD25 order (Multi-block write) and the change in the interrupt status register.
We are using a Transcend SDHC 4 card with FAT32 file system, 512 B sector size and 4 KB cluster size. Don't know where could be the bottleneck (SD card? ADMA algorithm?)
From our point of view, 512B/ms is too slow as we need to write 2 sectors in less than 1 ms. These 2 sectors are the file sector itself and the directory entry sector. The directory entry sector is required to save the changes in the case of failure.
Do you have any suggestions? I can provide the code if you want to take a look at it.