Produkty Novinky Články Návody Kontakty

Modul SAMA5 a SAM-BA

Je hezké, že nám mikroprocesor SAMA5D31 reaguje na příkazy, které mu posíláme po sériové lince. My ale chceme, aby po resetu spustil nějaký program. Pomocí programu SAM-BA zapíšeme binárku programu do SPI Flash paměti, která je na modulu SAMA5. Po resetu natáhne primární zavaděč RomBOOT binárku z SPI Flash do interní SRAM mikroprocesoru a spustí ji.
Mikroprocesor SAMA5D31 po resetu začne provádět kód primárního zavaděče RomBOOT, který je uložen v ROM paměti mikroprocesoru. RomBOOT provede základní inicializaci mikroprocesoru a pak se pokusí najít platný programový kód na některé z periferií mikroprocesoru. Periferie prohledává v tomto pořadí:
  • SPI0 CS0 Flash
  • SD Card / eMMC MCI0
  • SD Card / eMMC MCI1
  • NAND Flash
  • SPI0 CS1 Flash
  • TWI EEPROM
Pokud RomBOOT úspěšně detekuje platný kód, natáhne ho do interní paměti SRAM a spustí ho. Pokud na žádném z připojených zařízení platný kód není, spustí se SAM-BA Monitor. Proces bootování je detailně popsán v datasheetu mikroprocesoru SAMA5D31 v kapitole Standard boot strategies. Předpokládáme, že už máte na PC program SAM-BA nainstalovaný. Postup instalace SAM-BA je popsán v našem článku o modulu SAM9260.
Nejdříve propojíme USB port A mikroprocesoru SAMA5D31 s USB portem PC.
Na Baseboardu vypneme spínač napájení.
Drátovými propojkami spojíme pin 44 (USBA_DM) na konektoru J2 modulu SAMA5 s pinem 4 na konektoru J46 na Baseboardu a pin 45 (USBA_DP) na J2 s pinem 6 na J46. Tím jsme připojili USB port A mikroprocesoru na USB-B konektor J19 na Baseboardu.
Vezmeme USB A-B kabel, zasuneme ho do konektoru J19 na Baseboardu a druhý konec zapojíme do PC. Paměti SPI Flash a NAND Flash, které jsou na modulu, necháme odpojené (pin 45 - SPI_FLASH_ENB a pin 46 - NAND_FLASH_ENB na konektoru J3 na modulu jsou připojeny na GND). Na Windows spustíme Device Manager a na Baseboardu zapneme spínač napájení.
V seznamu zařízení v Device Manageru se mezi COM a LPT porty objeví AT91 USB to Serial Converter. V našem případě ho Windows svázaly s portem COM19. Spínač napájení na Baseboardu vypneme.
Aby mohl program SAM-BA komunikovat s modulem SAMA5, musíme popis modulu přidat do konfiguračních souborů SAM-BY. Následující postup platí pro SAM-BU verze 2.12.
Pomocí textového editoru (Notepad+, PSPad) upravíme postupně soubory, které jsou uloženy v adresáři, kam jsme SAM-BU nainstalovali. V podadresáři tcl_lib/devices/ otevřeme soubor devices.tcl. V poli array set devices najdeme řádek, který obsahuje řetězec at91sama5d3x a na jeho konec přidáme řetězec sama5, oddělený čárkou. Soubor uložíme a zavřeme.
V podadresáři tcl_lib/ otevřeme soubor boards.tcl. Na konci souboru je pole array set user_boards. Do pole přidáme řádek, který registruje modul SAMA5.
"sama5-ucsimply"  "sama5-ucsimply/sama5-ucsimply.tcl"
Soubor uložíme a zavřeme editor.
V podadresáři tcl_lib/ vytvoříme pro modul SAMA5 nový adresář sama5-ucsimply. Do nově vytvořeného podadresáře tcl_lib/sama5-ucsimply/ nakopírujeme z podadresáře tcl_lib/sama5d3x-ek/ následující soubory:
applet-extram-sama5d3x.bin
applet-lowlevelinit-sama5d3x.bin
applet-nandflash-sama5d3x.bin
applet-serialflash-sama5d3x.bin
lowlevelinit.tcl
Stáhneme si soubor sama5-ucsimply.tcl a uložíme ho do podadresáře tcl_lib/sama5-ucsimply/. Na obrázku je finální obsah podadresáře tcl_lib/sama5-ucsimply/.
Do PC si stáhneme soubor ucsimply_sama5-dataflashboot-uboot-3.7.bin. Je to binárka sekundárního zavaděče AT91Bootstrap od Atmelu. Ten byl zkompilován pro modul SAMA5 a nakonfigurován tak, aby natáhl a spustil bootloader U-Boot z SPI Flash paměti.
Paměti SPI a NAND Flash na modulu SAMA5 ponecháme odpojené a na Baseboardu zapneme spínač napájení. V okně Device Manageru se objeví AT91 USB to Serial Converter. Spustíme program SAM-BA. V úvodním dialogu zvolíme typ připojení \USBserial\COM19. V našem případě je to port COM19, ale na vašem PC je číslo COM portu nejspíš jiné. V comboboxu Select your board je seznam všech podporovaných desek.
Zarolujeme dolů a vybereme desku sama5-ucsimply. Klikneme na tlačítko Connect a otevře se hlavní okno SAM-BA.
Odpojíme pin 45 (SPI_FLASH_ENB) na konektoru J3 modulu od GND. Tím připojíme SPI Flash, která je na SAMA5 modulu, na SPI sběrnici.
V hlavním okně SAM-BA přejdeme na panelSerialFlash AT25/AT26. V comboboxu Scripts vybereme položku Enable Serialflash (SPI0 CS0) a klikneme na tlačítko Execute. Tento příkaz do paměti mikroprocesoru natáhne a spustí applet, který inicializuje komunikaci s SPI Flash. Ve spodním konzolovém okně SAM-BY se zobrazují zprávy probíhajícího procesu.
Podobné zprávy můžete také vidět v okně emulátoru terminálu, připojeného na DBGU sériový port mikroprocesoru.
Program SAM-BA je mocný nástroj s řadou funkcí. Jeho podrobný popis najdete v dokumentu SAM-BA User Guide, který je uložený v instalačním adresáři programu.
V comboboxu Scripts nyní vybereme položku Send Boot File a klikneme na tlačítko Execute. Tento příkaz uloží binárku sekundárního zavaděče (t.j. AT91Bootstrap) do SPI Flash paměti od adresy 0x00. V dialogu Open File vybereme stažený soubor ucsimply_sama5-dataflashboot-uboot-3.7.bin a klikneme na tlačítko Open. Obsah binárního souboru se zapisuje do SPI Flash a v konzolovém okně se zobrazují zprávy procesu Send Boot File.
Jak jsme řekli na začátku - program RomBOOT, který je v interní ROM paměti mikroprocesoru SAMA5D31, zkusí po resetu najít na některé z připojených periferií validní programový kód a pokud ho nalezne, natáhne kód do interní paměti SRAM a spustí ho.
No tak to vyzkoušejme!
Ukončíme program SAM-BA a vypneme spínač napájení na Baseboardu. Na PC spustíme emulátor terminálu (třeba Putty) a připojíme se na DBGU sériový port mikroprocesoru. Paměť SPI Flash ponecháme připojenou na sběrnici (pin 45 - SPI_FLASH_ENB na konektoru J3 na modulu je odpojen od GND). Na Baseboardu zapneme spínač napájení. V okně terminálu vidíme zprávy od programu AT91Bootstrap. Jeho hlavním úkolem je inicializovat SDRAM paměť, natáhnout do ní z Flash paměti další (větší) program a spustit ho. V našem případě se AT91Bootstrap pokouší natáhnout kód z adresy 0x8400 v SPI Flash do SDRAM na adresu 0x26F00000 a pak bootování skončí. Paměť SPI Flash zatím žádný další kód neobsahuje.
Už jsme téměř na konci. Do naší bootovací sekvence pouze přidáme program U-Boot.
Stáhneme si do PC binárku U-Bootu u-boot.bin. Je to lehce upravený U-Boot pro Atmel SAMA5D3x-EK z repozitáře Linux4Sam na GitHubu, který umí identifikovat SPI Flash paměť AT25DF041.
Vypneme spínač napájení na Baseboardu. Odpojíme SPI Flash (připojíme pin 45 - SPI_FLASH_ENB na konektoru J3 na GND). To znemožní RomBOOTu natáhnout a spustit AT91Boostrap z SPI Flash. Zapneme spínač napájení na Baseboardu a spustíme program SAM-BA. V úvodním dialogu vybereme správný komunikační port a desku sama5-ucsimply. V hlavním okně SAM-BY zvolíme panel SerialFlash. Odpojíme od GND pin 45 - SPI_FLASH_ENB na konektoru J3, aby šlo zapisovat do SPI Flash. V comboboxu Scripts vybereme položku Enable Serialflash (SPI0 CS0) a klikneme na tlačítko Execute.
V textovém poli Send File Name zadáme cestu ke stažené binárce u-boot.bin. K prohledávání disku můžeme kliknout na ikonu složky. V poli Address vyplníme hodnotu 0x8400, což je adresa, od které bude v SPI Flash zapsána binárka U-Bootu. Klikneme na tlačítko Send File. Obsah souboru u-boot.bin se zapisuje do SPI Flash a v konzolovém okně se vypisují zprávy probíhajícího procesu.
Ukončíme program SAM-BA. Pin 45 (SPI_FLASH_ENB) na J3 ponecháme odpojený od GND a od GND odpojíme i pin 46 (NAND_FLASH_ENB). Vypneme a zapneme spínač napájení na Baseboardu.
Bootovací proces nyní pokračuje spuštěním U-Bootu, který se pokouší natáhnout Linuxové jádro. Nic takového zatím ve Flash paměti nemáme, ale můžeme konstatovat, že jsme úspěšně splnili úkol. V terminálovém okně máme prompt U-Bootu a můžeme zadávat jeho příkazy.
Zkusíme třeba napsat příkaz printenv, který vypíše všechny nadefinované proměnné prostředí.
Proměnné prostředí můžeme měnit nebo přidávat příkazem setenv, provedené změny uložíme do SPI Flash příkazem saveenv. Ale o tom až příště.