Это видео недоступно.
Сожалеем об этом.
Подключение SD к SPI с DMA STM32 без HAL: регистры, LL - код меньше, программа быстрее. STM32CubeIDE
HTML-код
- Опубликовано: 3 апр 2022
- Подключение SD к SPI с DMA STM32 без библиотеки HAL: регистры и LL - код меньше, программа быстрее. В прошлом видео подключал микро SD карту к STM32F401CCU6 по интерфейсу SPI. Драйвер позволял, в том числе, использовать DMA для обмена данными SD и STM32. Причем, реализация совмещала регистры для некоторых настроек потоков DMA и возможности высокоуровневой библиотеки HAL для включения такого обмена. В этом видео реализую тоже самое, но откажусь от HAL настолько, насколько это позволяет сама среда разработки STM32CubeIDE. Проект в этот раз будет основан на низкоуровневой библиотеке LL, ориентированной на регистры. Правда, от LL лично я буду использовать только один массив со смещениями потоков DMA, относительно базовых адресов контроллеров DMA и функцию переключающую состояние пина с высокого уровня на низкий и наоборот, которую при желании также можно заменить на пару строчек кода на регистрах.
Первая часть про SD, но с HAL: • Подключение к микрокон...
Архив проекта из этого видео: drive.google.c...
В папке проекта схема подключения модуля SD к плате разработки STM32F401CCU6.
Поддержать канал:
donate.qiwi.co...
yoomoney.ru/to...
Покупал на Алиэкспресс:
программатор ST-Link alii.pub/6fdujg
плата разработки stm32f401ccu6 alii.pub/6fdumy
плата разработки stm32f411ceu6 alii.pub/6fduop
аудио-ЦАП pcm5102a alii.pub/6fdurf
макетная плата alii.pub/6fduuq
провода для макетной платы alii.pub/6fduwo
3.2" дисплей с тачскрином ILI9341 spi alii.pub/6fdvcf
1.3" дисплей ST7789 spi alii.pub/6fdvks
модуль микро SD карты alii.pub/6fdvoh
#stm32
#программирование
#sdcard
Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb
Подключение дисплея st7789 по spi c dma на CMSIS и LL рассмотрено в видео ruclips.net/video/8tIJ16riJqo/видео.html
Подключение SD-карты по spi с dma на CMSIS и LL рассмотрено в видео ruclips.net/video/z99bLhlnukM/видео.html
Подключение кнопок на таймере с прерыванием на CMSIS и LL с устранением дребезга, автоповтором и буферов ввода (прямо как на PC 😉) рассмотрено в видео ruclips.net/video/e-w5HS75neg/видео.html
Файловый менеджер (структура и код) рассмотрен в видео ruclips.net/video/4c_PwnasQvs/видео.html
Подключение аудио-цап (audio dac) по интерфейсу i2s на CMSIS и LL рассмотрено в видео ruclips.net/video/p0IhX-XiiiQ/видео.html
К каждому из перечисленных видео есть ссылка в описании на проект для скачивания.
Поддержать канал:
donate.qiwi.com/payin/VadRov
yoomoney.ru/to/4100117522443917
Покупал на Алиэкспресс:
программатор ST-Link alii.pub/6fdujg
плата разработки stm32f401ccu6 alii.pub/6fdumy
плата разработки stm32f411ceu6 alii.pub/6fduop
аудио-ЦАП pcm5102a alii.pub/6fdurf
макетная плата alii.pub/6fduuq
провода для макетной платы alii.pub/6fduwo
3.2" дисплей с тачскрином ILI9341 spi alii.pub/6fdvcf
1.3" дисплей ST7789 spi alii.pub/6fdvks
модуль микро SD карты alii.pub/6fdvoh
Добрый день уважаемый автор, подскажите один вопрос, решил повторить ваш проект в целях обучения, и непойму, перехожу по ссылке на гитхаб и попадаю на решения для дисплея... чтото не то..
Приветствую. Этого проекта на гитхабе нет (надо будет добавить), а строчка "про гитхаб" попала случайно. Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb
@@VadRov понял спасибо. подумал вначале что пожет с картой и дисплеем есть чтото общее ;)
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 Смотрим что получилось
О... Достойный план 👍👍👍
32:25 Куда мы будем попадать при прерывании DMA - В обработчик :)
Не... я же сказал что-то вроде того, что "будем попадать, но не будем попадать", потому что соответствующие флаги сбросим. 😉
Класс! Я но в названии NO_HAL режет глаз. Я недавно делал прооект из которого выкинули QT и поначалу назвали так же _noQT, в последствии меня это всё-таки выморозило и мы придумали с группой нормальное название для модулей 😆
Да, это для видео так названо было. В других проектах без этого префикса.
Про подключение SD по SPI DMA к STM32, но на HAL: ruclips.net/video/qrJ31JwTxZs/видео.html
Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb.
Резервные явки, если явка на ютуб будет провалена:
Канал на Дзене: zen.yandex.ru/vadrov
Группа в ВК: vk.com/vadrov
спасибо, но откровенно говоря при отказе от прерываний дма и ожидания флагов окончания в цикле -теряется смысл его использования
Да, все правильно. По-моему, я в видео сказал, что прерывания потока не используем и ждать флаг будем "по месту". Насколько помню, когда делал замеры, выигрыш при использовании DMA незначительный был при размерах блоков данных, начиная с определенного. И это понятно, т.к. незначительная прибавка проявляется только тогда, когда за счет больших блоков данных нивелируются затраты на инициализацию и запуск DMA. Ну, а само DMA, естественно, быстрее пересылает данные, нежели "вручную" в цикле, когда приходится перезагружать регистры spi и ждать готовности к пересылке следующих данных.
Можно "ковырнуть" код, и, может, на досуге это сделаю, но практической ощутимой выгоды, скорее всего, не будет, т.к. скорости большой не добиться от sd карты, подключенной по spi. Карту лучше использовать с интерфейсом sdio. В 401 камне его нет, а в 411 есть. Вам лучше использовать sdio. Он гораздо быстрее. По-моему, если не вру, у меня получалось получить от sdio около 10 Мбайт/с при чтении для карты 10 класса.
Upd. Да, вспомнил, почему не стал "ковырять" код дальше. Там пришлось бы лезть в сам fatfs, и все равно в нем бы пришлось ожидать выполнения запроса DMA через статус.
@@VadRov Спасибо за развернутый ответ и толковый совет. Пониманию, что не всегда дма дает преимущество в скорости передачи. В Вашем примере скорее даже замедлит за счет разделения общей шины с ядром контроллера. Целесообразность использовать DMA появится в случае использования в проекте RTOS. Как минимум, "параллельно" передаче можно обработать другой поток. И чем больше размер пакета - больше выигрыш. Касаемо моей задачи, увы, 411 не получится использовать из за отсутствия шины CAN. Скорее даже 103). Думаю, что с задачами чтения строк из файла G кода и преобразования их в формат команд для моторов скорости SPI для чтения данных должно быть достаточно. Нужно пробовать..
@@kokotmkokot4926 , как вариант, шину CAN к 411 можно внешнюю подкинуть через spi. 🙂 Например, MCP2515 + TJA1050. Что-то около 200 р. плюсом.
Upd. Да, по поводу скорости чтения sd через spi 1 Мбайта/с Вам должно хватить c головой.
Протестировал разницу с DMA и без. Считывал в буфер 1024 байт. Через счетчик модуля DWT считал такты, за которые выполнится команда f_read(&file, buff, 1024, &l).
- 168262 такта без DMA;
- 121660 такт с DMA.
Камень 401, частота 84 МГц.
Upd. Для блока 16384 байт получил:
- 1100929 такта без DMA;
- 607811 такт с DMA.
Как бы, разница видна невооруженным взглядом. 😉
@@VadRov очень интересные результаты, осталось понять, почему ядро работает медленнее, хотя теория говорит о том, что должно работать быстрее...