Програмування і налагодження мікроконтролерів ARM Cortex-M4 фірми Atmel в середовищі операційної системи Linux. Частина 1

Представляємо електронну версію статті з кімнати №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, ключові особливості якого наведено нижче:
  1. Ядро ARM Cortex-M4, максимальна тактова частота 120МГц
  2. Обсяги пам'яті на кристалі: 1 Мбайт флеш-пам'яті і 128 кбайт ОЗУ
  3. Серед периферійних пристроїв можна виділити: USB контролер (робота тільки в режимі Device), контролер зовнішньої NAND flash-пам'яті, контролер SD карт пам'яті
  4. Контролери інтерфейсів UART, I2C, SPI та ін
  5. 100-выводный корпус
Серед особливостей оціночної плати SAM4S-EK можна виділити наступні:
  1. Мікросхема NAND flash-пам'яті Micron MT29F2G08ABAEA об'ємом 2 Гбіт
  2. Кольоровий дисплейний модуль FTM280C34D роздільною здатністю 320x240 пікселів, з діагоналлю 2,8 дюйма і з резистивної сенсорною панеллю. Дисплей містить вбудований контролер Ilitek ILI9320, підключений до мікроконтролера по паралельному інтерфейсу.
  3. Контролер резистивної сенсорної панелі Texas Instruments ADS7843E
  4. Розпаяні два DB9 роз'єму для двох портів RS-232 (один з них — з сигналами RTS, CTS), виведено також інтерфейс RS-485
  5. Елементи сенсорного управління по технології Atmel QTouch, розташовані прямо на друкованій платі (сенсорні кнопки 5 шт. і слайдер)
  6. Електретний мікрофон і операційний підсилювач TS922 для нього
  7. Підсилювач звукової частоти для підключення навушників TPA022, а також 3,5 мм гніздо типу «джек».
  8. Два коаксіальних BNC роз'єм, які підключені до вбудованим АЦП і ЦАП блокам мікроконтролера.
  9. Тримач micro-SD карти пам'яті
  10. 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 кгц
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 кгц
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.685278 s (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.979438 s (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].

Продовження статті буде оформлено у вигляді окремої публікації, щоб не роздмухувати обсяг.

Література

  1. Курниц А. Розробка для мікроконтролерів STM32 в середовищі операційної системи Linux // Компоненти і технології. 2015. № 10.
  2. www.sourceforge.net/projects/openocd
  3. www.we.easyelectronics.ru/CADSoft/ubuntueclipse-code-sourcery-openocd-j-link-arm-ilibystryy-start-dlya-somnevayuschihsya.html
  4. www.microsin.net/programming/arm/openocdmanual-part1.html
  5. www.microsin.net/programming/ARM/openocdmanual-part2.html
  6. www.microsin.net/programming/ARM/openocdmanual-part3.html
  7. www.openocd.org/doc/html/General-Commands.html
  8. www.asf.atmel.com/docs/latest/download.html
  9. www.atmel.com/tools/ATMELSTUDIO.aspx
  10. www.sourceware.org/newlib/libc.html#Syscalls
  11. www.e-kit.ru
  12. www.atmel.com/images/atmel-11100-32-bit%20cortex-m4-microcontroller-sam4s_datasheet.pdf


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.