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