Výpočet a použití CRC
Ať přenášíme data jakýmkoliv způsobem (vedením, rádiově, opticky), mohou nastat situace, kdy data na výstupu nebudou odpovídat těm, které jsme odvysílali. Ať už je to způsobeno čímkoliv, bylo by nebezpečné, si informaci, zda se data po cestě od vysílače k přijímači nezměnila nezjišťovat.
Proto se zavádí různé způsoby kontrol dat, ať už se jedná o ty jednodušší (paritou, pouhým XORováním), po ty složitější, ale také účelnější CRC Právě využitím CRC se budeme v tomto díle o komunikaci zabývat...
CRC (Cyclic Redundancy Checksum) je kód používaný k zabezpečování dat při jejich přenosu a úschově. Umožňují detekci případných chyb. Protože však podoba CRC není jenom jedna, je vždy nutné, aby vysílající i příjemce používali stejný výpočetní algoritmus.
CRC můžeme dělit podle několika kritérii:
CRC můžeme dělit podle několika kritérii:
- počet použitých bitů (bytů)
- použitý polynom
- použitý algoritmus
- Naplňte CRC registr číslem 0xFFFF
- XORujte první byte zprávy s CRC registrem
- Rotujte CRC registr doprava (zleva se doplňují nuly!!) a separujte číslo které bude tímto krokem posunuto ven z byte
- Je-li toto číslo 1, pak XORujte CRC registr s číslem 0xA001
- Opakujte kroky 3,4 pro zbývajících 8 bitů (celkem 8x)
- Opakujte kroky 2-5 pro všechny byte zprávy
V tomto případě jsme použili 16bitové CRC, můžeme však počítat také 8bitové, 32bitové, 64bitové... Také ono číslo 0xA001 (polynom) není jediné, které se pro výpočet CRC využívá, stejně tak algoritmus (můžeme rotovat i doleva. Vždy ale musí všechny tyto parametry být stejné na straně vysílače i přijímače. Tento algoritmus se používá pro zabezpečení na sběrnicích MOD BUS
Na internetu lze také nalézt tabulky pro různé programovací jazyky, ve kterých dané byty pouze překládáme, my si však ukážeme dva algoritmy bez použití takovýchto tabulek. Jeden je napsán v pascalu a druhý v C
Na internetu lze také nalézt tabulky pro různé programovací jazyky, ve kterých dané byty pouze překládáme, my si však ukážeme dva algoritmy bez použití takovýchto tabulek. Jeden je napsán v pascalu a druhý v C
Komentovat článek
Komentáře k článku
tom - 11.10.2009 17:15
fakt supr tahak:) DIK!!!
Ondřej Karas - 10.7.2007 16:55
Proč složitěji?
Martin - 21.6.2007 19:37
Složitěji by to nešlo?