Blog:Postavte si PMD 32-SD

Z PMD 85 Infoserver

Postavte si PMD 32-SD



Obsah


PMD 32-SD
PMD 32-SD

PMD 32-SD je zariadenie, ktoré nahradzuje disketovú jednotku PMD 32, s tým rozdielom, že namiesto 5,25" diskiet sa používajú obrazy týchto diskiet (súbory typu P32) uložené na SD karte formátovanej na FAT16. PMD 32-SD obsahuje jednoduchý "ovládací panel" pozostávajúci z displeja a štyroch tlačidiel. To umožňuje voľbu práve používaných obrazov diskiet.

PMD 32-SD sa od pôvodnej disketovej jednotky PMD 32 líši v niekoľkých detailoch:

  • poskytuje možnosť používať 4 diskové jednotky A: až D: (u pôvodnej PMD 32 sú iba A: a B:) - vyžaduje to upravený CP/M BIOS
  • nevykonáva alebo ignoruje povely U, C, J, * a @ - dôvodom je odlišný hardvér a spôsob implementácie
  • poskytuje naviac nové povely G, H, K, L, M a N - umožňujú softvérovú voľbu vložených obrazov diskiet bez použitia ovládacieho panelu
  • odlišný prepojovací kábel - pôvodná PMD 32 má konektor FRB M-30, PMD 32-SD zas Cannon F-15
  • v EEPROM mikroprocesora sa odpamätávajú naposledy vložené diskety (mená obrazov diskiet), takže po zapnutí sú okamžite k dispozícii

Hardvér

Schéma PMD 32-SD
Schéma PMD 32-SD

Zapojenie je pomerne jednoduché. Základom je mikrokontrolér ATMEL ATmega32 taktovaný na maximálnych 16 MHz - X1, C1 a C2. Napájanie mikroprocesora je filtrované kondenzátorom C3. Na pin -RESET je pripojený iba pull-up odpor R3.

SD karta je pripojená štandardne na SPI interfejs ATMELu. Keďže SD karta je 3,3V zariadenie, výstupné signály do SD karty sú upravené deličmi z odporov R4 až R9. Napájanie SD karty je zrazené z 5V iba dvoma diódami D1 a D2 na približne 3,3V a filtrované kondenzátormi C8 a C9. I keď mnohé zdroje uvádzajú, že je vhodnejšie použiť 3,3V stabilizátor, zvolil som toto riešenie a nezaznamenal som žiadny problém. Červená LED D3 (s odporom R10) je pripojená na signál -CS karty a tak indikuje prístup na kartu. Na piny PB0 a PB1 ATMELu sú pripojené spínacie kontakty konektora SD karty pre detekciu vloženej karty, resp. detekciu blokovania zápisu. Na oba piny je programovo nastavený pull-up. SPI interface ATMELu, spolu so signálom -RESET, je vyvedený aj na osobitný konektor J2 (pinovú lištu) ako ISP - In-System Programming.

Pripojenie LCD displeja I1 (2 riadky po 16 znakov) je opäť štandardné - použité sú iba dátové signály DB4 až DB7 a riadiace signály E a RS. Displej teda pracuje v 4-bitovom režime a je umožnený iba zápis do registrov displeja. Zaujímavosťou je, že DB4 až DB7 sú, v záujme zjednodušenia plošného spoja, pripojené na port-D ATMELu v obrátenom poradí. Podsvietenie displeja je spínané pomocou T1, R1 a R2. Kontrast displeja je možné nastaviť trimrom P1.

Tlačidlá TL1 až TL4 spínajú proti GND a pull-up je zavedený programovo. Význam jednotlivých tlačidiel na DPS je tento: horné dve tlačidlá majú označenie << a >>, dolné dve tlačidlá majú označenie Cancel a Enter.

Schéma prepojovacie kábla medzi PMD 32-SD a PMD 85
Schéma prepojovacie kábla medzi PMD 32-SD a PMD 85
Hotový prepojovací kábel medzi PMD 32-SD a PMD 85
Hotový prepojovací kábel medzi PMD 32-SD a PMD 85

Komunikácia s nadradeným počítačom (v našom prípade s PMD 85-3) je prostredníctvom obojstranného paralelného kanála, ktorý pracuje ako protipól pre PIO 8255 a jeho port PA v móde 2. Je vyvedený na konektor J1 (CANNON F-15) a všetky signály sú oddelené odpormi R12 až R24. Tieto odpory chránia porty ATMELu, ak sa GPIO0 v PMD 85 naprogramuje tvrdo na výstup. Okrem dátového portu a riadiacich signálov -OBF, IBF, -ACK a -STB je vyvedený aj signál DIR, ktorým sa nastavuje smer budiča 8286, pripojeného na porte PA 8255 v GPIO0 PMD 85. Ak bude PMD 32-SD ovládaná iným systémom, ktorý takýto budič neobsahuje, signál DIR sa nepoužije.

Vstupné napätie 9V je stabilizované na potrebných 5V obvodom U2 7805 a filtrované kondenzátormi C4 až C7. Ak sa použije LCD displej bez podsvietenia, ako U2 postačí verzia L, pretože odber sa v tomto prípade pohybuje maximálne okolo 90mA. Ak sa použije displej s podsvietením, bude potrebný U2 minimálne vo verzii S, pretože odber vystúpi maximálne do 150mA (pri verzii displeja uvedeného na schéme). Zelená LED D4 (s odporom R11) indikuje zapnutie prístroja.

Plošný spoj

Pre nakreslenie schémy a návrh plošného spoja bol použitý program ExpressPCB. Plošný spoj je obojstranný a obsahuje iba jedinú súčiastku v SMD púzdre a tou je "konektor" pre SD kartu, osadený zhora zo strany súčiastok.

Keďže som nikdy nebol schopný "zžiť" sa s programom Eagle, nebránil by som sa tomu, keby sa našiel niekto, kto by plošný spoj prekreslil do Eaglu, ktorého výstupy sú zrejme použiteľnejšie z pohľadu "hromadnej" výroby DPS (i keď pravda, nechystám sa na nejakú sériovú výrobu!). Prototypové DPS som si nechal vyrábať vo firme pbSpoj, kde už síce nanášajú aj nepájivú masku, avšak bez prekovených otvorov u obojstranných DPS, čo je pri osadzovaní dosť nepríjemné. pbSpoj som si zvolil z viacerých dôvodov: sú na slovensku, cena DPS je celkom prijateľná a hlavne, boli ochotní vyrobiť DPS z predlohy práve z programu ExpressPCB, čo bola pre mňa dosť podstatná vec.

Komunikácia s nadradeným systémom

Zápis dát do PMD 32-SD
Zápis dát do PMD 32-SD

Zápis dát do PMD 32-SD má tento priebeh:

  • PMD 32-SD pri príjme čaká, kým systém nastaví signál -OBF do L
  • systém si pripraví posielaný byte a nastaví signál -OBF do L
  • po tom, ako PMD 32-SD zaregistruje, že je -OBF v L, nastaví signál DIR do H (čím sa v prípade PMD 85 prepne budič 8286 na výstup) a nastaví -ACK do L
  • na -ACK v L musí system do 1 µs vystaviť na zbernicu pripravený byte a nastaviť signál -OBF do H
  • PMD 32-SD prečíta byte zo zbernice a nastaví -ACK do H


Čítanie dát z PMD 32-SD má tento priebeh:

Čítanie dát z PMD 32-SD
Čítanie dát z PMD 32-SD
  • systém pri príjme čaká, kým PMD 32-SD nastaví signál -STB do L
  • PMD 32-SD nastaví signál DIR do L (čím sa v prípade PMD 85 prepne budič 8286 na vstup) a vystaví byte posielaný do systému na zbernicu
  • PMD 32-SD nastaví signál -STB do L
  • po tom, ako systém zaregistruje, že je -STB v L, nastaví signál IBF do H a do 1 µs musí prečítať byte zo zbernice
  • PMD 32-SD vráti -STB do H a čaká na IBF v L
  • systém po prečítaní bytu zo zbernice vráti IBF do L


To, čo je uvedené ako strana systému, plne vykonáva port PA v mode 2 v PIO 8255. Teda v prípade iného nadradeného systému ako PMD 85, je najvhodnejšie ako interface použiť práve obvod PIO 8255.


Komunikačný protokol - stručne

PMD 32-SD posiela na zbernicu opakovane prezentačný byte, kým neobdrží od nadradeného systému ako odpoveď opäť prezentačný byte. Po výmene prezentačných bytov PMD 32-SD očakáva povely od nadradeného systému. Ak nadradený systém nepošle ďalší povel do približne 25 ms, PMD 32-SD začne opäť s odosielaním prezentačného bytu. Preto musí nadradený systém pred odoslaním povelu testovať, či sa na zbernici náhodou nenachádza prezentačný byte od PMD 32-SD.

Každý povel, ktorý nadradený systém do PMD 32-SD posiela, je reprezentovaný jedným znakom, ktorý môže byť nasledovaný parametrami a je ukončený CRC. Odpoveď PMD 32-SD začína ACK alebo NAK. V prípade NAK už PMD 32-SD neposiela ďalšie dáta a očakáva ďalší povel. V prípade ACK môže nasledovať odpoveď (dáta, ERR, CRC), ktorá závisí od konkrétneho povelu. Po prijatí platného povelu (známy povel, správne CRC), PMD 32-SD okamžite odosiela ACK a prejde do výkonnej fázy, ktorá môže trvať rôzne dlho, v závislosti od povelu. Preto musí nadradený systém pri čakaní na odpoveď zvoliť zodpovedajúcu dĺžku timeoutu.

Ďalšie detaily v textovom dokumente s popisom komunikačného protokolu a jednotlivých povelov.


Firmvér

Firmvér je napísaný v jazyku C a kompilovaný pomocou WinAVR. Na editáciu bol použitý Programmer’s Notepad. Programmer’s Notepad, samozrejme, umožňuje priamo aj kompiláciu zdrojového kódu a tiež aj možnosť zápisu programu do FLASH pamäti mikroprocesora, prostredníctvom utility avr-dude z balíka WinAVR. Toto uvádzam pre prípad, že by si niekto chcel robiť vlastné úpravy firmvéru, a aby mohol použiť projekt ako celok, priamo v uvedenom editore. Hotový kód je možné, do určitej miery, ladiť i trasovať napr. v programe AVR Stuio 4.

Pre prácu s SD kartou je použitá knižnica MMC/SD/SDHC card library, ktorej zdrojové súbory sú súčasťou samotného projektu. V knižnici boli prevedené drobné úpravy. Jednak boli upravené konfiguračné hlavičkové súbory pre prispôsobenie daným požiadavkám, niektoré definície štruktúr boli presunuté, aby sa dosiahla kompilácia bez chýb a varovaní a nakoniec bola urobená zmena v porovnávaní mien súborov a adresárov tak, že sa nerozlišujú veľkosti písmen.

Popis ovládania

Po zapnutí PMD 32-SD sa zapne podsvietenie displeja a v prvom riadku displeja sa na 3 sekundy zobrazí verzia - PMD 32-SD v1.3. Následne sa prevedie pokus inicializovať vloženú SD kartu. Ak sa to podarí, zistí sa, či vložená SD karta je tá, ktorá bola vložená naposledy (sériové číslo karty sa odpamätáva v EEPROM mikroprocesora). Ak sa jedná o tú istú kartu, prečítajú sa z EEPROM mikroprocesora naposledy vložené diskety a "vložia sa" do príslušných diskových jednotiek. Pokiaľ sa zistí, že v jednotke A: nie je vložená disketa, PMD 32-SD sa pokúsi nájsť v koreňovom adresári obraz disku s menom system.p32. Ak sa nájde, vloží sa do jednotky A:. Po tejto inicializácii sa na displeji zobrazí PMD 32-SD Ready a zariadenie je pripravené v "pracovnom režime".

V prvom rade zariadenie opakovane posiela na zbernicu (paralelný kanál) prezentačný byte a očakáva povel od nadradeného systému. Prijaté povely sa spracovávajú bez nejakého reportu na displeji. A to ani v prípade nejakej chyby pri vykonávaní povelu. Je na nadradenom systéme, aby na príslušné chyby reagoval.

Zároveň sú testované tlačidlá Cancel a Enter. Po stlačení tlačidla Cancel sa "preruší spojenie" s SD kartou a na displeji sa zobrazí SD Card can be safely removed. Ak sa teraz stlačí tlačidlo Enter, opäť sa prevedie inicializácia SD karty a zariadenie sa vráti do pracovného režimu. Ak sa karta vytiahne, na displeji sa zobrazí Insert SD Card - Press any button a čaká sa na vloženie karty a stlačenie nejakého tlačidla. Doporučujem pred vytiahnutím karty použiť tento spôsob, pretože v tomto prípade sa uvoľňujú alokované buffre, korektne sa uzatvárajú všetky otvorené súbory (obrazy diskiet), adresáre a partícia atď. a tým sa predíde prípadnému poškodeniu karty.

Po stlačení tlačidla Enter v pracovnom režime sa preruší komunikácia s nadradeným systémom a na displeji sa zobrazí jednoduché menu. V prvom riadku displeja sa zobrazí PMD 32-SD Menu a v druhom riadku sa zobrazujú jednotlivé položky menu Drive A:, Drive B:, Drive C:, Drive D: a Create new image. Výber položky menu sa robí tlačidlami << a >>. Tlačidlom Cancel sa vyskočí z menu naspäť do pracovného režimu. Tlačidlom Enter sa vyberá zvolená položka menu.

Zvolením niektorej diskovej jednotky sa prejde do nastavení tejto jednotky. Na prvom riadku displeja sa zobrazí meno práve vloženého obrazu diskety (bez cesty a prípony) a úplne vpravo príznak povolenia/zakázania zápisu na disketu. RW, ak je povolený zápis na disk, RO, ak je na disk zápis zakázaný (napr. A:system RW). Ak v danej jednotke nie je disk vložený, je namiesto mena zobrazený text <empty>. Na druhom riadku displeja sa zobrazí <=Rem >=Ins E=WP, čo skrátene znamená, že: stlačením tlačidla << sa vyberie disketa z danej jednotky a stlačením tlačidla >> sa vchádza do režimu výberu obrazu diskety, ktorý sa vloží do danej jednotky. Stlačením tlačidla Enter sa mení stav príznaku povolenia/zakázania zápisu na disketu. Tlačidlo Cancel spôsobí návrat do menu.

Pri výbere obrazu diskety, ktorý sa má vložiť do jednotky, sa na prvom riadku zobrazí Select P32 image a v druhom riadku sa zobrazujú jednotlivé položky adresára na SD karte. Zobrazujú sa iba súbory s príponou P32 a mená adresárov, ktoré sú pre odlíšenie zobrazené v hranatých zátvorkách. Tlačidlom >> sa prechádza na ďalšiu položku v adresári (nie je možné prechádzať položkami v opačnom poradí). Ak je práve zobrazené meno P32 súboru, tlačidlo Enter prevedie výber tohto súboru. Ak je práve zobrazené meno adresára, tlačidlo Enter spôsobí vnorenie do tohto adresára. Ak je menom adresára "..", tlačidlom << sa prejde do nadradeného adresára (pri prechode do nadradeného adresára sa znovu prechádza od prvej položky). Tlačidlo Cancel spôsobí návrat do nastavení zvolenej jednotky.

Po voľbe na vytvorenie nového obrazu disku sa prejde do režimu voľby adresára, v ktorom sa súbor typu P32 vytvorí. Na displeji sa zobrazí Select directory a tlačidlom >> je možné prejsť na ďalšiu položku v adresári. V tomto prípade sa zobrazujú iba mená adresárov a ako prvá položka je <root>, čo umožňuje vytvorenie obrazu disku aj v koreňovom adresári. Tlačidlo Enter prevedie výber adresára. Tlačidlom << sa prejde do podadresára alebo nadradeného adresára a tlačidlo Cancel spôsobí návrat do nastavení zvolenej jednotky. Po voľbe adresára je potrebné zadať meno súboru (bez prípony). Na prvom riadku displeja sa zobrazí Enter image name a do druhého riadku sa zobrazí kurzor. Tlačidlom << sa mení znak na pozícii kurzora v poradí: malé písmená, veľké písmená, čísla, pomlčka a "podtržítko". Tlačidlom >> sa mení pozícia kurzora na riadku. Tlačidlo Enter potvrdzuje zadané meno a tlačidlo Cancel spôsobí návrat do menu. Po potvrdení mena súboru sa na displeji zobrazí Wait please! a do zvoleného adresára sa vytvorí obraz diskety so zvoleným menom a príponou P32. Vytvorenie súboru (360kB) trvá asi 20 sekúnd. Celý súbor je vyplnený hodnotou 0xE5 a teda disketu nie je nutné formátovať, pretože sa pre CP/M bude tváriť ako prázdny disk. Z diskety však nemožno BOOTovať a preto je vhodné na disketu zapísať systém pomocou programu SYSGEN.COM.

