Realizace zařízení na sběrnici PC

Motivace:

  • Moderní komponenty pro osobní počítače mají stále vyšší nároky na rychlost komunikace a tak dříve široce rozšířené 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 se 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, jednak pro připojení specifického zařízení přes 8 bitový port. Výrobek se skládá z karty s rozhraním sběrnice počítače (ISA) a montážního panelu s konektory CAN09.

 

Jednotka obsahuje zálohovanou statickou RAM s volitelnou kapacitou 4MB, 8MB nebo 16MB ,  galvanicky oddělený (isolační napětí 500V) osmibitový výstupní port (na konektoru CAN09), ISA rozhraní, 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á 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, zápisem nebo čtením datového registru se zapíše nebo přečte 1 byte dat z této adresy. Adresa se automaticky inkrementuje po každém zápisu nebo čtení datového registru. Adresa se skládá ze 4 registrů na offsetech 0x04, 0x01, 0x02.


ISA versus PCI:

Sběrnice ISA je asynchronní sběrnice s šířkou dat 8 nebo 16 bitů a adresním prostorem 24 bitů. Data jsou přenášena během aktivace příslušného signálu Read nebo Write.

Takt 8,3MHz

popis PCI:

Na rozdíl od sběrnice ISA, která nebyla nikdy celosvětově standardizována, a rozdílné realizace výrobců tak nemusí být vždy kompatibilní a funkční, 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ů. 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ů.

V zařízení 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í:

Rozhraní mezi Ramdiskem a PC je 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í).

Pro implementaci stavového automatu, který realizuje protokol transakcí sběrnice PCI, bylo 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 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 – hrubý popis:

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

  1. popisu USB zařízení je uloženo výrobní číslo a řetězec se jménem zařízení typem a kapacitou (např. Ramdisk3 ISA 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

d)

d)…d)

1

1

1

1

1

1

1

1

1

1

1

4096MB

d)

pozn.: a) standartní hodnota, b) lze dodat, c) lze objednat s navýšením ceny a dodací lhůtou cca 3 měsíce, d) nelze dodat bez dodatečného vývoje fw/hw

Tabulka 3

Č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.