Это видео недоступно.
Сожалеем об этом.

Подключение 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

Комментарии • 21

  • @VadRov
    @VadRov  2 года назад

    Архив проекта из этого видео: 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

    • @ivanivanov6559
      @ivanivanov6559 Год назад

      Добрый день уважаемый автор, подскажите один вопрос, решил повторить ваш проект в целях обучения, и непойму, перехожу по ссылке на гитхаб и попадаю на решения для дисплея... чтото не то..

    • @VadRov
      @VadRov  Год назад +1

      Приветствую. Этого проекта на гитхабе нет (надо будет добавить), а строчка "про гитхаб" попала случайно. Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb

    • @ivanivanov6559
      @ivanivanov6559 Год назад

      @@VadRov понял спасибо. подумал вначале что пожет с картой и дисплеем есть чтото общее ;)

  • @alexshu1609
    @alexshu1609 Год назад +2

    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 - В обработчик :)
      Не... я же сказал что-то вроде того, что "будем попадать, но не будем попадать", потому что соответствующие флаги сбросим. 😉

  • @canisminor6128
    @canisminor6128 6 месяцев назад

    Класс! Я но в названии NO_HAL режет глаз. Я недавно делал прооект из которого выкинули QT и поначалу назвали так же _noQT, в последствии меня это всё-таки выморозило и мы придумали с группой нормальное название для модулей 😆

    • @VadRov
      @VadRov  6 месяцев назад +1

      Да, это для видео так названо было. В других проектах без этого префикса.

  • @VadRov
    @VadRov  2 года назад

    Про подключение SD по SPI DMA к STM32, но на HAL: ruclips.net/video/qrJ31JwTxZs/видео.html
    Архив проекта из этого видео: drive.google.com/file/d/1xhn6UaW3njmufFFjsuel2vjLJ-VMxiBb.
    Резервные явки, если явка на ютуб будет провалена:
    Канал на Дзене: zen.yandex.ru/vadrov
    Группа в ВК: vk.com/vadrov

  • @kokotmkokot4926
    @kokotmkokot4926 Год назад

    спасибо, но откровенно говоря при отказе от прерываний дма и ожидания флагов окончания в цикле -теряется смысл его использования

    • @VadRov
      @VadRov  Год назад

      Да, все правильно. По-моему, я в видео сказал, что прерывания потока не используем и ждать флаг будем "по месту". Насколько помню, когда делал замеры, выигрыш при использовании DMA незначительный был при размерах блоков данных, начиная с определенного. И это понятно, т.к. незначительная прибавка проявляется только тогда, когда за счет больших блоков данных нивелируются затраты на инициализацию и запуск DMA. Ну, а само DMA, естественно, быстрее пересылает данные, нежели "вручную" в цикле, когда приходится перезагружать регистры spi и ждать готовности к пересылке следующих данных.
      Можно "ковырнуть" код, и, может, на досуге это сделаю, но практической ощутимой выгоды, скорее всего, не будет, т.к. скорости большой не добиться от sd карты, подключенной по spi. Карту лучше использовать с интерфейсом sdio. В 401 камне его нет, а в 411 есть. Вам лучше использовать sdio. Он гораздо быстрее. По-моему, если не вру, у меня получалось получить от sdio около 10 Мбайт/с при чтении для карты 10 класса.
      Upd. Да, вспомнил, почему не стал "ковырять" код дальше. Там пришлось бы лезть в сам fatfs, и все равно в нем бы пришлось ожидать выполнения запроса DMA через статус.

    • @kokotmkokot4926
      @kokotmkokot4926 Год назад

      @@VadRov Спасибо за развернутый ответ и толковый совет. Пониманию, что не всегда дма дает преимущество в скорости передачи. В Вашем примере скорее даже замедлит за счет разделения общей шины с ядром контроллера. Целесообразность использовать DMA появится в случае использования в проекте RTOS. Как минимум, "параллельно" передаче можно обработать другой поток. И чем больше размер пакета - больше выигрыш. Касаемо моей задачи, увы, 411 не получится использовать из за отсутствия шины CAN. Скорее даже 103). Думаю, что с задачами чтения строк из файла G кода и преобразования их в формат команд для моторов скорости SPI для чтения данных должно быть достаточно. Нужно пробовать..

    • @VadRov
      @VadRov  Год назад

      @@kokotmkokot4926 , как вариант, шину CAN к 411 можно внешнюю подкинуть через spi. 🙂 Например, MCP2515 + TJA1050. Что-то около 200 р. плюсом.
      Upd. Да, по поводу скорости чтения sd через spi 1 Мбайта/с Вам должно хватить c головой.

    • @VadRov
      @VadRov  Год назад

      Протестировал разницу с DMA и без. Считывал в буфер 1024 байт. Через счетчик модуля DWT считал такты, за которые выполнится команда f_read(&file, buff, 1024, &l).
      - 168262 такта без DMA;
      - 121660 такт с DMA.
      Камень 401, частота 84 МГц.
      Upd. Для блока 16384 байт получил:
      - 1100929 такта без DMA;
      - 607811 такт с DMA.
      Как бы, разница видна невооруженным взглядом. 😉

    • @kokotmkokot4926
      @kokotmkokot4926 Год назад

      @@VadRov очень интересные результаты, осталось понять, почему ядро работает медленнее, хотя теория говорит о том, что должно работать быстрее...