Микроконтроллеры. Достоинства и недостатки

Картинки по запросу Обзорная статья про микроконтроллеры     В 1971 придумали разместить всю обвязку процессора (ОЗУ, контроллеры портов, ПЗУ и т.д.) на одном чипе. В 1980 intel уже выпускает первый микроконтроллер.Микроконтроллеры (старое красивое название — однокристалльные микро-ЭВМ) в настоящее время имеют невероятно много областей применения. От промышленной автоматики до бытовых приборов, от управления ядерными установками до детских игрушек, от секретных военных систем до переключения каналов в вашем радиоприемнике. Одним словом, проще перечислить, где они не применяются. Около 55% проданных в мире процессоров приходится на 8ми битные микроконтроллеры. Изобретение и дальнейшее развитие микроконтроллеров произвело настоящую революцию в цифровой электронике. Изменились не только схемотехника и элементная база, но и сами принципы построения систем. Значительные изменения претерпел и цикл разработки. Появились целые классы устройств, существование которых было бы невозможно без контроллеров.  Но у всякой технологии, как бы хороша она не была, всегда есть обратная сторона. Достоинства и недостатки, особенности  и ньюансы в разработке схем и софта — этому посвящен собирательный цикл данных статей собранных на просторах интернета и по следам печатных изданий. Материал, размещенный в данном разделе как всегда ориентирован на НАЧИНАЮЩИХ радиолюбителей.


Достоинства однокристалльных…

   Основное схемотехническое решение внутри контроллера. Если сравнивать схемотехнику устройств на жесткой логике и на контроллерах, то последняя намного проще. При разработке требуется только определить, из каких функциональных блоков будет состоять устройство, какими интерфейсами их объединить, и какую элементную базу выбрать. Вместо составления схемы будущего устройства из отдельных деталей теперь применяется блочное проектирование. Микроконтроллер позволяет на одном кристалле создать законченный блок, а то и несколько. Ввиду того, что главной особенностью любого микроконтроллера является ядро (определяющее набор команд для управления, систему адресации и связей) а также элементы периферии, в состав которой может входить огромное разнообразие узлов — счетчики, порты ввода-вывода, драйвера индикаторов и готовые модули для связи по стандартным протоколам SPI, UART, USART, I2C, I2S и многое другое. Реализация всех алгоритмов работы — теперь задача программы контроллера, а написание программы гораздо менее трудоемко, чем синтез цифровой схемы. С ростом сложности задач это преимущество становится все более явным. Растущий размер программного кода компенсируется его структуризацией, а также введением дополнительных уровней абстракции. Широко применяются встраиваемые ОС и стандартные библиотеки, что позволяет разделить код, работающий с аппаратурой, и код, задающий поведение и алгоритмы. Ассемблерные программы для микроконтроллеров применяются главным образом в простых схемотехнических решениях чаще всего на 8-битных (разрядных) кристаллах при размере кода от 2 до 4Кбайт. Софт большего размера желательно писать на языках СИ-подобного типа  в специализированной оболочке, предоставляемой производителем кристалла.

   Многовариантность. Разделение программной и аппаратной части позволило создать элементную базу в которой один и тот же микроконтроллер может применяться для создания множества различных устройств. Подобная унификация приводит к снижению стоимости производства и получению весьма низкой цены единицы, доступной практически каждому новичку. Экономически выгодно производить несколько десятков видов контроллеров вместо сотни разновидностей логических микросхем (и тысячи специализированных). Несколько разных по назначению устройств могут иметь одну и ту же схему, а различаться лишь программой. Наиболее ярким примером могут служить промышленные ПЛК (программируемые логические контроллеры).

   Мгновенное изменение настроек и софта при отработке схемотехники. Для того, чтобы изменить алгоритм или функционал работы схемы на жесткой логике, необходимо «ФИЗИЧЕСКИ» соединить ее элементы в другом порядке, удалить часть из них или добавить новые. Часто это можно сделать только в процессе макетирования, а когда устройство уже готово, единственный способ внести изменения — выпустить новую версию. Для микроконтроллера роль «паяльника» при изменении схемотехники играет персональный компьютер с соответствующим программным обеспечением. Микроконтроллер в этом отношении дает гораздо больше гибкости. Для внесения изменений в алгоритм работы устройства достаточно загрузить обновленную прошивку исполнительной программы. Большая часть современной электроники поддерживает возможность замены прошивки в условиях сервис-центра, а зачастую даже самим пользователем. В наши дни можно легко обновить ПО своего телефона, принтера или фотоаппарата. По мере того, как все больше устройств получают возможность доступа к сети, логично ожидать распространения механизма автообновлений, подобно тому, который применяется сегодня для компьютерных программ. Хотя в некоторых случаях подобный подход не самый лучший.

«Краеугольные и подводные камни» в однокристалльных…

За все в этом мире необходимо платить!!! Один из законов механики из раздела физики гласит — «выигрываешь в силе — проигрываешь в расстоянии». Таким образом, ничто не дается без определенных условий — некоего компромисса. Не являются исключением и микроконтроллеры.

   Надежность и отказы. Теория надежности включает в себя много различных аспектов, но в «бытовом» смысле, когда говорят о надежности техники, обычно имеют в виду устойчивость к отказам и сбоям. Отказ — это неустранимое нарушение работоспособности, как пример можно привести перегоревшую лампочку. Сбой — это нарушение, которое устраняется само по себе, или при минимальном воздействии оператора. Старый телевизор, который «чинится» ударом кулака — пример системы, работающей со сбоями.Чем из большего числа элементов состоит система, тем вероятнее возникновение отказа какого-нибудь из них. В этом отношениии интегральная схема контроллера, содержащая миллионы транзисторов, на первый взгляд проигрывает жесткой логике, где всего несколько сот транзисторов на кристалл. Однако уровень надежности в микроэлектронике сегодня достаточно высок. Все кристаллы, вызывающие подозрения, отбракованы еще на этапе производства. Более слабыми местами являются печатные платы, соединения микросхем между собой и пассивные элементы. Таким образом, по частоте отказов, вызванных внутренними причинами, микроконтроллерные схемы даже выигрывают. Проигрывают они по устойчивости к сбоям. Сбои, как правило, вызываются внешними воздействиями: температурой, электромагнитными помехами, радиацией. Особенно чувствительны контроллеры к электромагнитным воздействиям, которые вызывают зависания и самопроизвольные перезагрузки. Для обеспечения помехозащищенности микроконтроллерных схем требуются специальные меры: разделение шин питания, сторожевые таймеры, дополнительные слои металлизации на плате и т.п. Часто источником сбоев становится плохо отлаженная прошивка. Или же причина ненадежной работы лежит на стыке программной и аппаратной части. Например, многократная запись в одну и ту же ячейку flash-памяти рано или поздно приводит к исчерпанию ресурса ячейки, и данные начинают повреждаться. Микроконтроллер может обеспечить уровень надежности, необходимый для большинства задач, но только при грамотном подходе к проектированию. Об этом, кстати, стоит сказать отдельно.

    Кажущаяся простота разработки. Прежде чем заниматься разработкой электроники, необходимо накопить значительную сумму знаний. Схемотехника цифровых устройств — это довольно объемный институтский курс. Плюс желательно знать электротехнику, основы аналоговой схемотехники и дискретную математику. Одним словом, порог входа для разработки электронных схем достаточно высок. Порог входа для программирования гораздо ниже. Можно за один вечер изучить основы любого языка и научиться писать «Hello world»ы. Ясно, что между «программистом» и «хорошим программистом» лежит огромная пропасть, но легкость, с которой можно начать писать программы для контроллеров, подкупает. Точно также низок порог входа для разработки устройств на контроллерах. Сейчас полно отличных Arduino-подобных комплектов, огромный выбор периферийных модулей к ним, осталось потратить тот самый вечер на освоение IDE (среды разработки) — и можно приступать к своему первому проекту. Так почему же хороший программист встраиваемых систем — сравнительная редкость? Дело в том, что помимо непосредственно умения писать код, он должен знать все особенности своей архитектуры. Ему необходимо представлять, как работают цифровые устройства, разбираться в кодировании сигналов, знать, как поведет себя устройство в каких-либо нестандартных условиях. Программист, работающий с контроллерами, находится гораздо ближе к «железу», чем прикладной программист. К примеру, когда программируется связь через последовательный асинхронный интерфейс типа UART, у начинающих программистов на ассемблере очень часто присутствует стандартная ошибка — все необходимое для работы регистров последовательного порта сделано и информация «уходит» в компьютер, но почему-то не принимается. Дело в том что по умолчанию все порты (внешние контакты) сформированы как выходы или в состоянии высокого импеданса (типа — отключены) и поэтому входной сигнал не проходит в контроллер. Это мелочь, но из-за подобной мелочи,  разработка может остановиться на пару — тройку часов и поиск ошибки может идти совсем не там, где она существует. Получается, что легкость разработки под контроллеры — только иллюзия. Микроконтроллер гораздо чувствительнее к ошибкам программиста, чем «большие» компьютеры. Ограниченный объем памяти, требования к быстродействию «по тактам» и почти полное отсутствие «защит от дурака» требуют высокой квалификации разработчика.

    Сложные моменты в сочетании человек — машина. Для решения конечной задачи микроконтроллер почти всегда выбирается c некоторым запасом по параметрам. Иногда случается что  до 90%  ресурсов контроллера остается незадействованной. Это приводит к тому, что пользователь может добавить несколько дополнительных функций самостоятельно практически «бесплатно», дописав пару десятков строк в коде прошивки. Получается устройство, большая часть возможностей которого никогда не используется, а о второй половине из них пользователь даже не знает. Хотя иногда — может это и к лучшему… Наличие ненужных функций — лишь вершина айсберга. Казалось бы, не используется — и ладно, может когда-нибудь пригодится… Глобальной проблемой становится взаимодействие устройства и человека. Упрощенная индикация или светодиодная цветомузыка в ответ на нажатие кнопок.  Можно попытаться «втиснуть» управление всеми функциями в ограниченный набор элементов ввода-вывода. Так появляются меню с N-количеством уровней вложенности, или кнопки с десятками альтернативных действий. Подобное исполнение в наше время можно наблюдать на всех пультах охранной сигнализации (и основных и дублирующих) где набор #001#23*1234#  это не то команда постановки отдельной зоны под охрану, то ли проверка на целостность контура или…. вобщем рядом висит журнальчик на 50 вариантов комбинаций — читайте проверяйте… Второй путь — сделать интерфейс удобным для пользователя путем применения большого цветного экрана (лучше сенсорного) или добавления своей кнопки для каждой функции. Этот вариант уже лучше, но увеличиваются габариты, уменьшается время автономной работы, снижается надежность устройства. И не забываем о цене. Даже если затраты на производство возрастают незначительно, наличие «супер-пупер экрана с 5000000 цветов» позволяет без лишних угрызений совести накрутить +50…250% к конечной стоимости устройства.

   Недокументированные функции. Проанализировав схему устройства на жесткой логике, можно восстановить весь алгоритм его работы. Проделать то же самое с микроконтроллерным устройством на порядок сложнее. Прежде всего, нужно извлечь прошивку, что возможно далеко не всегда, современные контроллеры имеют неплохую защиту.  Полученный файл нужно затем дизассемблировать, деобфусцировать, и только потом проводить анализ. Какова вероятность того, что помимо основных функций, в прошивке не присутствуют какие-либо дополнительные? Это может быть отправка статистики производителю, намеренно сделанная ошибка, модуль перехвата данных, backdoor — все, что угодно. Причем «закладку» не обязательно добавлять во время разработки, можно внести изменения в прошивку любого существующего устройства. Учитывая, с какой легкостью перепрошивается большинство устройств, в ближайшем будущем следует ожидать появления новых «программно-аппаратных» вирусов и разновидностей атак.

Вернуться в библиотеку…

На главную…