Sigla SILICON LABS

AN451
IMPLEMENTAREA SOFTWARE M-BUS FĂRĂ FĂRĂ

Introducere

Această notă de aplicație descrie implementarea Silicon Labs a Wireless M-Bus folosind un MCU Silicon Labs C8051 și EZRadioPRO®. Wireless M-bus este un standard european pentru aplicațiile de citire a contoarelor care utilizează banda de frecvență de 868 MHz.

Stivuiți straturi

Wireless M-Bus folosește modelul IEC cu 3 straturi, care este un subset al modelului OSI cu 7 straturi (vezi Figura 1).

SILICON LABS Wireless M-BUS Software Implementation AN451Stratul fizic (PHY) este definit în EN 13757-4. Stratul fizic definește modul în care biții sunt codificați și transmisi, caracteristicile modemului RF (rata de cip, preambul și cuvântul de sincronizare) și parametrii RF (modulație, frecvență centrală și abatere de frecvență).
Stratul PHY este implementat folosind o combinație de hardware și firmware. EZRadioPRO îndeplinește toate funcțiile RF și modem. EZRadioPRO este utilizat în modul FIFO cu gestionarea pachetelor. Modulul MbusPhy.c oferă interfață SPI, codificare/decodare, citire/scriere bloc și gestionarea pachetelor și gestionează stările transceiver-ului.
Stratul de legătură de date M-Bus este implementat în modulul MbusLink.c. Interfața de programare a aplicațiilor M-Bus constă din funcții publice care pot fi apelate din stratul de aplicație din firul principal. Modulul MbusLink implementează și stratul de legătură de date. Stratul de legătură de date va formata și copia datele din bufferul TX al aplicației în tamponul MbusPhy TX, adăugând anteturile și CRC-urile necesare.
Stratul de aplicație în sine nu face parte din firmware-ul M-bus. Stratul de aplicație definește modul în care o mare varietate de date urmează să fie formatate pentru transmisie. Majoritatea contoarelor trebuie să transmită doar unul sau două tipuri de date. Adăugarea unei cantități mari de cod pentru a găzdui orice tip de date la contor ar adăuga cod inutil și costuri la contor. Ar putea fi fezabilă implementarea unei biblioteci sau a unui antet file cu o listă exhaustivă de tipuri de date. Cu toate acestea, majoritatea clienților de contorizare știu exact ce fel de date trebuie să transmită și se pot referi la standard pentru detalii de formatare. Un cititor universal sau un sniffer poate implementa un set complet de tipuri de date de aplicație pe interfața grafică a computerului. Din aceste motive, stratul de aplicație este implementat folosind example aplicații pentru un contor și cititor.

Standarde obligatorii
  1. EN 13757-4
    EN 13757-4
    Sistem de comunicare pentru contoare și citire de la distanță a contoarelor
    Partea 4: Citirea contorului fără fir
    Citirea radiometrului pentru funcționarea în banda SRD de la 868 MHz la 870 MHz
  2. EN 13757-3
    Sistem de comunicare pentru contoare și citire de la distanță a contoarelor
    Partea 3: Strat de aplicare dedicat
  3. IEC 60870-2-1:1992
    Echipamente și sisteme de telecontrol
    Partea 5: Protocoale de transmisie
    Secțiunea 1: Procedura de transmitere a legăturii
  4. IEC 60870-1-1:1990
    Echipamente și sisteme de telecontrol
    Partea 5: Protocoale de transmisie
    Secțiunea 1: Formate de cadre de transmisie
Definiții
  • M-Bus—M-Bus este un standard cu fir pentru citirea contoarelor în Europa.
  • M-Bus fără fir—M-Bus fără fir pentru aplicații de citire a contoarelor în Europa.
  • PHY— Stratul fizic definește modul în care biții și octeții de date sunt codificați și transmisi.
  • API-Interfață pentru programator de aplicații.
  • LEGĂTURĂ-Stratul de legătură de date definește modul în care blocurile și cadrele sunt transmise.
  • CRC—Verificare redundanță ciclică.
  • FSK—Schimbare de frecvență.
  • cip—Cea mai mică unitate de date transmise. Un bit de date este codificat ca mai multe cipuri.
  • Modul-Sursă cod AC .c file.

Descriere funcțională M-Bus PHY

Secvență de preambul

Secvența de preambul specificată de specificația M-bus este un număr întreg care alternează zerouri și unu. Un unu este definit ca frecvența superioară, iar un zero este definit ca frecvența inferioară.
nx (01)
Opțiunile de preambul pentru Si443x sunt un număr întreg de nibbles care constă din unu și zero alternativ.
nx (1010)
Un preambul cu un preambul suplimentar nu ar fi o problemă, dar, atunci, cuvântul de sincronizare și sarcina utilă ar fi nealiniate cu un bit.
Soluția este inversarea întregului pachet prin setarea bitului motor în registrul Modulation Control 2 (0x71). Aceasta va inversa preambulul, cuvântul de sincronizare și datele TX/RX. În consecință, datele ar trebui să fie inversate atunci când scrieți datele TX sau citiți datele RX. De asemenea, cuvântul de sincronizare este inversat înainte de a scrie în registrele Si443x Synchronization Word.

Cuvânt de sincronizare

Cuvântul de sincronizare cerut de EN-13757-4 este fie de 18 cipuri pentru Mode S și Mode R, fie de 10 cipuri pentru Model T. Cuvântul de sincronizare pentru Si443x este de 1 până la 4 octeți. Cu toate acestea, deoarece cuvântul de sincronizare este întotdeauna precedat de preambul, ultimii șase biți ai preambulului pot fi considerați parte a cuvântului de sincronizare; deci, primul cuvânt de sincronizare este completat de trei repetări ale unui zero urmate de unul. Cuvântul de sincronizare este completat înainte de a scrie în registrele Si443x.
Tabelul 1. Cuvântul de sincronizare pentru Modul S și Modul R

EN 13757-4 00 01110110 10010110 binar
00 76 96 hex
tampon cu (01) x 3 01010100 01110110 10010110 binar
54 76 96 hex
completa 10101011 10001001 01101001 binar
AB 89 69 hex

Tabelul 2. Cuvânt de sincronizare pentru Mode T Meter la Altul

SINCRONIZARE SINCRONIZARE SINCRONIZARE
CUVÂNT CUVÂNT CUVÂNT
3 2 1
Lungimea preambulului transmiterii

Preambulul minim este specificat pentru patru moduri de operare diferite. Este acceptabil să existe un preambul mai lung decât este specificat. Scăderea a șase jetoane pentru preambul oferă numărul minim de cipuri pentru preambulul Si443x. Implementarea adaugă două bucăți suplimentare de preambul în toate modurile de preambul scurt pentru a îmbunătăți detectarea și interoperabilitatea preambulului. Preambulul pe Modul S cu un preambul lung este foarte lung; deci, se folosește preambulul minim. Lungimea preambulului în nibbles este scrisă în registrul Preambul Length (0x34). Registrul lungimii preambulului determină preambulul numai la transmitere. Specificațiile minime și setările lungimii preambulului sunt rezumate în Tabelul 3.
Tabelul 3. Lungimea preambulului transmisiei

EN-13757-4
minim
Si443x Preambul
Set ing
Sincronizare
Cuvânt
Total suplimentar
nx (01) chips-uri ciuguli chips-uri chips-uri chips-uri chips-uri
Preambul scurt Mod S 15 30 8 32 6 38 8
Preambul lung Mod S 279 558 138 552 6 558 0
Mod T (metru-altul) 19 38 10 40 6 46 8
Modul R 39 78 20 80 6 86 8

Preambulul minim pentru recepție este determinat de registrul Preambul Detection Control (0x35). La recepție, numărul de biți din cuvântul de sincronizare trebuie să fie scăzut din preambulul minim specificat pentru a determina preambulul utilizabil. Timpul minim de stabilire al receptorului este de 16 cipuri dacă AFC este activat sau de 8 cipuri dacă AFC este dezactivat. Timpul de stabilire a receptorului este, de asemenea, scăzut din preambulul utilizabil pentru a determina setarea minimă pentru registrul de control al detectării preambulului.

Probabilitatea unui preambul fals depinde de setarea registrului de control al detectării preambulului. O setare scurtă de 8 cipuri poate duce la detectarea unui preambul fals la fiecare câteva secunde. Setarea recomandată de 20 de cipuri face ca detectarea preambulului fals să fie un eveniment puțin probabil. Lungimile preambulului pentru Mode R și Mode SL sunt suficient de lungi pentru a fi utilizată setarea recomandată.
Există foarte puține beneficii în a face ca preambulul să detecteze mai mult de 20 de cipuri.
AFC este dezactivat pentru Model S cu un preambul scurt și Model T. Acest lucru reduce timpul de stabilire a receptorului și permite o setare mai lungă de detectare a preambulului. Cu AFC dezactivat, Modul T poate folosi setarea recomandată de 20 de cipuri. O setare de 4 nibbles sau 20 de jetoane este utilizată pentru Model S cu un preambul scurt. Acest lucru face ca probabilitatea detectării unui preambul fals să fie ușor mai mare pentru acest model.
Tabelul 4. Detectarea preambulului

EN-13757-4
minim
Sincronizare
Cuvânt
utilizabil
preambul
Soluție RX Detecta
min
Si443x Preambul
Setare de detectare
nx (01) chips-uri chips-uri chips-uri chips-uri chips-uri ciuguli chips-uri
Preambul scurt Mod S 15 30 6 24 8* 16 4 16
Preambul lung model S 279 558 6 552 16 536 5 20
Model T (metru-altul) 19 38 6 32 8* 24 5 20
Modul R 39 78 6 72 16 56 5 20
*Nota: AFC dezactivat

Receptorul este configurat pentru a interopera cu un transmițător folosind preambulul minim specificat. Acest lucru asigură că receptorul va interopera cu orice transmițător compatibil M-bus.
Specificația Wireless M-Bus necesită un preambul foarte lung pentru Modul S1 de cel puțin 558 de cipuri. Acest lucru va dura aproximativ 17 ms doar pentru a transmite preambulul. Si443x nu necesită un preambul atât de lung și nu beneficiază de preambulul lung. În timp ce preambulul lung este notat ca opțional pentru Modul S2, nu există niciun motiv pentru a utiliza un preambul lung cu Si443x. Dacă se dorește o comunicare unidirecțională, Modul T1 va oferi un preambul mai scurt, o rată de date mai mare și o durată de viață mai lungă a bateriei. Dacă este necesară comunicarea bidirecțională folosind Modul S2, se recomandă un preambul scurt.
Observați că pragul de detectare pentru Model S cu un preambul lung este mai mare decât numărul de ciugături de preambul transmise pentru Model S cu un preambul scurt. Aceasta înseamnă că receptorul preambul lung Mod S nu va detecta un preambul de la un transmițător Mod S preambul scurt. Acest lucru este necesar dacă receptorul Mod S de preambul lung urmează să primească vreun beneficiu din preambulul lung.
Rețineți că receptorul scurt preambul Mode S va detecta preambulul și va primi pachete de la ambele preambul scurt Mode S
transmițător și un transmițător cu preambul lung Mode S; deci, în general, cititorul de contor ar trebui să folosească configurația scurtă a receptorului Mode S de preambul.

Codificare/Decodare

Specificația Wireless M-bus necesită două metode de codare diferite. Codificarea Manchester este utilizată pentru Modul S și Modul R. Codificarea Manchester este utilizată și pentru legătura alt-la-metru în Modelul T. Legătura metru-la-altul Model T utilizează 3 din 6 codificări.
1. Manchester Codificat/Decodificare
Codificarea Manchester este comună istoric în sistemele RF pentru a oferi recuperare și urmărire robustă a ceasului folosind un modem simplu și ieftin. Cu toate acestea, un radio modern de înaltă performanță precum Si443x nu are nevoie de codificare Manchester. Codificarea Manchester este acceptată în primul rând pentru compatibilitatea cu standardele existente, dar rata de date pentru Si443x este efectiv dublată atunci când nu se utilizează codificarea Manchester.
Si443x acceptă codificarea și decodarea Manchester a întregului pachet în hardware. Din păcate, cuvântul de sincronizare nu este codificat Manchester. O secvență Manchester nevalidă a fost aleasă în mod intenționat pentru cuvântul de sincronizare. Acest lucru face ca codificarea Manchester să fie incompatibilă cu majoritatea radiourilor existente, inclusiv cu Si443x. În consecință, codarea și decodificarea Manchester trebuie să fie efectuate de MCU. Fiecare octet al datelor necodificate este format din opt biți de date. Folosind codificarea Manchester, fiecare bit de date este codificat într-un simbol cu ​​două cipuri. Deoarece datele codificate trebuie să fie scrise pe radio FIFO câte opt cipuri la un moment dat, o bucată de date este codificată și scrisă în FIFO la un moment dat.
Tabelul 5. Codificarea Manchester

date Ox12 0x34 octeți
Ox1 0x2 0x3 0x4 ciuguli
1 10 11 100 binar
cip 10101001 10100110 10100101 10011010 binar
FIFO OxA9 OxA6 OxA5 Ox9A hex

