SK-MAT91SAM9G45: запуск простейшего примера кода Печать
Добавил(а) microsin   

На отладочной плате SK-MAT91SAM9G45 установлен микроконтроллер ATMEL AT91SAM9G45. Для него есть простейший пример кода, мигающий светодиодами - getting-started-project. Этот пример очень хорошо подходит для быстрого старта освоения платформы ARM9.

sk mat91sam9g45_top sk mat91sam9g45_bot sk mat91sam9g45_430_plug

Отладочная плата 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-ARM-example-projects

Запустите 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).

IAR-ARM-debug-AT91SAM9G45-start

Теперь нужно выбрать в меню Debug -> Go (или нажать F5), и программа запустится. Однако снаружи это никак не видно, поскольку на сильно урезанной платке SK-MAT91SAM9G45 нет ни одного индикационного светодиода, подключенного к портам ввода/вывода микроконтроллера AT91SAM9G45. Можно исправить ситуацию, если спаять цепочку из светодиода и резистора 470 ом, и подключить его к коннектору X1, между землей GND (контакт 1 коннектора X1) и портом CPU_PD25 по схеме макетной платы [] (на корпусе AT91SAM9G45 чипа 324-ball TFBGA это вывод G1). На фото показан внешний вид такой цепочки.

LED-IMG 1536 LED-IMG 1537

Так как коннектор X1 не запаян, то эту цепочку можно просто вставить в дырки 1 и 3 (соблюдая полярность, иначе светодиод не засветится). Катод светодиода получается подключенным к земле, а анод через резистор - к порту микроконтроллера PD25. При включении питания светодиод тускло светится - так и должно быть, поскольку после сброса/подачи питания по умолчанию все порты ввода/вывода настраиваются как входы с верхним подтягивающим резистором (pullup, он расположен внутри микроконтроллера). Номинал резистора pull-up довольно большой (100 кОм), поэтому светодиод светится тускло. Чтобы он засветился ярко, программа должна настроить порт PD25 как выход, и подать на него лог. 1 (как это делается, описано далее в доработке примера getting-started-project).

LED-flashing-on-SK-MAT91SAM9G45 

Пример кода getting-started-project выводит также отладочную информацию через DBGU-порт (RS-232). Чтобы увидеть отладочный вывод DBGU, нужно подключиться нуль-модемным кабелем к коннектору X10 макетной платы SK-MAT91SAM9G45, и подключиться к порту COM1 терминальным клиентом на скорости 115200, 8-бит данных, 1 стоп-бит, без бита четности, и без аппаратного управления квитированием.

DBGU-conn-SK-MAT91SAM9G45-IMG 1530 DBGU-output-getting-started-project-on-SK-MAT91SAM9G45

Есть и другие примеры проектов кода, которые можно запустить на SK-MAT91SAM9G45, см. EXAMPLE PROJECTS -> ATMEL -> at91sam9g45-ek.

basic-ac97-project воспроизводит и записывает звук через расположенную на плате микросхему кодека AC97 (к сожалению, на плате SK-MAT91SAM9G45 эта микросхема не запаяна - в целях максимального удешевления).
basic-dataflash-project выполняет очистку, чтение и запись микросхемы памяти dataflash (относится к отладочной плате ATMEL AT91SAM9G45-EK).
basic-emac-project запускает подсистему Ethernet, которая может отвечать на ping (т. е. отвечать на запросы ICMP ECHO request, посланные по сети).
basic-emac-uip-helloworld-project рабочий проект WEB-сервера и telnet-сервера, которые используют сетевую библиотеку UIP [6].
basic-emac-uip-telnetd-project рабочий проект telnet-сервера, который используют сетевую библиотеку UIP [6].
basic-emac-uip-webserver-project рабочий проект WEB-сервера, который используют сетевую библиотеку UIP [6].
basic-fatfs-project демо, показывающее работу с файловой системой FAT (проект основан на Open Source FAT filesystem: FatFs [7]).
basic-fs-project другое демо, основанное на Open Source FAT filesystem.
basic-isi-project работа с графическим дисплеем - конфигурирует ISI и отображает картинки на LCD, если он подключен.
basic-lcd-project отображает картинки на внешнем, установленном на плате LCD-экране (относится к отладочной плате ATMEL AT91SAM9G45-EK).
basic-nandflash-project очищает и записывает внешний чип памяти NandFlash. На плате SK-MAT91SAM9G45 это микросхема DD2. В неё может быть записан загрузчик первого и второго уровня, а также файловая система операционной системы Linux, см. [, ]).
basic-norflash-project очищает и записывает внешний чип памяти NorFlash (относится к отладочной плате ATMEL AT91SAM9G45-EK).
basic-rtc-project демонстрирует базовые приемы работы с периферией Real-Time Clock (RTC).
basic-rtt-project демонстрирует базовые приемы работы с периферией Real-Time Timer (RTT).
basic-touchscreen-project запускает программу, которая позволяет пользователю рисовать на LCD с помощью стилуса (если подключен тачскрин).
basic-twi-eeprom-project

читает и записывает внешнюю микросхему памяти TWI (IIC, I2C) serial EEPROM. 

basic-twi-slave-project пример симуляции TWI slave device (eeprom).
basic-usart-hw-handshaking-project пример подстройки скорости USART при передаче файла, используя аппаратные линии квитирования RTS/CTS (RTS/CTS hardware handshaking).
getting-started-project базовый пример работы с микроконтроллером AT91SAM.
usb-device-cdc-serial-project этот проект работает как мост между портами USB и USART. На компьютере хоста USB организуется виртуальный COM-порт (USB CDC), который позволяет устроить простейший обмен данными через USB.
usb-device-core-project этот пример показывает базовое приложение USB, которое выполняет только шаг энумерации, так что хост USB может определить появление нового USB-устройства в системе.
usb-device-hid-keyboard-project запускает USB-клавиатуру, которая позволяет пользователю печатать символы и выдавать нажатия специальных клавиш (таких как Shift или NumLock) путем нажатия на соответствующие кнопки макетной платы (относится к отладочной плате ATMEL AT91SAM9G45-EK). На отладочной плате SK-MAT91SAM9G45 никаких кнопок нет, но их можно подключить к коннекторам X1, X2, X4, и клавиатура также будет работать.
usb-device-hid-mouse-project запускает мышь USB, что позволяет пользователю управлять курсором на компьютере USB хоста, управляя джойстиком (относится к отладочной плате ATMEL AT91SAM9G45-EK). На плате SK-MAT91SAM9G45 нужно подключать внешние кнопки для организации джойстика.
usb-device-hid-transfer-project создает USB HID устройство, которое пользователь может использовать для организации обмена данными с программой на компьютере PC.

Еще есть пример кода, основанный на 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]

SD-card-SK-MAT91SAM9G45-IMG 1531

Чтобы платка SK-(M)AT91SAM9G45/M10 начала нормально загружаться с SD-карты, нужно проделать следующие шаги:

1. Скомпилировать в бинарник любой пример от IAR/ATmel для платы ATMEL AT91SAM9G45-EK. На примере getting-started-project получится файл at91sam9g45_sram.bin, который лежит в папке getting-started-project\ewp\at91sam9g45_sram\Exe.

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
00000010: 14 F0 9F E5 B5 37 00 00 | 70 F0 9F E5 0C 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 компьютера.

SK-MAT91SAM9G45-USB-conn-IMG 1543

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.

SK-MAT91SAM9G45-SAM-BA-01

5. Откроется главное окно утилиты SAM-BA.

SK-MAT91SAM9G45-SAM-BA-02

Установите перемычку J2 NAND CS. Выберите закладку NandFlash. Выберите в выпадающем списке Scripts -> Enable NandFlash, нажмите кнопку Execute. Выполнится инициализация подключения к памяти NAND Flash, и теперь Вы сможете записывать в неё данные.

(sam-ba_2.11) 1 % NANDFLASH::Init
-I- NANDFLASH::Init (trace level : 4)
-I- Loading applet applet-nandflash-at91sam9m10.bin at address 0x70000000
-I- Memory Size : 0x10000000 bytes
-I- Buffer address : 0x70003DA4
-I- Buffer size: 0x20000 bytes
-I- Applet initialization done

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
-I- Send File D:/boot.bin at address 0x0
GENERIC::SendFile D:/boot.bin at address 0x0
-I- File size : 0x37B5 byte(s)
-I- Writing: 0x37B5 bytes at 0x0 (buffer addr : 0x70003DA4)
-I- 0x20000 bytes written by applet

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.
2. ARM: как начать работать с J-Link (MT-LINK).
3. SAM9G45 - корневая ссылка на документацию по микроконтроллерам AT91SAM9G45 на сайте Atmel
4. AT91SAM Bootstrap - загрузчик для платформы SAM9 Atmel
5. SAM-BA 2.11 for Windows (XP, Vista, Seven editions) - программа и драйвер.
6. uIP Embedded TCP/IP Stack.
7. Библиотека FatFS: модуль файловой системы FAT.
8. Исходный код проекта getting-started-project модифицированного для платы SK-MAT91SAM9G45, документация.
9IAR: использование загрузчика FLASH (Flash loader) AT91 семейства микроконтроллеров.