Vývojový kit AT91SAM9XE-EK

Marián Kubáň, Peter Barcík UREL, FEKT, VUT Brno
xbarci00@stud.feec.vutbr.cz
xkuban00@stud.feec.vutbr.cz

Obsah:

  1. Úvod
  2. Riešenie
  3. Problémy
  4. Záver
  5. Na stiahnutie
  6. Literatúra

Úvod

Úlohou projektu je vytvoriť jednoduchý popis a demo úlohu na vývojovom kite AT91SAM9XE-EK. Pri zadaní úlohy bol kit nefunkčný.

Riešenie

Popis vývojového kitu

Vývojový kit AT91SAM9XE je vhodný na vývoj nasledujúcich aplikácií: WEB server, linuxové prostredie, aplikacie s dotykovým displejom, audio aplikácie, RTOS. Na (Obrázku 1) sú vyznačené dôležté časti dosky pri programovaní a odladovaní aplikácie. Doska obsahuje slot pre SD/MMC pamäťové karty. Vstupno-výstupné porty sú vyvedené na jumperové lišty označené ako J23 (PIO-A), J24 (PIO-C), J26 (PIO-B). K procesoru sú pripojené externé pamäte NANDFlash s veľkosťou 256 MB a SDRAM s veľkosťou 64 MB. Okrem integrovaného DA prevodníka je možné pre audio aplikácie použiť externý Audio DAC AT73213 s výstupným zosilňovačom. Prevodník je možné ovládať pomocou I2S zbernice.

Obr. 1: Demonštračný kit AT91SAM9XE-EK firmy ATMEL

Mikrokontrolér AT91SAM9XE512 je založený na 32-bitovom jadre rodiny procesorov ARM926EJ. Dokáže pracovať na frekvencii až 160 MHz. Obsahuje 512 KB pamäti Flash a 16 KB pamäti SRAM taktiež je možné pripojiť externú NAND Flash pamäť, ďalej obsahuje periférie: 2 x USB 2.0 Full speed host port, 1 x USB 2.0 Full speed device port, 4 x USART, 2 x UART, 2 x SPI, SSC (I2S), 2 x TWI (I2C), 6 x 16-bitový časovač, 10-bitový AD prevodník a 2 x interface na MMC kartu.
Návrat na obsah

SAM-BA

Pre nahrávanie zdrojových kódov aplikácií existuje množstvo spôsobov. Jedným z najrozšírenejších je použitie progamovacieho agenta SAM-BA [2] a zdrojového *.bin súboru. Je to jednoduchý multi-platformný program, s podporou programovania množstva vývojových kitov, ale aj samostatných mikrokontrolérov ATMEL SAMX. Kľúčové vlastnosti programovacieho agenta SAM-BA sú nasledovné:

S novou verziou 2.10_cdc bola zavedená kompatibilita pre nové Windowsy (Win Vista a Seven). Okrem samotného programu je však nutné nainštalovať ovládače programovacieho USB portu SAM-BA_cdc [2] podľa nasledovného postupu:

  1. Zapneme napájanie dosky a pripojíme USB_device k PC.
  2. Nainštalujeme program SAM-BA 2.10_cdc.
  3. V správcovi zariadení sa objaví nové neznáme USB zariadenie.
  4. Manuálne nainštalujeme ovládač atm6124_cdc.inf zo zložky s názvom drv v koreňovom adresári SAM-BA.
  5. Po inštalácií sa zobrazí v správcovi zariadení nový virtuálny PORT s názvom "AT91 USB to Serial Converter"
Obr. 2: Device manager

Po týchto krokoch môžeme pristúpiť k programovaniu dosky podľa nasledujúceho návodu.
Návrat na obsah
Programovanie

Pre správnu funkciu programu je nutné striktne dodržať nasledujúci postup programovania dosky.

  1. Odpojíme napájanie dosky.
  2. Jumper J-7 prepojíme do pozície 1-2, čo je programovací režim.
  3. Pripojíme napájanie na doske.
  4. Spustíme program SAM-BA 2.10_cdc a vyberieme pripojenie na číslo COM PORTU na ktorom je pripojená doska. Následne vyberieme typ procesora na vývojovej doske a stlačíme tlačidlo Connect. (Obrázok 3)
    ggg
    Obr. 3: Výber pripojenia v programe SAM-BA

  5. Po správnom pripojení sa objaví úvodné okno programu. (Obrázok 4)
    Obr. 4: Úvodné okno programu SAM-BA

    Podľa (Obrázka 5) zvolíme záložku Flash. V roletovom menu vyberieme a tlačidlom Execute vykonáme skripty poďľa naznačeného poradia.

    Obr. 5: Záložka Flash v programe SAM-BA

    Násladne vyberieme súbor *.bin ktorý chceme nahrať a stlačíme tlačidlo Send file. Na varovnú hlášku Lock region(s) to lock programu (viz. Obrázok 6) zvolíme Yes alebo No podľa potreby (uzamkne časť programovej pamäti).
    Obr. 6: Nahratie bin súboru

    Po nahrátí binárneho súboru môžeme porovnať program nahratý v pamäti flash s originálnym bin súborom. (Obrázok 7)

    Obr. 7: Overenie programu vo Flash

  6. Ak prebehli predchádzajúce kroky úspešne, môžeme program SAM-BA zavrieť a odpojíme napájanie dosky.
  7. Jumper J-7 prepojíme do polohy 2-3.
  8. Pripojíme napájanie k doske.
  9. Po stlačení tlačidla Reset na doske sa začne vykonávať nahratý program.

    Návrat na obsah
Ukážkový program

Z balíčka vzorových programov pre vývojovú dosku AT91SAM9XE [3] sme vyskúšali niekoľko programov napr. ovládanie LED pomocou tlačítka, AD prevodník s výstupom cez Serial Debug Port a program, ktorý sa po pripojení USB_Device k PC správa ako pamäťové zariadenie s veľkosťou 10 MB. Pre ukážku sú zobrazené niektoré časti programu pre ovládanie blikania dvoch LED s dvoma tlačítkami. Tlačítkom BP3 zastavujeme a spúšťame blikanie oranžovej LED. Blikanie každú sekundu je zabezpečené prerušením, pri pretečení čítača časovača TC_0. Zároveň je na UART vyslané číslo "2". Tlačidlom BP4 ovládame blikanie zelenej LED s intervalom 0,5 s, ktoré je realizované v hlavnej slučke programu. Na UART je vyslané číslo "1".

Ukážka zdrojového súboru:

  1 //------------------------------------------------------------------------------
  2 //         Headers
  3 //------------------------------------------------------------------------------
  4 
  5 #include <board.h>
  6 #include <pio/pio.h>
  7 #include <pio/pio_it.h>
  8 #include <pit/pit.h>
  9 #include <aic/aic.h>
 10 #include <tc/tc.h>
 11 #include <utility/led.h>
 12 #include <utility/trace.h>
 13 
 14 #include <stdio.h>
 15 
 16 //------------------------------------------------------------------------------
 17 //         Local definitions
 18 //------------------------------------------------------------------------------
 19 #ifndef AT91C_ID_TC0
 20 #if defined(AT91C_ID_TC012)
 21     #define AT91C_ID_TC0 AT91C_ID_TC012
 22 #elif defined(AT91C_ID_TC)
 23     #define AT91C_ID_TC0 AT91C_ID_TC
 24 #else
 25     #error Pb define ID_TC
 26 #endif
 27 #endif
 28 
 29 /// Delay for pushbutton debouncing (in milliseconds).
 30 #define DEBOUNCE_TIME       500
 31 
 32 /// PIT period value in µseconds.
 33 #define PIT_PERIOD          1000
 34 
 35 //------------------------------------------------------------------------------
 36 //         Local variables
 37 //------------------------------------------------------------------------------
 38 
 39  /// Pushbutton \#1 pin instance.
 40 const Pin pinPB1 = PIN_PUSHBUTTON_1;
 41 
 42 /// Pushbutton \#1 pin instance.
 43 const Pin pinPB2 = PIN_PUSHBUTTON_2;
 44 
 45 /// Indicates the current state (on or off) for each LED.
 46 unsigned char pLedStates[2] = {1, 1};
 47 
 48 /// Global timestamp in milliseconds since start of application.
 49 volatile unsigned int timestamp = 0;
 50 
 51 //------------------------------------------------------------------------------
 52 /// Interrupt handler for TC0 interrupt. Toggles the state of LED\#2.
 53 //------------------------------------------------------------------------------
 54 void ISR_Tc0(void)
 55 {
 56     // Clear status bit to acknowledge interrupt
 57     AT91C_BASE_TC0->TC_SR;
 58 
 59     // Toggle LED state
 60     LED_Toggle(1);
 61     printf("2 ");
 62 }
 63 //------------------------------------------------------------------------------
 64 /// Waits for the given number of milliseconds (using the timestamp generated
 65 /// by the PIT).
 66 /// \param delay  Delay to wait for, in milliseconds.
 67 //------------------------------------------------------------------------------
 68 void Wait(unsigned long delay)
 69 {
 70     volatile unsigned int start = timestamp;
 71     unsigned int elapsed;
 72     do {
 73         elapsed = timestamp;
 74         elapsed -= start;
 75     }
 76     while (elapsed < delay);
 77 }
 78 //------------------------------------------------------------------------------
 79 /// Application entry point. Configures the DBGU, PIT, TC0, LEDs and buttons
 80 /// and makes LED\#1 blink in its infinite loop, using the Wait function.
 81 /// \return Unused (ANSI-C compatibility).
 82 //------------------------------------------------------------------------------
 83 int main(void)
 84 {
 85     // DBGU configuration
 86     TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
 87     printf("-- Getting Started Project %s --\n\r", SOFTPACK_VERSION);
 88     printf("-- %s\n\r", BOARD_NAME);
 89     printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
 90          
 91     // Configuration
 92     ConfigurePit();
 93     ConfigureTc();
 94     ConfigureButtons();
 95     ConfigureLeds();
 96     
 97     // Main loop
 98     while (1) {
 99 
100         // Wait for LED to be active
101         while (!pLedStates[0]);
102         
103         // Toggle LED state if active
104         if (pLedStates[0]) {
105 
106             LED_Toggle(0);
107             printf("1 ");
108         }
109 
110         // Wait for 500ms
111         Wait(500);
112     }
113
Textový výstup na UARTe môže vyzerať nasledovne:

1 -- Getting Started Project 1.5 --
2 -- AT91SAM9XE-EK
3 -- Compiled: Dec 18 2008 16:08:51 --
4 1 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 . . .  

Problémy

Win7-64bit
Ovládač pre program SAM-BA 2.10_cdc nebolo možné nainštalovať v 64-bitovom systéme Windows Seven. V 32-bitových systémoch XP, Windows Vista a Seven bola inštalácia bezproblémová.
Bootloader
Pri prvom zapojení dosky nebolo možné nadviazať spojenie medzi doskou a programom SAM-BA. Program SAM-BA nevedel rozpoznať zariadenie na doske. Bolo potrebné preprogramovať bootloader obsahujúci SAM-BA Boot [4]. Bootloader bol naprogramovaný pomocou USB JTAG programátora [5] s FTDI FT-2232D [6] a pomocou vývojového štúdia CrossStudio for ARM 2.0 [7].

Záver

V práci sú popísané základné postupy, ktoré je nutné vykonať pre správnu funkciu a programovanie vývojového kitu AT91SAM9XE. Vývojový kit nebol v dobe zadania projektu funkčný, preto hlavnou úlohou projektu bolo sfunkčniť ho, prípadne vyskúšat ukážkový program. Oba body zadania sa nám podarilo splniť. Najväčším problémom projektu bolo nájdenie vhodného softvéru a programátora. Pomocou programátora USB-JTAG bol naprogramovaný nový bootloader.


Návrat na obsah

Na stiahnutie

Ukážkový program LEDky
Ukážkový program ADC_UART
Ukážkový program Mass Storage

Literatura

[1] User guide AT91SAM9XE-EK - http://www.atmel.com/dyn/resources/prod_documents/doc6311.pdf
[2] SAM-BA_2.10_cdc http://www.atmel.com/dyn/resources/prod_documents/sam-ba_2.10.exe
[3] AT91SAM9XE-EK Software Package for IAR 5.2, Keil and GNU - http://www.atmel.com/dyn/resources/prod_documents/at91sam9xe-ek.zip
[4] AT91SAM Bootstrap- http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4093
[5] USB-JTAG programmer- http://www.modularcircuits.com/usb_programmer.htm
http://www.ftdichip.com/Products/ICs/FT2232D.htm
[7] CrossStudio for ARM 2.0- http://www.rowley.co.uk/