Cílem konstrukce zařízení MID8 bylo využití vývojového kitu USB Spyder od firmy SofTec a rozšíření počtu použitelných pinů pomocí hradlového pole. Na tomto programovatelném hradlovém poli vytvořit chybějící periférie (UART, SPI) včetně rozšíření v/v pinů k připojení dalších periferií, jako např. LCD displeje, klávesnice.
Jako nejrychlejší a nejvhodnější řešení s hradlovým polem se nabízelo využití kitu Spartan 3E od firmy XILINX. Na tomto kitu je už integrována většina periférií a odpadá tak nutnost návrhu a výroby testovací desky. Vývojový software XILINX ISE WebPACK je součástí tohoto kitu a navíc je také volně ke stažení.
Pro čtení bezkontaktních identifikátorů na frekvenci 125 kHz byla zvolena čtečka AXA012. Čtečky AXA mají výstup podporující ASCII standard a Wiegand 26. ASCII formát je dostupný v CMOS úrovních nebo jako invertovaný TTL s protokolem RS232 9600,8,1. Moje řešení využívalo výstup CMOS se zmíněným protokolem RS232.
Popis jednoduchého přístupového systému RFID:
- USB SPYDER osazený MC9RS08QG4
- využití pouze 5 v/v pinů MCU pro komunikaci s FPGA
- zůstává volný pin pro debugging CodeWarrior
- použit pouze jeden MCU (USB SPYDER)
- ostatní periférie vytvořeny v FPGA
- použita čtečka karet RFID AXA012
- informace zobrazeny na LCD displeji
- platné karty uloženy v paměti, možnost připojení SPI EEPROM
- komunikace s PC přes rozhraní RS 232 včetně zadávání a mazání platných karet
Realizace zařízení:
Celé zařízení po stránce HW bylo realizováno propojením zmíněných kitů a připojením čtečky RFID. Vše ostatní je záležitostí SW, tj. veškerá komunikace, zápis na LCD, čtení karet je realizováno MCU v USB Spyder. Na hradlovém poli jsou pouze realizovány dva UART a 8bitové registry pro připojení periférií. Toto propojení je sice netypické, ale umožňuje snadné rozšíření stávajícího MCU o chybějící periférie a porty. Jednoduché programování USB Spyderu také umožňuje snadné testování vytvořených periférií na FPGA, což urychluje jejich tvorbu.
Ukázka blokového zapojení v FPGA:
Jak již bylo uvedeno v úvodu, pro komunikaci s FPGA se využívá pouze 5 bitů. Komunikace probíhá podobně jako u SPI s tím rozdílem, že některé piny mají více funkcí. V procesoru jsou realizovány základní funkce SendData(byte), ReadData(), SendAddr(byte). Ostatní funkce typu WriteLCDChar(byte) jsou vytvořeny voláním těchto základních funkcí. Každá vytvořená periférie má svůj adresní prostor, který slouží pro její nastavení nebo komunikaci s ní.
BitRead – příznak přerušení / sériová data pro čtení
BitCS – výběr obvodu (chip select)
BitClock – hodinový signál pro komunikaci
BitData – sériová data pro zápis
BitAddrData – rozlišení zápisu adresy nebo dat
Ukázka zdrojového kódu pro zápis dat do FPGA:
void SendData(byte data) { Bit_clock_ClrVal(); Bit_cs_SetVal(); mask=128; // 8 output bits for (i=0;i<8;i++) { if (mask & data) { Bit_data_SetVal(); // output low for logic 1 } else { Bit_data_ClrVal();// output high for logic 0 } Bit_clock_NegVal(); mask >>=1; Bit_clock_NegVal(); } Bit_cs_ClrVal(); return; };
Vzájemné propojení MCU s FPGA:
Ovládání systému MID8 z PC:
Pro ovládání přístupového systému byla zvolena sériová komunikace RS 232. Vývojové prostředí pro psaní programu jsem zvolil Microsoft Visual C#. Toto prostředí již obsahuje komponentu pro komunikaci přes COM. Původně jsem chtěl zvolit Borland Builder C++, ale není již dostupný pro volné stažení. Pro jednoduché testování jsem vytvořil aplikaci se seznamem karet, jejíž volbou je poslán příkaz systému, aby danou kartu uložil do databáze, popř. smazal.
Popisovaná konstrukce přístupového systému s využitím USB Spyder vznikla z původního projektu testování periférií vytvořených na FPGA a pro účely soutěže byla modifikována. Proto výsledný kód a návrh pro FPGA není optimalizován. Nabízí se však možnost, po odladění firmwaru vytvořit daný MCU přímo na hradlovém poli, viz http://www.opencores.org.