Podsvietenie displeja sa vypína automaticky po 20-tich sekundách od posledného stlačenia nejakého tlačidla. Ak je podsvietenie vypnuté, stlačenie tlačidla zapne podsvietenie, ale tlačidlo nie je akceptované a teda nevykoná žiadnu inú operáciu.

Informačné a chybové hlásenia

  • PMD 32-SD Ready - zariadenie je pripravené
  • SD Card can be safely removed - kartu možno bezpečne vytiahnuť
  • Press any button - očakáva sa stlačenie tlačidla
  • Wait please! - prevádza sa dlho trvajúca operácia (vytváranie obrazu diskety)
  • Insert SD Card - nie je vložená karta
  • Card init error! - kartu sa nepodarilo inicializovať
  • Partition error! - pri inicializácii sa na nultej pozícii nenašla platná FAT16 partícia
  • FAT error! - nepodarilo sa prečítať FAT
  • SD Card Locked! - na kartu je blokovaný zápis - s kartou sa dá pracovať, ale nebude možný zápis
  • Create file err! - došlo ku chybe pri vytváraní súboru (obrazu disku)
  • No files/folders - na karte nie sú žiadne súbory a adresáre
  • Path too long! - pri výbere obrazu diskety nesmie cesta vrátane mena súboru s príponou presiahnúť 63 znakov

Obmedzenia

  • karta môže byť rozdelená na viac partícií, ale číta sa iba nultá partícia a tá musí byť formátovaná na FAT16 (Aj keď knižnica podporuje otvorenie viac partícií, nie je pre to dosť RAM. Pre podporu FAT32 nie je ani dosť FLASH pamäte.)
  • knižnica orezáva dlhé mená súborov alebo adresárov maximálne na 31 znakov
  • firmvér dovoľuje maximálnu dĺžku mena súboru s príponou, vrátanie cesty k súboru iba 63 znakov, takže ak sa budú využívať adresáre, treba s tým počítať a voliť mená adresárov a súborov rozumne

Napálenie firmveru do mikroprocesora

Pre napálenie firmvéru do FLASH pamäti mikroprocesora je potrebné:

  • program PonyProg2000, v ktorom bude ako programovací interface nastavený SI Prog a mikrokontrolér ATmega32
  • prepojovací káblik, ktorý sa pripája na strane PC na COM port a na strane PMD 32-SD na ISP pinovú lištu. Tých pár súčiastok je vo vnútri krytky CANNON konektora. Dĺžka káblika by nemala presiahnuť 30 až 40cm, inak programovanie nebude spoľahlivé. Viď. obrázky.
  • počas programovania nesmie byť vložená SD karta!!!
  • najprv je potrebné naprogramovať FUSE bity, ako je uvedené na obrázku
  • pre naprogramovanie FLASH možno zvoliť ako HEX, tak i BIN súbor
  • programovanie je možné aj z prostredia editora Programmer’s Notepad
Nastavenie FUSE bitov pre mikroprocesor ATmega32 v programe PonyProg2000
Nastavenie FUSE bitov pre mikroprocesor ATmega32 v programe PonyProg2000
Schéma kábla pre napálenie firmvéru do mikroprocesora
Schéma kábla pre napálenie firmvéru do mikroprocesora
Hotový "napaľovací" kábel
Hotový "napaľovací" kábel

Softvér pre PMD 85

