Jste zde

SUD1.1 - Spyder USB displej

Spyder USB displej je další konstrukcí vzniklou v rámci soutěže vývojářů s USB SPYDER kounanou ve spolupráci s Freescale Semiconductors a je dílem Imricha Konkola

Popisované zariadenie využíva vývojový kit Spyder firmy SofTec na pripojenie alfanumerického LC displeja prostredníctvom USB portu k ľubovoľnému zariadeniu s USB-host radičom.

Na displeji je možné zobrazovať rôzne stavové údaje alebo iné informácie dôležité pre obsluhu resp. užívateľa zariadenia.

Komunikácia medzi nadradeným systémom a USB displejom sa uskutočňuje prostredníctvom v pozadí bežiaceho procesu (typu daemon) na strane nadradeného systému a obslužného programu na strane mikrokontroléra MC9RS08QG4.

Zvláštní cenaHoci sa toto zariadenie dá pripojiť aj k bežnému PC, tento spôsob využitia nebol primárnym cieľom projektu. Na tieto účely je možné využiť bežne dostupné riešenia cez LPT port typu WinAMP LCD plug-in ([WinAmp])

Cieľom bolo pripojiť displej k jednoúčelovým zariadeniam, ktoré nemajú dostupné žiadne iné porty ako USB, ktoré sa stalo dnes jediným de-facto štandardom aj v embedded systémoch.

V praxi sa plánuje realizovať spolupráca s týmito jednoúčelovými zariadeniami na báze OS Linux:

  1. WAN router Edimax BR-6104KP [EDI]
  2. externý disk (NAS) Western Digital My Book World Edition [WBWE]

Princípy návrhu

Spôsob pripojenia konštrukcie k cieľovému zariadeniu je možné popísať nasledovne:

[ USB Host ]--->[ Spyder Kit ]--->[ Target MCU ]--->[ Ser2Par Conv ]--->[ HD-44780 LCD ]

pričom jednolivé časti majú nasledovné úlohy:

  • USB Host – zapisuje údaje do RAM MCU, ktoré sa majú zobrazovať na LCD (tiež môže slúžiť aj na prípadný update firmware)
  • Spyder Kit – zabezpečuje možnosť komunikácie s cieľovým MCU pomocou konverzie z USB na ladiaci interface MCU (BDM)
  • Target MCU (QG4) – pri zapnutí alebo RESETe inicializuje LC displej a periodicky obnovuje jeho obsah na základe údajov v RAM
  • Ser2Par Conv – sériovo-parelelný prevodník, ktorý rozširuje počet I/O vývodov MCU tak, aby bolo možné obslúžiť LCD v 4-bitovom režime
  • LCD na báze HD44780 – alfanumerický LC displej vybavený štandardným radičom Hitachi do veľkosti 4x20

Z uvedeného návrhu vyplýva, že BDM sa využíva ako periféria s priamym prístupom do pamäte MCU. Istým spôsobom ide  o veľmi špecifický DMA prístup.

Jeho prostredníctvom je zapísané číslo riadku, na ktorý bude MCU vypisovať údaje. Tie sú uložené v 20 znakovej vyrovnávacej pamäti (bufferi) modifikovateľnej rovnako pomocou BDM.

Výhodou BDM protokolu pre HCS08 je možnosť nedeštruktívne modifikovať RAM MCU aj počas behu programu ([AN2497] – 6.2.5/str. 9)

V prípade, že by nebol využitý BDM ako komunikačný interface, proces zobrazovania údajov by mohol byť realizovaný pomocou nasledovného algoritmu:

  • čakanie na vstup a následne zápis údajov do bufferu pomocou štandardného interface (sériový port, SPI, IIC atď)
  • výpis prijatých údajov na LC dislej
  • opakovanie od bodu 1

Pozn. V tomto zjednodušenom prípade neuvažujeme o využití prerušenia na obsluhu periférneho zariadenia a výstupu na LCD. Použitá je metóda periodickej kontroly údajov na vstupe (polling).

Na základe princípu fungovania je možné krok 1 vynechať, pretože ho priamo zabezpečí BDM pomocou hardvérového rozhrania vstavaného do MCU.

Jedinou úlohou programátora je obslúžiť správne ladiaci prostriedok, pomocou ktorého sa komunikuje priamo s BDM blokom MCU.

Obvodové riešenie a schéma

MCU HCS08 nemá k dispozícii dostatočný počet výstupných pinov na riadenie LC dispeja na báze radiča Hitachi 44780. Z tohto dôvodu bol použitý známy spôsob pripojenia prostredníctvom posuvného registra ([Predko], [PIC]).

LC displej je zapojený a firmwarom MCU obsluhovaný v 4-bitovom režime. Pri ňom sú aktívne dátové linky D4-D7, pin RS, ktorý určuje typ dát (riadenie/znaky) a pin E zapojený priamo z MCU. Pin R/W je trvalo pripojený na log.0 preto, že do displeja sa údaje iba zapisujú. Čítanie pamäte displeja (DDRAM) pri takomto pripojení nie je možné.

Zapojenie je zachytené na nasledovnej schéme:

Prepojenie jednotlivých komponentov pomocou pin headerov je realizované takto:

Programové vybavenie

Programové vybavenie je rozdelené do 2 častí:

  • firmware MCU
  • USB host side software

FIRMWARE MCU

Z dôvodu nedostatočnej kapacity RAM v MCU sa jednotlivé riadky zobrazujú sekvenčne. Nadradený systém zapíše najprv adresu riadku >4. To spôsobí, že MCU nebude vykonávať obnovenie údajov na displeji. Následne nadradený systém zapíše obsah bufferu v dĺžke max. 20 znakov a modifikuje číslo riadku podľa toho, na ktorý sa má údaj finálne zobraziť. MCU bude následne periodicky prepisovať obsah tohto riadku až nasledovnej modifikácie adresy riadku.

