CRC

Tomáš Hamouz hamouz@alsoft.cz
Čtvrtek Leden 11 11:58:55 CET 2007


ccc> Dobry den.
ccc> U toho CRCovani je zajimave, ze se uchytily 2 algoritmy vypoctu.
ccc> 1. podle toho webu s kalkulackou ten "nekorektni", ktery se
ccc> casto pouziva a je stejny pro vytvoreni i kontrolu CRC.
ccc> 2. ten "korektni", ktery za zabezpecovanou zpravu pridava 0x0000
ccc> pri vytvareni CRCu. Pri kontrole uz se nic nepridava.

ccc> Oba algoritmy funguji. Overeni jejich detekcnich shopnosti je
ccc> dost narocne na vypocetni vykon.

Neprohlížel jsem proč je některý algoritmus "nekorektní", ale z
definice CRC vyplývá že správná hodnota může být jen jedna.
Rozdíl může být jak danou hodnotu vypočítám.

Pokud počítám CRC "z definice", tzn. po jednom bitu, je nutné používat
rozšíření zprávy o patřičný počet nul, podle délky generačního
polynomu.

V praxi je tato metoda pomalá, a vzhledem k tomu že v drtivé většině
aplikací se přenášejí celé byty, lze CRC počítat pro celou osmici bitů
(lze i jen čtveřici) pomocí tabulky. Stále je třeba použít rozšiřovací nuly.

Další krok optimalizace je přeházení kroků výpočtu tak, že není
potřeba rozšiřování o nuly (pochopitelně je pak nutná jiná tabulka).


K detekci správného CRC: pokud připojím zbytek tak jak byl vypočítán,
při detekci bude výsledkem nula. Bohužel tento způsob nedokáže odlišit
zda ke zprávě nebyly připojeny koncové nuly. Používá se metoda, kdy se
zbytek připojí v obráceném pořadí a výsledek pak sice není nulový, ale
konstanta pro použitý polynom. Lze takto detekovat nežádoucí koncové
nuly.
viz http://en.wikipedia.org/wiki/Cyclic_redundancy_check

ccc> U zabehnutych polynomu je presne posano, jak se ma CRC vypocitat a jak kontrolovat.
ccc> Pokud si clovek vymysli zabezpeceni vlastni, muze pouzit
ccc> libovolny algoritmus, libovolnou inicializacni hodnotu, převracet
ccc> bajty, nebo CRC a kontrolovat na libovolny zbytek.

Jistě, použít můžete cokoli, akorát obecně uznávané algoritmy a
polynomy mají pár drobných výhod:
  - je prověřena jejich detekční schopnost
  - budete kompatibilní i s jinými výrobci

Tomáš

ccc> Zdravim CK


ccc> Jan Waclawek <wek@evona.sk> napsal(a):
>> Prestante uz s tou kalkulackou blbnut.
>> CRC NIE JE DELENIE!!!! (aspon nie delenie v kalkulackovom zmysle)
>> 
>> wek
>> 
>> 
>> 
>> Danhard wrote:
>> > Aby se to jeden zase ucil :o)
>> > 
>> > ( 0xFFFF410000 - 0x9479 ) / 0x1021 = 0xFDF37A4  ??
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list@list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>> 
ccc> _______________________________________________
ccc> HW-list mailing list  -  sponsored by www.HW.cz
ccc> Hw-list@list.hw.cz
ccc> http://list.hw.cz/mailman/listinfo/hw-list





Další informace o konferenci Hw-list