@@ -190,13 +190,13 @@ static void rthw_sdio_wait_completed(struct rthw_sdio *sdio)
190190 cmd -> cmd_code ,
191191 cmd -> arg ,
192192 data ? (data -> flags & DATA_DIR_WRITE ? 'w' : 'r' ) : '-' ,
193- data ? data -> blks * data -> blksize : 0 ,
194- data ? data -> blksize : 0
195- );
193+ data ? data -> blks * data -> blksize : 0 ,
194+ data ? data -> blksize : 0
195+ );
196196 }
197197 }
198198 else
199- {
199+ {
200200 cmd -> err = RT_EOK ;
201201 LOG_D ("sta:0x%08X [%08X %08X %08X %08X]" , status , cmd -> resp [0 ], cmd -> resp [1 ], cmd -> resp [2 ], cmd -> resp [3 ]);
202202 }
@@ -278,9 +278,9 @@ static void rthw_sdio_send_command(struct rthw_sdio *sdio, struct sdio_pkg *pkg)
278278 resp_type (cmd ) == RESP_R6 ? "R6" : "" ,
279279 resp_type (cmd ) == RESP_R7 ? "R7" : "" ,
280280 data ? (data -> flags & DATA_DIR_WRITE ? 'w' : 'r' ) : '-' ,
281- data ? data -> blks * data -> blksize : 0 ,
282- data ? data -> blksize : 0
283- );
281+ data ? data -> blks * data -> blksize : 0 ,
282+ data ? data -> blksize : 0
283+ );
284284
285285 /* config cmd reg */
286286 reg_cmd = cmd -> cmd_code | HW_SDIO_CPSM_ENABLE ;
@@ -293,7 +293,7 @@ static void rthw_sdio_send_command(struct rthw_sdio *sdio, struct sdio_pkg *pkg)
293293
294294 /* config data reg */
295295 if (data != RT_NULL )
296- {
296+ {
297297 rt_uint32_t dir = 0 ;
298298 rt_uint32_t size = data -> blks * data -> blksize ;
299299 int order ;
@@ -700,6 +700,25 @@ void SD_LowLevel_DMA_TxConfig(uint32_t *src, uint32_t *dst, uint32_t BufferSize)
700700 HAL_DMA_DeInit (& sdio_obj .dma .handle_tx );
701701 HAL_DMA_Init (& sdio_obj .dma .handle_tx );
702702
703+ HAL_DMA_Start (& sdio_obj .dma .handle_tx , (uint32_t )src , (uint32_t )dst , BufferSize );
704+
705+ #elif defined(SOC_SERIES_STM32L4 )
706+ static uint32_t size = 0 ;
707+ size += BufferSize * 4 ;
708+ sdio_obj .cfg = & sdio_config ;
709+ sdio_obj .dma .handle_tx .Instance = sdio_config .dma_tx .Instance ;
710+ sdio_obj .dma .handle_tx .Init .Request = sdio_config .dma_tx .request ;
711+ sdio_obj .dma .handle_tx .Init .Direction = DMA_MEMORY_TO_PERIPH ;
712+ sdio_obj .dma .handle_tx .Init .PeriphInc = DMA_PINC_DISABLE ;
713+ sdio_obj .dma .handle_tx .Init .MemInc = DMA_MINC_ENABLE ;
714+ sdio_obj .dma .handle_tx .Init .PeriphDataAlignment = DMA_PDATAALIGN_WORD ;
715+ sdio_obj .dma .handle_tx .Init .MemDataAlignment = DMA_MDATAALIGN_WORD ;
716+ sdio_obj .dma .handle_tx .Init .Mode = DMA_NORMAL ;
717+ sdio_obj .dma .handle_tx .Init .Priority = DMA_PRIORITY_MEDIUM ;
718+
719+ HAL_DMA_DeInit (& sdio_obj .dma .handle_tx );
720+ HAL_DMA_Init (& sdio_obj .dma .handle_tx );
721+
703722 HAL_DMA_Start (& sdio_obj .dma .handle_tx , (uint32_t )src , (uint32_t )dst , BufferSize );
704723#else
705724 static uint32_t size = 0 ;
@@ -736,38 +755,54 @@ void SD_LowLevel_DMA_RxConfig(uint32_t *src, uint32_t *dst, uint32_t BufferSize)
736755{
737756#if defined(SOC_SERIES_STM32F1 )
738757 sdio_obj .cfg = & sdio_config ;
739- sdio_obj .dma .handle_tx .Instance = sdio_config .dma_tx .Instance ;
740- sdio_obj .dma .handle_tx .Init .Direction = DMA_PERIPH_TO_MEMORY ;
741- sdio_obj .dma .handle_tx .Init .MemDataAlignment = DMA_MDATAALIGN_WORD ;
742- sdio_obj .dma .handle_tx .Init .MemInc = DMA_MINC_ENABLE ;
743- sdio_obj .dma .handle_tx .Init .PeriphDataAlignment = DMA_PDATAALIGN_WORD ;
744- sdio_obj .dma .handle_tx .Init .PeriphInc = DMA_PINC_DISABLE ;
745- sdio_obj .dma .handle_tx .Init .Priority = DMA_PRIORITY_MEDIUM ;
746-
747- HAL_DMA_DeInit (& sdio_obj .dma .handle_tx );
748- HAL_DMA_Init (& sdio_obj .dma .handle_tx );
749-
750- HAL_DMA_Start (& sdio_obj .dma .handle_tx , (uint32_t )src , (uint32_t )dst , BufferSize );
758+ sdio_obj .dma .handle_rx .Instance = sdio_config .dma_tx .Instance ;
759+ sdio_obj .dma .handle_rx .Init .Direction = DMA_PERIPH_TO_MEMORY ;
760+ sdio_obj .dma .handle_rx .Init .MemDataAlignment = DMA_MDATAALIGN_WORD ;
761+ sdio_obj .dma .handle_rx .Init .MemInc = DMA_MINC_ENABLE ;
762+ sdio_obj .dma .handle_rx .Init .PeriphDataAlignment = DMA_PDATAALIGN_WORD ;
763+ sdio_obj .dma .handle_rx .Init .PeriphInc = DMA_PINC_DISABLE ;
764+ sdio_obj .dma .handle_rx .Init .Priority = DMA_PRIORITY_MEDIUM ;
765+
766+ HAL_DMA_DeInit (& sdio_obj .dma .handle_rx );
767+ HAL_DMA_Init (& sdio_obj .dma .handle_rx );
768+
769+ HAL_DMA_Start (& sdio_obj .dma .handle_rx , (uint32_t )src , (uint32_t )dst , BufferSize );
770+ #elif defined(SOC_SERIES_STM32L4 )
771+ sdio_obj .cfg = & sdio_config ;
772+ sdio_obj .dma .handle_rx .Instance = sdio_config .dma_tx .Instance ;
773+ sdio_obj .dma .handle_rx .Init .Request = sdio_config .dma_tx .request ;
774+ sdio_obj .dma .handle_rx .Init .Direction = DMA_PERIPH_TO_MEMORY ;
775+ sdio_obj .dma .handle_rx .Init .PeriphInc = DMA_PINC_DISABLE ;
776+ sdio_obj .dma .handle_rx .Init .MemInc = DMA_MINC_ENABLE ;
777+ sdio_obj .dma .handle_rx .Init .PeriphDataAlignment = DMA_PDATAALIGN_WORD ;
778+ sdio_obj .dma .handle_rx .Init .MemDataAlignment = DMA_MDATAALIGN_WORD ;
779+ sdio_obj .dma .handle_rx .Init .Mode = DMA_NORMAL ;
780+ sdio_obj .dma .handle_rx .Init .Priority = DMA_PRIORITY_LOW ;
781+
782+ HAL_DMA_DeInit (& sdio_obj .dma .handle_rx );
783+ HAL_DMA_Init (& sdio_obj .dma .handle_rx );
784+
785+ HAL_DMA_Start (& sdio_obj .dma .handle_rx , (uint32_t )src , (uint32_t )dst , BufferSize );
751786#else
752787 sdio_obj .cfg = & sdio_config ;
753- sdio_obj .dma .handle_tx .Instance = sdio_config .dma_tx .Instance ;
754- sdio_obj .dma .handle_tx .Init .Channel = sdio_config .dma_tx .channel ;
755- sdio_obj .dma .handle_tx .Init .Direction = DMA_PERIPH_TO_MEMORY ;
756- sdio_obj .dma .handle_tx .Init .PeriphInc = DMA_PINC_DISABLE ;
757- sdio_obj .dma .handle_tx .Init .MemInc = DMA_MINC_ENABLE ;
758- sdio_obj .dma .handle_tx .Init .PeriphDataAlignment = DMA_PDATAALIGN_WORD ;
759- sdio_obj .dma .handle_tx .Init .MemDataAlignment = DMA_MDATAALIGN_WORD ;
760- sdio_obj .dma .handle_tx .Init .Mode = DMA_PFCTRL ;
761- sdio_obj .dma .handle_tx .Init .Priority = DMA_PRIORITY_MEDIUM ;
762- sdio_obj .dma .handle_tx .Init .FIFOMode = DMA_FIFOMODE_ENABLE ;
763- sdio_obj .dma .handle_tx .Init .FIFOThreshold = DMA_FIFO_THRESHOLD_FULL ;
764- sdio_obj .dma .handle_tx .Init .MemBurst = DMA_MBURST_INC4 ;
765- sdio_obj .dma .handle_tx .Init .PeriphBurst = DMA_PBURST_INC4 ;
766-
767- HAL_DMA_DeInit (& sdio_obj .dma .handle_tx );
768- HAL_DMA_Init (& sdio_obj .dma .handle_tx );
769-
770- HAL_DMA_Start (& sdio_obj .dma .handle_tx , (uint32_t )src , (uint32_t )dst , BufferSize );
788+ sdio_obj .dma .handle_rx .Instance = sdio_config .dma_tx .Instance ;
789+ sdio_obj .dma .handle_rx .Init .Channel = sdio_config .dma_tx .channel ;
790+ sdio_obj .dma .handle_rx .Init .Direction = DMA_PERIPH_TO_MEMORY ;
791+ sdio_obj .dma .handle_rx .Init .PeriphInc = DMA_PINC_DISABLE ;
792+ sdio_obj .dma .handle_rx .Init .MemInc = DMA_MINC_ENABLE ;
793+ sdio_obj .dma .handle_rx .Init .PeriphDataAlignment = DMA_PDATAALIGN_WORD ;
794+ sdio_obj .dma .handle_rx .Init .MemDataAlignment = DMA_MDATAALIGN_WORD ;
795+ sdio_obj .dma .handle_rx .Init .Mode = DMA_PFCTRL ;
796+ sdio_obj .dma .handle_rx .Init .Priority = DMA_PRIORITY_MEDIUM ;
797+ sdio_obj .dma .handle_rx .Init .FIFOMode = DMA_FIFOMODE_ENABLE ;
798+ sdio_obj .dma .handle_rx .Init .FIFOThreshold = DMA_FIFO_THRESHOLD_FULL ;
799+ sdio_obj .dma .handle_rx .Init .MemBurst = DMA_MBURST_INC4 ;
800+ sdio_obj .dma .handle_rx .Init .PeriphBurst = DMA_PBURST_INC4 ;
801+
802+ HAL_DMA_DeInit (& sdio_obj .dma .handle_rx );
803+ HAL_DMA_Init (& sdio_obj .dma .handle_rx );
804+
805+ HAL_DMA_Start (& sdio_obj .dma .handle_rx , (uint32_t )src , (uint32_t )dst , BufferSize );
771806#endif
772807
773808}
0 commit comments