Fiecare octet care urmează să fie transmis este transmis câte un octet la funcția de codificare octet. Funcția codificare octet va apela funcția codificare nibble de două ori, mai întâi pentru cea mai semnificativă nibble și apoi pentru cea mai puțin semnificativă.
Codarea Manchester în software nu este dificilă. Pornind de la bitul cel mai semnificativ, unul este codificat ca o secvență de cip „01”. Un zero este codificat ca o secvență de cip „10”. Acest lucru poate fi realizat cu ușurință folosind o buclă și schimbând doi biți pentru fiecare simbol. Cu toate acestea, este mai rapid să folosiți doar un simplu tabel de căutare cu 16 intrări pentru fiecare ciugulă. Funcția de codificare Manchester nibble codifică un nibble de date apoi îl scrie în FIFO. Cipurile sunt inversate înainte de a scrie în FIFO pentru a ține cont de cerințele de preambul inversat.
La recepție, fiecare octet din FIFO este format din opt cipuri și este decodat într-un singur fragment de date. Funcția de bloc de citire citește câte un octet din FIFO și apelează funcția de decodificare octet. Cipurile sunt inversate după citirea din FIFO pentru a ține cont de cerințele de preambul inversat. Fiecare octet de cipuri codificate Manchester este decodat într-un pic de date. Nibble-ul decodat este scris în tamponul RX utilizând funcția de scriere buffer RX nibble.
Observați că atât codificarea, cât și decodificarea sunt efectuate câte o dată pe rând. Codificarea într-un buffer ar necesita un buffer suplimentar de două ori mai mare decât datele necodificate. Codificarea și decodarea sunt mult mai rapide decât cea mai rapidă rată de date acceptată (100 k cipuri pe secundă). Deoarece Si443x acceptă citiri și scrieri pe mai mulți octeți în FIFO, există o mică suprasarcină în utilizarea doar a citirilor și scrierilor pe un singur octet. Supraîncărcarea este de aproximativ 10 µs pentru 100 de cipuri codificate. Avantajul este o economie de memorie RAM de 512 octeți.
2. Trei din șase decodare de codare
Metoda de codare trei din șase specificată în EN-13757-4 este, de asemenea, implementată în firmware-ul MCU. Această codificare este utilizată pentru modul T de mare viteză (100 k cipuri pe secundă) de la metru la altul. Modelul T oferă cel mai scurt timp de transmisie și cea mai lungă durată de viață a bateriei pentru un contor fără fir.
Fiecare octet de date care trebuie transmis este împărțit în două nibbles. Cea mai semnificativă ciugulire este codificată și transmisă mai întâi. Din nou, acest lucru este implementat folosind o funcție de codificare octet care apelează de două ori funcția de codificare nibble.
Fiecare picătură de date este codificată într-un simbol cu ​​șase cipuri. Secvența de simboluri cu șase cipuri trebuie să fie scrisă în FIFO cu 8 cipuri.
În timpul codificării, doi octeți de date sunt codificați ca patru nibbles. Fiecare ciugulă este un simbol cu ​​6 jetoane. Patru simboluri cu 6 cipuri sunt agregate ca trei octeți.
Tabelul 6. Trei din șase codări

date 0x12 0x34 octeți
Ox1 0x2 0x3 0x4 ciuguli
cip 15 16 13 34 octal
1101 1110 1011 11100 binar
FIFO 110100 11100010 11011100 binar
0x34 OxE2 OxDC hex

În software, codificarea trei din șase este implementată folosind trei funcții imbricate. Funcția codificare octet va apela de două ori funcția codificare nibble. Funcția de codificare nibble folosește un tabel de căutare pentru simbolul cu șase cipuri și scrie simbolul în funcțiile Shift Three din Six. Această funcție implementează un registru de deplasare cu 16 cipuri în software. Simbolul este scris pe octetul cel mai puțin semnificativ al registrului de deplasare. Registrul este deplasat la stânga de două ori. Acest lucru se repetă de trei ori. Când un octet complet este prezent în octetul superior al registrului de deplasare, acesta este inversat și scris în FIFO.
Deoarece fiecare octet de date este codificat ca un octet și jumătate codificat, este important să ștergeți inițial registrul de deplasare, astfel încât primul octet codificat să fie corect. Dacă lungimea pachetului este un număr impar, după codificarea tuturor octeților, va mai rămâne un nibble în registrul de deplasare. Acest lucru este tratat cu poștalul așa cum este explicat în secțiunea următoare.
Decodificarea celor trei din șase codificate este procedura inversă. La decodare, trei octeți codificați sunt decodați în doi octeți de date. Registrul de schimbare software este din nou folosit pentru a agrega octeți de date decodificate. Pentru decodare este folosit un tabel de căutare inversă cu 64 de intrări. Aceasta utilizează mai puține cicluri, dar mai multă memorie de cod. Căutarea într-un tabel de căutare cu 16 intrări pentru simbolul corespunzător durează mult mai mult.
Postambul
Specificația Wireless M-bus are cerințe specifice pentru postambul sau remorcă. Pentru toate modurile, minimul este de două jetoane, iar maximul de opt jetoane. Deoarece unitatea atomică minimă pentru FIFO este de un octet, se folosește o remorcă cu 8 cipuri pentru Modul S și Modul R. Postambolul Mode T este de opt cipuri dacă lungimea pachetului este pară sau de patru cipuri dacă lungimea pachetului este impară. Postamblul cu patru cipuri pentru o lungime de pachet impară îndeplinește cerințele de a avea cel puțin două cipuri alternative.
Tabelul 7. Lungimea postambulului

