Demonstrační kit ARM

Martin Sobotka, David Polanský UREL, FEKT, VUT Brno
xsobot11stud.feec.vutbr.cz
xpolan04stud.feec.vutbr.cz
projekt zveřejněn také na www.pandatron.cz a www.hw.cz

Obsah:

  1. Úvod
  2. Realizace
  3. Závěr
  4. Problémy
  5. Literatura

Úvod

Tato práce si klade za cíl seznámit čtenáře s možnostmi vývoje aplikací pro 32bitové mikrokontroléry řady ARM s využitím volně dostupných prostředků a vytvoření jednoduchého programu pro ověření funkčnosti. Pro pokusy byl použit mikrokontrolér AT91SAM7S256 v kitu od firmy Kramara [1].

Realizace

V této části bude nejprve popsán použitý kit, následně programové vybavení s nutným nastavením a nakonec naprogramování vytvořého jednoduchého programu.
Hardware
Jak již bylo psáno v úvodu, pro pokusy byl vybrán kit od firmy Kramara s mikrokontrolérem AT91SAM7S256 (dokumentace viz [2]). Kit obsahuje veškeré součástky nutné pro běh mikrokontroléru a pro správnou funkci postačuje přivést napájecí napětí, které má být v rozsahu 3,0 až 3,6V. Kmitočet krystalu je 18,432MHz, kit má vyvedeno 32 I/O linek, navíc je vyvedeno rozhraní USB na konektor USB-B a JTAG rozhraní na 20-ti pinový konektror MLW.
Mikrokontrolér AT91SAM7S256 obsahuje 64kB datové paměti RAM, 256kB programové paměti FLASH, jeden USB port, 2 UART rozhraní, SPI rozhraní, TWI, PWM, osmikanálový 10-ti bitový AD převodník.
Software
Pro psaní programu lze použít mnoho různých prostředků, ovšem zde se zaměříme na volně dostupné nástroje. Jako vývojové prostředí bude použito Eclipse IDE s překladačem Yagarto, pro programování program SAM-BA od Atmelu. K používání Eclipse je nutné mít nainstalovány knihovny Sun JAVA Runtime Environment - JRE [3]. Dále nainstalujeme Yagarto (ke stažení [4]), při instalaci nejsou potřebné žádné zvláštní kroky. Nyní můžeme nainstalovat vývojové prostředí Eclipse (ke stažení [6]), instalace taktéž nečiní žádné potíže. Nakonec je třeba nainstalovat Zylin Embedded CDT plugin, jehož instalace se provede již z prostředí Eclipse, podrobný návod v [7]. Pro správnou funkci je ještě nutné nakopírovat GNU ARM Eclipse Plug-in (ke stažení [8]) do adresáře Eclipse/plugins. Nyní máme připravené vývojové prostředí pro psaní programů.

Pro programování je nutné stáhnout a nainstalovat AT91 In-system Programmer [9].
První program
Po prvním spuštění vývojového prostředí Eclipse budeme dotázáni na pracovní adresář, který vybereme. Poté již můžeme zvolit File->New->C Project, v bloku Tolchain vybereme WinARM, Yagarto, zadáme jméno projektu a potvrdíme. Nyní bychom mohli vytvářet všechny zdrojové, hlavičkové a ostatní soubory, ovšem to je pro začátek příliš složité a můžeme s výhodou použít již hotovou kostru či jednoduchý projekt, který rozšíříme podle potřeby. V tomto případě překopírujeme veškeré soubory do adresáře našeho projektu a v prostředí Eclipse zvolíme File->Refresh, tím se nám zobrazí nově vložené soubory. Vybereme Project->Properties->C/C++ Build a odškrtneme položku Generate Makefiles automatically (vysvětlení důvodu dále v textu, viz Problémy), dále do položky Build directory: vybereme pracovní adresář (musí tam být Makefile). V C/C++ Build->Settings->Binary Parsers necháme zaškrtnutý pouze GNU Elf Parser.

Nyní pomocí Project->Build Project přeložíme projekt a měli bychom získat výstupní soubor *.bin, ten již lze pomocí programátoru nahrát do mikrokontroléru. Pro jednoduší spouštění programovacího programu lze tento spouštět z prostředí Eclipse: Run->External Tools->External Tools Configurations, zde zvolíme New a jako Location dáme umístění programovacího programu (např: C:\Program Files\ATMEL Corporation\AT91-ISP v1.12\SAM-BA v2.8\SAM-BA.exe) a jako Working Directory zvolíme adresář o úroveň výše (C:\Program Files\ATMEL Corporation\AT91-ISP v1.12\SAM-BA v2.8). Nyní můžeme spustit program SAM-BA pomocí ikony zelené šipky s taškou.
Způsob programování
Mikrokontrolér je vybaven bootloaderem, takže jej lze naprogramovat "velmi pohodlně" přes rozhraní USB, příliš pohodlná není aktivace bootloaderu.

Pro aktivaci bootloaderu odpojíme napájení, spojíme Jumper J2, připojíme napájení, počkáme 10-30s, odpojíme napájení, rozpojíme jumper J2 a připojíme napájení. Nyní po připojení k PC by měl operační systém detekovat nové zařízení Atmel AT91xxxxx Test Board a bude vyžadovat instalaci ovladače, který nalezneme v adresáři s programátorem SAM-BA. Po instalaci ovladače již nic nebrání spuštění programu SAM-BA, vybereme umístění \usb\ARM0 a desku AT91SAM7S256-EK a připojíme se stiskem Connect. V záložce Flash vybereme v položce Send File Name jméno našeho přeloženého programu *.bin a pošleme do mikrokontroléru tlačítkem Send File. Nyní je třeba mikrokontrolér resetovat nebo napsat v příkazovém řádku programu SAM-BA příkaz go 0x100000.

Ukázka zdrojového souboru pro střídavou změnu výstupních pinů (blikání LED):


	
		#include "AT91SAM7S256.h"			// hlavickovy soubor s definicemi mikrokontroleru

		void zpo(unsigned long time);			// hlavicka funkce zpozdeni

		int main (void) {				// hlavni funkce
		  volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA;	// inicializace pro pristup k portum
		  pPIO->PIO_PER = 0x000000FF;			// povoleni PIO Enable Register pro piny 0-7
		  pPIO->PIO_OER = 0x000000FF;			// povoleni Output Enable Register pro piny 0-7
 		
		  while(1) {					// nekonecna smycka
  		    pPIO->PIO_SODR = 0x000000F0;		// nastaveni bitu 4-7 (Set Output Data Register)
 		    zpo(3000);					// volani zpozdeni
		    pPIO->PIO_CODR = 0x000000F0;		// nulovani bitu 4-7 (Clear Output Data Register)
		    zpo(3000);					// volani zpozdeni
 		  }
		  return 0;
		}

		void zpo(unsigned long time) {			// funkce zpozdeni
		  while(time--);
		}

	
	

Problémy

Automaticky generovaný makefile
Pokud jsem při překladu nechal generovat automaticky makefile, fungovalo vše dobře pro požadovaný výstupní soubor *.hex. Když jsem ve vlastnostech projektu dal požadovaný výstupní soubor *.bin, nedošlo ke změně makefile a při překladu mi překladač vytvořil opět jen *.hex. Z tohoto důvodu jsem musel ručně v souboru makefile přepsat požadovaný výstupní soubor na *.bin a ve vlastnostech projektu odškrtnout položku Generate Makefiles automatically.
Nefunkční SAM-BA
Občas se mi nepodařilo poslat program do mikrokontroléru programem SAM-BA. Bylo zahájeno programování ale po chvíli došlo k chybě. Při použití programu SAM-PROG v2.4, který je spolu s programem SAM-BA v instalačním balíčku od Atmelu jsem nikdy problém neměl.
Problém s Win7
Při aktivaci bootloaderu a připojení pomocí USB k PC s operačním systémem Windows 7 dojde k automatické detekci a instalaci ovladače, operační systém vyhodnotí zařízení jako GPS Camera Detect (COMx) a ani ruční vnucení správného ovladače nevede ke správné funkčnosti zařízení. Tento problém se mi nepodařilo vyřešit, ve WinXP na stejném PC vše funguje dobře.

Závěr

V práci jsou shrnuty základní kroky nutné pro žačátek vývoje aplikací s využitím mikrokontrolérů s jádrem ARM, konkrétně od firmy Atmel. Podrobnější informace a detailní nastavení nalezne čtenář v odkazech v části literatura. V práci je rovněž popsán jednoduchý program, který má za úkol blikat LED diodou a je ke stažení zde. Při práci se rovněž objevili problémy, za nejvážnější považuji nefunkčnost ovladače programátoru pod operačním systémem Windows 7 a tím nemožnost programování přes vestavěný bootloader. Tento problém se bohužel nepovedlo vyřešit a pro programování byl využit operační systém Windows XP.

Literatura

[1] Kramara s.r.o. - Vývoj a výroba elektroniky http://www.kramara.com
[2] Dokumentace AT91SAM7S256-KIT http://www.kramara.com/podklady/AT91SAM7S256-kit/doku_r1.pdf
[3] JRE download - http://java.sun.com/javase/downloads/index.jsp
[4] Yagarto download - http://www.yagarto.de/index.html#download
[5] Yagarto instalace - http://www.yagarto.de/howto/yagarto1/index.html
[6] Eclipse download - http://eclipse.org/downloads/packages/
[7] Eclipse nastavení - http://www.yagarto.de/howto/yagarto2/index.html
[8] GNU ARM Eclipse Plug-in - http://sourceforge.net/projects/gnuarmeclipse/
[9] AT91AT91 In-system Programmer (SAM-BA) - http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3883