Программирование ARM: решение проблем, FAQ Процессор ARM для начинающих Fri, August 18 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Процессор ARM для начинающих Печать
Добавил(а) microsin   

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

[Выберите чип ARM]

Современные чипы ARM очень сложны, и хорошо их изучить все просто невозможно. Чипы разных производителей различаются набором периферии, размером памяти. Определитесь, с каким чипом ARM будете работать. Я выбрал чип Atmel AT91SAM7X256. Ознакомьтесь с документацией на него - скачайте с сайта Atmel описание (на английском) или зайдите на сайт gaw.ru. Рекомендую также просмотреть ссылки [4, 5].

Купите книжку "32/16-битные микроконтроллеры ARM7 семейства AT91SAM7 фирмы Atmel" Редькин П. П., Москва, издательский дом "Додека-XXI", 2008 г. Книжка представляет из себя почти дословный перевод документации Atmel на чип AT91SAM7X256. Читать её несравненно легче, чем документацию на английском. Кроме того, в книге и на прилагаемом диске вы найдете примеры программ, опробованных автором.

Rumik2008_Atmel_ARM7.jpg

[Поставьте себе среду разработки]

Рекомендую IAR Embedded Workbench IDE for ARM (далее просто IAR EW ARM). Сейчас доступна уже версия 5.3 (на момент написания статьи 1 декабря 2008 года), но можно поставить и 4-ю версию. Позагружайте и покомпилируйте примерчики, которые можете найти в папке c:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\examples\Atmel\at91sam7x-ek\. Там есть довольно простые примеры (и что самое главное - полезные, сам брал оттуда рабочий код).

[Макетная плата]

Когда надоест играться с симулятором, определитесь с отладочной платой. Спаять макетную плату самому со 100-выводным чипом нет смысла, лучше купить. На рынке сейчас есть 3 платы для AT91SAM7X256 (а сейчас, может быть, уже больше):

1. SAM7-EX256 от компании Olimex [6]. Она стоила 6500 рублей в Чип-И-Дип, 4360 в Терраэлектроника.
2. AT91SAM7X-EK от Atmel [7]. В Чип-И-Дип под заказ 13500 рублей.
3. Макетная плата AT91SAM7X [8]. Готовая плата стоит 1600 рублей, можно купить пустую плату за 500 рублей. Макетная плата AT91SAM7X является сильно облегченным аналогом SAM7-EX256 Olimex, цоколевка коннекторов расширения у них совпадает.
4. Макетная плата Simple ARM Board на AT91SAM7S256 [13]. 

Забегая вперед скажу, что сам выбрал SAM7-EX256 от компании Olimex (в то время платы AT91SAM7X еще не было). Коротко перечислю различия плат SAM7-EX256 и AT91SAM7X-EK, их достоинства и недостатки.

[Плюсы SAM7-EX256]
- хорошая цена
- плата компактная
- в комплекте есть цветной графический LCD индикатор NOKIA6610 (поганый индикатор, конечно, но что вы хотели за такие деньги?)
- на плате имеется распаянный интерфейс CAN, выведенный на разъем DB9
- разведен чувствительный усилитель для микрофона, есть аналоговый спикер с усилителем, выход на наушники.
- просто организован USB-вход (без специального чипа)
- плата существенно проще
- качественно организован порт USB - его можно программно выключать и включать (реализовано управление нагрузочным резистором сигнала D+).
[Минусы SAM7-EX256]
- только один разъем RS232 (DB9), который можно переключить либо на USART, либо на DBGU
- нет индикационных светодиодов
- нет макетного поля
- отсутствует документация (есть только принципиальная схема). Помню, поначалу это меня сильно возмутило =)
- мало портов процессора выведено "наружу" (на разъем)

[Плюсы AT91SAM7X-EK]
- есть 2 отдельных порта RS232 (DB9), один подключен на USART, другой на DBGU
- есть 5 индикационных светодиодов
- есть макетное поле
- все выводы процессора выведены на внешний коннектор
- плата гибко конфигурируется перемычками
- плата отлично документирована (кроме подробной принципиальной схемы, есть еще хорошее описание, что для новичка может оказаться важным)
- в IAR EW специально под эту плату есть много примеров
[Минусы AT91SAM7X-EK]
- дорогая
- нет в комплекте графического LCD индикатора
- не распаян CAN интерфейс
- аналоговый выход низкочастотный (только для очень низких частот и постоянного напряжения). Аналоговый вход низкочувствительный.
- все продавцы возят обычно только SAM7-EX256, а AT91SAM7X-EK только под заказ
- порт USB упрощенный, отсутствует управление нагрузочным резистором сигнала D+. 

Сильной стороной AT91SAM7X-EK от Atmel - роскошная документация и примеры, заточенные именно под эту плату. Если Вы решили заняться программированием ARM всерьез, то этот недостаток легко преодолим - все примеры правятся под плату SAM7-EX256 от Olimex, а некоторые работают и совсем без коррекции кода (точнее, без переделки работают все примеры, но не совсем так, как ожидалось).

[Отладка]

Определитесь, как будете отлаживать. Варианта два - первый дешевый (bootloader), второй удобный (JTAG). Если выбрали Boot Loader, то ройте Интернет по ссылкам на SAM-BA. Отлаживать тут сможете только по принципу прошил-проверил, и отладочную информацию можно выводить только в отладочный порт DBGU (RS232). Если выбрали JTAG (что сделал я, чего и Вам советую), то уже можно отлаживать с максимальным комфортом, используя точки останова и пошаговую отладку по коду. Отладчиков (внутрисхемных эмуляторов) для ARM много, но вариантов по сути только 2. И опять, первый дешевый Wiggler, его можно найти у Olimex [9], называется ARM-JTAG, он есть в Москве у многих продавцов. Девайс несложный, его можно даже спаять самому, благо схемы в Интернете есть), второй удобный (MT-LINK, питерская копия SEGGER J-Link, его тоже купить просто, но спаять самому - вряд ли). Догадайтесь с первой попытки, какой вариант я выбрал? Правильно, MT-LINK. Стоит 2305 руб. в ТерраЭлектроника. Китайский аналог J-Link можно купить на ebay.com по цене порядка $14 [10].

Для MT-LINK ставьте драйвера от SEGGER, подключайте и работайте. Если что-то не получится, читайте статью [11]. Программное обеспечение, схемы и документацию, упоминавшиеся в статье, можно скачать по ссылке [12], пароль на rar-архив 3dqh5u4c2.

[Программирование кристалла AT91SAM7X]

Для внутрисхемного программирования микроконтроллера о порту USB или RS-232 требуется установить бесплатный пакет AT91 ISP, разработанный в корпорации ATMEL. Он содержит две программы: SAM-BA (SAM Boot Assistant – помощник загрузки) и SAM-PROG. SAM-BA позволяет программировать и настраивать микросхемы семейств AT91SAM7 по интерфейсу USB или RS-232, используя ROM-загрузчик микросхемы. В ROM-загрузчике прописаны константы инициализации модуля ФАПЧ, поэтому при загрузке микросхемы через порт USB на программируемой плате следует устанавливать предписанные номиналы компонентов ФАПЧ и использовать кварцевый резонатор с частотой 18, 432 МГц.

В случае использования порта RS-232 требования к частоте кварца не столь жесткие, так как в ROM-загрузчике есть процедура подстройки скорости обмена под различные номиналы кварцевых резонаторов. Таблица с рекомендованными частотами кварцевых резонаторов имеется в файле документации на микросхему. При подаче питания происходит запуск программы ROM-загрузчика, и микросхема готова к программированию. При запуске SAM-BA необходимо правильно указать способ соединения и тип программируемой микросхемы. При первом подключении платы к USB Windows установит для нее драйверы из пакета AT91 ISP. Для перевода микросхемы AT91SAM7X в режим программирования необходимо провести операцию стирания. Для этого при включенном питании платы на короткое время нужно замкнуть на плате джампер "ERASE", после чего выключить и снова включить питание платы. После подключения платы к компьютеру при помощи кабеля USB или RS-232 необходимо запустить программу SAM-BA. В первом окне нужно выбрать тип отладочной платы на соответствующей микросхеме (например, AT91SAM7X256-EK) и интерфейс обмена (например, "USB connection"). При этом откроется главное окно SAM-BA. Вид главного окна программы SAM-BA представлен на рисунке.

SAM-BA-window.jpg

Это окно предоставляет пользователю возможность программирования и чтения как FLASH и SRAM, так и внешней памяти Data-FLASH. Для загрузки кода во flash-память микроконтроллера нужно выбрать в окне закладку "flash", после чего с помощью кнопки "Browse" указать файл для программирования. Приложение SAM-BA поддерживает файлы кода с расширением bin. При нажатии на кнопку "Send File" выбранный файл будет записан во flash-память контроллера. Процесс программирования занимает несколько секунд. Проверить правильность программирования памяти можно, нажав на кнопку "Compare send file with memory".

По умолчанию, контроллер SAM7X выполняет программу из ROM-памяти, поэтому для запуска программы из flash-памяти необходимо установить специальный бит, который переключит стартовый адрес на начало flash-памяти с пользовательской программой. Сделать это можно, выбрав строку "Boot from Flash (GPNVM2)" в секции "Script(s)" главного окна SAM-BA и нажав на кнопку "Execute".

На этом работа с SAM-BA завершена, следует закрыть приложение и перезагрузить контроллер. При подключении по USB необходимо переподключить плату, поскольку определение USB-устройств происходит только при их подключении. Если подключить UART0 (на плате AS-SAM7S-256 маркирован RS-232; не путать с портом DEBUG!) к порту RS-232 компьютера, то в стандартной терминальной программе можно увидеть сообщение, которое пишет плата при загрузке.

[Ссылки]

1. ARM: записи чайника.
2. Программы и утилиты для программирования ARM.
3. Книга + CD-ROM "32/16-битные микроконтроллеры ARM7 семейства AT91SAM7 фирмы Atmel" Редькин П. П., Москва, издательский дом "Додека-XXI", 2008 г.
4. AT91SAM7X256 Application Notes Tools Software site:atmel.com.
5. AT91SAM7X256 AT91SAM7X128 Микроконтроллер семейства AT91 на основе ядра ARM Thumb site:gaw.ru.
6. SAM7-EX256 Olimex.
7. AT91SAM7X-EK Atmel.
8. Макетная плата AT91SAM7X.
9. ARM-JTAG Dongle Olimex site:olimex.com.
10. J-Link site:ebay.com.
11. ARM: как начать работать с MT-LINK.
12. Программное обеспечение, схемы и документация, пароль на rar-архив 3dqh5u4c2.
13. Simple ARM Board на AT91SAM7S256

 

Комментарии  

 
0 #5 Serhio 14.07.2011 21:32
Всем доброго времени суток. Подскажите, как установить среду разработки IAR Embedded Workbench. Не знаю, где взять номер лицензии. Действую как описано в блокноте, но пока безуспешно(((
Цитировать
 
 
0 #4 Петр 06.08.2010 18:15
MicroSin, просвети темного :cry:
Пытаюсь запустить программу из sram, ничего не получается.
Из флеша программа стартует нормально, выбираю в ewawr конфигурацию sram, пользуюсь sam-ba. Может, бит какой не выставляю? Такое ощущение, будто до программы не доходит - после выключения/включения платы не появляется надпись о неизвестном устройстве USB, можно сразу заливать новую программу.

microsin: биты тут ни при чем. Скорее всего просто заливаемая программа с ошибкой. Возьмите готовый пример Atmel/IAR, ничего там не меняйте, проверьте, что он соответствует по схеме Вашей макетной плате, проверьте тип чипа при компиляции, настроечные макроопределени я, перекомпилируйт е, залейте через SAM-BA. Все должно работать одинаково в конфигурациях и flash и sram.
Цитировать
 
 
0 #3 Игорь 02.02.2010 13:17
Пользуюсь IAR 5.40, прошиваю через SAM-BA. На макете прошивка как раз та, которая была по ссылке(она и была изначально + я нашёл в ссылке и исходники и уже скомпилированны й бинарник). В ближайшее время появиться
виглер(знакомый обещал спаять), но я уже задумываюсь купить один из тех программаторов которые ты советовал(MT-LINK) - Это будет мой первый внутрисхемный дебагер ) я до него 6 лет прогал без внутрисхемной отладки ).

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

microsin: Привет, Игорь. Разобрался с примером от Olimex. Проблема была в том, что у среды разработки IAR новой версии другой код поддержки инициализации процессора AT91SAM7X256, и из-за этого скомпилированны й проект не работал. Если интересно, то результаты моих изысканий здесь - http://microsin.ru/content/view/1090/44/, там же можно скачать рабочий проект уже для IAR 5.30 (см. Ссылки).
Цитировать
 
 
0 #2 Игорь 02.02.2010 13:10
Я недавно приобрёл SAM7-EX256. И нарыл примеров с Олимекса... Сейчас меня очень интересует тот что базовый на индикатор выводит скалолаза и подпись Олимекс(http://www.olimex.com/dev/soft/arm/SAM7/SAM7_EX256.zip).
У меня вышла небольшая Проблемка когда попытался зашить откомпилиный проект ИАРОМ 5.40 - бинарник после зашивки напрочь зависает :cry: даже без малейших изменений в коде...
Собранный бинарник который шёл в комплекте с исходниками шьётся и замечательно работает... Не сталкивались ли вы с Аналогичной проблемой? я конечно догадываюсь что это может быть изменение компилятора... но для меня это был бы большой удар ))) напишите плиз на заранее благодарю!

microsin: как только найду время, попробую поиграться с проектом SAM7_EX256.zip. Правда, корректного эксперимента не получится, даже если у меня все заработает - пробовать буду на IAR 5.20 (который отсюда - http://microsin.ru/content/view/1059/44/).

Не расстраивайтесь , других примеров полно, поразбирайтесь пока с ними - загляните в папку c:Program FilesIAR SystemsEmbedded Workbench 5.0 EvaluationARMex amplesAtmelat91sam7x-ek:

basic-can-project
basic-dataflash-project
basic-dhrystone-project
basic-emac-project
basic-internalflash-project
basic-iso7816-project
basic-pwm-project
basic-rtt-project
basic-serialflash-project
basic-twi-eeprom-project
basic-usart-hw-handshaking-project
getting-started-project
usb-device-ccid-project
usb-device-cdc-serial-project
usb-device-core-project
usb-device-hid-keyboard-project
usb-device-massstorage-project
usb-device-massstorage-project-no-handler

Все эти примеры будут отлично работать на Вашей макетной плате. Их можно брать за основу любого Вашего проекта. А из SAM7_EX256.zip просто будете выдирать понравившиеся куски кода.

Вы каким дебаггером пользуетесь? Wiggler или J-LINK (MT-LINK)? Чем прошиваете AT91SAM7X256 на макетной плате?
Цитировать
 
 
0 #1 Игорь 26.01.2010 22:12
Я недавно приобрёл SAM7-EX256. И нарыл примеров с Олимекса... Сейчас меня очень интересует тот что базовый на индикатор выводит скалолаза и подпись Олимекс (http://www.olimex.com/dev/soft/arm/SAM7/SAM7_EX256.zip).
У меня вышла небольшая проблема, когда попытался зашить скомпилированны й проект в среде IAR 5.40 - бинарник после зашивки напрочь зависает :cry: даже без малейших изменений в коде... Собранный бинарник который шёл в комплекте с исходниками шьётся и замечательно работает... Не сталкивались ли вы с Аналогичной проблемой? Я конечно догадываюсь что это может быть изменение компилятора... но для меня это был бы большой удар. Напишите пожалуйста на заранее благодарю!

microsin: а что мешает запустить проект в отладчике, и посмотреть, где зависание?
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page