Protocolul de trezire Spetspribor

WAKE Protocol Specification

Tabelul 1. Codurile de control WAKE.

Transformarea cadrului final

Transformarea cadrului de evacuare

Tabelul 2. Înlocuirea octelor de date cu secvențe ESC.







Tabelul 3. Structura pachetului WAKE.


FEND: Codul de control FEND (C0h) este un semn al începutului pachetului. Datorită umpluturii, acest cod nu este găsit nicăieri în fluxul de date, ceea ce permite determinarea unică a începutului pachetului în orice situație.

CMD: octetul de comandă trebuie să aibă întotdeauna cel mai mic bit zero:


Astfel, codul de comandă are 7 biți, ceea ce vă permite să transmiteți până la 128 de comenzi diferite. Codurile de comandă sunt alese în mod arbitrar, în funcție de necesitățile aplicației. Se recomandă utilizarea mai multor coduri de comandă standard:

Tabelul 4. Codurile standard ale comenzilor WAKE protocol.

Cod de eroare Transmisie

Solicitați să returnați un pachet transmis

Solicitați informații despre dispozitiv

Codurile comenzilor rămase sunt selectate în funcție de nevoile aplicației. Comenzile au, de obicei, mai mulți parametri, care apoi sunt transmiși ca pachete de date.
Deoarece codul de comandă are întotdeauna un bit major zero, acest cod nu se potrivește niciodată cu codurile de control. Prin urmare, atunci când trimiteți o echipă, umplutura nu se face niciodată.

N: octetul de date are o valoare egală cu numărul de octeți transmiși:


Astfel, codul pentru suma de date are nevoie de 8 biți, astfel încât un pachet poate conține până la 255 octeți de date. Valoarea N nu ține cont de octeții de serviciu ai pachetelor FEND, ADDR, CMD, N și CRC. Ca urmare a umplerii, lungimea reală a ambalajului poate crește. Valoarea lui N nu ia în considerare acest fapt și reflectă numărul de octeți utile de date (adică valoarea lui N este întotdeauna astfel încât umplutura nu este efectuată). Dacă comanda transmisă nu are parametri, atunci N = 00h este transmis și octeții de date sunt omiteți.

Dacă este necesar să se transfere valoarea lui N, egală cu C0h sau DBh, se efectuează umplutura, adică transmiterea secvenței ESC (a se vedea tabelul 2). Cu toate acestea, la astfel de valori mari de N, lungimea pachetului este atât de mare încât prelungirea lui cu încă un octet este aproape imperceptibilă.

Date1. DataN: octeți de date, numărul cărora este determinat de valoarea lui N. Pentru N = 00h, octeții de date sunt absenți. Octeții de date pot avea orice valoare diferită de FEND (C0h) și FESC (DBh). Dacă devine necesar să se transfere una dintre aceste valori, se efectuează umplutura, adică transmiterea secvenței ESC (a se vedea tabelul 2) constând din codul de control FESC și codul TFEND (TFESC).

Tabelul 5. Valoarea de redundanță a protocolului WAKE.

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, 32 de ore, <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>


În partea a protocolului este implementat în PC wsp32.dll bibliotecă dinamică (RS-232 opțional) și wusb32.dll (versiunea USB cu driverul de la FTDI). Bibliotecile pot fi utilizate în dezvoltarea de programe de comunicare în orice limbă. O altă descriere presupune că biblioteca este utilizată de o aplicație scrisă în C ++. Fișierul antet al bibliotecii wsp32.dll pentru funcționarea prin RS-232 este prezentat mai jos:
bool AccessCOM (char * P) - funcția verifică disponibilitatea portului. Numele portului este trecut ca parametru (de exemplu, "COM1"). Returnează true dacă portul este disponibil.

bool OpenCOM (char * P, DWORD baud) - funcția deschide portul. Ca parametri sunt transmise nume de port (de exemplu, „COM1“) și rata de transfer, care poate fi una dintre valorile standard (de exemplu, 115200). Returnează adevărat dacă are succes. Funcția stabilește linia DTR la -12 V și linia + 12 V pe linia RTS.

bool CloseCOM (void) - funcția închide portul. Returnează adevărat dacă are succes.







bool SetModLns (DWORD F) - funcția gestionează liniile RTS și DTR. Returnează adevărat dacă are succes. Parametrul este același ca și pentru funcția EscapeCommFunction API.

bool GetModLns (LPDWORD lpD) - funcția citește liniile de control modem CTS și DSR. Returnează adevărat dacă are succes. Parametrul este identic cu funcția API GetCommModemStatus.

bool PurgeCOM (void) - această funcție șterge tamponul portului COM și întrerupe operațiunile de primire / transmitere curente. Returnează adevărat dacă are succes.

bool FlushCOM (void) - funcția șterge tamponul portului COM, așteptând ca transferul să se termine. Returnează adevărat dacă are succes.

bool GetMaskCOM (LPDWORD lpEvtMask) - funcția citește masca evenimentului portului COM. Returnează adevărat dacă are succes. Parametrul este identic cu funcția API GetCommMask.

bool SetMaskCOM (DWORD EvtMask) - funcția stabilește masca Returnează true dacă este reușită. Parametrul este același ca și pentru funcția API SetCommMask.

bool WaitEventCOM (LPDWORD lpEvtMask) - această funcție este folosită pentru a aștepta evenimentul portului COM. Returnează adevărat dacă are succes.

bool RxFrame (DWORD To, caractere nesemnate ADD, caractere nesemnate CMD, caractere nesemnate N, caractere nesemnate * date) - funcția acceptă un pachet WAKE. Returnează adevărat dacă are succes.

bool TxFrame (ADDR unsigned char, CMD unsigned char, unsigned char N, unsigned char * Date) - funcția transmite-pachetul WAKE. Returnează adevărat dacă are succes.

Biblioteca wusb32.dll conține un set mai mic de funcții. Numele funcțiilor celor două dll-uri nu se potrivesc, ceea ce face posibilă conectarea ambelor biblioteci la un singur proiect simultan, asigurând în același timp funcționarea atât prin RS-232, cât și prin USB. Biblioteca wusb32.dll necesită pentru funcționarea acesteia un driver instalat direct din FTDI (testat cu versiunea de driver 1.06.20) și prezența bibliotecii FTD2XX.dll (testată cu versiunea bibliotecă 2.01.04). Fișierul antet pentru biblioteca wusb32.dll pentru operarea prin USB este prezentat mai jos: bool AccessUSB (int DevNum) - funcția verifică disponibilitatea portului USB. Ca parametru, numărul portului este transferat (DevNum = 0 pentru un dispozitiv). Returnează true dacă portul este disponibil.

bool OpenUSB (int DevNum, DWORD baud) - funcția deschide portul. Ca parametri, numărul de port și rata baud sunt transmise. Viteza este importantă numai când lucrați cu FT232BM.

bool CloseUSB (void) - funcția închide portul. Returnează adevărat dacă are succes.

bool PurgeUSB (void) - această funcție șterge tamponul portului și întrerupe operațiile de recepție / transmitere curente. Returnează adevărat dacă are succes.

bool RxFrameUSB (DWORD To, caractere nesemnate ADD, caractere nesemnate CMD, caractere nesemnate N, caractere nesemnate * date) - funcția acceptă un pachet WAKE. Returnează adevărat dacă are succes.

bool TxFrameUSB (ADDR unsigned char, CMD unsigned char, unsigned char N, unsigned char * Date) - funcția transmite-pachetul WAKE. Returnează adevărat dacă are succes.

Pentru a testa aplicațiile utilizând protocolul WAKE, utilizați aplicația WakeUp. cu care poți transfera cadre generate manual și primești un dispozitiv de răspuns. WakeUp! este prezentat în Fig. 1.

Fig. 1. Fereastra programului WakeUp!

Tabelul 6. Coduri de eroare standard WAKE.

Dispozitivul nu răspunde

Scopul codurilor de eroare standard este:
  • Err_No - fără eroare, comanda a fost executată corect
  • Err_Tx este eroarea de schimb. Codul pentru această eroare poate fi transmis de slave-ul din pachet cu codul de comandă C_Err. De fapt, acest pachet înseamnă "eroare la primirea pachetului master". O altă situație în care acest cod de eroare poate fi transmis este eroarea de schimb a slave-ului cu alte microcontrolere slave.
  • Err_Bu - dispozitivul este ocupat. Această eroare apare atunci când expertul încearcă să lanseze un proces în slave care nu a terminat după pornirea anterioară. Exemplu - "ADC este ocupat".
  • Err_Re - dispozitivul nu este gata. Acest cod de eroare poate fi utilizat în grupul de comandă, prin care masterul evaluează disponibilitatea slavelui. Astfel de comenzi returnează codul Err_Re până când dispozitivul (de exemplu, ADC) este gata și apoi returnează Err_No. Acest cod poate fi de asemenea returnat comenzii de solicitare a datelor, dacă nu este încă pregătit. Apoi, puteți face fără echipă specială voce de votare.
  • Err_Pa - comenzi nevalide. Această eroare apare dacă expertul încearcă să execute o funcție în slave cu parametri incorect. În acest caz, în loc de pachetul de date, slave-ul returnează un pachet cu acest cod de eroare.
  • Err_Nr - dispozitivul nu răspunde. Această eroare poate apărea dacă dispozitivul slave are dispozitive "subordonate" care nu răspund (de exemplu, cu dezactivare).
Acest set de erori poate fi modificat în funcție de necesitățile aplicației respective. Ca exemplu de aplicare a protocolului WAKE într-un anumit dispozitiv, este prezentată o descriere a sistemului de comandă al unității de control criostat CTC-25N.

wake.pdf (225 Kb) - specificarea protocolului WAKE în format pdf.

wakeup.zip (271 Kb) - arhiva cu programul WakeUp! (V1.00) și biblioteca wsp32.dll.

wusource.zip (35 Kb) - arhiva cu codul sursă al WakeUp! (V1.00, C ++ Builder 5).

w51.zip (3 Kb) - arhiva cu codul sursă al exemplului de implementare a protocolului WAKE pe MCS-51 (ASM).

wavr.zip (3 Kb) - arhiva cu codul sursă al exemplului de implementare a protocolului WAKE pe AVR (ASM).

wake_c.zip (4 Kb) - arhiva cu codul sursă al exemplului de implementare a protocolului WAKE pe AVR (IAR C).

ctc-25n.pdf (126 Kb) - un exemplu de aplicare a protocolului WAKE în unitatea de comandă a crisostatului.

wakeusb.zip (302 Kb) - arhivă cu program de WakeUSB (V1.00) și o bibliotecă wusb32.dll.

wusb.zip (342 Kb) - wusb32.dll și driverul FTD2XX de la FTDI.







Trimiteți-le prietenilor: