реклама на сайте
подробности

 
 
> STM32F4 DMA+SDIO, на основе Cube HAL
kan35
сообщение Apr 13 2015, 14:26
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Здравствуйте все!
У кого нибудь получалось напустить SDIO на DMA в STM32? Особенно инстресует если получалось оживить его на драйвере в комплекте HAL от ST.

У меня какой то странный глюк - в счетчие ДМА перед началом транзакции считывания 512 байт в счетчике числится 128 32 битных слов, а после - остается 4 слова (не дочитывает). В итоге прерывание не случается и все остальные беды. Какого лешего эти 4 слова остаются не вычитанными???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kan35
сообщение Apr 14 2015, 06:35
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



CIRC не влияет, я отключал
А 32 битный захват данных и так включен (PSIZE=2, MSIZE = 2).
В NDTR перед началом транзакции было 0x00000080, после - 4, то есть отправилось 124 слова, кстати я в буфере вижу, что так и есть, данные из карты идут!

раньше напарывался та такой косяк, что данные были не выровнены на 4 байта, но тут все четко.
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 14 2015, 07:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(kan35 @ Apr 14 2015, 09:35) *
то есть отправилось 124 слова, кстати я в буфере вижу, что так и есть, данные из карты идут!

Т.е. последние 16 байт не укладываются в буфер?
Буфер смотрели? Данные не смещены?
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Apr 14 2015, 08:03
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Вы так и не посмотрели статус СДИО, наверняка там ошибки..
Go to the top of the page
 
+Quote Post
kan35
сообщение Apr 14 2015, 08:37
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(Dr.Alex @ Apr 14 2015, 11:03) *
Вы так и не посмотрели статус СДИО, наверняка там ошибки..

Посмотрел - ошибок нет во флагах. Скрин приложу чуть позже.
Данные 512 байт как будто пролетают все.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Apr 14 2015, 10:28
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Apr 16 2015, 14:45
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 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);


Неужели всё.... :-о :-о :-о
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 16 2015, 17:21
Сообщение #8


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Dr.Alex @ Apr 16 2015, 19:45) *
Неужели всё.... :-о :-о :-о

Если DMA_MDATAALIGN_WORD означает доступ по словам, то ещё не всё sm.gif
Гляньте вот этот топик.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 05:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016