Sari la conținut
ELFORUM - Forumul electronistilor

CRC-nu ma prind de ceva


Vizitator crz

Postări Recomandate

Salutare.Am de facut un proiect pentru o materie care se cheama Circuite Integrate Digitale.Tema proiectului este "convertor serie-paralel". Am o intrare pe 1 bit (logic, nu? :) ) pe care imi vine o secventa de 28 de biti si 3 iesiri de 3 (A), 4(B) si 5© biti + o iesire pe 1 bit de alarma + o iesire pe 16 biti ptr CRC.Mi se mai da polinomul generator al CRC-ului (x^16+x^12+x^5+1).Ce nu inteleg este cum fac detectia de erori.Cum m-am gandit eu:Iau cele trei iesiri, concatenez bitii si imi da un ceva de 12 biti. Polinomul generator al CRC-ului il impart la polinomul obtinut din cei 12 biti de mai devreme. Iau coeficientii polinomului rezultat si ii compar cu cei 16 biti de CRC care imi vin dupa primii 12 de informatie. Daca is toti la fel, e ok, daca nu, se face bit-ul de alarma 1.Zic bine sau aberez?Multumesc anticipat.

Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • cirip

    3

Top autori în acest subiect

salutare,

 

Procedura de generare/verificare a CRC-ului este ceva definit deja si nu este necesara reinventarea apei calde :weedman: :yawinkle: . Procedura trebuie doar aplicata. Din modul in care "te-ai gandit" rezulta ca trebuie sa citesti putin. Uite aici teoria CRC-ului. Daca mai ai intrebari, posteaza.

http://www.microchip.com/stellent/idcpl ... e=en011756

 

EDIT... Hai sa si scriu un pic de barbologie. Blocul de date e interpretat ca un polinom. Blocul de date se imparte la polinomul generator, nu invers. Impartirea va da un rest (catul este irelevant). Acest rest este atasat la blocul de date initial. Restul este chiar CRC-ul. Prin atasarea restului la blocul de date, noul polinom, care include CRC-ul atasat devine un polinom divizibil cu polinomul generator. La receptie, cand se face operatia de verificare, daca restul este 0, inseamna ca blocul de date+CRCul au fost transmise corect. Daca restul este nenul la receptie, inseamna ca s-a strecurat o eroare undeva.

 

Cirip

Link spre comentariu

In rimul rand, multumesc pentru raspuns, timpul acordat si documentatie :). Nu incercam sa reinventez roata, ci doar sa inteleg cum sa o montez la masina, pana acum mergand numai pe jos ;).Ce-am priceput:Am o secventa de x biti. Ca sa folosesc polinomul generator dat trebuie sa ii mai lipesc inca 16 biti. Acum am x+16. Impart polinomul asta la cel generator, aflu restul. Concatenez restul la mesajul initial x. Transmit. Raspunsul receptionat il impart iar la pol. generator si aflu restul. Daca este 0 e ok.Acum am zis bine?

Link spre comentariu

pentru putin. Ok, cu roata, nici o problema.

Ca sa folosesc polinomul generator dat trebuie sa ii mai lipesc inca 16 biti. Acum am x+16. Impart polinomul asta la cel generator, aflu restul.

Nu prea. Impartirea polinomului initial (blocul de date x) la polinomul generator va genera un rest pe 16 biti. Acesta este CRC-ul pe care il adaugi la x. Nu faci "x+16" inainte sa faci impartirea, ptr ca nu stii valoarea celor 16. Cei 16 sunt rezultatul calculului, adica impartirii la PGen, respectiv restul impartirii, adica CRC-ul.

Transmit. Raspunsul receptionat il impart iar la pol. generator si aflu restul. Daca este 0 e ok.

Exact. De data asta imparti "x+16biti" la PGen si, da, daca restul e zero, atunci nu ai erori cu o probabilitate mai mare de... tz%, in functie de caract polinomului si canalului de comunicatie.
Link spre comentariu

Greseala cu privire la adaugarea initiala de inca 16 biti venea din:"The CRC-16 polynomial has a length of 16 bits, therefore, 16 bits have to be augmented to the original message. In this example the polynomial has a length of 3 bits, therefore, the message has to be extended by three zeros at the end"Deci nu se pun inca 16 biti ci 16 de zero. Dar nu neaparat. Am calculat si cu si fara adaugirea bitilor de 0 respectivi si restul este acelasi. Deci e ok.Multumesc mult. Sper sa nu mai dau peste alte probleme mai departe :).

Link spre comentariu

Corect...Strict matematic vorbind, adaugarea celor 16 biti se face in doua etape, cu ajutorul a doua operatii.Prima este inmultirea blocului de date initial cu 2^16, ceea ce formal se realizeaza prin adaugarea celor 16 zerouri.A doua operatie este suma modulo 2 cu restul impartirii la polinomul generator. Formal aduni cei 16 biti ai CRCului cu cel 16 zerouri din coada.Practic, faptul ca transmiti CRCul dupa ce ai transmis blocul de date realizeaza implicit ambele operatii: inmultirea si suma.Bafta,Cirip

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări