|
STM32F4 DMA+SDIO, на основе Cube HAL |
|
|
|
 |
Ответов
|
Apr 14 2015, 06:35
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
CIRC не влияет, я отключал А 32 битный захват данных и так включен (PSIZE=2, MSIZE = 2). В NDTR перед началом транзакции было 0x00000080, после - 4, то есть отправилось 124 слова, кстати я в буфере вижу, что так и есть, данные из карты идут!
раньше напарывался та такой косяк, что данные были не выровнены на 4 байта, но тут все четко.
|
|
|
|
|
Apr 14 2015, 08:37
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(Dr.Alex @ Apr 14 2015, 11:03)  Вы так и не посмотрели статус СДИО, наверняка там ошибки.. Посмотрел - ошибок нет во флагах. Скрин приложу чуть позже. Данные 512 байт как будто пролетают все.
|
|
|
|
|
Apr 14 2015, 10:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Посмотрел щас у себя, оказалось что читаю я всё-таки без ДМА, поскоку практически не читаю, а только пишу. Попробовал с ДМА, нарвался на ту же фигню. Но добавление 16-и в DLEN всё-таки меняет ситуацию, ДМА доходит до конца. Строчка в функции HAL_SD_ReadBlocks_DMA выглядит так: sdio_datainitstructure.DataLength = BlockSize * NumberOfBlocks + 16; Но в целом всё равно не работает, т.к. появляются другие проблемы. Как минимум нужно ещё поправить функцию HAL_SD_CheckReadOperation. К сож. времени нет с этим разбираться, но вообще проблему дожать необходимо, а то говно какое-то.
UPD:: Заметил, что это прокатывет если читать более одного 512-байт сектора. Хотя бы 2. Если читать 512 байт, то вместо 4 слов не дочитывает 3.
|
|
|
|
|
Apr 16 2015, 14:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Раскапывая чибиос, обнаружил похоже ЕДИНСТВЕННУЮ комбинацию настроек ДМА и ФИФО, при которой вроде бы всё работает:: Код hdma_sdio.Instance = DMA2_Stream6; hdma_sdio.Init.Channel = DMA_CHANNEL_4; hdma_sdio.Init.Direction = DMA_MEMORY_TO_PERIPH;//DMA_PERIPH_TO_MEMORY hdma_sdio.Init.PeriphInc = DMA_PINC_DISABLE; hdma_sdio.Init.MemInc = DMA_MINC_ENABLE; hdma_sdio.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_sdio.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_sdio.Init.Mode = DMA_PFCTRL; hdma_sdio.Init.Priority = DMA_PRIORITY_LOW; // Единственное что не имеет значения hdma_sdio.Init.FIFOMode = DMA_FIFOMODE_ENABLE; hdma_sdio.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; hdma_sdio.Init.MemBurst = DMA_MBURST_INC4; hdma_sdio.Init.PeriphBurst = DMA_PBURST_INC4; HAL_DMA_Init(&hdma_sdio);
__HAL_LINKDMA(hsd,hdmarx,hdma_sdio); __HAL_LINKDMA(hsd,hdmatx,hdma_sdio); Неужели всё.... :-о :-о :-о
|
|
|
|
Сообщений в этой теме
kan35 STM32F4 DMA+SDIO Apr 13 2015, 14:26 Dr.Alex ДА.
Не первый раз удивляюсь, почему этот и другие ... Apr 13 2015, 15:05 kan35 Спасибо за ответ!
У меня проблема при чтении п... Apr 13 2015, 15:41 adnega Цитата(kan35 @ Apr 13 2015, 17:26) У кого... Apr 13 2015, 15:50 kan35 У меня STM32F1 все заработало можно сказать с пол ... Apr 13 2015, 16:03 Dr.Alex Тоже не помню чтобы были проблемы с чтением (ДМА),... Apr 13 2015, 16:49  adnega Цитата(Dr.Alex @ Apr 13 2015, 19:49) Тоже... Apr 13 2015, 18:59   Dr.Alex Цитата(adnega @ Apr 13 2015, 21:59) В DMA... Apr 13 2015, 19:59    adnega Цитата(Dr.Alex @ Apr 13 2015, 22:59) HAL ... Apr 13 2015, 21:12 kan35 Убрал вариант влияния FATfs. Оставил только эти фу... Apr 14 2015, 05:52 adnega Считывать надо словами (DWORD 32-бита). В NDTR дол... Apr 14 2015, 06:00       amateur Внезапно тоже бился с недопередачей последних нес... Apr 17 2015, 16:46        Dr.Alex Если бы дело было только в этом. Я этот бит раз ст... Apr 17 2015, 17:12 kan35 действительно, в дма должен быть выставлен periphe... Apr 18 2015, 05:08 pitt SDIO+DMA FEIF error.
I didn't find any way to... Apr 29 2015, 14:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|