Raspberry Pi. Малиновый пирог для вашего робота.

Авторы : Delphi and lord.tiran

Наша команда давно хотела использовать недорогие ARM материнские платы с linux, но их доступность и поддержка производителей не позволяла строить наши решения на них. С выходом Raspberry Pi многое изменилось. Теперь с платой поставляется полноценный linux — существует несколько вариантов дистрибутивов на выбор, большое сообщество пользователей. Единственным огорчением является доступность платы : поставки устройства  в Россию постоянно затягиваются, и если вы хотите получить желанную плату быстро — вам придется заплатить приличную сумму перекупщикам. Мне досталась плата модификации B с двумя USB и Ethernet. Рекомендую брать именно ее. Также производитель заявил о более дешевой модификации A без Ethernet и с одним USB.

1) Подключение

Плата серии В имеет 3 USB разъема, однако третий имеет форм-фактор micro и предназначен только для питания платы.  Потребление платы может достигать 700мА и не факт, что будучи подключенной напрямую в порт вашего компьютера, плата будет работать ( напомню, что согласно старому стандарту, потребление устройства USB не должно превышать 500мА, по новому – 900 мА). У нас плата работала, будучи подключенной к ноутбуку, к телевизору и к USB хабу, проблем не было.  Остальные два разъема USB хоть и поддерживают стандарт 2.0, но электрически его не соблюдают. По наблюдениям, максимальное потребление на них составляет 140 мА, вы не сможете подключить напрямую жесткий диск и большинство web-камер. И это далеко не всё. Из-за множества косяков подобного рода и кривым драйверам на этой плате можно использовать только ограниченное число железок. Подробно с ними можно ознакомиться по этой ссылке.

Для старта платы иметь на руках необходимо иметь следующее:

  1. кабель micro-USB
  2. SD- карта 6-10 класса (мы использовали карту производства Transcend, также работает Silicon Power, но хуже). Не все карты будут работать в этой плате. И это связано с кривым драйвером SD-карточки и с тем, что производители переходят на более дешевые технологии изготовления. Из-за этого меняются временные параметры сигналов и карты перестают работать. Объем – до 32 Гб.
  3. USB-hub. Подойдет не любой. Работать будет практически с любым, но будет следующая проблема: у платы нет защиты от обратных токов со стороны USB hub, это означает, что если вы не включите плату через micro USB, но часть устройств подключите по USB hub с внешним питанием, то плата может запуститься, при этом на нее будет подано низкое напряжение. В итоге вы можете убить содержимое SD-карты, так как при данном напряжении загрузчик будет исполняться криво и может повредить данные. Плата после этого может не запуститься и вам придется создавать новый образ ОС и зашивать его на карту. Поэтому советую всегда иметь запасную карту. Подходящие хабы с внешним питанием также описаны на Wiki проекта . Без них нормально подключить wi-fi, web-камеры, USB HDD не получится.
  4. USB клавиатуру и мышь. Очень советую, чтобы они были новые и одного стандарта (например USB 2.0 или 1.1). Драйвер для USB на этой плате кривой и часто можно получить случай, когда при втыкании мыши и клавиатуры, работает что-то одно. Отзывы на сайте указывают на проблему драйвера.
  5. источник питания. Если плата не завелась от порта USB вашего компьютера, то можно обойтись и без USB хаба с внешним питанием, для этого вам придется купить блок питания для зарядки или питания usb устройств. Подробнее про это можно узнать на сайте проекта.

2) Установка Linux

Скачиваем с http://www.raspberrypi.org/downloads понравившийся дистрибутив. Рекомендую Raspbian “wheezy”. Он пилится лучше всего, оригинальный Soft-float Debian “wheezy” я пробовать не стал, но для желающих использовать Java придется ставить его (из описания : It is only intended for use with software such as the Oracle JVM which does not yet support the hard-float ABI used by Raspbian.), у двух других дистрибутивов не стартовал XSERVER — я не стал разбираться и остановился на Raspbian-не. Пароль и имя пользователя по умолчанию указано под дистрибутивом — я это заметил не сразу. Скачанный образ записывается на SD карту утилитой Win32-Disk-Imager для Windows пользователей или с помощью unix утилиты dd:

dd if=/home/user/image-name.img of=/dev/sdb

где /dev/sdb - путь к SDK карте, /home/user/image-name.img - путь к образу системы

Полученный SD вставляем в плату и радуемся загрузке.

Далеко не уходя от SD. Получить из сконфигурированной SD образ обратно очень просто той же самой unix утилитой dd:

sudo dd if=/dev/sdb | bzip2 > /home/user/data.pi.image.bz2

Настроенную систему очень просто клонировать =).

После первой загрузки в текстовом режиме предлагается сконфигурировать систему. Из всех пунктов стоит отметить:

  1. Необходимость расширить файловую систему на всю SD
  2. выбрать соотношение оперативной и видеопамяти
  3. настроить регион и время
  4. также можно установить пароль пользователя

После всех операций система перезагрузится и перед вами появится рабочий стол устройства с графическим столом LXDE.

 

И еще. Если вы хотите изменить пароль суперпользователя нужно выполнить

sudo passwd root

Голая система потребляет несколько процентов загрузки процессора и 48 мегабайт памяти.

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

3) Установка пакетов

В debian-linux для установки используется утилита apt-get. В системе есть много нужных пакетов boost, Qt, cmake и многое другое. Для своей задачи я устновил все что нужно из репозитория, и ничего не собирал из исходников.

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

sudo apt-get update
sudo apt-get upgrade
sudo reboot

4) Кросс компиляция

Плата хотя и содержит компилятор и все необходимое для сборки, но не совсем подходит для сборки средних и больших C++ проектов, причина — слабый процессор и очень небольшое количество памяти (при компиляции сложных шаблонов из библиотеки boost компилятор вылетает с ошибкой). Сообщество поддерживает несколько вариантов кросскомпиляции. Для unix пользователей существует http://github.com/nezticle/RaspberryPi-BuildRoot. К проекту есть отличный help на английской. Автор проекта оперативно отвечает на вопросы. Связаться с ним можно через bug tracker со страницы проекта в github. По справке : выкачиваете, выбираете нужные библиотеки, компилируете все необходимое (базовая система + Qt + boost на i7 2670qm собирались порядка четырех часов), радуетесь готовой среде сборки с компиляторами и набором библиотек. Компилятор находится в папке /host/usr/bin.

Такой командой можно скомпилировать hello-world из main.c

./arm-raspberrypi-linux-gnueabi-g++ -o hello_world main.c -pipe -mfloat-abi=hard -mfpu=vfp -mtune=arm1176jzf-s -march=armv6zk -O2 --param max-inline-insns-single=1200 -fPIC

Hardware.

5) Начинка малинового пирога

  1. На борту платы распаян контроллер Broadcom BCM2835. Однако сказать, что это просто контроллер нельзя. На самом деле на плате распаян чип, в котором помимо контроллера ARM1176JZF-S 700Mhz совмещена память, GPU и DSP (про который мало информации и вычислять на котором пока никто не умеет). Лично на нашей плате это был чип фирмы Samsung. Поэтому тут не надо бояться, контроллер физически везде пока одинаковый. Контроллер относительно старый, с устаревшей системой команд ARMv6. Для сравнения, новое семейство ARMv7 только по скорости исполнения команд за такт соотносится как 1.25:0.95, то есть на 30% быстрее старичка. С чем связан выбор устаревшей архитектуры станет ясно по ходу статьи.  Контроллер несет на себе также GPU, он же выполняет команды загрузчика (сложно сказать, зачем так сделано, наверно своего рода защита от копирования). GPU позволяет проигрывает видео HD 1080p, однако на момент написания статьи только omxplayer имел кодек, который декодировал видео на видеокарте. Этот плеер по умолчанию должен быть в сборке, но возможно его придется скачать. На видео представлен пример проигрывания видео, у нас это не получилось, но для этой платы это нормальное явление. Скорее всего надо было увеличить объем видеопамяти до максимума и не загружать LXDE перед запуском плеера. Использовать плату как кодер видео для вещания в интернет тоже не получится. Мы проверили это на разных форматах и скорость кодирования 1-9 кадров в секунду в зависимости от формата.
  2. Объем оперативной памяти – 256 мб в модели B. Которая к тому же отводится для использования GPU, поэтому реальный объем 240 мб и ниже в зависимости от конфигурации, которую можно поменять при первом запуске. С недостатком объема памяти связаны проблемы с компиляцией на борту, хоть это и извращение. Собрать наше приложение, сильно использовавшее boost, на борту не получилось. Можно увеличить swap, однако не стоит этим заниматься. Swap крутится на SD-карте. Своей NAND памяти у платы нет.  В скором времени ОЗУ увеличат до 512 Мб. Выход только один – кросс компиляция. Однако, этот проект был разработан для образования и по идее должен заменять настольный ПК в школах развивающихся стран.  Это пока лишь может быть только на бумаге. Однако стоит отметить очень хорошо оптимизированный по размеру Raspbian – сборку Debian под плату. То, что она занимает не более 60 мб в ОЗУ выделяет для вашего приложения и нужд от 120 до 180 Мб, что неплохо.
  3. USB. В модели В их два. Однако архитектурно они завязаны на распаянный чип USB хаба. Это зависимые каналы и хаб, который вы воткнете в один из них будет вторым хабом в этой цепочке. Использование второго канала не решит проблемы пропускной способности, которая может остро встать, если использовать например плату видеозахвата или камеру высокого разрешения 1080р.  Драйвер от FTDI уже включен в сборку. Подключить Arduino не составит труда к этой плате. Драйвер работает вполне стабильно и был проверен нами. Ходят слухи, что драйвер USB для этой сборки написан криво и имеет множество хаков, позволяющих ему хоть как-то работать. С этим связано то, что далеко не все устройства, подключаемые по USB, будут работать.
  4. Ethernet. Стоит отметить, что контроллер USB и Ethernet это один чип на плате. Мы заметили, что пинг с платы в целом на порядок больше, чем пинг с наших ноутбуков. В целом, сеть на плате работает достаточно нерасторопно. В изначальной сборке у нас был вообще косяк с этим, пинг достигал значений секунд и постоянно рос, сбрасываясь иногда. После обновления эта проблема решилась, но все равно, если с обычного компа пинг 2-3 мс, то на этой плате пинг 10-15 мс. Есть подозрения, что на самом деле на данный момент используется стандарт Ethernet 10 MBit.
  5. HDMI и RCA Composite Video. Плата поддерживает 2 устройства видеовывода. Кстати совет, далеко не каждый имеет монитор с HDMI и тем более RCA. Поэтому во избежание излишних затрат, советуем купить обычный   LCD телевизор для тех, кто хочет увидеть рабочий стол. Это дешевле и можно будет подключить плату через любой выход. Композитный разъем содержит в себе сигнал только видео, звук не передается. В HDMI по идее должен передаваться и звук, но он у нас не работал. Также распространен косяк, когда плата будучи подключенной по HDMI при старте выдает сигнал на RCA. Это связано с какой-то проблемой самого монитора. В принципе можно включить и принудительно вывод на HDMI при загрузке. Но и это почему-то не помогло. Этот странный косяк все равно иногда появляется. RCA отлично подходит для подключения платы к телевизору. Изображения с обоих разъемов очень хорошие. Правда с некоторыми телевизорами изображение через RCA может иногда мигать.
  6. DSI разъем. Интересным решением на плате является возможность подключения touch панелей для встраиваемых систем. Интерфейс этот достаточно новый. Его применяют в мобильных устройствах. Это интерфейс для дешевых систем. К сожалению на момент описания статьи не было примеров работы с ним. Судя по отзывам создателей проекта, это появится совсем не скоро, так как требует новых драйверов для GPU (работа DSI реализована на ядре GPU). С перспективным подключением некоторых моделей дисплеев можно ознакомиться тут. Также был замечен еще один загадочный разъем, внешне тоже напоминающий DSI. Сложно сказать, что это.

Для тех, кто хочет превратить это железо в мультимедиа центр, стоит посмотреть проект XBMC. Однако я не разделяю эти планы на Raspberry. На мой взгляд для этого лучше купить Андроид флешку, коих сейчас немало, например MK802.

В целом, выбор столь странного железа для платы обусловлен экстремальными требованиями к стоимости. И плата получилась действительно дешевой. Ближайших конкурентов у нее нет. Несмотря на наличии большого числа записей о решениях подобного рода, в реальности купить ее здесь в РФ даже в розницу уже представляется возможным, чего не скажешь о других компьютерах размером с флешку с Андроид на борту, про которые и говорят как о конкурентах. На самом деле это полный бред и уникальность этой платы состоит в Linux и возможностях ее расширения с помощью GPIO и портов USB, Ethernet, которое в ближайшее время породит кучу шилдов аналогично проекту Ардуино. И скорее всего самый популярный шилд будет собственно Ардуино поверх платы Raspberry. Как я уже сказал с виртуальными COM портами проблем в стандартной сборке нет, чего не скажешь про сборки аля Андроид 4 (она уже доступна для это платы), где производители стараются выкинуть все якобы ненужное из ядра и часто в сборках просто нет драйвера ftdi_sio, очень нужного тем, кто работает с Ардуино и другими подобными устройствами.

6) Корпус

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

   
   

Отдельного внимания заслуживает концепт корпуса для Raspberry. К сожалению, для него нет 3д модели STL для печати. Но был найден в инете архив. Юзеры Solidworks могут попробовать его доработать для 3д печати.

 

Совет пользователям SolidWorks : не стоит думать, что детали в формате STL нельзя распознать. Для этого в меню открытие после выбора формата STL надо выбрать "Параметры" и выбрать тип детали ("твердое тело" или "поверхности"). Тогда STL будет распознана в виде, пригодном для небольшого редактирования.

Этот проект уникален и несмотря на нынешние недоработки, буквально через несколько месяцев бурное сообщество пользователей укажет на основные ошибки и поможет их исправить. Я же советую напоследок внимательно всегда читать документацию на сайте проекта и использовать только проверенное там железо. Согласитесь, за стоимость 2000-3000 руб. можно смириться с недостатками, которые к тому же постоянно исправляются, делая эту плату чуть ли не единственной нормально поддерживаемой ARM Linux платформой.

Leave a Reply

You must be logged in to post a comment.