Motivace:

  • Moderní komponenty pro osobní počítače (nejen paměti) mají stále vyšší nároky na rychlost komunikace, a tak dříve rozšířené jednoduché rozhraní ISA, přítomné v každém PC bylo vytlačeno sběrnicí PCI.
  • Jeden z našich produktů s pracovním názvem  Ramdisk  tak bylo nutné redesignovat po hardwarové stránce s požadavkem na maximální možnou kompatibilitu s původním softwarem běžícím v PC.

Popis produktu:

Ramdisk je vestavná jednotka do technologického počítače, sloužící jednak pro archivování záznamů o událostech a jejich vyčítání, jednak pro připojení specifického zařízení přes 8 bitový port. Jednotka se skládá z karty s rozhraním sběrnice počítače (ISA) a montážního panelu s konektorem CAN09 a USB.

 

Jednotka původního provedení obsahuje zálohovanou statickou RAM s volitelnou kapacitou 4MB, 8MB nebo 16MB , opticky oddělený osmibitový výstupní port (na konektoru CAN09), ISA rozhraní s dekodérem adres, datovým bufferem atd., LED diody indikující probíhající přístup. Zálohovací obvod v době výpadku externího napájení zaručuje uchování dat ve statické RAM podobu až několika let.

Karta se chová ne jako paměť, ale jako 8 registrů v I/O adresním prostoru PC, jejichž bázová adresa je určena nastavením přepínače DIP v rozsahu adres 1C0 až 1F8. Každý registr je přístupný na adrese bázová adresa + offset podle následující tabulky.

 

Offset

Registr

přístup

Popis

0x00

Data

R/W

Čtení z/zápis do RAM, inkrementuje Adresu(31:0)

0x01

Adresa(15:8)

R/W

Adresa do paměti RAM, zápis nuluje registr Adresa(7:0)

0x02

Adresa(23:16)

R/W

Adresa do paměti RAM

0x03

ID desky

R

ID desky = 1100 011w (bin) pro Ramdisk3 ISA
w == 0 … Ramdisk je odemčený

0x04

Adresa(7:0)

R/W

Adresa do paměti RAM(nejnižší byte)

0x05

Status

R

xxxxxxx1 … je nutné vyměnit záložní baterii
xxxxxxx0 … záložní baterie je v pořádku

0x06

8-bitový port/firmware

R/W

zápis: výstupní port, čtení: verze firmware

0x07

Adresa(31:24)

R/W

Adresa do paměti RAM

Tabulka 1

Zápisem do 4 registrů se nastaví adresa paměti v desce (původně bylo k dispozici je 24 bitů pro 16MB), zápisem nebo čtením datového registru se zapíše nebo přečte jeden byte dat z této adresy. Adresa se pak automaticky inkrementuje po každém zápisu nebo čtení datového registru. Adresa se skládá ze 3 registrů na offsetech 0x04, 0x01, 0x02, a nově ještě 0x07.

Další registry slouží k identifikaci desky a přečtení stavu baterie.


ISA versus PCI:

Sběrnice ISA je asynchronní sběrnice s šířkou dat 8 nebo 16 bitů a adresním prostorem paměti 20 až 24 bitů, pro I/O porty 16 bitů. Data jsou přenášena během přístupového cyklu, kdy procesor dává stabilní adresu a aktivuje příslušný signál Read nebo Write. Sběrnice má takt 8,3 až 24 MHz, podle modelu počítače. ISA nebyla nikdy celosvětově standardizována, ač bylo vyvinuto značné úsilí, a rozdílné realizace výrobců tak nemusí být vždy kompatibilní a funkční.

PCI: Na rozdíl od sběrnice ISA, je specifikace PCI protokolu vyvinuta a udržována společenstvím PCI-SIG. Tato sběrnice je orientována na přenos zpráv (transakcí) místo přímého zápisu a čtení dat, a používá multiplexaci adresních a datových signálů, což umožnilo zvýšit šířku a přenosovou rychlost. Každá transakce obsahuje inicializaci, adresní část, datovou část s případnými čekací cykly a zakončení. Jednotlivé části transakce probíhají synchronně rychlostí 33MHz nebo 66MHz (určeno nejpomalejším zařízením) a šířkou dat 32 nebo 64 bitů. Pokud je použito méně datových bitů (8, 16), musejí tyto data vést po příslušných lichých a vyšších osmicích signálů.

V zařízení dále musí být implementována konfigurační paměť, která slouží pro uložení bázové adresy, podporované šíře datové sběrnice, počtu čekacích cyklů apod.

Realizace PCI rozhraní:

Ramdisk prošel několika modernizacemi, jak přicházely požadavky na vyšší kapacitu paměti na desce. Rozhraní mezi Ramdiskem a sběrnicí PC ISA, a později PCI, bylo realizováno v hradlovém poli typu CPLD. V případě ISA sběrnice je realizace několika 8 bitových registrů a řídicí logiky nenáročná na prostředky hradlového pole bylo možné použít obvod MAX3064 (od firmy Altera).

Ramdisk se z pohledu PC chová jako PCI zařízení podporující 8 bitový přístup do I/O prostoru. Jádro firmware vychází z PCI specifikace 2.1.  Karta vložená do PCI slotu je po zapnutí napájení rozeznána PCI Biosem (Device ID = 0043, Vendor ID = 4625, Class Code = 0x058000). PCI Bios automaticky nastaví kartě bázovou adresu (zápisem do registru BAR v konfiguračním prostoru zařízení)., čímž se vyloučí konflikty na sběrnici. Po opuštění této fáze se deska začně "jevit" na bázové adrese.

Pro implementaci registrů a stavového automatu, který realizuje protokol transakcí sběrnice PCI, bylo však nutné použít obvod EPM570, který obsahuje cca desetinásobné množství tzv. logických elementů než obvod MAX3064.

Protože po implementaci velmi minimalistické verze PCI protokolu zbyly v hradlovém poli nevyužité prostředky, rozhodli jsme se rozšířit zařízení o populární rozhraní USB. To umožňuje provádět stejné operace čtení a zápisu archivovaných dat např. pomocí notebooku při přítomnosti Ramdisku ve vypnutém PC nebo dokonce mimo něj.

Zpětná kompatibilita:

Specifické požadavky zákazníka na absolutní zpětnou kompatibilitu se software, který byl napsán pro přístup k Ramdisku s rozhraním ISA, bylo nutné porušit specifikaci.

Dle standardu musí být možné každé PCI zařízení umístit do adresního prostoru PC na volitelnou bázovou adresu kvůli odstranění možných kolizí různých zařízení. Tato vlastnost je známa pod názvem "Plug and Play". V ISA verzi Ramdisku je tato adresa přímo určena obvodovým zapojením a přepínačem DIP. Bylo proto nutné v hradlovém poli hodnotu bázového registru realizovat jako "read-only" s přednastavenou hodnotou, což je v rozporu s normou (a ke spokojenosti zákazníka).

Popis USB rozhraní Ramdisku 3

Stavový automat v CPLD Ramdisku 3 lze zhruba popsat takto:

Zařízení se chová jako sériový port. Lze zapisovat přes Windows API nebo pomocí knihovních funkcí

Jsou dva základní stavy:

  1. Rozsynchronizovaný stav. Po zapnutí napájení nebo po chybě je komunikace rozsynchronizována, musí se provést synchronizace zasláním sekvence 8 anebo více bajtů „START_flag“ a 8 bajtů „SYNC_flag“. Chybou komunikace je stav, kdy příjem odpovědi trvá déle než 200 milisekund.
  2. synchronizovaném stavu pak lze poslat příkaz a přijmout odpověď,

Příkaz

START_flag

cnt

U

T

S

C

length

dummy

Odpověď

START_flag

cnt

data (16B až 4096B)

chksum

 

Tab.1

            Každé políčko tabulky 1 odpovídá 1 bajtu, pokud není uvedeno jinak:

#define SYNC_FLAG   0x5A

#define START_FLAG 0x3E

cnt – čítač příkazů, na počátku je nulový, po každém odeslaném paketu se musí inkrementovat; po 255 následuje nula. cnt v příkazu a odpovědi musí být shodné.

U:T:S:C – adresa do SRAM paměti Ramdisku3, C je nejnižších 8 bitů adresy; obsah paměti se zrcadlí vedle sebe – tj. pokud je kapacita 16MB, pak se přečtením 17. megabajtu přečte první megabajt dat.

length – určuje délku dat v odpovědi podle vzorce:

                        délka dat = (length + 1)* 16

-          tj. minimálně se přečte 16B, maximálně 4096B po násobcích 16B

dummy – osmý bajt příkazu – na hodnotě nezáleží

chksum – 8 bitový checksum přes data v odpovědi.

V deskriptoru USB zařízení je uloženo výrobní číslo a řetězec se jménem zařízení typem a kapacitou (např. Ramdisk3 PCI 16MB).

Kapacita zařízení se určí následujícím algoritmem:

  1. přečtením báze+3 se ověří ID desky, zda obsahuje platnou hodnotu pro Ramdisk3 (binárně 110001xx); pokud obsahuje jinou hodnotu, není detekce kapacity podporována -> konec algoritmu
  2. na adresu báze + 2 se zapíše 0xFF
  3. na adresu báze +7 se zapíše 0xFF
  4. přečte se registr báze+2
  5. přečte se registr báze+7
  6. podle Tabulky 3 se určí kapacita

         Přečteno v bodu 5) z adresy báze+7

Přečteno v bodu 4) z adresy báze+2

Detekovaná kapacita

poznámka

bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

bit7

bit6

bit5

 

0

0

0

0

0

0

0

0

0

0

1

4 MB

b)

0

0

0

0

0

0

0

0

0

1

1

8 MB

b)

0

0

0

0

0

0

0

0

1

1

1

16 MB

a)

0

0

0

0

0

0

0

1

1

1

1

32 MB

c)

0

0

0

0

0

0

1

1

1

1

1

64 MB

e)

d)…d)

1

1

1

1

1

1

1

1

1

1

1

4096MB

d)

pozn.: a) standardní hodnota, b) lze dodat, c) lze objednat po technické úpravě, d) nelze dodat bez dodatečného vývoje fw/hw,

e) byla vyvinuta deska pro 64MB, kterou však zákazník zatím nechce.

Tabulka 3: Varianty osazení

Čtením registru báze+5 se získá informace o stavu záložní baterie, která napájí zálohovací obvod v době výpadku externího napájení. Informace o stavu baterie a případné nutnosti její výměny se aktualizuje každých 24 hodin. Doba zálohování je závislá na kapacitě Ramdisku, okolní teplotě a vlhkosti a pro 16 MB kapacitu dosahuje typicky 5 let, minimálně 2 roky.

Zápisem jedničky do bitu výstupního portu (offset 0x06) se aktivuje (sepne) opticky oddělný příslušný výstup typu open colector, který je schopný sepnout proud až 50mA; maximální napětí v nesepnutém stavu je 36V. Výstupy jsou chráněny proti přepětí nad 36V a nadměrnému proudu. Oproti starší verzi Ramdisku je zaručena odolnost portu vůči zdroji napětí až 48V.

Čtením registru báze+6 se získá verze firmware hradlového pole.

Závěr: Nejcennější je intelektuální vlastnictví popsaného firmwaru. Ten byl vyvinut a napsán v jazyce VHDL, což umožňujeho přenesení i do jiného vývoje.

To se také již několikrát stalo při modernizaci některých dalších desek do PC: Kom-PP-PCI (6 portů RS-485), DUAL (sběr dat, převodník A/D).