Интерфейс SPI на примере STM32. Подключение периферии - экрана и памяти.

Sdílet
Vložit
  • čas přidán 10. 03. 2019
  • Рассказывается о том, как работает интерфейс SPI и об особенностях его реализации применительно к процессору STM32. Показывается как управлять экранами Nokia 1202.
    ------------------------------------------
    Поддержать автора канала можно перейдя по ссылке:
    yoomoney.ru/to/4100116547550395
    Или просто отправив перевод на Yandex.кошелек:
    4100116547550395
    А также переводом по номеру карты Сбер:
    4279-3000-1033-0561
    ------------------------------------------
  • Věda a technologie

Komentáře • 71

  • @motoday3580
    @motoday3580 Před 5 lety +3

    Отличный урок , пожелания : работа с adc (во всех режимах), usb custom hid (прием и передача), подключение vga камеры (не по usb) .. Спасибо больше за Ваш труд.

  • @Ironziz
    @Ironziz Před 5 lety +2

    Хороший урок , толковое объяснение , так держать 👍

  • @grinvich2304
    @grinvich2304 Před 3 měsíci

    когда сам смотришь даташиты и код - это белиберда непонятная. Смотрю здесь видео, складываются ощущения будто бы я это знаю. У вас талант объяснять.

  • @DmitriyMelnik
    @DmitriyMelnik Před 3 lety

    Отличная работа!

  • @sergatmel8242
    @sergatmel8242 Před 5 lety +1

    Здорово ! 👍

  • @bubuii
    @bubuii Před 5 lety +1

    Качественно

  • @user-vi7wj2nz4b
    @user-vi7wj2nz4b Před 4 měsíci

    Спасибо большое

  • @korpus8481
    @korpus8481 Před 5 lety +3

    Хороший урок - обстоятельный. Не могли бы вы показать работу с м\сх AT45... на примере
    записи звука с АЦП на флэш память AT45 и последующее воспроизведение по нажатию кнопки

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety

      Могу но не буду тратить на это время. Т.к. Про AT45 я уже рассказал, АЦП и ЦАП это отдельные и весьма обьемные видеоролики и показывать их работу на примере плеера ну никому не интересно.

  • @user-gn5uw7ou8y
    @user-gn5uw7ou8y Před 2 lety +1

    Моём дисплейчике ssd1306 есть дополнительные отдельные "порты" как для CS, так и для D/C. Если кто столкнулся с тем же - на данном этапе обучения я решил раздельно запитить их низким логическим сигналом с ног микроконтроллера, не связанных с SPI. Таким образом мы без проблем передаём команды/данные лишь в 8-битности.

  • @user-qe2ii8hv8k
    @user-qe2ii8hv8k Před 4 lety

    ВОТ это ПРИМЕР, так пример..... выбирай что нравится.! СПС.

  • @lesharom2405
    @lesharom2405 Před 3 lety

    Здравствуйте Владимир!Очень хорошее видео у вас получилось по этой теме.Извините за длинный пост,не смог выразить короче и так же точно.
    Скажите,я правильно понял что на всех выводах микросхемы памяти напряжение по SPI не должно превышать 3,6 вольта по даташиту микросхем?
    Заранее Вам большое спасибо!Прежде чем задать вам вопрос искал информацию сколько же вольт должно быть на CS MOSI MISO линиях.)
    Прикупил я как то себе китайский программатор на CH341A.Когда пришёл,проверил его на только чтение микросхемы из старой материнки,прошивка считалась,ну я его и положил до момента когда понадобится.И вот такой момент настал,ТВ приставка зависла на одном канале и не переключалась.Я методом исключения проверил пульт,работает,заменил инфракрасный датчик,(благо заведомо исправный с другой приставки был) не помогло.
    Ну естественно остался самый логичный вариант,прошивка(микросхема 25 серии).Установил я её на программатор,попытался считать,не считалось ничего.Попробовал стереть,стирание было долгим но прошло,попытался прошить,не вышло.Чип после этого вообще не стал определяться.
    Притом чип с той самой материнки при установке снова прочитался.Я грешил на флешку с приставки.Но потом решил померять напряжения на линиях программатора и там оказалось на CS MISO MOSI CLK линиях,везде по 4,8 вольта.И стало быть мне "повезло" и мне попался брак...(

  • @user-gh4tc2wo5k
    @user-gh4tc2wo5k Před 5 lety

    Спасибо. Давно ждал это видео. Как то написал комент под другим видеороликом по поводу подключения ILI9341 к плате Discovery 4. Были проблемы и артефакты. Я не учёл, что интерфейс SPI в ILI9341 является 9-ти битным. А я отправлял с Discovery 4 по SPI 8-ми битный массив данных 16-битных цветов 8+8 бит. И таким образом происходила потеря старших битов во втором байте. Т.е., что бы передать данные 16-ти битного цвета для точки, мне нужно передать в два раза больше данных? На примере закраски точки белым цветом: uint8_t SPI_Data [4] = {0x00, 0xFF, 0x00, 0xFF}; Я правильно понял?
    В инете полно примеров по передаче данных на этот дисплей по параллельной 8-ми битной шине. По SPI только базовые примеры, которые описывают рисование геометрических фигур и закраска одним цветом. Кстати, это всё у меня получилось повторить. Но как только начал ваять свой проект, так и не смог разобраться.. Ещё раз спасибо за видео по СТМ32 и особенно автомобильную электронику.

  • @AlexAlex-vq6yg
    @AlexAlex-vq6yg Před 2 lety +1

    Не могли бы вы подсказать как реализовать spi в режиме daisy-chain? к сожалению очень мало информации в интернете, как теоретической так и практической реализации этого протокола.

  • @zsony2215
    @zsony2215 Před 3 lety +2

    Спасибо понятные объяснения. Очень помогает. Вопрос по схемам почему у вас микрофарады mf? Обычно же uf?

    • @VladimirMedintsev
      @VladimirMedintsev  Před 3 lety +2

      Как хочу так и пишу.

    • @zsony2215
      @zsony2215 Před 3 lety +3

      @@VladimirMedintsev это конечно верно. Но есть же стандарты. И как ваши коллеги, которые ваши схемы читают, обозначают номиналы?
      Я уж не говорю о начинающих которые будут искать в магазине конденсатор на 10 mf.

    • @VladimirMedintsev
      @VladimirMedintsev  Před 3 lety +1

      Вообще не вижу тут почвы для какого-то обсуждения. Хоть словами номинал писать можно, хоть как угодно. Главное это ход мышления. А остальное ну по прошествии лет начинает выглядеть просто как юношеский максимализм.

    • @zsony2215
      @zsony2215 Před 3 lety

      Спасибо за ответ, хоть он мне и не совсем понятен. И еще раз спасибо за ваши видео. Мне как начинающему очень помогает.

    • @VladimirMedintsev
      @VladimirMedintsev  Před 3 lety +1

      Всегда пожалуйста.

  • @AndreiRomanovGrif
    @AndreiRomanovGrif Před 2 lety +1

    Владимир, добрый день! Начал разбираться с SPI и обнаружилась следующая проблема: При попытке передачи данных на линии MOSI видны импульсы передаваемых данных, но на выходе SCLK нет импульсов. Этот выход в момент начала передачи данных переходит из высокого в низкий уровень и все. После окончания передачи так и остаётся в низком уровне. Может подскажете в какую сторону копать, я уже в ступоре.

  • @panigo63
    @panigo63 Před 5 lety

    Спасибо за уроки! Где можно посмотреть текстовую версию? Заранее благодарен.

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety

      Вот под этим видео в описании ссылка на проект - czcams.com/video/DX3xb50HMaI/video.html

  • @user-gh4tc2wo5k
    @user-gh4tc2wo5k Před 5 lety

    Хотя сейчас ещё раз "нырнул" в даташит дисплея и там на странице 65 указано, что данные цвета передаются всё таки двумя байтами. Но при этом указано, что биты DBI[2:0] регистра 3Ah должны быть выставлены в "101". Нужно будет проверить. Может у меня по умолчанию выставлены в "110" и передача должна быть тремя битами (для 18-ти битного цвета). Дааа... не зря опытные программисты говорят, что работать с графикой и дисплеями - это уже достаточно сложно. Наскоком разобраться не получится.

  • @masjanja11
    @masjanja11 Před 5 lety +1

    Владимир, здравствуйте. Я позаимствовал вашу библиотеку и совсем немного её модифицировал, добавив возможность работы с библиотекой LL, ибо HAL и SPI вместе это лютый тормоз. Плюс добавил возможность выбора режима работы SPI. разрешите ли опубликовать её на гитхаб, конечно же с указанием первоисточника.
    P.S. не являюсь профессиональным программистом, программирование - это моё хоби, так что изяществом кода не блещу.

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety +1

      Можете публиковать где хотите в любом удобном для вас виде. Я совсем не претендую даже на указание своего имени. Для меня это совсем не важный вопрос. Так что с моей стороны нет ни возражений ни пожеланий.

    • @lesharom2405
      @lesharom2405 Před 3 lety

      Здравствуйте!Можно задать Вам вопрос?

  • @tupoy_ytub_uberi_psevdonim

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

  • @emmetray9703
    @emmetray9703 Před 4 lety

    Скажите пожалуйста что луще для SPI, I2C использовать CMSIS или HAL? Я спрашиваю потому что я разобрал много примеров по SPI и I2C с использованием CMSIS и везде почти одно и тоже и по мануалу STM32 все верно, НО при комуникации сразными модулями (например Gyroscope, NRF24L01) с CMSIS кодом возникают проблемы ввиде зависаний и не способность писать или читать из регистров и тд.
    Например сравниваю значения регистров SPI установленные HAL_ом и с значениями установленные CMSIS_ом, все идентично и отправка/прием данных вроде бы правильно, но как я сказал выше иногда зависает иногда вобше бог знает почему и что делает.

    • @VladimirMedintsev
      @VladimirMedintsev  Před 4 lety

      Не всегда зависания и прочие артефакты возникают по вине программного обеспечения микроконтроллера. Иногда это является следствием не качественного подключения различных внешних модулей. Иногда не совпадают частоты и прочее и прочее. Невозможно через интернет определить что у вас не так с конкретной железкой. С другой стороны если с использованием библиотеки HAL у вас все работает, а с кодом на CMSIS все сбоит я думаю косяки в коде. Что касается что лучше а что хуже... Лучше то, что работает без ошибок. По сути была взята библиотека CMSIS и обернута в абстракцию HAL. Т.к. внутри себя (если откинуть все проверки и прочее) библиотека HAL содержит CMSIS. czcams.com/video/uT2NupiCKcM/video.html

  • @BarVados
    @BarVados Před 11 měsíci

    Подскажите, по поводу HAL_SPI_TransmitReceive Вы не знаете или я не совсем понятно сформулировал вопрос?
    Очень часто этот метод используется для чтения регистров различных модулей напр. enc28j60, но почему не используются просто HAL_SPI_Transmit и HAL_SPI_Receive?
    Каков принцип работы HAL_SPI_TransmitReceive ?

    • @VladimirMedintsev
      @VladimirMedintsev  Před 11 měsíci +1

      Принципе работы любой функции прекрасно становится понятен при чтении ее кода. Т.е. на полном серьезе вы можете просто сравнить код этих функций и увидеть разницу.
      На самом деле почему используют TransmitReceive - да из-за удобстве. Не нужно как в случае с двумя функциями тратить время на проверку блокировки интерфейса, не нужно дважды проверять готовность.

  • @Insideus2786
    @Insideus2786 Před 5 lety

    А какие "недоработочки" для FreeRTOS Вы имеете ввиду, если это не секрет? Задержки?

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety

      Там в моей реализации библиотеки не совсем корректно прописаны timeout при ожидании записи больших обьемов данных. На момент написания библиотеки это было не принципиально, а на будущее придется переписать.

  • @ivanrusev2270
    @ivanrusev2270 Před měsícem

    У меня вопрос чем отличается TI протокола и протокола MOTOROLA и какими битами устанавливаются?

  • @devel-man
    @devel-man Před 4 lety

    Подскажите пожалуйста как в DSView переключится на бинарное отображение данных из протокола?

    • @VladimirMedintsev
      @VladimirMedintsev  Před 4 lety +1

      Выбирать не 0:SPI, 1:SPI. Т.е. протокол с единичкой в начале.

    • @devel-man
      @devel-man Před 4 lety

      @@VladimirMedintsev Большое спасибо!

  • @maskon78
    @maskon78 Před 5 lety

    А DMA не пробовали прикручивать и потом мерить скорость?

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety

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

  • @user-hy3dd3yt2e
    @user-hy3dd3yt2e Před 5 lety

    +

  • @user-yv3hu3tb2o
    @user-yv3hu3tb2o Před 3 lety

    Можете подсказать значение DF_PAGE_BITS в функции AT45DB_getPageAddrByte0, а лучше все дефайны Спасибо!

    • @VladimirMedintsev
      @VladimirMedintsev  Před 3 lety +1

      нет, это демонстрационный проект которому несколько лет.

  • @user-je8oz6lh6w
    @user-je8oz6lh6w Před 2 lety +1

    Вопрос по эмуляции SPI. А каким образом устанавливается скорость передачи по SPI ?

    • @VladimirMedintsev
      @VladimirMedintsev  Před 2 lety +1

      А там же скорость любая. Нет стандарта. Сколько успеваем эмулировать столько и успеваем.

    • @user-je8oz6lh6w
      @user-je8oz6lh6w Před 2 lety +1

      @@VladimirMedintsev У меня проблема вот какая. Неожиданно вылезла необходимость сделать программный SPI. Но я делаю не через HAL, а напрямую через регистр ODR. А процессор работает на 72 МГц. И скорость получилась слишком большой - управляемая микросхема не успевает, там 5 МГц максимум. И вот думаю как грамотно делать задержки.

    • @VladimirMedintsev
      @VladimirMedintsev  Před 2 lety +1

      Ну я бы попробовал через таймер. В его обработчике менять ODR и тормозов не будет и остальной код не тормозит.

    • @user-je8oz6lh6w
      @user-je8oz6lh6w Před 2 lety +1

      @@VladimirMedintsev Спасибо за дельный совет. Как раз один таймер остался

    • @VladimirMedintsev
      @VladimirMedintsev  Před 2 lety +1

      Плотно там у вас :-)

  • @user-je8oz6lh6w
    @user-je8oz6lh6w Před rokem

    Наблюдаю странное поведение SPI микроконтроллера STM32F103C8T6. Логического анализатора и осциллографа под рукой нет - поэтому по косвенным признакам. У меня в устройстве есть АЦП - ADS1220, которое, с нужной мне периодичностью, измеряет напряжение. Оно расположено за гальванической развязкой с общается с микроконтроллером через ISO7242. Так вот, сделав несколько десятков измерений, АЦП перестает запускаться (DRDY перестает дергаться). После перезагрузки микроконтроллера - опять всё работает нормально. Причем - перезагрузку делаю программно. С АЦП в этот вообще момент ничего не происходит т.к. , повторяю - она находится за гальванической развязкой и имеет собственное питание. Делаю вывод что "вешается" SPI микроконтроллера. Может ли такое быть ?

    • @VladimirMedintsev
      @VladimirMedintsev  Před rokem

      Систо теоретически может быть все что угодно.
      Что делать? Попробовать не перезагружать МК, а передернуть SPI. Отключив/включив тактирование, переинициализировав, проверив флаги. Ну и прочитать errata

  • @stalkerk750
    @stalkerk750 Před 5 lety

    А можно этот код организовать на stm32f103? На нем spi 8-16 битный режим.

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety

      Конечно можно.

    • @stalkerk750
      @stalkerk750 Před 5 lety

      @@VladimirMedintsev Не получилось, на stm32f103c8t6 аппаратно не поддерживает 9-битный режим SPI. (

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety

      Ну сделайте эмуляцию какие проблемы. Там всего-то несколько строчек кода. Более того, код для этой самой эмуляции даже показан в видеоролике.

    • @stalkerk750
      @stalkerk750 Před 5 lety

      @@VladimirMedintsev Эмуляцию я сделал, она работает очень даже хорошо, но скорость обновления экрана страдает. А можно, сделать программно-аппаратный SPI
      на STM32? Сначала ножками передать один бит команды, а потом 8 бит данных аппаратно?

    • @VladimirMedintsev
      @VladimirMedintsev  Před 5 lety

      Пробуйте все от вас зависит. Вообще просто надо выбирать нормальный процессор. Нормальный это в моем понимании не из серии F1. Просто к этой серии у меня не любовь.

  • @BarVados
    @BarVados Před rokem

    Здравствуйте! Спасибо за видео. Подскажите пожалуйста есть в hal метод HAL_TransmitReceive чем он отличается от отдельно вызванных transmit receive? Я его использую для чтения регистров ethernet адаптера w5500 . Результаты отличаются от отдельно вызванных методов, исходный код смотрел не понятно почему это написано так, как это работает... Можно ли его заменить коротким методом работающим непосредственно с регистрами stm32, и как будет выглядит этот код? Для лучшего понимания хотелось бы разобраться с этими моментами

  • @user-tg6yo7io2y
    @user-tg6yo7io2y Před rokem

    Ох, уж эта иностранщина! Неужели нельзя по-русски было обозначить: Ведущий Вход Ведомый Выход, и для MOSI соответственно: Ведущий Выход Ведомый Вход? 🤦‍♂

    • @VladimirMedintsev
      @VladimirMedintsev  Před rokem +2

      Нет, нельзя. Это не иностранщина. Инженер обязан знать английский.

    • @user-je8oz6lh6w
      @user-je8oz6lh6w Před rokem

      Сокращеноо ВВВВ и ВВВВ ;-)

    • @user-tg6yo7io2y
      @user-tg6yo7io2y Před rokem

      @@user-je8oz6lh6w Ну! 😂