0f238dcdec
SDMMC hardware treats all buffers as aligned, and ignores 2 LSBs of addresses written into DMA descriptors. Previously SDMMC host driver assumed that data buffers passed from SDDMC command layer would be aligned. However alignment checks were never implemented in the command layer, as were the checks that the buffer coming from the application would be in DMA capable memory. Most of the time this was indeed true. However in some cases FATFS library can pass buffers offset by 2 bytes from word boundary. “DMA capable” restriction may be broken if pSRAM support is used. This change adds buffer checks to the SDMMC host driver (alignment and DMA capability), so that the host layer will error out for incompatible buffers. In SDMMC command layer, a check is added to read and write functions. If an incompatible buffer is passed from the application, new buffer (512 bytes size) is allocated, and the transfer is performed using {READ,WRITE}_SINGLE_BLOCK commands. |
||
---|---|---|
.. | ||
include/driver | ||
test | ||
component.mk | ||
gpio.c | ||
i2c.c | ||
i2s.c | ||
ledc.c | ||
mcpwm.c | ||
pcnt.c | ||
periph_ctrl.c | ||
rmt.c | ||
rtc_module.c | ||
sdmmc_host.c | ||
sdmmc_private.h | ||
sdmmc_transaction.c | ||
sigmadelta.c | ||
spi_common.c | ||
spi_master.c | ||
spi_slave.c | ||
timer.c | ||
uart.c |