Рубрика «программирование микроконтроллеров» - 36

В процессе разработки электронных устройств под управлением микроконтроллеров, часто возникает задача передать какие-то данные с устройства на компьютер или наоборот. Вероятно самым простым способом является использование USB-UART переходников, которых существует великое множество, но я решил сделать свой «велосипед» и поделиться результатом с вами.

У меня стояла задача сделать для себя любимого простой, дешевый, компактный и главное гальванически развязанный преобразователь USB-UART. Основной кейс для меня — отладка через printf по uart, да да, я в курсе про SWO и иные методы, но мне удобнее работать именно с uart-ом. Наличие изоляции для меня критично, т.к. в основном мне приходится проектировать силовые преобразователи, которые могут легко спалить, например, usb порт моего ноутбука. Правда если у вас в устройствах нет высокого напряжение, то расслабляться тоже не стоит, какие-нибудь 12В так же прекрасно могут вывести из строя ваш ПК. Разумеется не стоит забывать и о помехах, гальваническая развязка частично препятствует попаданию всякой гадости в usb порт.

Как видите у развязанных преобразователей интерфейсов одни плюсы, но тут некоторые возразят: «Зачем? Все же есть на Алиэкспресс». Тут ответ простой — меня не устроили ни цена готового устройства, ни его габариты, ни качество. В итоге за пару часов я «изобрел велосипед», который удовлетворит все мои хотелки и после изготовления получилось вот так:

Простой USB-UART преобразователь с гальванической развязкой - 1

Хотите обезопасить свои usb порты и узнать зачем так много? Тогда поехали :))
Читать полностью »

Автор статьи: rakf

ChipWhisperer: атака по энергопотреблению на Магму - 1

В рамках Summer of Hack 2019 в Digital Security я разбирался с атакой по энергопотреблению и работал с ChipWhisperer.

Что это?

Анализ энергопотребления — это один из видов атак по сторонним каналам. То есть атак, использующих информацию, которая появляется в результате физической реализации системы.

Какая информация может быть полезна атакующему:

  • время выполнения криптопреобразований;
  • энергопотребление;
  • электромагнитные поля;
  • шум и т.д.

Атака по энергопотреблению считается наиболее универсальной.

Читать полностью »

Заметки обо всем. Простые и опасные источники питания - 1

О чем эта статья

В этой статье рассказано о принципах построения простейших бестрансформаторных источников питания.Тема не новая, но, как показал опыт, не всем известная и понятная. И даже, некоторым, интересная.

Прошу желающих и интересующихся читать, критиковать, уточнять и дополнять на почту shiotiny@yandex.ru или на мой сайт в раздел «Контакты».

Вступление

Не так давно один мой знакомый влез пальцами в некую схему, которую собирался починить (проводок отвалился — так что просто припаять его надо было на место). И его ударило током. Не сильно ударило, но ему хватило, чтобы удивиться: «как так — тут микроконтроллер стоит, что тут может стукнуть? Он же от 5 вольт питается!».

Его удивление быстро разъяснилось: схема оказалась с бестрансформаторным питанием и без гальванической развязки от сети.

Далее последовали вопросы уже в мою сторону. Сводились они к двум вещам: «А чё? Так можно делать?!» и «А как оно работает?».

Хотя я и не считаю себя экспертом в электронике, но делать подобные блоки питания мне приходилось. Так что пришлось взять ручку и листок и объяснить как оно работает. Благо это совсем не сложно.

Возможно, что и вам покажется интересной тема «бестрансформаторных» источников питания или, сокращённо, БИП. Кому-то для общего развития, а кому-то и для практического применения.
Читать полностью »

Все знают о спутниковых системах определения координат. Они также позволяют узнать скорость и текущее время. На основе таких систем строят серверы точного времени, о которых уже много раз здесь говорилось, и не только здесь. Точность этих систем растет, цена падает, короче, прогресс не стоит на месте. Совсем, казалось бы, недавно речь шла о миллисекундах, и вот уже микросекунды никого не удивляют. И недалек тот день, когда...

Честно говоря, этот день уже настал для меня. Не так давно попалась на глаза информация о том, что один из производителей для своих модулей обещает точность интервала выходного сигнала PPS порядка десятков наносекунд.

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

На всякий случай я посмотрел, как идут дела у других производителей подобной продукции и обнаружил примерно такие же технические характеристики. “Тенденция, однако” — пронеслась мысль в моей голове, примерно, как у Штирлица. Надо было что-то делать.

Читать полностью »

Industrial IoT — это мониторинг, диспетчеризация и автоматизация инженерных систем промышленных объектов, зданий, бизнес-объектов. Датчики разных параметров, счетчики и контроллеры собирают данные с этих объектов, например, температуру и влажность воздуха в серверной, показания счетчиков воды в многоквартирных домах, уровень углекислого газа в помещениях. Контроллеры обрабатывают эту информацию и отправляют все в «облако».

Компания Wiren Board производит контроллеры с Linux для industrial IoT. Устройства собирают данные с нефтедобывающих скважин и банковских отделений, следят за микроклиматом в серверных и супермаркетах. Контроллеры интегрируются с системами верхнего уровня партнеров компании. Системы аутентифицируют устройства — понимают, что разговаривают со своим датчиком, а не с чужим, а потом авторизуют. На этом этапе возникает проблема — контроллеров тысячи, клиентов сотни, а единой системы интеграции нет. Простые традиционные способы, например, пары логин/пароль, уязвимы к атакам и неудобны в развёртывании.

Аутентификация устройств на Linux по аппаратному ключу в системах верхнего уровня - 1

Поэтому в компании разработали аутентификацию в системах верхнего уровня по аппаратным ключам — на основе стандартной асимметричной криптографии с использованием аппаратного защищённого элемента для хранения ключей. Теперь единая система интеграции не нужна —аутентификация и авторизация защищены, и работают «из коробки». Как это удалось сделать расскажет Евгений Богер: как выбирали «крипточип», как прикручивали его к железу и к Linux, как заставили с ним дружить распространённые библиотеки и ПО. Особый упор на развёртывание: внедрение инициализации устройств на производстве, внедрение поддержки разного софта верхнего уровня, в том числе в чужого и закрытого.
Читать полностью »

(Публикация 2009 года)

image

Требуется множество микропроцессоров, обрабатывающих 100 миллионов строк кода, чтобы обеспечивать работу машины премиум-класса (2009 год). И это в скором времени станет еще сложнее.

Система авионики в F-22 Raptor, реактивном истребителе военно-воздушных сил США, состоит примерно из 1,7 миллиона строк программного кода. F-35 Joint Strike Fighter, появившийся в 2010 году, требует около 5,7 миллионов строк кода для работы бортовых систем. А новому Boeing 787 Dreamliner требуется около 6,5 миллионов строк программного кода для работы систем бортового электронного оборудования.

Впечатляет, не правда ли? Но если вы недавно купили автомобиль премиум-класса, он, вероятно, содержит около 100 миллионов строк программного кода. Так говорит Манфред Брой, профессор информатики в Техническом университете Мюнхена, ведущий эксперт по программному обеспечению в автомобилях. Все это ПО запускается на 70-100 микропроцессорных электронных блоках управления (ECU), распределенных по всему кузову вашего автомобиля.
Читать полностью »

image

Количество строк кода в современном автомобиле в 200 раз больше чем в Шаттле, в 60 раз больше, чем в истребителе F-22 Raptor, в 50 раз больше, чем в телескопе Хаббл, в 20 раз больше чем в марсоходе Curiosity, в 4 раза больше чем в истребителях пятого поколения, в 2 раза больше, чем в большом адронном коллайдере или Facebook, если распечатать весь код на бумаге, то стопка будет высотой 200 метров. (по данным на 2009-2012 год)

Данные по количеству строк кода в современном автомобиле вызвали бурные споры на Reddit. Вопросы на темы от «В каком месте эти строчки прячутся, если у микроконтроллеров ограничена память?» до «Разве количество строк кода хоть что-то значит?»

Сравнительные данные по количеству строк кода (SLOC) в различных проектах довольно интересные.
Читать полностью »

ThingJS v1.0-alpha - 1

Последние два года я разрабатывал собственную IoT платформу и сегодня готов показать ее альфа версию.

Вместе с партнером мы создаем и поддерживаем IoT устройства. Мы разобрали не один сарай с граблями в процессе этой деятельности. ThingJS родилась не столько из желания, сколько из необходимости облегчить жизнь нам, а заодно, надеюсь, и вам.

Статья будет интересна людям, которым близка тема IoT и они уже что-то делали в этой сфере. Важным замечанием будет то, что платформа должна заинтересовать (внезапно) JavaScript разработчиков, т.к. именно этот язык выбран как основа платформы. Конечно, и С/С++ разработчикам тоже будет что почитать.

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

Читать полностью »

После экспериментов над CAN шиной в автомобиле появилось дикое желание копнуть несколько глубже, в самое святая святых. Думаю, всем известен такой термин, как «чип-тюнинг», в переводе на русский это простая прошивка блоков управления (двигатель, коробка передач и т.д.). Производитель оборудования изначально закладывает в свои устройства функционал для обновления либо смены ПО микроконтроллера, но его механизм никому не раскрывается по понятным причинам, и чтобы усложнить этот процесс, сама программа, с помощью которой происходит работа с энергонезависимой памятью не хранится в прошивке, а загружается в контроллер только в момент обслуживания. Эта статья о том, как заставить микроконтроллер приборной панели выполнять чужой код имея доступ к диагностическому разъему авто.
Читать полностью »

Последнее время я сильно увлекся вопросом надежности софта для микроконтроллеров, 0xd34df00d посоветовал мне сильнодействующие препараты, но к сожалению руки пока не дошли до изучения Haskell и Ivory для микроконтроллеров, да и вообще до совершенно новых подходов к разработке ПО отличных от ООП. Я лишь начал очень медленно вкуривать функциональное программирование и формальные методы.

Все мои потуги в этих направлениях это, как было сказано в комментарии ради любви к технологиям, но есть подозрение, что сейчас никто не даст мне применять такие подходы (хотя, как говориться, поживем увидим). Уж больно специфические навыки должны быть у программиста, который все это дело будет поддерживать. Полагаю, что написав однажды программу на таком языке, моя контора будет долго искать человека, который сможет принять такой код, поэтому на практике для студентов и для работы я все еще по старинке использую С++.

Продолжу развивать тему о встроенном софте для небольших микроконтроллеров в устройствах для safety critical систем.

На этот раз попробую предложить способ работы с конкретными ножками микроконтроллера, используя обертку над регистрами, которую я описал в прошлой статье Безопасный доступ к полям регистров на С++ без ущерба эффективности (на примере CortexM)

Чтобы было общее представление того о чем я хочу рассказать, приведу небольшой кусок кода:

using Led1Pin = Pin<Port<GPIOA>, 5U, PinWriteableConfigurable> ;
using Led2Pin = Pin<Port<GPIOC>, 5U, PinWriteableConfigurable> ;
using Led3Pin = Pin<Port<GPIOC>, 8U, PinWriteable> ;
using Led4Pin = Pin<Port<GPIOC>, 9U, PinWriteable> ;
using ButtonPin = Pin<Port<GPIOC>, 10U, PinReadable> ;

//Этот вызов развернется в  2 строчки
// GPIOA::BSRR::Set(32) ; // reinterpret_cast<volataile uint32_t *>(0x40020018) = 32U 
// GPIOС::BSRR::Set(800) ; // reinterpret_cast<volataile uint32_t *>(0x40020818) = 800U 
 PinsPack<Led1Pin, Led2Pin, Led3Pin, Led4Pin>::Set() ; 

//Ошибка компиляции, вывод к которому подключена кнопка настроен только на вход
ButtonPin::Set() 

auto res = ButtonPin::Get() ; 

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js