Подключение SD к SPI с DMA STM32 без HAL: регистры, LL - код меньше, программа быстрее. STM32CubeIDE

  Рет қаралды 3,833

VadRov

VadRov

Күн бұрын

Пікірлер: 21
@VadRov
@VadRov 2 жыл бұрын
Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb Подключение дисплея st7789 по spi c dma на CMSIS и LL рассмотрено в видео kzbin.info/www/bejne/bqWse2Rsp859p9E Подключение SD-карты по spi с dma на CMSIS и LL рассмотрено в видео kzbin.info/www/bejne/sGqck3-eodOooa8 Подключение кнопок на таймере с прерыванием на CMSIS и LL с устранением дребезга, автоповтором и буферов ввода (прямо как на PC 😉) рассмотрено в видео kzbin.info/www/bejne/m17aZnuJbJqhm8k Файловый менеджер (структура и код) рассмотрен в видео kzbin.info/www/bejne/apTCgaqkltiErNU Подключение аудио-цап (audio dac) по интерфейсу i2s на CMSIS и LL рассмотрено в видео kzbin.info/www/bejne/pmGsmYtjjc6cn7M К каждому из перечисленных видео есть ссылка в описании на проект для скачивания. Поддержать канал: yoomoney.ru/to/4100117522443917 Комплектующие в видео: плата разработки stm32f401ccu6 модуль микро SD карты
@ivanivanov6559
@ivanivanov6559 Жыл бұрын
Добрый день уважаемый автор, подскажите один вопрос, решил повторить ваш проект в целях обучения, и непойму, перехожу по ссылке на гитхаб и попадаю на решения для дисплея... чтото не то..
@VadRov
@VadRov Жыл бұрын
Приветствую. Этого проекта на гитхабе нет (надо будет добавить), а строчка "про гитхаб" попала случайно. Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb
@ivanivanov6559
@ivanivanov6559 Жыл бұрын
@@VadRov понял спасибо. подумал вначале что пожет с картой и дисплеем есть чтото общее ;)
@alexshu1609
@alexshu1609 Жыл бұрын
3:10 Создаем новый проект 5:21 RCC Включаем внешний источник тактов для ST32 6:35 SYS Включает выводы для отладки 5:40 В Clock Configuration устанавливаем частоту ядра и проверку CSS 6:50 Включаем SPI в режиме Full-Duplex Master 7:50 Настраиваем SPI включаем DMA для RX и TX 11:30 Настраиваем GPIO SPI переназначение выводов 14:10 Пере обзываем выводы для SPI 17:24 Подключаем и настраиваем FatFS 18:55 Меняем HAL на LL в Project Manager 20:40 Вставляем готовый драйвер SPI в папку проекта FATFS\Target\ 22:21 Изменения в файлах FATFS для успешной работы с драйвером SPI 22:51 Изменения для diskio.c ( вставляются названия функции из драйвера SPI ) 27:00 Настройки драйвера SPI 32:25 Куда мы будем попадать при прерывании DMA - В обработчик :) 38:16 Идем в функцию main() 39:15 Какие функции использовал HAL 40:15 Монтируем логический диск f_mount(); 40:47 Что в библиотек fatfs.c 42:08 Открываем файл f_open(); 43:05 Мигание светодиодом в качестве отладки (я при отладке мигал длинная пауза между 3 коротких и закидывал инфу в CDC ) 45:45 Настройки проекта для оптимизации кода под наименьший размер и создание отдельных бинарников 47:00 Прошиваем 47:44 Смотрим что получилось
@VadRov
@VadRov Жыл бұрын
О... Достойный план 👍👍👍 32:25 Куда мы будем попадать при прерывании DMA - В обработчик :) Не... я же сказал что-то вроде того, что "будем попадать, но не будем попадать", потому что соответствующие флаги сбросим. 😉
@VadRov
@VadRov 2 жыл бұрын
Про подключение SD по SPI DMA к STM32, но на HAL: kzbin.info/www/bejne/p6OtZGSArLmrkNU Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb. Резервные явки, если явка на ютуб будет провалена: Канал на Дзене: zen.yandex.ru/vadrov Группа в ВК: vk.com/vadrov
@canisminor6128
@canisminor6128 11 ай бұрын
Класс! Я но в названии NO_HAL режет глаз. Я недавно делал прооект из которого выкинули QT и поначалу назвали так же _noQT, в последствии меня это всё-таки выморозило и мы придумали с группой нормальное название для модулей 😆
@VadRov
@VadRov 11 ай бұрын
Да, это для видео так названо было. В других проектах без этого префикса.
@kokotmkokot4926
@kokotmkokot4926 2 жыл бұрын
спасибо, но откровенно говоря при отказе от прерываний дма и ожидания флагов окончания в цикле -теряется смысл его использования
@VadRov
@VadRov 2 жыл бұрын
Да, все правильно. По-моему, я в видео сказал, что прерывания потока не используем и ждать флаг будем "по месту". Насколько помню, когда делал замеры, выигрыш при использовании DMA незначительный был при размерах блоков данных, начиная с определенного. И это понятно, т.к. незначительная прибавка проявляется только тогда, когда за счет больших блоков данных нивелируются затраты на инициализацию и запуск DMA. Ну, а само DMA, естественно, быстрее пересылает данные, нежели "вручную" в цикле, когда приходится перезагружать регистры spi и ждать готовности к пересылке следующих данных. Можно "ковырнуть" код, и, может, на досуге это сделаю, но практической ощутимой выгоды, скорее всего, не будет, т.к. скорости большой не добиться от sd карты, подключенной по spi. Карту лучше использовать с интерфейсом sdio. В 401 камне его нет, а в 411 есть. Вам лучше использовать sdio. Он гораздо быстрее. По-моему, если не вру, у меня получалось получить от sdio около 10 Мбайт/с при чтении для карты 10 класса. Upd. Да, вспомнил, почему не стал "ковырять" код дальше. Там пришлось бы лезть в сам fatfs, и все равно в нем бы пришлось ожидать выполнения запроса DMA через статус.
@kokotmkokot4926
@kokotmkokot4926 2 жыл бұрын
@@VadRov Спасибо за развернутый ответ и толковый совет. Пониманию, что не всегда дма дает преимущество в скорости передачи. В Вашем примере скорее даже замедлит за счет разделения общей шины с ядром контроллера. Целесообразность использовать DMA появится в случае использования в проекте RTOS. Как минимум, "параллельно" передаче можно обработать другой поток. И чем больше размер пакета - больше выигрыш. Касаемо моей задачи, увы, 411 не получится использовать из за отсутствия шины CAN. Скорее даже 103). Думаю, что с задачами чтения строк из файла G кода и преобразования их в формат команд для моторов скорости SPI для чтения данных должно быть достаточно. Нужно пробовать..
@VadRov
@VadRov 2 жыл бұрын
@@kokotmkokot4926 , как вариант, шину CAN к 411 можно внешнюю подкинуть через spi. 🙂 Например, MCP2515 + TJA1050. Что-то около 200 р. плюсом. Upd. Да, по поводу скорости чтения sd через spi 1 Мбайта/с Вам должно хватить c головой.
@VadRov
@VadRov 2 жыл бұрын
Протестировал разницу с DMA и без. Считывал в буфер 1024 байт. Через счетчик модуля DWT считал такты, за которые выполнится команда f_read(&file, buff, 1024, &l). - 168262 такта без DMA; - 121660 такт с DMA. Камень 401, частота 84 МГц. Upd. Для блока 16384 байт получил: - 1100929 такта без DMA; - 607811 такт с DMA. Как бы, разница видна невооруженным взглядом. 😉
@kokotmkokot4926
@kokotmkokot4926 2 жыл бұрын
@@VadRov очень интересные результаты, осталось понять, почему ядро работает медленнее, хотя теория говорит о том, что должно работать быстрее...
38 Прямой доступ к памяти (DMA)
50:32
MIR Company
Рет қаралды 1,9 М.
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
Что-что Мурсдей говорит? 💭 #симбочка #симба #мурсдей
00:19
Мясо вегана? 🧐 @Whatthefshow
01:01
История одного вокалиста
Рет қаралды 7 МЛН
Леон киллер и Оля Полякова 😹
00:42
Канал Смеха
Рет қаралды 4,7 МЛН
Лекция 307. Интерфейс SPI
16:23
Электротехника и электроника для программистов
Рет қаралды 80 М.
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН