Представляем электронную версию статьи из номера №2 за 2016 год журнала Компоненты и технологии. Автор Курниц Андрей.
В статье описан процесс развертывания экосистемы разработки приложений для микроконтроллеров Atmel серии SAM4S в среде операционной системы Linux. Читатель познакомится также с оценочной платой SAM4S-EK и семейством ARM Cortex-M4 микроконтроллеров фирмы Atmel. Приведены рекомендации по работе с адаптером отладки SAM-ICE (он же J-LINK) и программой OpenOCD.
Введение
Выбор операционной системы Linux в качестве среды для программирования микроконтроллеров ARM Cortex-M4 фирмы Atmel сложно назвать общепринятой практикой. Напротив, для разработки под свои микроконтроллеры Atmel свободно распространяет среду Atmel Studio 7, предназначенную исключительно для операционных систем Windows. Не будет секретом и тот факт, что разворачивание и настройка среды Atmel Studio 7 для новичка окажется куда проще, чем выбранный автором путь.
Автор предлагает использовать среду разработки Qt Creator в связке с инструментарием для кросс-компиляции GCC и с пакетом OpenOCD для отладки. В качестве операционной системы автор выбрал Linux Lubuntu 14.04 LTS (выполняющуюся на виртуальной машине, но это не существенно). Такой подход позволяет с легкостью переходить на другие ARM (и не только) микроконтроллеры, не меняя при этом привычный комплект инструментов. Например, в [1] приводится пример разработки для микроконтроллеров STM32F4 фирмы ST microelectronics с применением такого же комплекта инструментов.
Несколько слов об используемой терминологии. Аппаратное устройство, которое подключается к целевому микроконтроллеру и к рабочей станции, далее называется отладочным адаптером. Отладчиком же будет называться компьютерная программа, служащая для пошагового выполнения программы, просмотра значений ячеек памяти и т.д.
Аппаратная платформа
Рис. 1. Внешний вид платы SAM4S-EK с подключенным отладочным адаптером.
В основе оценочной платы лежит микроконтроллер SAM4S16C фирмы Atmel, ключевые особенности которого приведены ниже:
- Ядро ARM Cortex-M4, максимальная тактовая частота 120МГц
- Объемы памяти на кристалле: 1 Мбайт flash-памяти и 128 кбайт ОЗУ
- Среди периферийных устройств можно выделить: USB контроллер (работа только в режиме Device), контроллер внешней NAND flash-памяти, контроллер SD карт памяти
- Контроллеры интерфейсов UART, I2C, SPI и др.
- 100-выводный корпус
Среди особенностей оценочной платы SAM4S-EK можно выделить следующие:
- Микросхема NAND flash-памяти Micron MT29F2G08ABAEA объемом 2 Гбит
- Цветной дисплейный модуль FTM280C34D разрешением 320x240 точек, с диагональю 2,8 дюйма и с резистивной сенсорной панелью. Дисплей содержит встроенный контроллер Ilitek ILI9320, подключенный к микроконтроллеру по параллельному интерфейсу.
- Контроллер резистивной сенсорной панели Texas Instruments ADS7843E
- Распаяны два DB9 разъема для двух портов RS-232 (один из них — с сигналами RTS, CTS), выведен также интерфейс RS-485
- Элементы сенсорного управления по технологии Atmel QTouch, расположены прямо на печатной плате (сенсорные кнопки 5 шт. и слайдер)
- Электретный микрофон и операционный усилитель TS922 для него
- Усилитель звуковой частоты для подключения наушников TPA022, а также 3,5мм гнездо типа «джек».
- Два коаксиальных BNC разъема, которые подключены к встроенным АЦП и ЦАП блокам микроконтроллера.
- Держатель micro-SD карты памяти
- 63 вывода общего назначения (GPIO) выведены на IDC разъемы с шагом 2,54 мм
Более подробно как о плате SAM4S-EK, так и о микроконтроллере SAM4S16C можно ознакомиться на сайте Atmel [12].
Комплект инструментов
Когда аппаратная (плата SAM4S-EK) и программная (операционная система Linux Lubuntu) платформы определены, можно построить систему аппаратных и программных инструментов для программирования и отладки целевого микроконтроллера (рис. 2)
Рис. 2. Структурная схема процесса отладки микроконтроллера
Микроконтроллер по интерфейсу JTAG подключен к отладочному адаптеру SAM-ICE, который в свою очередь подключен к рабочей станции по интерфейсу USB. Питание отладочного адаптера подается также по интерфейсу USB, а питание платы разработчика вместе с микроконтроллером должно осуществляться отдельно (на рис. 2 не показано).
На рабочей станции должна выполняться некая программа, которая будет взаимодействовать с адаптером отладки SAM-ICE с одной стороны и отладчиком GDB, входящим в инструментарий GCC, с другой. На эту роль идеально подходит свободно распространяемая программа OpenOCD [4-6], которая помимо отладки может использоваться для загрузки прошивки во flash-память микроконтроллера и для внутрисхемного тестирования.
Программа OpenOCD поддерживает как адаптер отладки SAM-ICE (в действительности это аналог популярного J-LINK), так и оценочную плату SAM4S-EK (соответственно и микроконтроллеры Atmel SAM4). Кроме этого OpenOCD доступна в виде исходных кодов и может быть собрана для операционной системы Linux.
Интегрированная среда разработки Qt Creator (рис. 2) получает отладочную информацию через отладчик GDB и предоставляет в удобном для разработчика виде (точки останова, значения переменных, пошаговое выполнение программы и др.)
Программа OpenOCD работает в режиме сервера и допускает подключение других клиентов-программ, например, telnet-клиента (рис. 2). Это может быть удобно для серийного программирования микроконтроллеров на производстве.
Установка OpenOCD
Установить OpenOCD можно наименее трудоемким способом — из репозиториев Ubuntu, для чего следует выполнить команду:
sudo apt-get install openocd
Однако в этом случае будет установлена устаревшая версия 0.7.0 (проверить версию установленной программы OpenOCD можно выполнив команду openocd --version).
Для получения актуальной версии (на момент написания статьи — 0.9.0), необходимо собрать OpenOCD из исходных кодов. Для этого надо выполнить следующие действия:
1. Загрузить исходные коды OpenOCD с сайта [2], выполнив команду:
cd ~
wget http://downloads.sourceforge.net/project/openocd/openocd/0.9.0/openocd-0.9.0.tar.bz2.
В результате в домашнем каталоге должен появиться файл-архив openocd-0.9.0.tar.bz2.
2. Далее следует разархивировать OpenOCD, выполнив команду:
tar xvf openocd-0.9.0.tar.bz2
В результате, в домашнем каталоге должен появиться каталог с исходным кодом openocd-0.9.0
3. Проверить, установлена ли библиотека libusb-dev, которая необходима для взаимодействия рабочей станции и адаптера SAM-ICE по USB интерфейсу. Чтобы проверить наличие библиотеки libusb-dev, следует выполнить команду:
sudo dpkg --get-selections | grep libusb
Если библиотека установлена, то вывод должен быть примерно такой:
libusb-0.1-4:i386 install
libusb-1.0-0:i386 install
libusb-1.0-0-dbg:i386 install
libusb-1.0-0-dev:i386 install
libusb-1.0-doc install
libusbmuxd2 install
Если библиотека не установлена, то ее установить ее можно, выполнив команду:
sudo apt-get install libusb-dev
4. Для сборки OpenOCD также потребуются следующие пакеты:
- make,
- libtool,
- pkg-config версии 0.23 и выше,
- autoconf версии 2.64 и выше,
- automake версии 1.9 и выше,
- texinfo
Проверить их наличие можно тем же способом, что и библиотеки libusb-dev, как описано выше.
5. Теперь можно собрать пакет OpenOCD с поддержкой адаптера SAM-ICE, для чего следует последовательно выполнить следующие команды:
cd ~/openocd-0.9.0
./configure --enable-jlink
make
sudo make install
Ключ --enable-jlink предписывает включить поддержку адаптера J-LINK. Дело в том, что адаптер SAM-ICE представляет собой модифицированный J-LINK BASE от фирмы Segger так, что он может работать только с микроконтроллерами фирмы Atmel. Однако программный интерфейс для работы с J-LINK полностью совместим с адаптером SAM-ICE.
Подключение адаптера SAM-ICE
Далее следует подключить адаптер SAM-ICE к рабочей станции и проверить список подключенных по USB устройств командой:
lsusb
Если адаптер SAM-ICE подключен, то вывод команды должен содержать следующую строку:
Bus 002 Device 003: ID 1366:0101 SEGGER J-Link ARM
Где 1366 — VID-номер (код производителя USB-устройства), 0101 — PID-номер (код изделия). Эти номера потребуются в дальнейшем для настройки менеджера устройств udev.
Чтобы обеспечить взаимодействие сервера отладки OpenOCD с адаптером SAM-ICE по интерфейсу USB необходимо создать файл-правило для менеджера устройств udev, например, так:
sudo nano /etc/udev/rules.d/45-jlink.rules
В окне редактора Nano ввести следующий текст:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101",
MODE:="0666",
SYMLINK+="jlink_%n"
Где поля idVendor и idProduct соответствуют полученным ранее номерам VID и PID.
Далее следует перезагрузить рабочую станцию.
Если же сконфигурировать udev, как описано в [3], то запуск сервера отладки OpenOCD будет возможен только с правами суперпользователя, что в дальнейшем создаст проблемы с отладкой из среды QtCreator.
Совместная работа адаптера SAM-ICE и сервера отладки OpenOCD
Необходимо в каталоге проекта (автор использовал каталог ~/sam/) создать файл конфигурации openocd.cfg со следующим содержимым:
telnet_port 4444
gdb_port 3333
source [find interface/jlink.cfg]
source [find board/atmel_sam4s_ek.cfg]
gdb_flash_program enable
Файл openocd.cfg содержит предписания для сервера OpenOCD, а именно:
- разрешить подключение к серверу по протоколу telnet через порт 4444,
- установить порт 3333 для подключения отладчика GDB,
- соединяться с адаптером J-LINK (SAM-ICE),
- целевая платформа — оценочная плата Atmel SAM4S_EK,
- разрешить программирование flash-памяти.
Теперь, когда необходимое программное обеспечение установлено, а отладчик подключен к рабочей станции и целевому микроконтроллеру, можно проверить работоспособность системы. Для этого следует, находясь в каталоге проекта (~/sam/), запустить сервер OpenOCD командой
openocd
Если все сделано правильно, в терминал будет выведено:
Open On-Chip Debugger 0.9.0 (2015-12-29-14:45)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
adapter speed: 500 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m reset_config sysresetreq
Info : J-Link ARM V8 compiled Nov 25 2013 19:20:08
Info : J-Link caps 0xb9ff7bbf
Info : J-Link hw version 80000
Info : J-Link hw type J-Link
Info : J-Link max mem block 9296
Info : J-Link configuration
Info : USB-Address: 0x0
Info : Kickstart power on JTAG-pin 19: 0xffffffff
Info : Vref = 3.313 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 1 TRST = 1
Info : J-Link JTAG Interface ready
Info : clock speed 500 kHz
Info : JTAG tap: sam4.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : sam4.cpu: hardware has 6 breakpoints, 4 watchpoints
При этом приглашение командной строки выведено не будет, что свидетельствует о том, что сервер успешно запущен и установлено соединение с целевым микроконтроллером через отладочный адаптер SAM-ICE.
Теперь можно подключиться к серверу отладки по протоколу telnet, для чего надо открыть второй терминал и выполнить команду:
telnet localhost 4444
Где 4444 – номер порта, заданный ранее в конфигурационном файле openocd.cfg. В результате будет установлено соединение с сервером отладки и появится приглашение для ввода команд:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
>
Когда соединение с сервером установлено, можно выполнить любую из команд OpenOCD (полный список — в [7]), например, просмотреть содержимое регистров ядра микроконтроллера. Для этого следует остановить выполнение программы в микроконтроллере командой halt:
> halt
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x81000000 pc: 0x004003e6 msp: 0x20003488
Затем просмотреть непосредственно содержимое регистров командой reg:
> reg
===== arm v7m registers
(0) r0 (/32): 0x00000013
(1) r1 (/32): 0x00000800
(2) r2 (/32): 0x004023D8
(3) r3 (/32): 0x00000000
(4) r4 (/32): 0x81CBF6AB
(5) r5 (/32): 0x788E2033
(6) r6 (/32): 0x5C2195CC
(7) r7 (/32): 0x20003488
…
…
…
Завершить работу сервера OpenOCD можно командой shutdown, при этом автоматически закроется и telnet соединение:
> shutdown
shutdown command invoked
Connection closed by foreign host.
andy@andy-vm:~$
Связку «адаптер SAM-ICE – программа OpenOCD» можно использовать для серийного производства для загрузки готовой прошивки во flash-память микроконтроллера. Например, чтобы очистить всю flash-память микроконтроллера Atmel SAM4S16C, необходимо выполнить команду:
openocd -f interface/jlink.cfg -f board/atmel_sam4s_ek.cfg -c init -c halt -c "flash erase_address 0x00400000 0x100000" -c reset -c
shutdown
Где 0x00400000 — адрес начала flash-памяти в адресном пространстве, 0x100000 — размер flash-памяти в шестнадцатеричной системе счисления, для микроконтроллера SAM4S16C составляет 1 Мбайт = 2^20 байт = 0x100000(16) байт. Адрес начала flash-памяти и ее размер получен из документации на данный микроконтроллер [12].
В случае успешного стирания вывод программы OpenOCD должен содержать строку:
erased address 0x00400000 (length 1048576) in 4.685278s (218.557 KiB/s)
Для непосредственно записи прошивки во flash-память надо выполнить команду:
openocd -f interface/jlink.cfg -f board/atmel_sam4s_ek.cfg -c init -c halt -c "flash write_image erase sam.hex" -c reset -c shutdown
Где sam.hex — имя файла с прошивкой в формате Intel HEX. OpenOCD принимает также другие форматы файлов с прошивкой, например binary и ELF.
В случае успешной загрузки прошивки во flash-память вывод должен содержать строки:
Info : sam4 does not auto-erase while programming (Erasing relevant sectors)
Info : sam4 First: 0x00000000 Last: 0x00000000
Info : Erasing sector: 0x00000000
wrote 8192 bytes from file sam.hex in 2.979438s (2.685 KiB/s)
То есть в данном случае очищается лишь те сектора flash-памяти, в которые будет размещена прошивка.
Создание комплекта в Qt Creator
Теперь, когда связка «адаптер отладки — сервер отладки» настроена и готова к работе, можно приступать к настройке интегрированной среды разработки, в нашем случае — Qt Creator.
При этом предполагается, что на рабочую станцию уже установлен инструментарий GCC для сборки для микроконтроллеров ARM, а также установлена и настроена сама среда Qt Creator, процесс установки и настройки которых подробно описан в [1].
Прежде всего, необходимо добавить сервер отладки, для этого в Qt Creator следует вызвать настройки (пункт главного меню «Инструменты –> Параметры…»), выбрать вкладку «BareMetal» («Голое устройство»), нажать «Добавить» и выбрать пункт «OpenOCD». Появится окно, где можно указать параметры запуска сервера (рис. 3). Следует отметить, что поддержка OpenOCD добавляется в среду Qt Creator при включении модуля «BareMetal», как это сделать — описано в [1].
Рис. 3. Добавление сервера отладки OpenOCD в Qt Creator.
Имя сервера отладки можно задать «OpenOCD + SAM-ICE» (рис. 3), «Режим запуска» следует установить в «Запуск в режиме TCP/IP», так как сервер OpenOCD будет выполняться на рабочей станции, то поле «Хост» должно содержать имя компьютера «localhost» и порт 3333, указанный ранее в конфигурационном файле openocd.cfg.
В поле «Исполняемый файл» следует вписать имя исполняемого файла openocd (или полный путь к нему, если необходимо). Поле «Файл конфигурации» должно содержать путь к файлу конфигурации OpenOCD, созданному ранее, в данном случае это ~sam/openocd.cfg. Поля «Команды инициализации» и «Команды сброса» по умолчанию содержат команды управления сервером, менять их содержимое не требуется.
Далее можно добавить новое устройство, для которого будет производиться сборка и отладка — микроконтроллер семейства Atmel SAM4S. Для этого в настройках Qt Creator следует выбрать вкладку «Устройства» и нажать «Добавить…».
После чего ввести имя устройства, например «Atmel SAM» и выбрать настроенный ранее сервер отладки «OpenOCD + SAM-ICE».
Когда устройство добавлено, можно окончательно настроить комплект для сборки так, как показано на рис. 4.
Рис. 4. Добавление комплекта для микроконтроллеров Atmel SAM4S в Qt Creator.
Компилятор GCC и отладчик GDB заданы из состава инструментария GCC для микроконтроллеров ARM так, как описано в [1].
Продолжение статьи будет оформлено в виде отдельной публикации, чтобы не раздувать объем.
Литература
- Курниц А. Разработка для микроконтроллеров STM32 в среде операционной системы Linux // Компоненты и технологии. 2015. № 10.
- www.sourceforge.net/projects/openocd
- www.we.easyelectronics.ru/CADSoft/ubuntueclipse-code-sourcery-openocd-j-link-arm-ilibystryy-start-dlya-somnevayuschihsya.html
- www.microsin.net/programming/arm/openocdmanual-part1.html
- www.microsin.net/programming/ARM/openocdmanual-part2.html
- www.microsin.net/programming/ARM/openocdmanual-part3.html
- www.openocd.org/doc/html/General-Commands.html
- www.asf.atmel.com/docs/latest/download.html
- www.atmel.com/tools/ATMELSTUDIO.aspx
- www.sourceware.org/newlib/libc.html#Syscalls
- www.e-kit.ru
- www.atmel.com/images/atmel-11100-32-bit%20cortex-m4-microcontroller-sam4s_datasheet.pdf
Автор: Rainbow