`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Контуры IoT становятся чётче (часть первая)

+22
голоса

Пожалуй, одно из самых удачных определений прошедших двух месяцев: «IoT – это ответы на вопросы, которые ещё предстоит задать». Но в процессе становления IoT как концепции (о большем ещё недавно говорить было трудно) непрерывно формируется что-то новое и даже совершенно неожиданное, и, главное – возникают те самые вопросы, которых ждёт индустрия.

Мы не будем пока обращаться к «большим темам» (тем же серьёзным вопросам), а посмотрим на некоторые по ряду причин знаковые события в самой «массовой» подсистеме IoT – в неисчислимых «умных» датчиках и актуаторах (исполнительных механизмах). Эта область наиболее интересна, потому что в ней производители вынуждены играть в очень сложную и неприятную игру – создавать устройства и программы, адекватные одновременно и требованиям рынка, и ожидаемой колоссальной серийности. Простым языком – очень хорошее и очень дешёвое. Причём делать это надо быстро. Сочетание теоретически невозможное, но практика преподносит сюрпризы. В преамбуле ограничусь почти стандартной оговоркой – критерии выбора того, о чём будет речь, субъективны, но постараюсь обстоятельно объяснить почему сделан именно такой выбор.

Итак, буквально на днях агрессивная в больших приобретениях и очень жёсткая во внутренней производственной политике компания Microchip анонсировала очередной «микроконтроллер для IoT». Событие вроде незначительное, особенно если учесть скромную стоимость микросхемы в партиях от 5000 штук - $1.85. Сразу начинаю с этой цифры, она знаковая и устанавливает некую условную ценовую планку «менее $2», давайте её запомним. На этом незначительность и прочее скучное завершается, и начинаются сплошные неожиданности.

Машина под названием CEC1302, «ещё один микроконтроллер для IoT», весьма необычна для Microchip. Потому что основана не на MIPS-совместимом 32-битовом процессорном ядре (на базе которого Microchip много лет производит огромное и успешное семейство микроконтроллеров PIC32), а на ARM. Компания и прежде использовала IP ARM, после приобретения Atmel получила доступ к её разработкам (Atmel в своё время отказалась от собственной 32-битовой архитектуры в пользу ARM), но CEC1302 по заверениям официальных лиц Microchip, является собственным продуктом, проектирование которого началось ещё до приобретения Atmel (и это, без сомнения, соответствует действительности). Вроде малозначительная деталь, но она демонстрирует силу той «балканизации рынка», которой иногда попрекают ARM.

Но само по себе слово «ARM» в контексте множества доступных в виде IP архитектур, ни о чём не говорит. И вот первый сюрприз – микроконтроллер в ценовом диапазоне «менее $2», основанный на ядре ARM Cortex M4 с FPU (процессором вычислений с плавающей точкой), с классическим для микроконтроллерного мира гениальным бит-бендингом (об этом чуть позднее) и с исключительно мощной аппаратной поддержкой процедур отладки ПО.

Начнём с Cortex M4. Это пока самый развитый представитель архитектуры ARMv7-M, способный выполнять весь спектр разных систем команд ARM – 16-битовой архитектуры ARMv6-M, 16- и 32-битовых ARMv7-M, команд цифровой обработки сигналов (DXP extensions) и, наконец, команд вычислений с плавающей точкой.

Архитектурная модель Cortex M4, «видимая программисту», состоит из двух наборов регистров – собственно процессорного ядра и сопроцессора плавающей точки. Первый «блок» фактически общий для всех Cortex M*, начиная с «нулевой версии», второй существует только в Cortex M4 и в старших реализациях расширенной архитектуры ARMv7E-M. В первом блоке – 16 32-битовых регистров, из них – 13 общего назначения (для ознакомления достаточно знать, что они не совсем равноценны при использовании 16-битовых команд наборов Thumb, и условно разбиты на два подмножества), 3 – специальные (но фактически и программно равноценные остальным). Во втором – 32 32-битовых регистра, организованных в 16 64-битовых, и 6 регистров управления сопроцессором и отображения его состояния.

Важным отличием Cortex M4 от предшественника в архитектурном семействе ARMv7-M, Cortex M3, является поддержка DSP команд, или, точнее, SIMD (одна инструкция обрабатывает «много» данных). Эти команды довольно интересные, и «не совсем SIMD», справедливости ради. Для примера бегло рассмотрим всего одну, мнемоника которой в документации ARM имеет название «SMUAD». Она, как и многие команды с мнемониками, начинающимися с префикса SM*, задействует три операнда – регистр для размещения результатов операции и два регистра операндов (команда приведена в легальной, но максимально упрощённой форме):
SMUAD R3, R1, R2
В этой записи R3 – регистр сохранения результата, а R1 и R2 – операнды. Логику исполнения этой однотактной (вычисляющей и сохраняющей результат за один период тактовой частоты процессора) можно отобразить следующей схемой:

Контуры IoT становятся чётче (часть первая)

То есть, SMUAD трактует содержание двух 32-битовых регистров R1 и R2 как 4 16-битовых числа, перемножает эти числа попарно (каждое умножение даёт 32-битовый результат), вычисляет сумму этих результатов и записывает её в регистр R3. Всё это выполняется за один такт. Пример приведен для иллюстрации понятия «много данных» в аббревиатуре SIMD в терминах ARM – речь идёт об «упакованных» в один 32-битовый регистр или двух 16-битовых, или четырёх 8-битовых единицах данных.

SIMD (или DSP) команд у Cortex M4 немало (и есть свои ограничения для них, что требует тщательного изучения), но С-компиляторы даже таких именитых производителей, как Keil, не генерируют SIMD-код и требуют явного, фактически ассемблерного использования этих команд, приведенный выше пример команды ассемблера у Keil отображён на С-функцию

uint32_t     __SMUAD (uint32_t val1, uint32_t val2) ,

которая в сгенерированном коде будет заменена одной машинной командой. Этот пример можно использовать в качестве ответа на вопрос «зачем программисту в 2016 году ассемблер?». Увы, пока ещё никто не научился писать такие генераторы кода, которые бы всегда, во всём и для всех самых вычурных архитектур, «понимали желания» программиста. Cortex M4 (и ещё более сложный M7) показывает – не зная системы команд целевого процессора, не умея отобразить возможностями этой системы команд требуемой логики работы firmware, полноценно использовать встраиваемый вычислитель пока (а, может, и вообще) нельзя.

Для многих даже очень опытных программистов, не связанных с программированием в мире x86 на уровнях MMX и SSE, будет неожиданной поддержка базовой системой команд Cortex M4 так называемой «арифметики насыщения» (saturation arithmetic, для которой ни на одном славянском языке нет статьи в википедии). Это важная для цифровой обработки сигналов функциональность, принцип её можно описать набором простых правил: если для заданного N результат выполнения команды больше 2N-1, он заменяется значением 2N-1, если меньше -2N – заменяется значением -2N, для беззнаковых операций все отрицательные результаты заменяются на 0. Команды арифметики насыщения так же, как и SIMD, в большинстве исполняются за один такт.

Теперь пара слов о бит-бендинге. Это механизм отображения отдельных битов области памяти на адреса целых слов в ней. Что, на первый взгляд, нелогично. Но на практике очень удобно. Настолько удобно, что ARM предусмотрела такую возможность в синтезируемой IP Cortex M4, оставив выбор – включать ли эту функцию в реальное «железо», или нет, производителю. В Microchip предпочли бит-бендинг включить, и в CEC1302 все биты всех 32 KB (да, килобайтов) памяти данных отображены на 1 MB адресов слов в нереализованном пространстве адресов памяти (32*1024 32-битовых слов дают строго 1024*1024 адресов каждого бита). Это позволяет за один такт делать что угодно с любым отдельным битом памяти данных. Сугубо микроконтроллерная особенность, область памяти с возможностью адресации отдельных битов была реализована в знаменитой архитектуре i8051, в ARM идею отточили до совершенства. И, заодно, позволили избежать известной в embedded мире проблемы «RMW» (Read-Modify-Write), неатомарного изменения одного бита в слове цепочкой операций чтения-изменения-записи. Cortex M4 за счёт бит-бендинга позволяет изменять одиночный бит просто операцией записи в несуществующее слово в памяти, адрес которого соответствует этому биту.

О сопроцессоре плавающей точки ограничимся кратким – он соответствует стандарту IEEE 754, за исключением некоторых ограничений (основное – не поддерживает операции с двойной точностью, есть ещё 4 особенности, но всё это при необходимости реализуется программно).

Для завершения обзора процессорного ядра достаточно упомянуть, что в Microchip решили не усложнять конструкцию и отказались от расширенной подсистемы защиты памяти MPU (в IP ARM Cortex M4 она предусмотрена), поэтому процессорное ядро поддерживает минимальный для всей архитектуры «стандартный набор» с двумя отдельными указателями стека для быстрого переключения между непривилегированным и привилегированным режимами (эта возможность иногда, но далеко не всегда используется разработчиками ОС реального времени или планировщиков задач).

Итак, для предварительного знакомства с процессорным ядром Cortex M4, этой информации почти достаточно. Заслуживает упоминания энергоэффективность – она заявлена ARM на уровне 200 микроампер на мегагерц тактовой частоты. И, конечно, нельзя оставить вне внимания подсистему управления прерываниями. Много говорить о ней в обзорном материале смысла нет, тем более, что вся документация (и Microchip, и ARM) открыта и доступна, обращу внимание разве что на одну важную особенность гибкости IP ARM. Подсистема прерываний относится разработчиками ARM к процессорному ядру. И, как само ядро, является модульной. В Microchip решили для полного обеспечения совместимости с ARM-ориентированными инструментальными наборами сохранить оригинальный векторный контроллер прерываний NVIC (довольно сложной конструкции, требующий от программистов отличного понимания принципа работы), но дополнили его «аггрегатором прерываний» собственной разработки, который аппаратно передаёт ядру процессора сигналы исключительных ситуаций (exceptions) и отображает состояние источников прерываний значениями отдельных битов в заданной области памяти, а также обеспечивает подачу аппаратных сигналов «пробуждения» как всему микроконтроллеру, так и отдельным его узлам, при этом «пробуждение» возможно и из состояний «глубокого сна», в которых тактовая частота вообще отключена. Получившаяся новая для мира ARM (но хорошо знакомая опытным программистам по другим сугубо микроконтроллерным архитектурам) конструкция на деле очень важна. И даже в какой-то мере объясняет нацеленность этого микроконтроллера на, в том числе, создание hard real-time систем. Придётся сделать небольшое отступление, чтобы буквально в одном абзаце объяснить, почему такая малозаметная деталь важна.

Встраиваемые системы hard real-time характеризуются всего одним фундаментальным принципом – если они за время эксплуатации хоть один раз не успевают то, что должны успеть, это считается Катастрофой, потому что может привести (и приводит) к Катастрофе. Авионика (автопилоты etc), системы управления атомными электростанциями, медицинская техника, тормозные системы автомобилей – список можно продолжать долго. Разработчики встраиваемого ПО в этих областях очень не любят прерывания, потому что они нарушают детерминизм процесса исполнения программы и до невозможности усложняют, например, процедуры верификации и тестирования ПО. Механизм отображения состояния источников прерываний на состояние битов в памяти – идеально подходящий для негласно одобренного, но массово используемого в hard real-time системах, паттерна поллинга, периодического опроса состояния ресурсов. Сочетание возможностей традиционной обработки прерываний ARM Cortex M3/M4 с аппаратной поддержкой поллинга источников прерываний и с механизмами «сна» и «пробуждения» (для снижения энергопотребления) можно считать идеальным, потому что такое сочетание соответствует потребностям фактически любых разработчиков – как использующих RTOS (ОС реального времени), так и крайне требовательных к детерминизму или к энергопотреблению. Это очень важная деталь, заслуживающая внимания.

Теперь взглянем на подсистему памяти. Она в CEC1302 также необычна и тоже достойна внимания. В отличие от большинства микроконтроллеров, CEC1302 не имеет флэш-памяти программ. И память данных, и память программ – SRAM, статическое ОЗУ. Такое необычное для микроконтроллеров решение имеет простое объяснение – конструкторы Microchip не хотели вводить такты ожидания сравнительно медленной (по сравнению со SRAM – очень медленной) флэш-памяти, особенно в очень насыщенной периферией машине, ориентированной на максимальное использование DMA (контроллера прямого доступа к памяти). Более того, две области SRAM с раздельными шинами (всё-таки ARM - гарвардской архитектуры) позволяют выполнять одновременные операции, например, чтения кода команды в одной области и чтения/записи данных – в другой, без дополнительных тактов ожидания. И, раз это ARM, то код можно исполнять и из памяти данных (есть у гарвардских ARM такая фон-неймановская особенность). А также модифицировать память программ. В случаях, когда ядро процессора работает только с одной из областей памяти, аппаратный арбитр автоматически вводит необходимый дополнительный машинный такт для характерной RISC-последовательности действий «чтение-запись». Расплатой же за быстродействие и удобства (в первую очередь – для отладки, но пригодится и любителям экстремального программирования систем с самомодифицируемым кодом) являются небольшие объёмы памяти. Для данных доступны 32 KB, для кода – 96 KB. На практике это очень немало, а в случае CEC1302 с его оснащением – и вовсе много (дальше будет понятно, почему). Код программы загружается при системном сбросе из внешней энергонезависимой памяти с последовательным доступом (SPI), при этом во внешней памяти код хранится RSA-2048 зашифрованным с сигнатурой SHA-256, что фактически исключает его злоумышленную подмену или модификацию, а также защищает систему от сбоев внешней памяти. Естественно, для хранения ключа аутентификации и дешифрации кода программы в CEC1302 предусмотрена энергонезависимая память, она же хранит и загрузчик объёмом до 8 KB, причём после автоматической (по сбросу микроконтроллера) загрузки загрузчика (извините) в SRAM и его исполнения, занимаемую им память программист может свободно использовать. И здесь конструкторы Microchip предусмотрели забавный и полезный механизм – код загрузчика исполняется из SRAM данных, а после загрузки им кода программы из внешнего накопителя в память команд, управление передаётся в неё, и процессор начинает свою нормальную работу с одновременным доступом к двум областям памяти без лишних тактов ожидания.

Оставим классическое микроконтроллерное на потом, и заглянем в те подсистемы, благодаря которым CEC1302 назван «микроконтроллером для IoT». Они, в том числе, объясняют, почему 96 KB кода в этом встраиваемом вычислителе – очень немало. Речь идёт об аппаратных подсистемах пресловутой «безопасности», которую всегда упоминают в контексте IoT. Хорошо, что в CEC1302 они совершенно конкретны.

Во-первых, здесь используется физический генератор потока «по-настоящему случайных» битов с FIFO-буфером глубиной 1 килобит.

Во-вторых, полностью аппаратно реализованы сразу три криптографических машины, освобождающие ядро процессора от потребности в интенсивных (и объёмных, мы же говорим о килобайтах памяти) вычислений.

Машина AES-криптографии поддерживает следующие режимы шифрования – простой замены или кодовой книги (ECB), сцепления блоков шифротекста (CBC), счётчика (CTR) и обратной связи по выходу (OFB) с ключами длиной 128, 192 и 256 битов.

Машина криптографических хэш-функций реализует вычисление SHA-1 и SHA-256.

Эти две машины отображают свои данные на области памяти данных, и между ними возможен быстрый обмен с помощью контроллера прямого доступа к памяти (DMA).

И, наконец, третья машина – криптосистемы с открытым ключом. Это аппаратная реализация алгоритмов RSA и эллиптической криптографии с длиной ключей для RSA – от 512 до 2048 битов, для эллиптической криптографии – до 256 битов.

В Microchip заявляют максимальное 100-кратное увеличение производительности всей криптографической подсистемы за счёт аппаратной реализации вычислителей, что означает, в том числе, и снижение требований к источнику питания (просто потому что криптографической подсистеме нужно меньше времени для работы), и существенное упрощение программирования систем реального времени – хотя бы потому, что ресурсоёмкие и очень долгие в терминах процессорного времени процедуры исполняются независимыми от CPU вычислителями. И, конечно, всё это означает существенную экономию памяти. Например, профессионально написанная на ассемблере реализация основной функциональности ПО эллиптической криптографии требует 4,3 KB памяти программ и 404 байта памяти данных процессорного ядра Cortex M0. Это уже цифры на фоне доступных 96 KB и 32 KB. Но такой уровень программирования – чрезвычайно высокий и очень дорогой, в обычных проектах программисты используют С и С++ компиляторы, и цифры становятся, мягко говоря, «немного больше».

Теперь настало время «обычной микроконтроллерной» периферии. Microchip изменила бы своей традиции, если бы не реализовала в CEC1302 чуть ли не всё, что может понадобиться для разных IoT-приложений.

Надо управлять светодиодами для отображения информации? Есть отдельные четыре аппаратных канала PWM (широтно-импульсной модуляции), специально спроектированные для управления яркостью и режимом мигания светодиодов, включая востребованный потребителями (в документации именно так написано) режим «breathing» – пульсирующее между двумя уровнями яркости свечение. Причём настройки режима breathing, например, позволяют задавать закон изменения яркости – хоть линейный, хоть нелинейный. И процессор фактически полностью освобождён от этих задач.

Надо управлять LED-освещением? Есть ещё 4 16-битовых независимых канала PWM, позволяющие формировать частоту до 30 KHz. Эти же каналы можно использовать для управления двигателями. И не просто для управления – в Microchip реализовали отдельную подсистему мониторинга сигналов от тахометрических датчиков и ещё одну подсистему – аппаратный настраиваемый PID-регулятор, позволяющий замкнуть контуры регулирования двигателей и управлять частотой их оборотов с точностью 3% в диапазоне от 500 до 16000 RPM (оборотов в минуту). Для этого тоже нужно минимальное участие CPU.

Если IoT-устройству нужна клавиатура – пожалуйста, в списке периферии есть контроллер клавиатурной матрицы с максимальным форматом 18x8. И он тоже «практически всё делает сам», CPU ему почти не нужен.

Часы реального времени? Они есть. Совершенно независимые от CPU, классической конструкции (со всеми счётчиками – секунд, минут, часов, дня недели, дня месяца, месяцев, лет), с настраиваемыми периодическими «будильниками», для «пробуждения» системы, например, в нужные дни недели. И, конечно, почти не потребляющие энергии.

Аналогово-цифровой преобразователь (ADC)? Тоже есть. Без излишеств, скромный 10-битовый, но довольно быстрый, с коммутируемыми пятью входами, и, конечно, со встроенным источником опорного напряжения. Опять же, традиционно для Microchip, программист освобождён от таких мелочей, как программная реализация периодических измерений – ADC это «умеет», в комбинации с управлением коммутаторов входов.

Универсальные дискретные входы-выходы? Какие угодно, много, с генерацией прерываний при всех возможных изменениях, с программно задаваемым типом выхода (пушпульный или открытый коллектор) и даже с программно настраиваемой нагрузочной способностью (от 2 до 12 мА).

Набор таймеров лучше всего описать фразой «практически какие нужны и возможны». Таймер, ориентированный на формирование «системных тиков» для ОС реального времени, таймер «гибернации», с максимальным периодом почти 2 часа – для вывода микроконтроллера из состояния сверхнизкого энергопотребления, «вочдог» (таймер для защиты от «зависаний» и зацикливания кода), два «взрослых» 32-битовых таймера «на всякий случай».

Несмотря на такую редкую насыщенность встроенной периферией, коммуникационные возможности CEC1302 очень серьёзны, но почти ограничиваются интерфейсами уровня печатной платы. Четыре независимых хост-контроллера шины I2C/SMBus, два интерфейса с внешней SPI-памятью, универсальный последовательный интерфейс. Без дополнительных микросхем CEC1302 может общаться с «внешним миром» разве что посредством традиционного интегрированного UART.

О возможностях аппаратно-программной отладки, реализованных в CEC1302 пришлось бы написать ещё несколько страниц, только для объяснения аббревиатур. Потому обойдёмся лаконичным – они действительно очень хороши.

Для серийных производителей реализован механизм «XOR цепочки», позволяющий удостовериться в том, что все выводы припаяны к плате (в этом режиме выводы отключаются от внутренней логики микроконтроллера и подключаются к несложной встроенной тестовой подсистеме), такое тестирование нужно хотя бы потому, что CEC1302 выпускается в 144-выводном корпусе WFBGA размером всего 9x9 мм, и никакой производственный процесс не идеален.

Можно подвести какие-то итоги. IoT hype безусловно был и есть. Но вот мы видим доступную фактически любому желающему (розничная цена меньше $3) машину, порождённую этим hype. 32-битовую, с SIMD-командами и сопроцессором вычислений с плавающей точкой, с очень интересной системой памяти, мощной аппаратной поддержкой криптозащиты, напичканную периферией чуть ли не на все случаи жизни. Это уже не совсем «классический микроконтроллер», слишком много у него ярких отличий и особенностей. Это, пожалуй, «настоящая машина IoT». С учётом невероятной для такого «звездолёта» цены – очевидная заявка на своё достойное место в IoT-мире.

Можно считать появление такой интересной микросхемы событием – её проектирование явно длилось долго, и стоило очень недёшево. То есть, производители уже «играют в IoT» серьёзно, причём именно в той области, где игра опасная и трудная – в области массовых «копеечных» вычислителей с достаточными параметрами и с высоким соответствием специфике решаемых задач.

 

Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365

+22
голоса

Напечатать Отправить другу

Читайте также

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT