Raspberry pi программирование железа

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Как программировать Raspberry Pi на языке C

Одноплатный компьютер Raspberry Pi зачастую программируют на языке Python. Но это вовсе не значит, что данный миникомпьютер нельзя программировать на каком-либо другом языке.

Среди матерых программистов очень популярен язык C, и этот язык можно с успехом использовать в написании программ для Raspberry Pi. В данном материале будет показано, как это осуществить.

Язык C представляет собой C мощный язык программирования общего назначения. Он быстрый, довольно гибкий и доступен на всех платформах. Он очень эффективен. Это главная причина, почему он очень популярен, несмотря на то, что ему уже больше 40 лет. Данный язык был первоначально разработан Деннисом М. Ричи для разработки операционной системы UNIX в Bell Labs, а его первая реализация произошла в 1972 году на компьютере DEC PDP-11.

Одним из преимуществ C является то, что код работает почти так же быстро, как и код на ассемблере. Подобно ассемблеру, C позволяет вам получить доступ к мощным низкоуровневым машинным функциям и имеет синтаксис, который легче читать, чем ассемблерный код. Языки программирования высокого уровня (например, Python) предоставляют программистам команды, которые упрощают выполнение таких задач, как вывод текста на монитор и реализация логических функций. Языки программирования низкого уровня (ассемблер) дают вам доступ к базовому набору машинных инструкций. Язык C можно назвать, наверное, языком программирования среднего уровня, который имеет преимущество предоставления полезных и простых в использовании функций и в то же время достаточно мощный, чтобы вы могли контролировать основные операции компьютера.

Чтобы продемонстрировать, как создать программу на C, скомпилировать ее и запустить на Raspberry Pi, мы напишем простую программу, которая будет печатать «hello world» в терминале. Процесс программирования на C состоит из четырех этапов: создание файла с исходным кодом, компиляция программы, создание исполняемого файла и выполнение программы.

Для начала откройте текстовый редактор Nano и создайте новый файл с расширением «.c», введя его в командной строке:

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

После ввода кода нажмите Ctrl-X и Y, чтобы сохранить и выйти из Nano.

Код, написанный на C, необходимо будет скомпилировать, прежде чем он будет запущен на компьютере. Компиляция – это процесс преобразования кода, который вы написали, в машиносчитываемые инструкции, которые могут быть поняты процессором компьютера. Когда вы компилируете исходный файл, создается новый скомпилированный файл. Например, ввод команды ниже будет компилировать hello-world.c в новый файл под названием myfirstcprogram.

Теперь нам нужно сделать нашу программу исполняемой. Для этого нам просто нужно изменить права доступа к файлам. Введите это в командной строке:

Все, наша программа готова к выполнению. Чтобы запустить ее, в командной строке следует ввести:

Таким образом, программирование на языке C для Raspberry Pi является простым и достаточно быстрым.

Источник

Программируем Raspberry Pi на голом железе

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

В чем подвох?

Что нам понадобится?

1) Сама Raspberry Pi, карта памяти к ней и питание.
2) Даташит на процессор
3) Компьютер с установленным Linux (но может быть можно и на Винде. Не знаю, не пробовал).
4) Кросскомпилятор, установленный на компьютере из пункта 3. Я использую arm-none-eabi-gcc
5) Содержимое этой папочки.

Приготовления.

Нам нужно отформатировать карту памяти в FAT16 и закинуть на нее содержимое этой папки. Это загрузчик плюс ядро. Затем удаляем оттуда файлы kernel.img и kernel_emergency.img. Это ядро Linux, а оно нам не нужно.

Первая программа.

Теперь мы можем приступить к написанию первой программы. Создаем файл main.c и пишем следующий код

Как видите, эта программа ничего не делает. Функция exit зачем-то нужна компилятору.
Теперь соберем её.

arm-none-eabi-gcc -O2 -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -nostartfiles main.c -o kernel.elf
arm-none-eabi-objcopy kernel.elf -O binary kernel.img

Полученный файл kernel.img кидаем на карту памяти. Готово!

#define GPIO_GPFSEL1 1
#define GPIO_GPCLR0 10

Ну и наконец модифицируем главную функцию для зажигания лампочки:

Собираем, прошиваем и радуемся.

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

Источник

Язык программирования Swift на Raspberry Pi


Raspberry PI 3 Model B+

В этом мануале мы разберем основы использования Swift на Raspberry Pi. Raspberry Pi — небольшой и недорогой одноплатный компьютер, потенциал которого ограничен лишь его вычислительными ресурсами. Он хорошо известен техногикам и любителям DIY. Это отличное устройство для тех, кому нужно поэкспериментировать с идеей или проверить на практике определенную концепцию. Он применяется для самых разных проектов, легко помещается практически в любом месте — например, его можно смонтировать на крышке монитора и использовать в качестве десктопа, или подключить к макетной доске для управления электронной схемой.

Официальный язык программирования «малинки» — Python. Хотя Python достаточно прост в использовании, ему не хватает типобезопасности, плюс он потребляет много памяти. Swift, напротив, имеет ARC-управление памятью и почти в 8 раз быстрее Python. Ну а поскольку объем ОЗУ и вычислительные возможности процессора Raspberry Pi ограничены, использование языка вроде Swift позволяет максимально использовать потенциал железа этого мини-ПК.

Установка ОС

Прежде чем устанавливать Swift, нужно выбрать ОС. Для этого можно воспользоваться одним из вариантов, предлагаемых сторонними разработчиками. Наиболее обычный выбор — Raspbian, официальная ОС от Raspberry Pi. Есть несколько возможностей установить Raspbian на SD-карту; в нашем случае мы воспользуемся balenaEtcher. Вот что нужно делать:

  • Загружаем последнюю версию Raspbian OS отсюда.
  • Форматируем SD-карту в FAT при помощи Disk Utility.
  • Используем balenaEtcher для заливки на отформатированную карту.


Шаг второй: форматируем SD-карту в MS-DOS (FAT)


Шаг третий: используем balenaEtcher для заливки Raspbian на карту

Рекомендуем бесплатный интенсив по машинному обучению для начинающих:
Пишем первую модель машинного обучения за три дня — 2-4 сентября. Бесплатный интенсив, который позволяет разобраться в том, что такое Machine Learning и научиться работать с открытыми данными из интернета. Также учимся предсказывать курс доллара при помощи самостоятельно разработанной модели.

Настройка Raspberry Pi

Полпути уже пройдено! Теперь у нас есть SD-карта с ОС, которую мы будем использовать, но операционную систему еще предстоит установить. Для этого есть две возможности:

  • Использовать подключенные к устройству монитор, клавиатуру и мышь.
  • Сделать все с другого ПК по SSH или с использованием кабеля USB Console.

Если это ваш первый опыт работы с Pi, рекомендую опцию №1. После того как SD-карта с Raspbian OS вставлена в Pi, подключите HDMI-кабель, мышь, клавиатуру и кабель питания.

Pi должна загрузиться при включении. Поздравляю! Теперь вы можете потратить немного времени на изучение своего десктопа и его возможностей.

Установка Swift

Для того чтобы установить Swift на «малинку», нужно подключить ее к интернету (при помощи Ethernet или WiFi, в зависимости от модели платы). Как только интернет подключен, можно начинать установку Swift.

Ее можно выполнить двумя способами. Первый — самостоятельное создание билда Swift, второй — использовать уже скомпилированные бинарники. Я настойчиво рекомендую второй способ, поскольку первый потребует нескольких дней подготовки. Второй способ появился благодаря группе Swift-ARM. Ей принадлежит репо, с которого можно установить Swift, используя apt (Advanced Package Tool).

Это инструмент командной строки, нечто вроде App Store для приложений и пакетов для устройств с Linux. Работу с apt начинаем, введя в терминале apt-get. Далее нужно указать ряд команд, которые уточнят выполняемую задачу. В нашем случае требуется установить Swift 5.0.2. Соответствующие пакеты можно найти здесь.

Что ж, начнем. Теперь, когда мы знаем, что будем устанавливать Swift при помощи apt, нужно добавить репо в список репозиториев.

Команда добавления/установки репо swift-arm выглядит так:

Далее устанавливаем Swift из добавленного репо:

Вот и все! Теперь Swift установлен на нашей «малинке».

Создание тестового проекта

На данный момент Swift REPL не работает, но все остальное — да. Для теста давайте создадим Swift-пакет при помощи Swift Package Manager.

Сначала создаем директорию с именем MyFirstProject.

Далее изменяем текущую рабочую директорию на свежесозданную MyFirstProject.

Создаем новый исполняемый пакет Swift.

Эти три строки создают пустой пакет Swift, который называется MyFirstProject. Для его запуска вбиваем команду swift run.

Как только компилирование завершено, мы увидим фразу «Hello, world!» в командной строке.

После того как мы создали первую программу на Pi, давайте кое что изменим. В директории MyFirstProject внесем изменения в файл main.swift. В нем содержится код, исполняющийся, когда мы запускаем пакет командой swift run.

Меняем директорию на Sources/MyFirstProject.

Редактируем файл main.swift, используя встроенный nano-редактор.

Как только редактор открыт, вы сможете изменять код своей программы. Давайте заменим содержимое файла main.swift вот этим:

Разумеется, вы можете вставить свое имя. Для сохранения изменений нужно выполнить такие действия:

  • CTRL+X для сохранения файла.
  • Подтверждаем изменения нажатием «Y».
  • Подтверждаем внесение изменения в файл main.swift нажатием Enter.

Все изменения внесены, теперь самое время перезапустить программу.

Поздравляю! Как только код скомпилирован, терминал должен показать измененную строку.

Теперь, когда Swift установлен, вам есть чем заняться. Так, для управления железом, например, светодиодами, сервоприводами, реле, вы можете воспользоваться библиотекой «железных» проектов для плат Linux/ARM, которая называется SwiftyGPIO.

Удачи в экспериментах со Swift на Raspberry Pi!

Источник

Программирование Raspberry Pi Pico с помощью C/C ++ SDK

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

Чем же может нас удивить новая плата Raspberry Pi Pico на базе собственного чипа RP2040?

Raspberry Pi Pico — это не такая высокопроизводительная платформа, как другие платы Raspberry Pi, но намного дешевле их. Производительность Pico можно сравнить с Arduino Due или ESP32.

Это действительно очень интересное устройство, основанное на двух ядрах Cortex M0 + с уникальным модулем PIO, который работает как контакты FPGA и может быть запрограммирован на языке Assembler (я бы сказал упрощенный Assembler).

Поддержка Raspberry Pi Pico впечатляет. Можно использовать разные языки программирования, такие как Assembler, C, C ++ и Python, для программирования Raspberry Pi Pico.

Raspberry Pi Pico также можно запрограммировать в среде Arduino IDE.

Чип RP2040 и плата Raspberry Pi Pico хорошо документированы, документация содержит дейташиты для микроконтроллера и платы, руководство по разработке своего железа на основе RP2040, руководство для быстрого начала работы с платой Raspberry Pi Pico.

Raspberry Pi Foundation предоставляет два SDK для разработки приложений на Python и C / C ++.

Начнем с основных характеристик платы:

  • Микроконтроллер RP2040, разработанный Raspberry Pi в Великобритании
  • Двухъядерный процессор Arm Cortex M0 + с тактовой частотой до 133 МГц
  • 264 КБ SRAM и 2 МБ встроенной флэш-памяти
  • Благодаря контактам по периметру модуля Pico его можно запаять на несущую плату
  • USB 1.1 с поддержкой профилей устройства и хоста
  • Режимы сна и ожидания с низким энергопотреблением
  • Программирование методом копирования файла прошивки на внешнее запоминающее устройство через USB
  • 26 × многофункциональных контактов GPIO
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-битных АЦП, 16 × управляемых каналов ШИМ
  • Точные часы и таймер на кристалле
  • Датчик температуры
  • Библиотеки для выполнения операций с плавающей запятой
  • 8 конечных автоматов программируемого ввода-вывода (PIO) для поддержки настраиваемых периферийных устройств

Техническая спецификация Raspberry Pi Pico доступна по ссылке https://datasheets.raspberrypi.org/pico/pico-datasheet.pdf

Она также содержит электрическую принципиальную схему Raspberry Pi Pico.

Если взглянуть на распиновку, то можно увидеть на плате SWD-разъем для отладки, пользовательский светодиод, разъем micro-USB, кнопку BOOTSEL и 2х20 контактов расширения.

Прежде всего необходимо прочитать «Getting started with Raspberry Pi Pico» https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf , следуя указанным там инструкциям.

Если вы собираетесь использовать плату RPi 4B или RPi 400 для разработки приложений для RPi Pico, развернуть среду разработки там очень просто.

На Raspberry Pi 4B / 400 необходимо выполнить следующие действия (убедитесь, что у вас есть подключение к Интернету):

  1. Скачайте установочный скрипт
  1. Добавьте разрешения на выполнение скрипта

$ chmod +x pico_setup.sh

  1. Запустите установочный скрипт
  1. Перезагрузите вашу операционную систему

В противном случае процесс установки зависит от операционной системы, установленной на вашем компьютере. Я использую Ubuntu 20.04 LTS, поэтому мне пришлось прочитать «Chapter 2. SDK».

Пользователи Windows и OSX должны прочитать «Chapter 9. Building on other platforms» из руководства «Getting started with RPi Pico».

Автор документации предпочитает, чтобы мы использовали Visual Studio Code. Если вы не привыкли разрабатывать в Visual Studio Code, то можете выбрать что-нибудь другое, например Eclipse или Clion.

После установки необходимых инструментов пора помигать светодиодом на плате Raspberry Pi Pico. Выполните в терминале следующие команды:

$ mkdir build && cd build

Вот и все. Теперь мы можем загрузить прошивку в плату Raspberry Pi Pico.

Обновление и отладка прошивки

Если вы, как и я, используете десктопную версию Ubuntu 20.04 LTS, Raspberry Pi Pico должен автоматически примонтироваться к файловой системе как запоминающее устройство USB. Вы можете просто перетащить blink.uf2 на запоминающее устройство. RP2040 перезагрузится, размонтируется как запоминающее устройство и начнет запускать прошитый код. В следующий раз, когда вы захотите обновить прошивку, вам нужно будет нажать кнопку BOOT перед включением Raspberry Pi Pico, чтобы войти в режим обновления.

Если ваше приложение не работает или вы хотите понять, как оно работает, вы можете использовать внутрисхемную отладку через разъем SWD, но для этого необходимо иметь какой-то аппаратный адаптер JTAG / SWD, например J-Link, DAP-Link или плату Raspberry Pi с разъемом расширения контактов.

Использование Picoprobe

Из документации «Getting started with RPi Pico» я узнал, что можно использовать вторую плату Raspberry Pi Pico в качестве адаптера SWD (см. «Appendix A. Using Picoprobe»).

Это очень интересная возможность, учитывая невысокую стоимость платы. Давайте попробуем.

Если я не ошибаюсь, picoprobe — это прошивка DAP-Link, основанная на открытом стандарте CMSIS-DAP для микроконтроллеров Cortex-M, которая обеспечивает два преобразователя: USB-UART и USB-SWD.

Все, что нам нужно сделать, это загрузить специальную прошивку (picoprobe) во вторую плату Pico. После этого мы получим полноценный отладчик SWD по цене Pico.

Кстати, вы можете использовать его и для отладки других микроконтроллеров Cortex-M.

Вы должны прочитать «Appendix A. Using Picoprobe», чтобы узнать, что вам нужно сделать для начала использования picoprobe.

Это дублирующее документацию описание действий под Linux, поскольку я использую Ubuntu 20.04 LTS.

Для работы picoprobe необходимо собрать openocd с включенным драйвером picoprobe:

Пора собрать и прошить picoprobe:

/pico && git clone https://github.com/raspberrypi/picoprobe.git

$ mkdir build && cd build

$ cmake .. && make -j$(nproc)

Включите плату Raspberry Pi Pico, которую вы собираетесь использовать в качестве отладчика, с нажатой кнопкой BOOTSEL и перетащите файл picoprobe.uf2.

В итоге мы получили отладчик с двумя интерфейсами, один из которых — SWD, другой — UART для работы в качестве адаптера USB-UART независимо от первого.

Подключение между двумя платами Pico показано в следующей таблице:

Pico A (picoprobe) Pico B (dev board)
GND GND
GP2 SWCLK
GP3 SWDIO
GP4/UART1 TX GP1/UART0 RX
GP5/UART1 RX GP0/UART0 TX

На ярко-оранжевом фоне это выглядит так:

Чтобы использовать UART picoprobe, вы можете задействовать любую терминальную утилиту, например minicom.

Сначала добавьте себя в группу пользователей dialout и перезагрузитесь:

$ sudo usermod -a -G dialout $USER

После этого проверьте, находитесь ли вы в группе dialout, выполнив следующую команду:

Если да, запустим minicom:

$ minicom -D /dev/ttyACM0 -b 115200

Использование OpenOCD и GDB

Чтобы использовать отладку через SWD, вам необходимо запустить openocd как сервер и gdb как клиент:

$ openocd -f interface/picoprobe.cfg -f target/rp2040.cfg -s tcl

Open On-Chip Debugger 0.10.0+dev-g18b4c35-dirty (2021-08-12-18:55)

Licensed under GNU GPL v2

For bug reports, read http://openocd.org/doc/doxygen/bugs.html

Info : only one transport option; autoselect ‘swd’

Warn : Transport «swd» was already selected adapter speed: 5000 kHz

Info : Hardware thread awareness created

Info : Hardware thread awareness created

Info : RP2040 Flash Bank Command

Info : Listening on port 6666 for tcl connections

Info : Listening on port 4444 for telnet connections

Info : clock speed 5000 kHz

Info : SWD DPIDR 0x0bc12477

Info : SWD DLPIDR 0x00000001

Info : SWD DPIDR 0x0bc12477

Info : SWD DLPIDR 0x10000001

Info : rp2040.core0: hardware has 4 breakpoints, 2 watchpoints

Info : rp2040.core1: hardware has 4 breakpoints, 2 watchpoints

Info : starting gdb server for rp2040.core0 on 3333

Info : Listening on port 3333 for gdb connections

$ sudo apt install gdb-multiarch -y

(gdb) target remote loacalhost:3333

Конечно же вы можете отлаживать свое приложение в своей любимой IDE, в этом случае IDE работает как клиент.

Автоматическая генерация проекта

Для автоматического создания нового проекта вы можете использовать скрипт Python, который может работать как в режиме графического интерфейса пользователя, так и в режиме командной строки.

Чтобы воспользоваться этим, вам нужно будет клонировать скрипт создания проекта из Git репозитория :

/pico && git clone https://github.com/raspberrypi/pico-project-generator.git

Не забудьте установить библиотеку TKInter для использования GUI:

$ sudo apt-get install python3-tk

Затем его можно запустить в графическом режиме:

Добавление Pico в Arduino IDE

Также можно запрограммировать Raspberry Pi Pico в Arduino IDE. Была выпущена даже новая версия Arduino Nano на базе чипа RP 2040.

Если вы решите работать с Raspberry Pi Pico в Arduino IDE, вам сначала нужно будет добавить поддержку платы. Для этого выберите в Arduino IDE пункт меню File-> Preferences, затем заполните «Additional Board Manager URLs» ссылкой https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

После этого выберите пункт меню «Board:« Arduino Uno »-> Board Manager …», введите «raspberry pi pico» и установите пакет «Raspberry Pi Pico / RP2040», который уже установлен на моей картинке.

Когда пакет установлен, нам нужно выбрать плату в пункте меню «Tools->Boards: «Arduino Uno»->Raspberry Pi RP2040 Boards(1.9.4)->Raspberry Pi Pico». Информация о плате появится в меню «Tools».

Процесс разработки в C/C ++ SDK

В этом разделе я покажу вам, что программирование Raspberry Pi Pico с использованием C/C++ SDK не сложнее, чем в Arduino IDE. Даже в том случае, если вы используете командную оболочку Linux.

Добавьте путь к pico-project-generator в ваш файл конфигурации .bashrc :

Потом перезагрузите систему:

После этого вы можете запускать pico_project.py из любого каталога.

Давайте создадим новый каталог для наших экспериментов:

/pico && mkdir pico-workspace && cd pico-workspace

Выберите имя и расположение проекта, затем нажмите кнопку ОК.

Мигание светодиодом

Теперь мы можем открыть автоматически сгенерированный C файл, отредактировать его:

Источник

Adblock
detector