*/ bool_t sdc_lld_read(SDCDriver *sdcp, uint32_t startblk, uint8_t *buf, uint32_t n) { #if STM32_SDC_SDIO_UNALIGNED_SUPPORT if (((unsigned)buf & 3) != 0) { uint32_t i; for (i = 0; i < n; i++) { if (sdc_lld_read_aligned(sdcp, startblk, u.buf, 1)) return CH_FAILED; memcpy(buf, u.buf, MMCSD_BLOCK_SIZE); buf += MMCSD_BLOCK_SIZE; startblk++; } return CH_SUCCESS; } #endif /* STM32_SDC_SDIO_UNALIGNED_SUPPORT */ return sdc_lld_read_aligned(sdcp, startblk, buf, n);
/** * @brief Reads one or more blocks. * * @param[in] sdcp pointer to the @p SDCDriver object * @param[in] startblk first block to read * @param[out] buf pointer to the read buffer * @param[in] blocks number of blocks to read * * @return The operation status. * @retval HAL_SUCCESS operation succeeded. * @retval HAL_FAILED operation failed. * * @notapi */ bool sdc_lld_read(SDCDriver *sdcp, uint32_t startblk, uint8_t *buf, uint32_t blocks) { #if STM32_SDC_SDMMC_UNALIGNED_SUPPORT if (((unsigned)buf & 3) != 0) { uint32_t i; for (i = 0; i < blocks; i++) { if (sdc_lld_read_aligned(sdcp, startblk, u.buf, 1)) return HAL_FAILED; memcpy(buf, u.buf, MMCSD_BLOCK_SIZE); buf += MMCSD_BLOCK_SIZE; startblk++; } return HAL_SUCCESS; } #else /* !STM32_SDC_SDIO_UNALIGNED_SUPPORT */ osalDbgAssert((((unsigned)buf & 3) == 0), "unaligned buffer"); #endif /* !STM32_SDC_SDIO_UNALIGNED_SUPPORT */ return sdc_lld_read_aligned(sdcp, startblk, buf, blocks); }