Lungimea postambulului (jetoane)
min max Implementarea secvență de cip
Modul S 2 8 8 1010101
Modul T 2 8 4 (ciudat) 101
8 (chiar) 1010101
Modul R 2 8 8 1010101
Manipulator de pachete

Manipulatorul de pachete de pe Si443x poate fi utilizat într-un mod cu lățime variabilă a pachetului sau într-un mod cu lățime fixă ​​a pachetului. Modul de lățime variabilă a pachetului necesită un octet de lungime a pachetului după cuvântul de sincronizare și octeți de antet opționali. La recepție, radioul va folosi octetul de lungime pentru a determina sfârșitul unui pachet valid. La transmisie, radioul va introduce câmpul de lungime după octeții de antet.
Câmpul L pentru protocolul M-bus fără fir nu poate fi utilizat pentru câmpul de lungime Si443x. În primul rând, câmpul L nu este lungimea reală a pachetului. Este numărul de octeți de încărcare utilă a stratului de legătură, fără a include octeții sau codificarea CRC. În al doilea rând, câmpul L în sine este codificat utilizând fie codificarea Manchester, fie codificarea Trei din șase pentru contorul Mode T la altul.
Implementarea folosește manipulatorul de pachete în modul de lățime fixă ​​de pachet atât pentru transmisie, cât și pentru recepție. La transmitere, stratul PHY va citi câmpul L din buffer-ul de transmisie și va calcula numărul de octeți codificați, inclusiv postambulul. Numărul total de octeți codificați care urmează să fie transmisi este scris în registrul de lungime a pachetului (0x3E).
La recepție, primii doi octeți codificați sunt decodați, iar câmpul L este scris în memoria tampon de recepție. Câmpul L este utilizat pentru a calcula numărul de octeți codificați care trebuie recepționați. Numărul de octeți codificați care trebuie primiți este apoi scris în registrul Lungimea pachetului (0x3E). Postambulul este aruncat.
MCU trebuie să decodeze câmpul L, să calculeze numărul de octeți codificați și să scrie valoarea în registrul Lungimea pachetului înainte de a fi primită cea mai scurtă lungime posibilă a pachetului. Cel mai scurt câmp L permis pentru stratul PHY este 9, dând 12 octeți necodați. Acest lucru oferă 18 octeți codificați pentru Model T. Primii doi octeți au fost deja decodați. Astfel, registrul de lungime a pachetului trebuie actualizat în timp de 16 octeți la 100 kbps sau 1.28 milisecunde. Aceasta nu este o problemă pentru un 8051 care rulează la 20 MIPS.
Numărul de octeți care urmează să fie primiți nu include postambulul, cu excepția postamblelor cu patru cipuri utilizate pentru pachetele de Mod T cu o lungime de pachet impară. Astfel, receptorul nu necesită un postambul, cu excepția pachetelor de lungime impară Model T. Acest postambul este necesar doar pentru a oferi un număr întreg de octeți codificați. Conținutul poștalei este ignorat; deci, dacă postambulul nu este transmis, patru jetoane de zgomot vor fi primite și ignorate. Deoarece numărul total de octeți codificați este limitat la 255 (0xFF), implementarea limitează câmpul L maxim pentru diferitele moduri.
Tabelul 8. Limitele dimensiunii pachetului

codificat decodificat M-Bus
octeți octeți Câmp L
dec hex dec hex dec hex
Modul S 255 FF 127 7 F 110 6E
Mod T (metru-altul) 255 FF 169 A9 148 94
Modul R 255 FF 127 7 F 110 6E

Aceste limite sunt în mod normal cu mult peste cazul de utilizare tipic pentru un contor fără fir. Lungimea pachetului trebuie menținută mică pentru a obține cea mai bună durată de viață posibilă a bateriei.
În plus, utilizatorul poate specifica câmpul L maxim care ar trebui să fie primit (USER_RX_MAX_L_FIELD). Aceasta determină dimensiunea necesară pentru buffer-ul de recepție (USER_RX_BUFFER_SIZE).
Suportul unui câmp L maxim de 255 ar necesita un buffer de recepție de 290 de octeți și un maxim de 581 de octeți codificați Manchester. Managerul de pachete ar trebui să fie dezactivat și registrul Lungimea pachetului nu ar putea fi utilizat în acest caz. Acest lucru este fezabil, dar este mai convenabil să utilizați gestionarea pachetelor, dacă este posibil.

