Процессор 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