Ostatné obslužné rutiny sú v podstate štandardné. Spôsob inicializácie displeja a komunikácie je implementovaný podľa popisu v [DS44780] obdobne ako v knižnici [AN2940]. Firmware je prispôsobený pre displej 4x20 znakov (EL2004D z ponuky shopu HW.cz).

Z pohľadu programátora je dôležité je poznať nasledovné adresy v RAM MCU:

  • 0x100 - číslo vypisovaného riadku na LCD
  • 0x101 – 0x115 - buffer pre jeden riadok v dĺžke 20 znakov

Vývojový diagram je zachytený na strane 5 vľavo:

USB HOST

Pre prvotné odladenie je možné použiť vývojové prostredie Freescale CodeWarrior. Tu je k dispozícii príkazový riadok, ktorý umožňuje skriptovať rôzne operácie pri ladení programu v MCU. Príkazom WB sa vykoná zápis do RAM MCU. Zapisovať môžme v našom prípade priamo ASCII kódy jednotlivých znakov, ktoré sa budú zobrazovať na LCD. Tak ako priložený test.scr, ktorý spustíme v Debug móde CodeWarrioru (obrázok na nasledujúcej strane).

Reálne programové vybavenie je samozrejme zložitejšie ako uvedený príklad “Hello Wolrd”.

Pôvodný zámer použiť voľne dostupné ovládače OSBDM sa ukázal byť mylný nakoľko USB Spyder používa iný komunikačný protokol ako OSBDM (napriek tomu, že rôzne renomované zdroje uvádzajú, že sa jedná o takmer identický vývojový prostriedok [Elektor0703]).

Po niekoľkodňovom zisťovaní  a prehľadaní existujúcich zdrojov vrátane technickej podpory Freescale a internetových fór sa ukázalo, že popis komunikačného protokolu k vývojovému kitu SPYDER nie je pre bežného užívateľa dostupný. Nasledovala otázka “Ako ďalej?“. Možné sú 2 prístupy k celému projektu:

  1. prehlásiť ho za nepoužiteľný (resp. použiteľný veľmi obmedzene z prostredia CodeWarrior)
  2. realizovať reverzný inžiniering na zistenie protokolu

Ako idea sa mi Spyder USB displej páči natoľko, že som sa pustil druhou cestou. Žiaľ z časového hľadiska je táto činnosť omnoho náročnejšia, preto v dobe uzávierky súťaže nie je programové vybavenie na USB Host dopracované. Aktuálna verzia je schopná zdetekovať pripojený Spyder a otvoriť komunikačný kanál.

Na samotné odsledovanie protokolu sú použité prostriedky dostupné pre OS Windows (SnoopyPro 2.2, SniffUSB 1.8). Ako vývojový prostriedok som zvolil DevC++ ([DevCpp]).

Po zistení všetkých vlastností komunikačného protokolu bude možné modifikovať OSBDM ovládače tak, aby sa dali vykonávať základné ladiace príkazy z vlastného programového vybavenia, ktoré je nezávislé na CodeWarriore.

Ovládanie displeja z prostredia CodeWarrior
Ovládanie displeja z prostredia CodeWarrior

Vývojové diagramy

Vývojové diagramy 

Výhody a nedostatky

Vývojový kit v popisovanom usporiadaní neslúži iba na samotný vývoj, ale je nevyhnutne potrebný aj pre fungovanie celého zariadenia vo finálnom systéme.
Z tohto vyplývajú niektoré pozitívne ako i negatívne aspekty:

  • Vo fáze odlaďovania je veľkou výhodou, že postačí jeden USB port na ladenie firmware aj komunikáciu s cieľovým MCU (pri konvenčných riešeniach sú tieto 2 porty oddelené – na jednom je pripojený ladiaci prostriedok/programátor a na druhom samotné USB rozhranie MCU)
  • Nezanedbateľnou výhodou sú priaznivé mechanické rozmery celého riešenia oproti zariadeniu podobného typu napr. USB Smartie [SMRT], keď uvážime, že programátor MCU je súčasťou zariadenia
  • Integrovaný programátor (ktorý nie je v tomto prípade oddeliteľný) umožňuje ľahký upgrade alebo modifikáciu obslužného firmwaru MCU
  • Hlavný nedostatok je, že vývojový prostriedok je súčasťou finálneho produktu, pretože MCU sám o sebe vlastne nevie komunikovať cez USB

Záver

USB displej slúži predovšetkým na predvedenie možností komunikácie s MCU HCS08 netradičným spôsobom – pomocou vývojového prostriedku.

Nadradený systém (USB Host) takto môže získať plnú kontrolu nielen nad (pre)programovaním Flash pamäte v MCU, ale aj modifikovať dáta za behu programu v cieľovom MCU. Je zrejmé, že takýto návrh skrýva aj ďalšie potenciálne možnosti.

Dôležitým aspektom je tiež zvládnutie obsluhy komunikačného protokolu na inom OS ako Windows. Týmto spôsobom sa otvárajú multiplatformné možnosti pre kit Spyder a možnosť jeho fungovania autonómne – aj bez vývojového prostredia CodeWarrior.

Použité zdroje a referencie

PřílohaVelikost
Package icon Program_MCU.ZIP99.31 KB
Package icon Program_USBHost.zip59.3 KB
Package icon Spyder_Inf.zip1.55 KB
Hodnocení článku: