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

  Рет қаралды 24,949

Vladimir Medintsev

Vladimir Medintsev

Күн бұрын

Пікірлер: 72
@grinvich2304
@grinvich2304 8 ай бұрын
когда сам смотришь даташиты и код - это белиберда непонятная. Смотрю здесь видео, складываются ощущения будто бы я это знаю. У вас талант объяснять.
@motoday3580
@motoday3580 5 жыл бұрын
Отличный урок , пожелания : работа с adc (во всех режимах), usb custom hid (прием и передача), подключение vga камеры (не по usb) .. Спасибо больше за Ваш труд.
@Ironziz
@Ironziz 5 жыл бұрын
Хороший урок , толковое объяснение , так держать 👍
@2222-s8x
@2222-s8x 2 жыл бұрын
Моём дисплейчике ssd1306 есть дополнительные отдельные "порты" как для CS, так и для D/C. Если кто столкнулся с тем же - на данном этапе обучения я решил раздельно запитить их низким логическим сигналом с ног микроконтроллера, не связанных с SPI. Таким образом мы без проблем передаём команды/данные лишь в 8-битности.
@korpus8481
@korpus8481 5 жыл бұрын
Хороший урок - обстоятельный. Не могли бы вы показать работу с м\сх AT45... на примере записи звука с АЦП на флэш память AT45 и последующее воспроизведение по нажатию кнопки
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Могу но не буду тратить на это время. Т.к. Про AT45 я уже рассказал, АЦП и ЦАП это отдельные и весьма обьемные видеоролики и показывать их работу на примере плеера ну никому не интересно.
@Alf_Shamuei
@Alf_Shamuei 15 сағат бұрын
Какой анализатор используете в видео?
@ivanrusev2270
@ivanrusev2270 6 ай бұрын
У меня вопрос чем отличается TI протокола и протокола MOTOROLA и какими битами устанавливаются?
@AlexAlex-vq6yg
@AlexAlex-vq6yg 2 жыл бұрын
Не могли бы вы подсказать как реализовать spi в режиме daisy-chain? к сожалению очень мало информации в интернете, как теоретической так и практической реализации этого протокола.
@AndreiRomanovGrif
@AndreiRomanovGrif 3 жыл бұрын
Владимир, добрый день! Начал разбираться с SPI и обнаружилась следующая проблема: При попытке передачи данных на линии MOSI видны импульсы передаваемых данных, но на выходе SCLK нет импульсов. Этот выход в момент начала передачи данных переходит из высокого в низкий уровень и все. После окончания передачи так и остаётся в низком уровне. Может подскажете в какую сторону копать, я уже в ступоре.
@zsony2215
@zsony2215 3 жыл бұрын
Спасибо понятные объяснения. Очень помогает. Вопрос по схемам почему у вас микрофарады mf? Обычно же uf?
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Как хочу так и пишу.
@zsony2215
@zsony2215 3 жыл бұрын
@@VladimirMedintsev это конечно верно. Но есть же стандарты. И как ваши коллеги, которые ваши схемы читают, обозначают номиналы? Я уж не говорю о начинающих которые будут искать в магазине конденсатор на 10 mf.
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Вообще не вижу тут почвы для какого-то обсуждения. Хоть словами номинал писать можно, хоть как угодно. Главное это ход мышления. А остальное ну по прошествии лет начинает выглядеть просто как юношеский максимализм.
@zsony2215
@zsony2215 3 жыл бұрын
Спасибо за ответ, хоть он мне и не совсем понятен. И еще раз спасибо за ваши видео. Мне как начинающему очень помогает.
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Всегда пожалуйста.
@ДмитроПерший
@ДмитроПерший 5 жыл бұрын
Хотя сейчас ещё раз "нырнул" в даташит дисплея и там на странице 65 указано, что данные цвета передаются всё таки двумя байтами. Но при этом указано, что биты DBI[2:0] регистра 3Ah должны быть выставлены в "101". Нужно будет проверить. Может у меня по умолчанию выставлены в "110" и передача должна быть тремя битами (для 18-ти битного цвета). Дааа... не зря опытные программисты говорят, что работать с графикой и дисплеями - это уже достаточно сложно. Наскоком разобраться не получится.
@sergatmel8242
@sergatmel8242 5 жыл бұрын
Здорово ! 👍
@ДимаДима-к1н
@ДимаДима-к1н 4 жыл бұрын
ВОТ это ПРИМЕР, так пример..... выбирай что нравится.! СПС.
@МихаилТиунов-с7д
@МихаилТиунов-с7д 2 жыл бұрын
Вопрос по эмуляции SPI. А каким образом устанавливается скорость передачи по SPI ?
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
А там же скорость любая. Нет стандарта. Сколько успеваем эмулировать столько и успеваем.
@МихаилТиунов-с7д
@МихаилТиунов-с7д 2 жыл бұрын
@@VladimirMedintsev У меня проблема вот какая. Неожиданно вылезла необходимость сделать программный SPI. Но я делаю не через HAL, а напрямую через регистр ODR. А процессор работает на 72 МГц. И скорость получилась слишком большой - управляемая микросхема не успевает, там 5 МГц максимум. И вот думаю как грамотно делать задержки.
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Ну я бы попробовал через таймер. В его обработчике менять ODR и тормозов не будет и остальной код не тормозит.
@МихаилТиунов-с7д
@МихаилТиунов-с7д 2 жыл бұрын
@@VladimirMedintsev Спасибо за дельный совет. Как раз один таймер остался
@VladimirMedintsev
@VladimirMedintsev 2 жыл бұрын
Плотно там у вас :-)
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim 2 жыл бұрын
я уже второй день ломаю голову над тем как подключить внешнюю флеш память так, что бы она была видна в менеджере ресурсов памяти в IDE.
@BarVados
@BarVados Жыл бұрын
Подскажите, по поводу HAL_SPI_TransmitReceive Вы не знаете или я не совсем понятно сформулировал вопрос? Очень часто этот метод используется для чтения регистров различных модулей напр. enc28j60, но почему не используются просто HAL_SPI_Transmit и HAL_SPI_Receive? Каков принцип работы HAL_SPI_TransmitReceive ?
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Принципе работы любой функции прекрасно становится понятен при чтении ее кода. Т.е. на полном серьезе вы можете просто сравнить код этих функций и увидеть разницу. На самом деле почему используют TransmitReceive - да из-за удобстве. Не нужно как в случае с двумя функциями тратить время на проверку блокировки интерфейса, не нужно дважды проверять готовность.
@bubuii
@bubuii 5 жыл бұрын
Качественно
@masjanja11
@masjanja11 5 жыл бұрын
Владимир, здравствуйте. Я позаимствовал вашу библиотеку и совсем немного её модифицировал, добавив возможность работы с библиотекой LL, ибо HAL и SPI вместе это лютый тормоз. Плюс добавил возможность выбора режима работы SPI. разрешите ли опубликовать её на гитхаб, конечно же с указанием первоисточника. P.S. не являюсь профессиональным программистом, программирование - это моё хоби, так что изяществом кода не блещу.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Можете публиковать где хотите в любом удобном для вас виде. Я совсем не претендую даже на указание своего имени. Для меня это совсем не важный вопрос. Так что с моей стороны нет ни возражений ни пожеланий.
@lesharom2405
@lesharom2405 4 жыл бұрын
Здравствуйте!Можно задать Вам вопрос?
@panigo63
@panigo63 5 жыл бұрын
Спасибо за уроки! Где можно посмотреть текстовую версию? Заранее благодарен.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Вот под этим видео в описании ссылка на проект - kzbin.info/www/bejne/eomWqZVrZa2Al6s
@ГеоргийКолосов-ю8р
@ГеоргийКолосов-ю8р 8 ай бұрын
Спасибо большое
@Insideus2786
@Insideus2786 5 жыл бұрын
А какие "недоработочки" для FreeRTOS Вы имеете ввиду, если это не секрет? Задержки?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Там в моей реализации библиотеки не совсем корректно прописаны timeout при ожидании записи больших обьемов данных. На момент написания библиотеки это было не принципиально, а на будущее придется переписать.
@devel-man
@devel-man 5 жыл бұрын
Подскажите пожалуйста как в DSView переключится на бинарное отображение данных из протокола?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Выбирать не 0:SPI, 1:SPI. Т.е. протокол с единичкой в начале.
@devel-man
@devel-man 5 жыл бұрын
@@VladimirMedintsev Большое спасибо!
@emmetray9703
@emmetray9703 4 жыл бұрын
Скажите пожалуйста что луще для SPI, I2C использовать CMSIS или HAL? Я спрашиваю потому что я разобрал много примеров по SPI и I2C с использованием CMSIS и везде почти одно и тоже и по мануалу STM32 все верно, НО при комуникации сразными модулями (например Gyroscope, NRF24L01) с CMSIS кодом возникают проблемы ввиде зависаний и не способность писать или читать из регистров и тд. Например сравниваю значения регистров SPI установленные HAL_ом и с значениями установленные CMSIS_ом, все идентично и отправка/прием данных вроде бы правильно, но как я сказал выше иногда зависает иногда вобше бог знает почему и что делает.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Не всегда зависания и прочие артефакты возникают по вине программного обеспечения микроконтроллера. Иногда это является следствием не качественного подключения различных внешних модулей. Иногда не совпадают частоты и прочее и прочее. Невозможно через интернет определить что у вас не так с конкретной железкой. С другой стороны если с использованием библиотеки HAL у вас все работает, а с кодом на CMSIS все сбоит я думаю косяки в коде. Что касается что лучше а что хуже... Лучше то, что работает без ошибок. По сути была взята библиотека CMSIS и обернута в абстракцию HAL. Т.к. внутри себя (если откинуть все проверки и прочее) библиотека HAL содержит CMSIS. kzbin.info/www/bejne/q4WVf6imnqh-ma8
@maskon78
@maskon78 5 жыл бұрын
А DMA не пробовали прикручивать и потом мерить скорость?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
От использования DMA скорость не изменяется. DMA снижает загрузку процессора за счет того, что выделенный блок памяти передает в интерфейс автоматично. Я в видео говорил почему не использовал DMA потребовалось бы вдвое увеличить видеопамять из-за 9 битного обмена.
@МитяЯрков-ц1п
@МитяЯрков-ц1п 4 жыл бұрын
Можете подсказать значение DF_PAGE_BITS в функции AT45DB_getPageAddrByte0, а лучше все дефайны Спасибо!
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
нет, это демонстрационный проект которому несколько лет.
@DmitriyMelnik
@DmitriyMelnik 4 жыл бұрын
Отличная работа!
@lesharom2405
@lesharom2405 4 жыл бұрын
Здравствуйте Владимир!Очень хорошее видео у вас получилось по этой теме.Извините за длинный пост,не смог выразить короче и так же точно. Скажите,я правильно понял что на всех выводах микросхемы памяти напряжение по SPI не должно превышать 3,6 вольта по даташиту микросхем? Заранее Вам большое спасибо!Прежде чем задать вам вопрос искал информацию сколько же вольт должно быть на CS MOSI MISO линиях.) Прикупил я как то себе китайский программатор на CH341A.Когда пришёл,проверил его на только чтение микросхемы из старой материнки,прошивка считалась,ну я его и положил до момента когда понадобится.И вот такой момент настал,ТВ приставка зависла на одном канале и не переключалась.Я методом исключения проверил пульт,работает,заменил инфракрасный датчик,(благо заведомо исправный с другой приставки был) не помогло. Ну естественно остался самый логичный вариант,прошивка(микросхема 25 серии).Установил я её на программатор,попытался считать,не считалось ничего.Попробовал стереть,стирание было долгим но прошло,попытался прошить,не вышло.Чип после этого вообще не стал определяться. Притом чип с той самой материнки при установке снова прочитался.Я грешил на флешку с приставки.Но потом решил померять напряжения на линиях программатора и там оказалось на CS MISO MOSI CLK линиях,везде по 4,8 вольта.И стало быть мне "повезло" и мне попался брак...(
@stalkerk750
@stalkerk750 5 жыл бұрын
А можно этот код организовать на stm32f103? На нем spi 8-16 битный режим.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Конечно можно.
@stalkerk750
@stalkerk750 5 жыл бұрын
@@VladimirMedintsev Не получилось, на stm32f103c8t6 аппаратно не поддерживает 9-битный режим SPI. (
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Ну сделайте эмуляцию какие проблемы. Там всего-то несколько строчек кода. Более того, код для этой самой эмуляции даже показан в видеоролике.
@stalkerk750
@stalkerk750 5 жыл бұрын
@@VladimirMedintsev Эмуляцию я сделал, она работает очень даже хорошо, но скорость обновления экрана страдает. А можно, сделать программно-аппаратный SPI на STM32? Сначала ножками передать один бит команды, а потом 8 бит данных аппаратно?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Пробуйте все от вас зависит. Вообще просто надо выбирать нормальный процессор. Нормальный это в моем понимании не из серии F1. Просто к этой серии у меня не любовь.
@ДмитроПерший
@ДмитроПерший 5 жыл бұрын
Спасибо. Давно ждал это видео. Как то написал комент под другим видеороликом по поводу подключения 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 и особенно автомобильную электронику.
@МихаилТиунов-с7д
@МихаилТиунов-с7д Жыл бұрын
Наблюдаю странное поведение SPI микроконтроллера STM32F103C8T6. Логического анализатора и осциллографа под рукой нет - поэтому по косвенным признакам. У меня в устройстве есть АЦП - ADS1220, которое, с нужной мне периодичностью, измеряет напряжение. Оно расположено за гальванической развязкой с общается с микроконтроллером через ISO7242. Так вот, сделав несколько десятков измерений, АЦП перестает запускаться (DRDY перестает дергаться). После перезагрузки микроконтроллера - опять всё работает нормально. Причем - перезагрузку делаю программно. С АЦП в этот вообще момент ничего не происходит т.к. , повторяю - она находится за гальванической развязкой и имеет собственное питание. Делаю вывод что "вешается" SPI микроконтроллера. Может ли такое быть ?
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Систо теоретически может быть все что угодно. Что делать? Попробовать не перезагружать МК, а передернуть SPI. Отключив/включив тактирование, переинициализировав, проверив флаги. Ну и прочитать errata
@BarVados
@BarVados Жыл бұрын
Здравствуйте! Спасибо за видео. Подскажите пожалуйста есть в hal метод HAL_TransmitReceive чем он отличается от отдельно вызванных transmit receive? Я его использую для чтения регистров ethernet адаптера w5500 . Результаты отличаются от отдельно вызванных методов, исходный код смотрел не понятно почему это написано так, как это работает... Можно ли его заменить коротким методом работающим непосредственно с регистрами stm32, и как будет выглядит этот код? Для лучшего понимания хотелось бы разобраться с этими моментами
@КинобийОбиван
@КинобийОбиван 5 жыл бұрын
+
@СергейМоскалёв-с3ь
@СергейМоскалёв-с3ь Жыл бұрын
Ох, уж эта иностранщина! Неужели нельзя по-русски было обозначить: Ведущий Вход Ведомый Выход, и для MOSI соответственно: Ведущий Выход Ведомый Вход? 🤦‍♂
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Нет, нельзя. Это не иностранщина. Инженер обязан знать английский.
@МихаилТиунов-с7д
@МихаилТиунов-с7д Жыл бұрын
Сокращеноо ВВВВ и ВВВВ ;-)
@СергейМоскалёв-с3ь
@СергейМоскалёв-с3ь Жыл бұрын
@@МихаилТиунов-с7д Ну! 😂
Лекция 307. Интерфейс SPI
16:23
Электротехника и электроника для программистов
Рет қаралды 80 М.
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
1% vs 100% #beatbox #tiktok
01:10
BeatboxJCOP
Рет қаралды 67 МЛН
STM32.ARDUINO.SPI I2C PROTOCOLS
22:36
Embedded Edu
Рет қаралды 2,7 М.
STM32 + W25Q
1:05:11
Flexo Alex
Рет қаралды 10 М.
AVR 38# Последовательный интерфейс SPI
13:04