Produkty Novinky Články Návody Kontakty

SAM9260 a .NET Micro Framework - 4. První příklad

Máte modul SAM9260, v něm nahrané běhové prostředí Microsoft .NET Micro Framework (dále jen NETMF) a říkáte si, jak tedy vlastně začít vyvíjet v prostředí Visual Studia (dále jako VS). Čtete dále! Vše potřebné se dozvíte v tomto článku. Vytvoříme si náš první NETMF projekt, nastavíme si komunikaci s modulem SAM9260 přes USB rozhraní a nakonec rozblikáme LED diodu. Uvidíte, že i když to vypadá na dlouhý den, tak za půl hodiny nebude co řešit.
Poznámka: Modul uCSimply SAM9260 není vybaven potřebnými konektory a přizpůsobovacími obvody pro styk s okolím. V následujícím návodu předpokládáme, že je modul uCSimply SAM9260 umístěn v základní desce uCSimply Baseboard, která tuto skutečnost řeší. Samozřejmě, že si pro hrátky s modulem základní desku kupovat nemusíte, ale pak je na vás, abyste k modulu připojili potřebný zdroj napájecího napětí, USB konektor atd.

Než začneme

Aneb co všechno je potřeba:
  1. Modul SAM9260 musí být připojen k vašemu počítači přes USB rozhraní. Alternativně i přes sériový port DBGU. Pokud nevíte jak na to, vraťte se ke článku Začínáme, který se zapojením modulu SAM9260 zabývá.
  2. Ve svém počítači s OS Windows 7 a novějším (Windows XP nejsou zatím podporovány) musíte mít nainstalovaný ovladač WinUSB pro modul SAM9260. Jestliže nemáte, přečtěte si článek Nahrávání firmware, konkrétně sekci Ovladač WinUSB pro NETMF.
  3. Pomocí příkazu Ping v programu MFDeploy ověřte, že běhové prostředí reaguje a komunikuje (modul musí být připojen k napájecímu napětí).
  4. A samozřejmě musíte mít nainstalované vývojové prostředí Visual Studio 2012 (edice Express je zdarma!) a kit NETMF SDK spolu s definicí pinů a portů pro modul SAM9260. Jak na to je popsáno v článku Instalace nástrojů.

Můj první projekt

A pustíme se rovnou do toho:
  1. Spustíme Visual Studio 2012.
  2. Na úvodní stránce zvolíme v menu vlevo položku New Project...
  3. V dialogovém okně New Project rozklikneme v menu vlevo položku Templates, dále Visual C# a pak Micro Framework.
  4. Z možností v pravé části dialogového okna vybereme Console Application (viz obrázek VS2012 - New Project). Dole vyplníme jméno projektu (Name), např. BlikaciLed a umístění projektu (klidně necháme výchozí). Stiskneme tlačítko Ok. Visual Studio vytvoří nový projekt a otevře jej.
VS2012 - New Project
  1. Nyní nastavíme komunikační rozhraní s modulem SAM9260: V hlavním menu VS vybereme PROJECT-->BlikaciLed Properties.
  2. Otevře se nové dialogové okno. V levém bočním menu vybereme položku .NET Micro Framework (viz obrázek VS2012 - Transport).
  3. Jako Transport nastavíme USB. Jako Device by se měl automaticky objevit modul uCSimply-SAM9260_a7e70ea2. Pokud ne, zkusíme ověřit komunikaci s modulem SAM9260 pomocí programu MFDeploy.
  4. Pomocí křížku zavřeme záložku s vlastnostmi projektu.
  5. Nyní v pravé části hlavního okna VS (Solution Explorer) dvojitým kliknutím na soubor Program.cs otevřeme zdrojový kód projektu.
  6. Zdrojový kód se otevře v okně editoru. Vidíme, že máme vytvořenu třídu Program, v ní veřejnou metodu Main() a ta obsahuje volání metody Print() třídy Debug. Jako text k vypsání se předává jakýsi předdefinovaný řetězec. Uvidíme o co jde.
VS2012 - Transport
Je nejvyšší čas zkusit nahrát tento primitivní projekt do modul SAM9260 a zkusit jej pustit:
  1. Ve VS v horní liště s ikonami klikneme na ikonu se symbolem zeleného trojúhelníku a nápisem Start. A začnou se dít věci.
  2. VS se pokusí přípojit přes USB k modulu SAM9260, resp. k běhovému prostředí TinyCLR.
  3. Jakmile se mu to podaří, zjistí jaké systémové assemblies (knihovny) jsou k dispozici.
  4. Pak VS nahraje do modulu, resp. do sektoru DEPLOYMENT v paměti NandFlash naši aplikaci BlikaciLed a potřebné systémové assemblies, příp. další assemblies (třeba popis pinů).
  5. Potom VS resetuje běhové prostředí TinyCLR v modulu a jakmile opětovně naváže komunikaci s debuggerem v běhovém prostředí, tak spustí přímo v modulu SAM9260 naši aplikaci.
  6. Aplikace BlikaciLed v rámci svého běhu vypíše na konzoli nápis ”Hello World!” (ano, to je ten předdefinovaný řetězec) a ukončí se. Protože modul SAM9260 nemá konzolový výstup, je veškerý textový výstup přesměrován do okna Output ve Visual Studiu. Toto okno si můžete otevřít kliknutím na podtržený nápis Output vlevo dole v okně VS.
Takhle vypadá konec textového výstupu v okně Output na mém počítači (všimněte si textu ”Hello World!” přesměrovaného z modulu SAM9260):
Invalid address 21000114 and range 4 Ram Start 300000, Ram end 301000  
Invalid address 21000180 and range 4 Ram Start 300000, Ram end 301000 
The thread '' (0x2) has exited with code 0 (0x0). 
Hello World!
The thread '' (0x1) has exited with code 0 (0x0). Done.

Waiting for debug commands...
The program '[0x1] Micro Framework application: Managed' has exited with code 0 (0x0).
Je důležité dodat, že program BlikaciLed je nahrán do paměti NandFlash, která pro udržení informace nevyžaduje napájení. To znamená, že po každém zapnutí napájecího napětí se v modulu SAM9260 zavede běhové prostředí NETMF, které automaticky spustí naši aplikaci BlikaciLed. Ta pak vypíše text ”Hello World!” na neexistující konzoli modulu. Samozřejmě bez ohledu na to, jestli je Visual Studio k modulu připojené nebo ne. Modul SAM9260 funguje autonomně a nahrané aplikace spouští automaticky. Vždyť je to plnohodnotné embedded zařízení.

Tak už blikáme

Na začátku jsem sliboval blikání LED diodou. Tak dobře. Jen pro pořádek - vývody modulu SAM9260 a základní desky Baseboard jsou v následujícím textu označeny jako Modul::Pinhead::PinNo, např. SAM9260::J2::11, u základní desky je to pak např. Baseboard::J2::3.
Nejdříve trochu zapojování:
  1. Vypneme napájení modulu
  2. Drátovou propojkou propojíme GPIO pin SAM9260::J2::PC17 s LED diodou D19 na základní desce, tj. s pinem Baseboard::J40::9. Samozřejmě je možné použít libovolnou LED diodu.
  3. Druhý konec LED diody musíme přivést na zem. V případě LED diody D19 je to věc snadná - jumperem propojíme piny 9 a 10 na pinheadu Baseboard::J41.
Připojení LEDky k modulu SAM9260
A teď zase trochu programování:
  1. Otevřeme si projekt BlikaciLed ve Visual Studiu.
  2. Přidáme odkaz na potřebné assemblies - vpravo v Solution Exploreru klikneme na položku References, zvolíme Add Reference... a vybereme položky Microsoft.SPOT.Hardware (pro ovládání IO pinů) a uCSImply.NETMF.Hardware.Sam9260 (popis pinů a portů modulu SAM9260). Dáme Ok.
  3. Vybrané assemblies se objeví v seznamu odkazů / závislostí.
  4. Otevřeme si zdrojový kód - soubor Program.cs v Solution Exploreru.
  5. Všechen zdrojový kód v souboru Program.cs smažeme a místo něj nakopírujeme níže uvedený zdrojový kód
  6. Klikneme v horní liště na magické tlačítko Start. VS program přeloží, nahraje do modulu, restartuje ho a počká až naběhne TinyCLR a spustí ho. Když jde vše dobře, tak LEDka začne blikat.
  7. Schválně zkuste zastavit ladění - tlačítko se symbolem čtverce známé ze všech přehrávačů hudby a videa. VS se odpojí od modulu, ale LED dioda bliká dál. Zkuste modul restartovat (vypnout/zapnout napájení). Po chvíli, až se zavede běhové prostředí TinyCLR, se LEDka zase rozbliká. Modul už funguje zcela autonomně. A kdykoliv se můžete pomocí VS připojit k modulu a začít danou aplikaci ladit (za předpokladu, že běhové prostředí TinyCLR je ve verzi Debug nebo Release. Verze RTM určená do ostrého provozu ladění aplikací nepodporuje).
using System; 
using System.Threading; 
using Microsoft.SPOT; 
using Microsoft.SPOT.Hardware;
// assembly s popisem pinu a portu SAM9260
using uCSimply.NETFM.Hardware.Sam9260;

namespace BlinkingLed
{
    public class Program
    {
        public static void Main()
        {
            bool ledStatus = true;
            OutputPort LED = new OutputPort(Sam9260.Pin.Digital.PC17, ledStatus);
            
            while (true)             
            {
                Thread.Sleep(500);
                ledStatus = !ledStatus;                 
                LED.Write(ledStatus);
            }         
        }     
    }
}

Assembly uCSimply.NETMF.Hardware.Sam9260

Jak jste si určitě všimli, v projektu BlikaciLed jsme použili assembly pro modul SAM9260, která přidává jmenný prostor uCSimply.NETMF.Hardware.Sam9260. Tato assembly obsahuje třídy, které popisují piny a porty mikrokontroléru AT91SAM9260, které jsou dostupné (z pohledu NETMF) na vývodech modulu SAM9260.
V každém projektu, kde tuto assembly hodláme používat, musíme přidat referenci / závislost (Solution Explorer --> References -->Add Reference...) a do zdrojového kódu pak ještě musíme přidat nový jmenný prostor pomocí příkazu:
using uCSimply.NETFM.Hardware.Sam9260;
Assembly uCSimply.NETMF.Hardware.Sam9260 přidává tato označení pinů a portů:
  1. Digitální I/O piny, např: Sam9260.Pin.Digital.PC17; použitelné všude tam, kde je vyžadován parametr typu Cpu.Pin.
  2. Analogové I/O piny, např: Sam9260.Pin.Analog.PC0; použitelné všude tam, kde je vyžadován parametr typu Cpu.Pin.
  3. Typ pull-up odporu použitelného pro digitální I/O piny: např. Sam9260.Pin.ResistorMode.Disabled; použitelné všude tam, kde je vyžadován parametr typu Port.ResistorMode.
  4. Typ režimu přerušení aktivovaného na daném digitálním I/O pinu, např. Sam9260.Pin.InterruptMode.InterruptNone; použitelné všude tam, kde je vyžadován parametr typu Port.InterruptMode.
  5. Označení sériových portů dle dokumentace AT91SAM9260: DBGU, USART0, USART1 a USART2; použitelné všude tam, kde je vyžadován název sériového portu v podobě řetězce, např. ”COM1” atd.
  6. SPI porty číslované podle dokumentace AT91SAM9260: SPI0 a SPI1; použitelné všude, kde se jako identifikátor SPI portu vyžaduje parametr typu SPI.SPI_module.

Dokumentace a firmware