SK-MAT91SAM9G45: запуск простейшего примера кода |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
На отладочной плате SK-MAT91SAM9G45 установлен микроконтроллер ATMEL AT91SAM9G45. Для него есть простейший пример кода, мигающий светодиодами - getting-started-project. Этот пример очень хорошо подходит для быстрого старта освоения платформы ARM9. Отладочная плата SK-MAT91SAM9G45 представляет собой сильно урезанный вариант оригинальной отладочной платы ATMEL AT91SAM9G45-EK. Несмотря на урезанность, все примеры кода IAR и Atmel могут быть запущены на SK-MAT91SAM9G45 либо сразу, либо с незначительными косметическими доработками. В этой статье будет рассмотрен запуск простейшего примера кода на плате SK-MAT91SAM9G45, и организация его загрузки с карты SD и NANDflash памяти. Пример кода getting-started-project для AT91SAM9G45 можно найти в установленном IAR Embedded Workbench 550.1 for ARM [1]. Запустите IAR, на стартовом окне щелкните на EXAMPLE PROJECTS -> ATMEL -> at91sam9g45-ek -> getting-started-project. Это проект, который работает на микроконтроллере ATMEL AT91SAM9G45, и он подготовлен для запуска на отладочной плате ATMEL AT91SAM9G45-EK. Однако он прекрасно запустится и на SK-MAT91SAM9G45, поскольку микроконтроллер на обоих платах один и тот же. Выберите папку, куда будет скопирован проект (например, с:\temp), и он откроется в среде IAR. По умолчанию отладка настроена на использование аппаратного отладчика J-Link и проект сразу готов к компиляции и запуску. Если Вы счастливый обладатель отладчика J-Link (MT-LINK) [2], то просто подключите отладчик стандартным 20-проводным кабелем к разъему JTAG X7, и запустите компиляцию и отладку конфигурации at91sam9g45_sram (меню Project -> Make, и затем Project -> Download and Debug). Теперь нужно выбрать в меню Debug -> Go (или нажать F5), и программа запустится. Однако снаружи это никак не видно, поскольку на сильно урезанной платке SK-MAT91SAM9G45 нет ни одного индикационного светодиода, подключенного к портам ввода/вывода микроконтроллера AT91SAM9G45. Можно исправить ситуацию, если спаять цепочку из светодиода и резистора 470 ом, и подключить его к коннектору X1, между землей GND (контакт 1 коннектора X1) и портом CPU_PD25 по схеме макетной платы [] (на корпусе AT91SAM9G45 чипа 324-ball TFBGA это вывод G1). На фото показан внешний вид такой цепочки. Так как коннектор X1 не запаян, то эту цепочку можно просто вставить в дырки 1 и 3 (соблюдая полярность, иначе светодиод не засветится). Катод светодиода получается подключенным к земле, а анод через резистор - к порту микроконтроллера PD25. При включении питания светодиод тускло светится - так и должно быть, поскольку после сброса/подачи питания по умолчанию все порты ввода/вывода настраиваются как входы с верхним подтягивающим резистором (pullup, он расположен внутри микроконтроллера). Номинал резистора pull-up довольно большой (100 кОм), поэтому светодиод светится тускло. Чтобы он засветился ярко, программа должна настроить порт PD25 как выход, и подать на него лог. 1 (как это делается, описано далее в доработке примера getting-started-project). Пример кода getting-started-project выводит также отладочную информацию через DBGU-порт (RS-232). Чтобы увидеть отладочный вывод DBGU, нужно подключиться нуль-модемным кабелем к коннектору X10 макетной платы SK-MAT91SAM9G45, и подключиться к порту COM1 терминальным клиентом на скорости 115200, 8-бит данных, 1 стоп-бит, без бита четности, и без аппаратного управления квитированием. Есть и другие примеры проектов кода, которые можно запустить на SK-MAT91SAM9G45, см. EXAMPLE PROJECTS -> ATMEL -> at91sam9g45-ek.
Еще есть пример кода, основанный на PowerPackRTOS, см. EXAMPLE PROJECTS -> IAR PowerPac board support packages -> Atmel -> BSP for AT91SAM9G45. [Доработка примера getting-started-project] Чтобы проект getting-started-project мог действительно мигать светодиодом, подключенным к ножке CPU_PD25 (на корпусе чипа 324-ball TFBGA вывод G1), нужно немного доработать код. Во-первых, нужно ножку PD25 микроконтроллера AT91SAM9G45 настроить как выход, и во-вторых, нужно каждые 500 мс на выводе PD25 устанавливать то лог. 1, то лог. 0. Далее указаны файлы, к которые добавлен необходимый код. [at91lib\boards\at91sam9g45-ek\board.h] ... /// LED, connected to G1 #define PIN_LED_CPU_PD25 {1 << 25, AT91C_BASE_PIOD, AT91C_ID_PIOD_E, PIO_OUTPUT_1, PIO_DEFAULT} ... [at91sam9g45-ek\getting-started-project\main.c] ... const Pin pinMyLED = PIN_LED_CPU_PD25; ... //------------------------------------------------------------------------------ /// Configures LEDs #1 and #2 (cleared by default). //------------------------------------------------------------------------------ void ConfigureLeds(void) { LED_Configure(0); LED_Configure(1); PIO_Configure(&pinMyLED, 1); } ... // Main loop while (1) { ... // Wait for 500ms Wait(500); // Toggle MyLed if (PIO_GetOutputDataStatus(&pinMyLED)) { PIO_Clear(&pinMyLED); } else { PIO_Set(&pinMyLED); } } ... Модифицированный код проекта getting-started-project можно скачать по ссылке [8]. [Загрузка кода программы SK-MAT91SAM9G45 при включении питания] Поскольку AT91SAM9G45 не имеет flash памяти программ, из которой код может сразу запуститься при включении питания, то для него предусмотрена специальная процедура загрузки кода программы. Как только питание подано, сначала активизируется нестираемый загрузчик, который встроен в AT91SAM9G45 на заводе (ROM Boot Program). Процессор AT91SAM9G45 управляет загрузкой из определенной памяти в зависимости от логического уровня на ножке BMS (Boot Mode Select) после сброса (подачи питания). Для этого зарезервирована внутренняя область памяти 0x0..0x000FFFFF (1M ячеек), которая может быть привязана (mapped) к нужной памяти. Если BMS после сброса в лог. 1, то загрузочной памятью (boot memory) является встроенная в процессор, нестираемая ROM, куда на заводе записан загрузчик Atmel. Если BMS после сброса в лог. 0, boot memory подключена на Chip Select 0 интерфейса внешней шины (External Bus Interface). На отладочной плате SK-MAT91SAM9G45 ножка BMS жестко заведена на +3.3V (на неё подана лог. 1), поэтому для первоначальной загрузки этой платы всегда должна использоваться специальная процедура, регламентируемая ROM-загрузчиком Atmel. Далее для простоты будет рассмотрено только поведение загрузки при BMS==1. Если нужны подробности, то см. даташит на микроконтроллер AT91SAM9G45, раздел Boot Strategies. Для отладочной платы SK-MAT91SAM9G45 загрузка кода программы может быть произведена либо с карты SD, либо из микросхемы DD2 NANDflash. [Загрузка с карты SD] Чтобы платка SK-(M)AT91SAM9G45/M10 начала нормально загружаться с SD-карты, нужно проделать следующие шаги: 2. Переименовать файл at91sam9g45_sram.bin в boot.bin. 3. Редактором WinHEX поправить в файле boot.bin 4 байта, начиная с адреса 0x14 относительно начала файла. Туда нужно вписать длину в байтах файла boot.bin. Например, файл boot.bin имеет размер 14261 байт, в HEX-виде это число 0x000037B5. Тогда нужно вписать последовательно байты B5 37 00 00, начиная с адреса 0x00000014 (заменяя старые значения байт на новые): 00000000: 84 F0 9F E5 14 F0 9F E5 | 14 F0 9F E5 14 F0 9F E5 4. Снять перемычку J2 NAND CS. Этим мы запретим доступ к микросхеме памяти DD2 NAND Flash, что предотвратит попытку загрузки с неё. 5. Записать измененный файл boot.bin на SD-карту в корень диска, вставить карту в слот, включить питание (либо нажать на кнопку SW1 Reset). Светодиод начнет мигать. [Загрузка с NAND Flash] Чтобы программа начала загружаться при включении питания с микросхемы NAND Flash, нужно данные модифицированного файла boot.bin записать в эту микросхему памяти, начиная с адреса 0. Это можно проделать через интерфейс USB, воспользовавшись утилитой SAM-BA [5] (SAM-BA® Boot Assistant) предоставляемой компанией Atmel. Процесс по шагам: 1. Скачайте архив по ссылке [5], распакуйте из него папку sam-ba_2.9_cdc_xp_vista в любое место на диске (например в c:\Program Files). 2. Снимите перемычку J2 NAND CS, и удалите карту SD из слота. Это нужно для того, чтобы не загрузился код ни с NAND Flash, ни с карты SD, и при включении питания ROOM Boot Program перешла к выполнению кода SAM-BA. Подключите питание к плате. 3. Снимите перемычку J7 USB-PWR (она не нужна, если плата SK-MAT91SAM9G45 запитана от внешнего источника питания, иначе может произойти конфликт питания VBUS +5V с напряжением внешнего источника). На фотографии перемычка J7 показана красной стрелкой. Соедините специальным USB-кабелем USB-A (он идет в комплекте с платой) коннектор X13 с портом USB компьютера. 3. Операционная система Windows обнаружит новое устройство AT91 USB to Serial Converter и запросит драйвер. Укажите мастеру путь в папку sam-ba_2.9_cdc_xp_vista\drv (там находится нужный информационный файл atm6124_cdc.inf). После окончания установки у Вас в системе появится новый COM-порт (его номер можно посмотреть в Диспетчере Устройств). 4. Запустите файл sam-ba_cdc_2.9.xp_vista.exe. Выберите в выпадающем списке нужный COM-порт и плату at91sam9g45-ek (или sk-(m)at91sam9g45). Нажмите кнопку Connect. Как вариант, для SAM-BA можно подключиться не через USB, а через порт DBGU. 5. Откроется главное окно утилиты SAM-BA. Установите перемычку J2 NAND CS. Выберите закладку NandFlash. Выберите в выпадающем списке Scripts -> Enable NandFlash, нажмите кнопку Execute. Выполнится инициализация подключения к памяти NAND Flash, и теперь Вы сможете записывать в неё данные. (sam-ba_2.11) 1 % NANDFLASH::Init 6. Загрузите в NandFlash, начиная с адреса 0x00 специально подготовленный файл boot.bin. Это наш скомпилированный двоичный код getting-started-project, в котором поправлено 4 байта по адресу 0x14 - там должно быть прописано слово размера файла (см. "Загрузка с карты SD", шаг 3). Для этого в Download / Upload File -> Send File Name выберите модифицированный файл boot.bin, и нажмите кнопку Send File. (sam-ba_2.11) 1 % send_file {NandFlash} "D:/boot.bin" 0x0 0 7. Передерните питание, или нажмите кнопку SW1 Reset. Светодиод, подключенный к порту PD25, начнет мигать с частотой 1 Гц. Это значит, что успешно запустилась программа getting-started-project, которую Вы записали в NAND Flash. [Использование загрузчика IAR/Atmel] Можно упростить процедуру подготовки запуска с внешней памяти, если сконфигурировать использование загрузчика в проекте IAR [9]. Для этого достаточно выбрать свойства проекта через меню Project -> Options... -> Debugger -> закладка Download -> поставьте галку Use flash loader(s) -> поставьте галку Override default .board file -> в поле ввода выберите файл $TOOLKIT_DIR$\config\flashloader\Atmel\AT91SAM9G45-EK\at91sam9g45-nandflashboot.board. После этого выполните Project -> Download and Debug, и необходимый для загрузки код будет залит в память DataFlash отладочной платы (в коде будут автоматически изменены 4 байта по адресу 0x14, теперь вручную эту операцию делать не надо). Если остановить отладку и передернуть питание, то программа сама загрузится из DataFlash и начнет работать. [Ссылки] 1. Установка IAR Embedded Workbench 550.1 for ARM. |