Что такое встроенный компьютер и чем он отличается от вашего персонального компьютера?

Выше изображение Arduino UNO, пример одноплатного компьютера (SBC). Когда я показываю это своим друзьям, имеющим опыт разработки программного обеспечения, и спрашиваю их, что они об этом знают, чаще всего я получаю ответ: Извини, братан! Не разбираюсь в электронике! . В этой статье я постараюсь показать, насколько он похож на персональный компьютер, с которым знакомо большинство людей, и что разработка встроенных систем, возможно, займет всего неделю знакомства, если вы знаете, как программировать.

Во время учебы в аспирантуре я помогал нескольким сверстникам запустить этот мотор или подключить датчик к их экспериментальной установке. Все они были людьми с приличным опытом программирования и отличными аналитическими способностями. Однако я обнаружил, что провода сбивают людей с толку. Встроенные компьютеры имеют собственный набор жаргона, и иногда кривая обучения может быть сложной. Я намерен написать ниже набор информации, который я всегда считал полезным для быстрого ознакомления такого энтузиаста со встроенными технологиями. Это не всегда должно быть теоретически последовательным или даже фактически точным. Цель состоит в том, чтобы свести к минимуму время, необходимое для ознакомления со встроенными системами всем, у кого есть базовый опыт программирования, и помочь им быстро разработать этот MVP / экспериментальную установку.

Технически все они искали вычислительное оборудование и программное обеспечение, которое выполняет сбор, обработку, хранение и передачу данных как часть более крупной системы / проекта - по определению встроенной системы. Но ведь этим же и занимается компьютер, не так ли? Верно! И нам нужно то же самое, по более низкой цене, меньшего размера, меньшего энергопотребления и с МНОЖЕСТВОМ возможностей для подключения различных типов датчиков, двигателей, экранов или любых других внешних устройств. Осознайте тот факт, что он похож на персональный компьютер, с которым вы так хорошо знакомы, и приступите к работе в кратчайшие сроки.

Компоненты компьютера

Я не знаю, чему в наши дни учат детей в школах (плутон все еще планета ??), но если вы выросли в 90-х, как я, вы, вероятно, познакомились с блок-схемой компьютера, подобной этой :

Какой совершенно мусорный способ учить детей чему-либо! Но со временем, когда я стал пользователем персонального компьютера, а затем энтузиастом программирования, различные компоненты начали обретать смысл. Давайте разберемся, что происходит, когда мы пишем компьютерную программу:

  1. Информация вводится с помощью клавиатуры и мыши (устройства ввода)
  2. Мы видим, что набираем на экране, или слышим музыку через динамики, или, наконец, отображаем результат «Hello World» (устройства вывода)
  3. Мы можем сохранить нашу программу на жестком диске компьютера (вторичная память).
  4. Машина может преобразовать программу, которую мы написали, в машиночитаемый набор инструкций и запускать ее, когда мы захотим (процессор или ЦП).
  5. Компьютеру необходимо временно хранить в оперативной памяти информацию о программе «Hello World», пока она работает (основная память).

Устройства ввода и вывода можно объединить в одну категорию периферийных устройств, которые подключаются к основным компонентам компьютеров через порты или шины (например, универсальная последовательная шина или USB). Именно эти компоненты есть на одноплатном компьютере Ardunio UNO, изображенном в начале этой статьи. Он содержит микроконтроллер ATmega328P, некоторые технические характеристики которого перечислены ниже:

  1. Скорость до 16 МГц. Вероятно, ваш компьютер оснащен процессором с тактовой частотой в ГГц.
  2. 32 КБ флэш-памяти (вторичная память). На жестком диске вашего компьютера могут храниться сотни ГБ.
  3. 2 КБ SRAM (основная память) - по сравнению с несколькими ГБ на вашем ПК.
  4. Параметры для подключения периферийных устройств (устройств ввода и вывода) с использованием ШИМ, SPI, I2C, SPI, ADC и т. Д. - На вашем ПК вы должны использовать устройства ввода на USB, или периферийное устройство дисплея через HDMI.

Итак, по сути, Arduino UNO может делать все, что может наш персональный компьютер, но относительно элементарным способом (в некоторых случаях использования он лучше!). Большая часть необходимого размещена в одном чипе ATmega328P. Такой плотно интегрированный блок на одном кристалле называется микроконтроллером. Для работы микроконтроллеру требуются некоторые базовые аксессуары, такие как схема управления питанием и кристалл для синхронизации. Когда все это упаковано на одной плате, это называется одноплатным компьютером, и мы получаем полностью функциональный блок, такой как Arduino UNO.

Давайте посмотрим на еще один одноплатный компьютер Raspberry Pi, характеристики которого могут показаться немного более интересными.

С первого взгляда мы сможем отличить несколько знакомых функций этого компьютера. Мы видим 4 порта USB, один порт Ethernet для подключения кабеля LAN и аудиоразъем для подключения наушников. Кроме того, у него есть встроенные Wi-Fi и Bluetooth. Вы можете просмотреть более подробную информацию здесь, но некоторые из основных характеристик приведены ниже:

  1. Скорость: ЦП с тактовой частотой 1,5 ГГц.
  2. До 32 ГБ дополнительной памяти на SD-карте. Мы также можем подключить внешний жесткий диск к одному из USB-портов, если нам нужно.
  3. До 8 ГБ ОЗУ (основная память)
  4. Периферийные устройства (вход и выход): USB, HDMI, GPIO, порт камеры CSI, порт дисплея DSI, варианты использования SPI, I2C, UART.

Похоже на наш типичный персональный компьютер, не так ли? Он также может запускать разновидность Linux под названием Raspberry Pi OS, поэтому он во многом похож на компьютер с Linux, когда мы подключили к нему экран, клавиатуру и мышь. Все по цене 35 долларов !!

Итак, что изменилось?

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

Периферийные устройства

Возможно, в статье особо выделялись новые термины вроде SPI, UART, I2C. Думайте о них как о разных методах связи, таких как Wi-Fi или Bluetooth, некоторые из которых быстрее других, некоторые более энергоэффективны, способны поддерживать большее количество устройств и т. Д. Если мы собираемся создать встроенную систему, нам нужно проверить метод связи на любом датчике или другом устройстве, которое мы хотим использовать, а затем проверить, доступен ли такой вид связи на SBC, который мы собираемся использовать. В конце концов, вы же не стали бы пытаться подключить устройство Bluetooth к Wi-Fi, верно? Например, подключить аналоговый датчик температуры к аналого-цифровому преобразователю (ADC) на Arduino будет проще простого (как здесь), но нам нужно будет использовать дополнительное оборудование, если мы захотим использовать его с Raspberry Pi. Хотя Raspberry Pi обладает гораздо большей вычислительной мощностью, он не идеален для этого варианта использования. Точно так же, если мы хотим использовать веб-камеру USB и хотим отображать что-то на экране, который подключается с помощью HDMI, и транслировать его в онлайн-режиме с помощью Ethernet, нам лучше использовать Raspberry Pi. Выбор подходящего устройства ввода и вывода с совместимым SBC - это, пожалуй, самый важный шаг в создании вашего следующего встраиваемого прототипа.

Операционная система

Вероятно, вы используете систему под управлением Linux, macOS или Windows. Но вы могли догадаться, что у вас не будет такой роскоши (или ограничений!) На всех встроенных устройствах, особенно на крошечных. Вот наиболее распространенные варианты:

  1. Операционная система общего назначения: Raspberry Pi позволяет нам запускать версию Linux, в то время как множество других SBC поддерживают некоторые другие формы Linux или даже Windows. Один из них - выбор, который следует сделать, если вам нужна знакомая среда разработки и развертывания в качестве вашего ПК.
  2. Операционная система реального времени (RTOS). На большинстве встраиваемых платформ у нас не было бы ресурсов (ЦП и памяти) для запуска популярной ОС общего назначения. Кроме того, ОС общего назначения - это даже не лучший выбор! Например, наша настольная ОС может выбрать загрузку веб-страницы медленно, в то время как мы параллельно выполняем некоторые ресурсоемкие задачи. Однако такая низкая производительность недопустима для дрона и приведет к сбою, поэтому все приложения, работающие на нем, должны работать бесперебойно и гарантированно. Здесь на помощь приходят операционные системы реального времени. Обычно они занимают гораздо меньше места с точки зрения использования ЦП и памяти и могут гарантировать производительность в реальном времени. Пара популярных RTOS - это FreeRTOS и NuttX. Такая производительность в реальном времени - еще одна причина, по которой микроконтроллеры предпочтительнее для мехатронных устройств, таких как дроны, по сравнению с более мощными SBC, поддерживающими ОС общего назначения.
  3. Программирование без покрытия. Возвращаясь к примеру считывания показаний датчика температуры, некоторые задачи довольно просты, и для этого может быть достаточно цикла for. В таком случае нет необходимости загружать компьютер работающей какой-либо ОС, и можно напрямую написать одну простую программу, которая будет работать на нем неограниченное время. Такая практика называется «голым программированием» и подходит для большинства сценариев «если-то-то-то».

Немного другого жаргона

Некоторые из общих терминов, с которыми вы можете столкнуться:

А. Цепочка инструментов (кросс-компиляция): когда мы пишем программу на рабочем столе, компилируем и запускаем ее, все происходит на одной вычислительной платформе. Однако, если мы напишем и скомпилируем программу на рабочем столе, а затем развернем и запустим ее в другой системе (встроенном компьютере), нам понадобится другой компилятор, известный как набор инструментов. Однако вам не понадобятся цепочки инструментов, если вы разрабатываете на самом SBC или на платформе, аналогичной SBC, как в случае с Raspberry Pi.

Б. Прошивка: Думайте о прошивке как о программном обеспечении, которое взаимодействует с оборудованием на низком уровне. Это позволяет нам использовать языки высокого уровня и легко писать наше прикладное программное обеспечение, используя абстракцию, предоставляемую встроенным ПО. Обычно микропрограммное обеспечение предоставляется производителем устройства, и большая часть пользовательского кода идет на написание приложения.

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

Д. MCU / MPU: микроконтроллеры (MCU) и микропроцессоры (MPU) состоят из основных вычислительных компонентов всех компьютеров, но различаются по способу упаковки компонентов. В микроконтроллере все находится на одной микросхеме, а в микропроцессоре компоненты размещаются на отдельных, но тесно связанных между собой микросхемах. Микроконтроллеры обычно дешевле и предлагают меньшую вычислительную мощность и память, чем микропроцессоры. Однако, поскольку все размещено на одном кристалле, это обеспечивает лучшее время запуска и производительность в реальном времени. Однако по мере того, как системы становятся меньше, а приложения становятся все более и более требовательными, кажется, что исчезает грань между микроконтроллерами и микропроцессорами.

E. SoC / SoM / SBC: Вы уже знаете, что такое SBC. Представьте, если бы мы удалили физические USB-порты на Raspberry Pi, чтобы производитель SBC мог выбрать, где их разместить. Они могут даже решить вообще отказаться от USB-портов, если приложению они не нужны. То же самое можно сделать с портом Ethernet и другими аналогичными компонентами SBC. Эта урезанная версия SBC называется System on Module (SoM), как вычислительный модуль Raspberry Pi. В свою очередь, SoM построен на базе системы на кристалле (SoC) Broadcomm BCM2837, в которой находятся все основные вычислительные компоненты. SoC построены на основе микроконтроллера или микропроцессора вместе с другими специализированными модулями, такими как процессор нейронной сети, ускоритель шифрования, кодеры аудио / видео, модули памяти и т. Д.

В общем, MCU / MPU + прочие спецблоки - ›SoC -› SoM - ›SBC.

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