V súčasnosti existuje použiteľný softvér iba pre PMD 85-3. PMD 85-3 obsahuje v ROM-Monitore základný ovládač pre komunikáciu s PMD 32 a po resete overuje prítomnosť PMD 32 testovaním prezentačného bytu na zbernici. Ak je prítomnosť PMD 32 potvrdená, PMD 85-3 pošle do PMD 32 povel B pre vyžiadanie BOOT sektora diskety vloženej v mechanike A:. Pokiaľ sa BOOT sektor podarí načítať (na adresu 0080h), skokom na adresu 0080h sa spustí BOOT kód, ktorý zabezpečí načítanie systému.

Existujú dva systémy. Klasický Mikros (CP/M 2.2) a DOS PMD-32. Druhý menovaný slúži hlavne pre možnosť programovať v BASICu. BASIC sa naťahuje klasicky z ROM Modulu, avšak doteraz nemáme obsah jednej (alebo dvoch?) EPROM, ktoré obsahujú úpravu BASICu pre návrat do PMD-DOSu a možnosť ukladania BASIC programov.

Oba pôvodné systémy obsahujú BIOS, ktorý podporuje iba dve mechaniky. Aby bolo možné využívať 4 mechaniky, bol (zatiaľ iba pre Mikros) upravený BIOS a systém bol nanovo vygenerovaný. Tento systém sa teraz hlási ako 48K MIKROS (4 DRIVES). Úpravy boli prevedené tak, že je zachovaná spätná kompatibilita s pôvodnou PMD 32, takže ak by sa v PMD 32 použila disketa s týmto novým systémom, nebol by žiadny problém. Jediná výnimka je v tom, že by sa pri voľbe disku C: pristupovalo na mechaniku A: a pri voľbe disku D: by sa pristupovalo na mechaniku B:.

Ovládací panel na PMD 32-SD síce umožňuje nastavovať, resp. meniť vložené obrazy diskiet v jednotlivých mechanikách, nie je to ale úplne "user-friendly", čo sa týka rýchlosti a pohodlnosti. Preto bol pod CP/M napísaný program CD.COM, ktorý umožňuje relatívne pohodlným spôsobom prechádzať adresármi na SD karte a vkladať vybrané obrazy diskiet do jednotlivých mechaník. Práve kvôli tejto možnosti boli do komunikačného protokolu doplnené ďalšie povely, ktoré toto umožňujú. Doporučujem teda, aby ste si program CD.COM, ktorý nemá ani 1kB, nakopírovali na všetky diskety a tým si tak zabezpečili možnosť zmeny diskiet v mechanikách, pri akejkoľvek "konštelácii" diskiet v mechanikách. Rovnako doporučujem, nakopírovať si na všetky diskety aj samotný systém, aby boli všetky bootovateľné.


Použitie CD.COM

- vypisanie alebo zmena aktualnej cesty na SD karte
       CD @ [adresar]
- vypisanie zoznamu suborov v aktualnom adresari na SD karte
       CD #
- vytvorenie noveho P32 image v aktualnom adresari na SD karte
       CD $ meno_image
- vypisanie vlozenych image vo vsetkych mechanikach
       CD *
- vypisanie vlozeneho image v mechanike d, d je A, B, C alebo D
       CD d
- vlozenie image, ktory je v aktualnom adresari na SD karte do mechaniky d
   : znamena zapis na disk povoleny, ! znamena zapis na disk zakazany
   ak sa meno image neuvedie, iba sa zmeni stav povolenia zapisu na disk
       CD d:[meno_image]
       CD d![meno_image]
- vybratie image z mechaniky
       CD d- 

Na stiahnutie

  • zdrojové súbory firmvéru PMD 32-SD (obsahuje aj hotový BIN a HEX)
  • schéma a DPS PMD 32-SD do programu Eagle
  • schéma a DPS PMD 32-SD do programu ExpressPCB
  • popis komunikačného protokolu PMD 32 a PMD 32-SD, komentovaný výpis (disassembling EPROM) ovládacieho programu disketovej jednotky PMD 32 a časti rozšírenia monitora PMD 85-3 pre spoluprácu s PMD 32
  • obrazy diskov so starým systémom pre dve mechaniky a s novým systémom pre 4 mechaniky - prvý disk neobsahuje žiadne súbory, druhý obsahuje iba CD.COM
  • CD.COM obraz disku s programom a zdrojákom
  • zdrojáky originálneho aj upraveného BIOSu (pre zaujímavosť)