Utilizare FIFO

Si4431 oferă un FIFO de 64 de octeți pentru transmitere și recepție. Deoarece numărul de octeți codificați este de 255, este posibil ca un întreg pachet codificat să nu se încadreze în memoria tampon de 64 de octeți.
Transmitere
La transmisie, se calculează numărul total de octeți codificați. Dacă numărul total de octeți codificați, inclusiv postambulul, este mai mic de 64 de octeți, întregul pachet este scris în FIFO și numai întreruperea pachetului trimis este activată. Majoritatea pachetelor scurte vor fi trimise într-un singur transfer FIFO.
Dacă numărul de octeți codificați este mai mare de 64, vor fi necesare transferuri FIFO multiple pentru a trimite pachetul. Primii 64 de octeți sunt scrieți în FIFO. Sunt activate întreruperile Pachet trimis și TX FIFO aproape goale. Pragul TX FIFO aproape gol este setat la 16 octeți (25%). La fiecare eveniment IRQ, se citește registrul de stare 2. Bitul Packet Sent este verificat mai întâi și, dacă pachetul nu a fost complet trimis, următorii 48 de octeți de date codificate sunt scrieți în FIFO. Aceasta continuă până când toți octeții codificați au fost scriși și apare întreruperea Packet Sent.
1. Recepţie
La recepție, inițial, este activată doar întreruperea Sync Word. După primirea cuvântului de sincronizare, întreruperea cuvântului de sincronizare este dezactivată și întreruperea aproape completă FIFO este activată. Pragul FIFO aproape complet este setat inițial la 2 octeți. Prima întrerupere FIFO aproape completă este folosită pentru a ști când au fost primiți cei doi octeți de lungime. Odată ce lungimea a fost primită, lungimea este decodificată și se calculează numărul de octeți codificați. Pragul RX FIFO aproape complet este apoi setat la 48 de octeți. RX FIFO este aproape plin și sunt activate întreruperile de pachete valide. La următorul eveniment IRQ, registrul de stare 1 este citit. Mai întâi, este verificat bitul Valid Packet, apoi este verificat bitul FIFO Almost Full. Dacă este setat doar bitul RX FIFO aproape plin, următorii 48 de octeți sunt citiți din FIFO. Dacă bitul de pachet valid este setat, restul pachetului este citit din FIFO. MCU ține evidența câți octeți au fost citiți și oprește citirea după ultimul octet.

Strat de legătură de date

Modulul stratului de legătură de date implementează un strat de legătură compatibil cu 13757-4:2005. Stratul de legătură de date (LINK) oferă o interfață între stratul fizic (PHY) și stratul de aplicație (AL).
Stratul de legătură de date îndeplinește următoarele funcții:

  • Oferă funcții care transferă date între PHY și AL
  • Generează CRC-uri pentru mesajele trimise
  • Detectează erorile CRC în mesajele primite
  • Oferă adresare fizică
  • Recunoaște transferurile pentru moduri de comunicare bidirecțională
  • Încadrează biți de date
  • Detectează erorile de încadrare în mesajele primite
Link Layer Frame Format

Formatul de cadru Wireless M-Bus utilizat în EN 13757-4:2005 este derivat din formatul de cadru FT3 (Frame Type 3) din IEC60870-5-2. Cadrul este format din unul sau mai multe blocuri de date. Fiecare bloc include un câmp CRC de 16 biți. Primul bloc este un bloc cu lungime fixă ​​de 12 octeți care include câmpul L, câmpul C, câmpul M și câmpul A.

  1. Câmp L
    Câmpul L este lungimea încărcăturii utile de date din stratul Link. Aceasta nu include câmpul L în sine sau oricare dintre octeții CRC. Include câmpul L, câmpul C, câmpul M și câmpul A. Acestea fac parte din sarcina utilă PHY.
    Deoarece numărul de octeți codificați este limitat la 255 de octeți, valoarea maximă acceptată pentru câmpul M este de 110 de octeți pentru datele codificate Manchester și de 148 de octeți pentru datele codificate în modul T Trei din șase.
    Stratul Link este responsabil pentru calcularea câmpului L la transmisie. Stratul de legătură va folosi câmpul L la recepție.
    Rețineți că câmpul L nu indică lungimea sarcinii utile PHY sau numărul de octeți codificați. La transmitere, PHY va calcula lungimea sarcinii utile PHY și numărul de octeți codificați. La recepție, PHY va decoda câmpul L și va calcula numărul de octeți de decodat.
  2. C-Field
    Câmpul C este câmpul de control al cadrului. Acest câmp identifică tipul de cadru și este utilizat pentru primitivele serviciului de schimb de date de legătură. Câmpul C indică tipul de cadru – TRIMITE, CONFIRMĂ, CERERE sau RĂSPUNDE. În cazul cadrelor SEND și REQUEST, câmpul C indică dacă este de așteptat un CONFIRM sau RESPOND.
    Când utilizați funcția de bază Link TX, poate fi utilizată orice valoare a lui C. Când utilizați Link Service Primitives, câmpul C este populat automat conform EN 13757-4:2005.
  3. M-Field
    Câmpul M este codul producătorului. Producătorii pot solicita un cod din trei litere de la următoarele web adresa: http://www.dlms.com/flag/INDEX.HTM Fiecare caracter al codului de trei litere este codificat ca cinci biți. Codul de 5 biți poate fi obținut prin luarea codului ASCII și scăderea 0x40 ("A"). Cele trei coduri de 5 biți sunt concatenate pentru a face 15 biți. Cel mai semnificativ bit este zero.
  4. Câmp A
    Câmpul de adresă este o adresă unică de 6 octeți pentru fiecare dispozitiv. Adresa unică ar trebui să fie atribuită de producător. Este responsabilitatea fiecărui producător să se asigure că fiecare dispozitiv are o adresă unică de 6 octeți. Adresa pentru cadrele Trimitere și Solicitare este adresa proprie a contorului sau a altui dispozitiv. Cadrele de date de confirmare și răspuns sunt trimise folosind adresa dispozitivului de origine.
  5. CI-Field
    Câmpul CI este antetul aplicației și specifică tipul de date din încărcătura utilă a datelor aplicației. În timp ce EN13757-4:2005 specifică un număr limitat de valori, Link Service Primitives va permite utilizarea oricărei valori.
  6. CRC
    CRC este specificat în EN13757-4:2005.
    Polinomul CRC este:
    X16 + x13 + x12 + x11 + x10 + x8 +x6 + x5 +x2 + 1
    Rețineți că M-Bus CRC este calculat pentru fiecare bloc de 16 octeți. Rezultatul este că fiecare 16 octeți de date necesită 18 octeți pentru a fi transmis,
Informații suplimentare

Pentru informații suplimentare despre implementarea stratului de legătură, consultați „AN452: Ghid pentru programatori stivă M-Bus fără fir”.

Managementul energiei

Figura 2 arată cronologia de gestionare a energiei pentru un contor de exampfolosind modul T1.

MCU ar trebui să fie în modul Sleep ori de câte ori este posibil pentru a economisi energie. În acest exampMCU este în stare de adormire când RTC rulează, când așteaptă pornirea cristalului radio și când transmite de la FIFO. MCU se va trezi de la semnalul EZRadioPRO IRQ conectat la o trezire Port Match.
Când transmiteți mesaje mai lungi de un bloc, MCU trebuie să se trezească pentru a umple FIFO (bazat pe întreruperea aproape goală FIFO) și apoi să se întoarcă la somn.
MCU ar trebui să fie în modul Idle, rulând de la oscilatorul de putere scăzută sau de la oscilatorul în modul de explozie atunci când citește de la ADC. ADC necesită un ceas SAR.
Când nu este utilizat, EZRadioPRO ar trebui să fie în modul Oprire cu pinul SDN condus la sus. Acest lucru necesită o conexiune cablată la MCU. Registrele EZ Radio Pro nu sunt păstrate în modul de oprire; deci, EZRadioPro este inițializat pe fiecare interval RTC. Inițializarea radioului durează mai puțin de 100 µs și conservă 400 nA. Acest lucru are ca rezultat o economie de energie de 10 µJ, bazată pe un interval de 10 secunde.
Cristalul EZRadioPRO durează aproximativ 16 ms pentru un POR. Acesta este suficient de lung pentru a calcula CRC pentru aproximativ opt blocuri. MCU va reveni în stare de repaus dacă completează toate CRC-urile înainte ca cristalul să se stabilească. Dacă este necesară criptarea, aceasta poate fi pornită și în așteptarea oscilatorului cu cristal.
MCU ar trebui să ruleze la 20 MHz folosind oscilatorul de putere redusă pentru majoritatea sarcinilor. Sarcinile care necesită un timeout precis trebuie să utilizeze oscilatorul de precizie și modul inactiv în loc de modul de repaus. RTC oferă suficientă rezoluție pentru majoritatea sarcinilor. Cronologia de gestionare a energiei pentru contorul T2 exampAplicația este prezentată în Figura 3.

Implementarea transceiver-ului ar trebui să fie optimizată pentru cazul normal când contorul se trezește și nu este prezent niciun cititor. Timeout-urile minime/maxime ale ACK sunt suficient de lungi, astfel încât să fie posibil să utilizați C8051F930 RTC și să puneți MCU-ul în modul de repaus.
Opțiunile de construcție sunt furnizate pentru cititoare de rețea sau USB care nu trebuie să utilizeze modul de repaus. Modul inactiv va fi utilizat în loc de repaus, astfel încât USB și UART pot întrerupe MCU.

Implementare software M-BUS wireless SILICON LABS AN451-1

Simplicity Studio
Acces cu un singur clic la MCU și instrumente wireless, documentație, software, biblioteci de cod sursă și multe altele. Disponibil pentru Windows,
Mac și Linux!

Portofoliu IoT Calitate
Portofoliu IoT
www.silabs.com/IoT
SW/HW
www.silabs.com/simplicity
Calitate
www.silabs.com/quality
Sprijin și comunitate
community.silabs.com

Disclaimer
Silicon Labs intenționează să ofere clienților documentația cea mai recentă, exactă și aprofundată a tuturor perifericelor și modulelor disponibile pentru implementatorii de sisteme și software care utilizează sau intenționează să utilizeze produsele Silicon Labs. Datele de caracterizare, modulele și perifericele disponibile, dimensiunile memoriei și adresele de memorie se referă la fiecare dispozitiv specific, iar parametrii „tipici” furnizați pot varia și pot varia în diferite aplicații. Aplicație exampfișierele descrise aici au doar scop ilustrativ. Silicon Labs își rezervă dreptul de a face modificări fără notificare ulterioară și limitări ale informațiilor despre produse, specificațiilor și descrierilor de aici și nu oferă garanții cu privire la acuratețea sau caracterul complet al informațiilor incluse. Silicon Labs nu își asumă răspunderea pentru consecințele utilizării informațiilor furnizate aici. Acest document nu implică și nu exprimă licențe de drepturi de autor acordate în temeiul prezentului document pentru proiectarea sau fabricarea oricăror circuite integrate. Produsele nu sunt proiectate sau autorizate pentru a fi utilizate în cadrul niciunui sistem de susținere a vieții fără acordul specific scris al Silicon Labs. Un „Sistem de asistență vitală” este orice produs sau sistem destinat să susțină sau să susțină viața și/sau sănătatea, care, dacă eșuează, poate fi de așteptat în mod rezonabil să aibă ca rezultat vătămări corporale semnificative sau deces. Produsele Silicon Labs nu sunt proiectate sau autorizate pentru aplicații militare. Produsele Silicon Labs nu vor fi utilizate în niciun caz în arme de distrugere în masă, inclusiv (dar fără a se limita la) arme nucleare, biologice sau chimice sau rachete capabile să furnizeze astfel de arme.
Informații despre mărci comerciale
Silicon Laboratories Inc.®, Silicon Laboratories®, Silicon Labs®, SiLabs® și logo-ul Silicon Labs®, Bluegiga®, Bluegiga Logo®, Clockbuilder®, CMEMS®, DSPLL®, EFM®, EFM32®, EFR, Ember® , Energy Micro, sigla Energy Micro și combinațiile acestora, „cele mai prietenoase microcontrolere din lume”, Ember®, EZLink®, EZRadio®, EZRadioPRO®, Gecko®, ISOmodem®, Precision32®, ProSLIC®, Simplicity Studio®, SiPHY® , Telegesis, Telegesis Logo®, USBXpress® și altele sunt mărci comerciale sau mărci comerciale înregistrate ale Silicon Labs. ARM, CORTEX, Cortex-M3 și degetele mari sunt mărci comerciale sau mărci comerciale înregistrate ale ARM Holdings. Keil este o marcă înregistrată a ARM Limited. Toate celelalte produse sau nume de marcă menționate aici sunt mărci comerciale ale deținătorilor respectivi.Sigla SILICON LABS

Silicon Laboratories Inc.
400 West Cesar Chavez
Austin, TX 78701
STATELE UNITE ALE AMERICII
http://www.silabs.com

Documente/Resurse

SILICON LABS Wireless M-BUS Software Implementation AN451 [pdfGhid de utilizare
SILICON LABS, C8051, MCU și, EZRadioPRO, Wireless M-bus, Wireless, M-BUS, Software, Implementare, AN451

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *