Spetspribor-ébresztő protokoll

WAKE protokoll specifikáció

1. táblázat: WAKE ellenőrző kódok.

Áttelepített keret vége

Átültetett keret menekülés

2. táblázat Az adatbájtok helyettesítése ESC-szekvenciákkal.

3. táblázat: A WAKE csomag felépítése.


FEND: A FEND (C0h) ellenőrző kód a csomag kezdetének jele. A kitöltés miatt ez a kód nem található máshol az adatfolyamban, ami lehetővé teszi, hogy egyedileg meghatározza a csomag kezdetét minden helyzetben.

CMD: A parancssáv mindig legyen a nulla legnagyobb bitje:


Így a parancskód 7 bitet tartalmaz, amely lehetővé teszi akár 128 különböző parancs továbbítását. A parancskódokat önkényesen választják ki az alkalmazás igényeitől függően. Több szabványos parancskód használatát javasoljuk:

4. táblázat: A WAKE protokollparancsok szabványkódjai.

Hibakód továbbítása

A továbbított csomag visszaküldésére irányuló kérelem

Információ kérése az eszközről

A fennmaradó parancsok kódjait az alkalmazás igényeinek megfelelően választják ki. A parancsok általában több paraméterrel rendelkeznek, amelyeket adatcsomagként továbbítanak.
Mivel a parancskódnak mindig van nulla fő bite, ez a kód soha nem egyezik meg a vezérlő kódokkal. Ezért, amikor küldünk egy csapatot, a töltelék soha nem történik meg.

N: Az adatbájt értéke megegyezik a továbbított bájtok számával:


Így az adatmennyiség kódja 8 bitet vesz igénybe, így egy csomag akár 255 bájt adatot is tartalmazhat. Az N értéke nem veszi figyelembe a FEND, ADDR, CMD, N és CRC csomagok szolgáltatás bájtjait. A töltés eredményeképpen a csomag tényleges hossza növekedhet. Az N értéke nem veszi figyelembe ezt a tényt, és tükrözi az hasznos bájtok számát (azaz az N értéke mindig olyan, hogy a töltés nem teljesül). Ha a továbbított parancsnak nincsenek paraméterei, akkor N = 00h kerül továbbításra, és az adatbájtok kihagyhatók.

Ha szükség van arra, hogy átadjuk az N értékét, egyenlő C0h vagy DBh, akkor töltés történik, azaz az ESC szekvencia továbbítása (lásd a 2. táblázatot). Az ilyen nagy N értékeknél azonban a csomag hossza annyira nagy, hogy egy további bájtos meghosszabbítása szinte észrevehetetlen.

Data1. AdatN: Adatbájtok, amelyek számát N értékkel határozzuk meg. N = 00h esetén az adatbájtok hiányoznak. Az adatbájtok bármilyen értékűek lehetnek, mint a FEND (C0h) és a FESC (DBh). Ha szükségessé válik ezen értékek egyikének átadása, akkor a töltelék végrehajtására kerül sor, azaz. (lásd a 2. táblázatot), amely az FESC vezérlő kódból és a TFEND kódból (TFESC) áll.

5. táblázat: A WAKE protokoll redundancia értéke.

FEND, CMD, 00h, CRC

FEND, ADDR, CMD, 00h, CRC

FEND, ADDR, CMD, 00h

FEND, ADDR, CMD, 0Ah, <10 bytes of data>, CRC

FEND, ADDR, CMD, 32h, <50 bytes of data>, CRC

FEND, ADDR, CMD, 7Fh, <127 bytes of data>, CRC

FEND, CMD, 7Fh, <127 bytes of data>, CRC

FEND, ADDR, CMD, 7Fh, <127 bytes of data>

FEND, CMD, 7Fh, <127 bytes of data>


A PC oldalon a protokoll a wsp32.dll dinamikus könyvtárban (az RS-232 verzióhoz) és a wusb32.dll-hez (USB-opció az FTDI illesztőprogrammal) van telepítve. A könyvtárak kommunikációs programok kidolgozásában használhatók bármely nyelven. Egy további leírás feltételezi, hogy a könyvtárat egy C ++ által írt alkalmazás használja. Az RS-232-en keresztül a wsp32.dll könyvtár fejlécfájlja az alábbi:
bool AccessCOM (char * P) - a függvény ellenőrzi a port elérhetőségét. A port neve paraméterként átadódik (például "COM1"). Igaz, ha a port elérhető.

bool OpenCOM (char * P, DWORD baud) - a függvény megnyitja a portot. Paraméterként a port neve (például "COM1") és a baud rate, amelyik az egyik standard értéket (pl. 115200) átveheti. Igaz, ha sikeres. A funkció a DTR-vonalt -12V-ra, a + 12V-vonalat pedig az RTS vonalon állítja be.

Bool CloseCOM (üres) - a függvény bezárja a portot. Igaz, ha sikeres.

bool SetModLns (DWORD F) - a függvény az RTS és a DTR sorokat kezeli. Igaz, ha sikeres. A paraméter megegyezik az EscapeCommFunction API funkcióval.

bool GetModLns (LPDWORD lpD) - a függvény a CTS és a DSR modemvezérlő vonalakat olvassa. Igaz, ha sikeres. A paraméter megegyezik a GetCommModemStatus API funkcióval.

bool PurgeCOM (üres) - ez a funkció törli a COM port pufferét és megszakítja az aktuális vételi / továbbítási műveleteket. Igaz, ha sikeres.

bool FlushCOM (üres) - a funkció kiküszöböli a COM port pufferét, és várja az átvitel befejezését. Igaz, ha sikeres.

bool GetMaskCOM (LPDWORD lpEvtMask) - a függvény a COM port eseménymaszkját olvassa. Igaz, ha sikeres. A paraméter megegyezik a GetCommMask API funkcióval.

bool SetMaskCOM (DWORD EvtMask) - a függvény beállítja a maszkot Igaz, ha sikeres. A paraméter megegyezik a SetCommMask API funkcióval.

bool WaitEventCOM (LPDWORD lpEvtMask) - ezt a funkciót várhatja a COM port eseményére. Igaz, ha sikeres.

bool RxFrame (DWORD To, aláírás nélküli karakter ADD, aláíratlan karakter CMD, aláíratlan karakter N, unsigned char * Data) - a funkció WAKE csomagot fogad el. Igaz, ha sikeres.

bool TxFrame (unsigned char ADDR, aláíratlan char CMD, aláírás nélküli char N, unsigned char * Data) - a függvény továbbítja a WAKE csomagot. Igaz, ha sikeres.

A wusb32.dll könyvtár kisebb funkciókat tartalmaz. Funkció nevek nem egyeznek a két dll, amely lehetővé teszi, hogy csatlakozzon egy projekt egyszerre mind a könyvtárat, miközben a munka, mint az RS-232 és USB-n keresztül. wusb32.dll könyvtár igényel a működéséhez a készlet közvetlen vezető FTDI (tesztelve driver verzió 1.6.20) és a jelenlét FTD2XX.dll könyvtár (könyvtár teszteltük verzió 2.1.04). Fejes wusb32.dll könyvtár fájl használható USB-n keresztül az alábbiakban mutatjuk be: bool AccessUSB (int DevNum) - a funkció ellenőrzi a rendelkezésre álló USB-port. Az átadott paramétert a port számát (egy egység általában DevNum = 0). Igaz, ha a port elérhető.

bool OpenUSB (int DevNum, DWORD baud) - a függvény megnyitja a portot. Paraméterként a port számát és a baud rateot továbbítják. A sebesség csak akkor fontos, ha az FT232BM készülékkel dolgozik.

bool CloseUSB (üres) - a függvény bezárja a portot. Igaz, ha sikeres.

bool PurgeUSB (üres) - ez a funkció törli a portpuffer és megszakítja az aktuális vételi / továbbítási műveleteket. Igaz, ha sikeres.

bool RxFrameUSB (DWORD To, aláíratlan karakter ADD, aláíratlan karakter CMD, aláíratlan karakter N, unsigned char * Data) - a funkció WAKE csomagot fogad el. Igaz, ha sikeres.

bool TxFrameUSB (aláíratlan char ADDR, aláíratlan char CMD, aláírás nélküli char N, aláírás nélküli char * Data) - a funkció WAKE csomagot továbbít. Igaz, ha sikeres.

A WAKE protokoll használatával történő teszteléshez használja a WakeUp alkalmazást. amelyekkel kézzel generált képkockákat lehet átvinni, és válaszüzeneteket fogadhat. A WakeUp! az 1. ábrán látható. 1.

Ábra. 1. A program ablakának WakeUp!

6. táblázat: Standard WAKE hibakódok.

Az eszköz nem válaszol

A szabványos hibakódok célja:
  • Err_No - nincs hiba, a parancs helyesen lett végrehajtva
  • Az Err_Tx az Exchange hiba. A hiba kódját a csomagban lévő slave továbbítja a C_Err parancskóddal. Valójában ez a csomag jelenti a hibát a master csomag fogadására. Egy másik helyzet, ahol ezt a hibakódot továbbítani lehet, a slave csere hibája más rabszolgasorozatokkal.
  • Err_Bu - a készülék foglalt. Ez a hiba akkor jelentkezik, amikor a varázsló elindít egy olyan folyamatot a slave-ben, amely nem fejeződött be az előző indítás után. Példa - "ADC foglalt".
  • Err_Re - a készülék nem áll készen. Ez a hibakód használható a parancssori csoportban, amellyel a mester lekérdezi a slave készenlétét. Ezek a parancsok visszaadják az Err_Re kódot, amíg a készülék (például ADC) készen van, majd visszaadja az Err_No értéket. Ez a kód is visszakerülhet az adatkérési parancsra, ha még nem áll készen. Ezután külön csapatok szavazási hajlandósága nélkül is megteheti.
  • Err_Pa - érvénytelen parancsok. Ez a hiba akkor fordul elő, ha a varázsló hibás paraméterekkel próbálja végrehajtani a slave funkcióját. Ebben az esetben az adatcsomag helyett a slave visszaad egy csomagot ezzel a hibakóddal.
  • Err_Nr - az eszköz nem válaszol. Ez a hiba akkor fordulhat elő, ha a rabszolga eszköz "alárendeli" más eszközöket, amelyek nem válaszolnak (például letiltva).
Ez a hibacsoport módosítható az adott alkalmazás igényei szerint. A WAKE protokoll adott eszközön történő alkalmazásának egyik példájaként a CTC-25N kriosztat vezérlőegység parancsrendszerének leírását adjuk meg.

wake.pdf (225 Kb) - a WAKE protokoll részletes leírása pdf formátumban.

wakeup.zip (271 Kb) - archiváljon a WakeUp programmal! (V1.00) és a wsp32.dll könyvtárat.

wusource.zip (35 Kb) - archiváljon a WakeUp forráskódjával! (V1.00, C ++ Builder 5).

w51.zip (3 Kb) - archiválja a WAKE protokoll végrehajtási példányának forráskódját az MCS-51-en (ASM).

wavr.zip (3 Kb) - archiválja az AVR (ASM) WAKE protokoll végrehajtási példányának forráskódját.

wake_c.zip (4 Kb) - archiválja az AVR (IAR C) WAKE protokoll végrehajtási példányának forráskódját.

ctc-25n.pdf (126 Kb) - a WAKE protokoll alkalmazásának egyik példája a kriosztát vezérlőegységben.

wakeusb.zip (302 Kb) - archiváljon a WakeUSB (V1.00) programmal és a wusb32.dll könyvtárral.

wusb.zip (342 Kb) - wusb32.dll és FTD2XX meghajtó az FTDI-ből.