разработка и программирование электронных устройств

Обзор одноплатного компьютера Beaglebone Black.

Не так давно (в 2011 году) прогремела на весь мир реклама самого дешевого в мире компьютера (35$) Raspberry PI, который позиционировался как средство для обучения школьников и студентов.

Кроме Raspberry PI существует достаточно большое количество аналогичных по возможностям одноплатных компьютеров на базе процессорных ядер ARM.
Общим для всех этих устройств является наличие интерфейсов USB Host, USB Device, Ethernet, HDMI, поддержка карт памяти формата SD или microSD.

В качестве операционной системы используется Linux или Android.
Возможности таких компьютеров достаточно ограничены, но для набора текста и поиска информации в сети интернет их производительности вполне достаточно.
Наличие портов USB обеспечивает подключения клавиатуры и мыши, HDMI выход позволяет подключать к одноплатному компьютеру телевизор или монитор через переходник HDMI-DVI.

Плата BeagleBone Black также имеет все выше перечисленные возможности.
Процессор от компании Texas Instruments серии Sitara AM3359AZCZ100 с тактовой частотой в 1ГГц содержит в своем составе вычислительное ядро Cortex-A8 и графический ускоритель SGX530 . На плате установлено 512 Мб оперативной памяти DDR3L , Flash память eMMC объемом в 2 ГБ , на которой установлена операционная система Angstrom Linux.
Для загрузки другого дистрибутива Linux или ОС Android можно использовать карту памяти формата microSD , подключаемую к соответствующему слоту на плате.
Также можно установить новую операционную систему на запаянную в плату память eMMC, но если новый образ не будет работать, то загрузиться в Angstrom Linux уже не получиться, поскольку он будет затерт.

Внешний вид и расположение основных элементов BeagleBone Black показаны на следующих рисунках.

  • 1 — разъем miniUSB
  • 2 — разъем microHDMI
  • 3 — держатель карты памяти формата microSD

  • 1 — 512Мб оперативной памяти DDR3
  • 2 — контроллер HDMI
  • 3 — процессор Sitara Am3359
  • 4 — микросхема электропитания
  • 5 — контроллер физического уровня Ethernet
  • 6 — микросхема FLASH памяти eMMC
  • 7 — разъем USB-A
  • 8,11 — разъемы расширения портов GPIO
  • 9 — разъем для подключения внешнего источника питания 5В 2А
  • 10 — Ethernet разъем

В youtube выложен видеоролик , в котором сравнивается скорость загрузки графической оболочки X-Window в Raspberry PI и BeagleBone Black. Из ролика видно, что последняя имеет большую производительность по сравнению с первой. Однако в Raspberry PI реализована аппаратная поддержка кодеков MPEG4 и MPEG2, что позволяет создать на ее основе медиацентр.

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

Для платы beaglebone black (как и для Raspberry PI) в сети интернет можно найти просто огромное количество готовых проектов, разработанных интузиастами. Среди таких проектов есть и термометр с отображением графика температуры через web -интерфейс, программатор CPLD и FPGA Xilinx , банальное моргание светодиодом и много других , различных по сложности, проектов.

Одним из таких ресурсов, на котором можно найти много различных проектов для данной платы, является Element14.

Из недостатков (с моей точки зрения) Beaglebone Black отмечу наличие на плате миниатюрного разъема microHDMI вместо полноразмерного HDMI . Кабель для подключения к разъему microHDMI найти не так легко , как стандартный HDMI. Вторым недостатком является наличие всего одного разъема USB Host , для подключения мышки и клавиатуры придется подключить к плате аппаратный USB Hub.

Впрочем для своих экспериментов я не использовал ни устройство вывода, ни клавиатуры с мышкой.

Для питания платы используется внешний источник 5В 2А. Большое потребление обусловлено работой видео подсистемы. Если вы не собираетесь подключать к плате монитор или телевизор, то для питания и обмена данными подойдет стандартный кабель miniUSB.

Итак, подключаем плату к компьютеру с помощью стандартного кабеля USBA — miniUSBB.
В системе появиться новый съемный диск. Открываем в проводнике содержимое съемного носителя. Дальше запускаем в web -браузере страницу START.htm.

Первым делом необходимо установить драйвера для используемой вами host- системы , будь то Windows/ Linux/ MacOS , 32 или 64 битная система, драйвера есть в наличии. Установка драйвера позволит использовать доступ к компьютерной сети через интерфейс USB, Ethernet порт можно даже и не подключать.

На плате запущен встроенный web – сервер.
После установки драйверов откройте в web – браузере страничку, набрав в адресной строке
IP – адрес платы по-умолчанию 192.168.7.2.

Для интереса можете просмотреть предлагаемые возможности по управлению платой BeagleBone Black. В основном это различные скриптовые языки, с помощью которых можно управлять портами GPIO платы. Есть браузерная IDE для написания управляющих скриптов.
Но все это больше подходит для баловства, меня же в первую очередь интересовало написание программ для платы на языках программирования C и C++.

Традиционно первой программой для ПК при изучении нового языка программирования является “Hello, World!” . Для микроконтроллерных устройств первая программа традиционно моргает светодиодом.

В случае BeagleBone Black вы можете выбрать любой из указанных вариантов для написания первой программы.

Кроме того в предустановленной системе Angstrom Linux уже установлен компилятор gcc для целевой платформы, поэтому программы можно писать и компилировать прямо на плате.
Устанавливаем соединение с платой по протоколу SSH (Secure Shell) .
При использовании в качестве Host – системы одного из дистрибутивов Linux просто запустите терминал и в командной строке введите :

На предложение ввести пароль просто нажмите ввод.
Если вы используете операционную систему Windows , то запустите командный интерпретатор Command Prompt и выполните аналогичные действия в командной строке Windows:

В итоге плата покажет в командной строке приглашение :

Создадим простую программу , набрав ее текст во встроенном текстовом редакторе :

Включаем режим редактирования нажатием на клавишу “I” (Insert) и вводим следующий текст :

Сохраняем файл и выходим нажатием последовательно на клавиши ESC : x .

Компилируем и компонуем программу :

Запускаем новоиспеченную программу :

Настало время поморгать светодиодом, которых на плате четыре (программно управляемых).
Разработчики, использующие в своих проектах микроконтроллеры без встроенной ОС или с специализированной RTOS привыкли к тому, что доступ к аппаратным модулям контроллера открыт в любой части программы.

В Linux, как известно, пространство памяти пользователя и ядра разделены. Для доступа к аппаратным ресурсам используются соответствующие программные драйвера, являющиеся модулями ядра, то есть использующие пространство памяти ядра Linux.
Одним из способов написать простую программу для платы BeagleBone Black , которая будет управлять светодиодом , является использование виртуальной файловой системы.

Для начала рассмотрим имеющиеся на плате светодиоды :

  • USR0 — первый (или если хотите — нулевой) пользовательский светодиод используется для сигнализации работы операционной системы, если моргает, значит что-то работает, не все так плохо
  • USR1 – второй светодиод задействован для индикации доступа к карте памяти microSD
  • USR2 – третий светодиод используется для индикации активности CPU
  • USR3 – четвертый светодиод сигнализирует о доступе к памяти eMMC

Для того, чтобы иметь возможность управлять одним или всеми пользовательскими светодиодами необходимо отключить функцию, назначенную каждому светодиоду по-умолчанию.

Для этого откроем файл настроек светодиодов /etc/default/leds и отредактируем его следующим образом :

После внесения изменений нужно перезагрузить плату, для этого выполним команду :

Соединение по SSH после перезагрузки необходимо будет запустить заново .
Теперь светодиоды USR0 – USR3 будут погашены.
Управлять ими можно как из исходного кода программы, так и с командной строки :

Экспериментировать будем с светодиодом usr0 :

Зажечь светодиод можно следующей командой :

Погасить его можно соответственно перенаправив вывод ноля в brightness :

Заставить моргать светодиод с периодом в 400 мсек можно при помощи такой команды :

Точно таким же образом можно управлять светодиодами из программы на языке С. Недостатком такого решения является небольшая скорость переключения выводов.

В следующей короткой программе на языке С мы заставим светодиод usr0 моргать :

Собираем программу и запускаем ее сначала в режиме мерцания светодиода, потом отключаем мерцание :

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

Viewed 21163 times by 1615 viewers

Leave a Reply

You must be logged in to post a comment.