eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaJak się liczy CRC dla (x^24+4x^3+3x+1)Re: Jak się liczy CRC dla (x^24+4x^3+3x+1)
  • From: Piotr Gałka <p...@C...pl>
    Newsgroups: pl.misc.elektronika
    References: <4d592d2d$1@news.home.net.pl> <ijc64m$951$1@news.onet.pl>
    <ijc7pv$hc5$1@news.onet.pl>
    Subject: Re: Jak się liczy CRC dla (x^24+4x^3+3x+1)
    Date: Tue, 15 Feb 2011 13:20:04 +0100
    Lines: 69
    MIME-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response
    Content-Transfer-Encoding: 8bit
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5931
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5994
    NNTP-Posting-Host: 213.192.88.238
    Message-ID: <4d5a6f1b$1@news.home.net.pl>
    X-Trace: news.home.net.pl 1297772315 213.192.88.238 (15 Feb 2011 13:18:35 +0100)
    Organization: home.pl news server
    X-Authenticated-User: piotr.galka.micromade
    Path: news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.home.net
    .pl!not-for-mail
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:605016
    [ ukryj nagłówki ]


    Użytkownik "Adam Dybkowski" <a...@4...pl> napisał w wiadomości
    news:ijc7pv$hc5$1@news.onet.pl...
    >
    > Tyle że w dokumentacji Atmela jest błąd i w rzeczywistości CRC jest
    > liczone wg bardziej powszechnego wzoru:
    >
    > x^19 + x^4 + x^3 + x^1 + 1
    >
    > http://www.avrfreaks.net/index.php?name=PNphpBB2&fil
    e=printview&t=29418

    Może komuś się przyda moja wersja tego CRC:

    dword crcXmega(byte *buf,dword n,dword crc)
    {
    for(n>>=1;n--;buf+=2)crc=(crc<<1)^*(word*)buf^((crc&
    0x800000)?0x80001B:0);
    return crc&0xFFFFFF;
    }


    Wynik zgodził mi się dla wszystkich sum liczonych przez XMEGA po skasowaniu
    (3 wyniki) i po wpisaniu programu z bootloaderem (kolejne 3).
    Na maszynie mającej odwrotną kolejność bajtów w word mój zapis nie zadziała.

    Nie wnikałem jak to działa bez obracania 16 razy (bo 2 bajty za jednym
    ruchem) po bicie, ale sądzę, że przyczyną jest duża odległość między bitem
    x^19 a następnymi. I tak brakuje mi gdzieś przesunięcia o 8 w jedną albo o
    16 w drugą.
    Zastanawia mnie też to, że do XOR użyta jest liczba, która by odpowiadała
    zapisowi x^23 + x^4 + x^3 + x^1 + 1.
    Czy brak obracania może mieć związek z zastąpieniem x^19 przez x^23. Gdyby
    różnica była 8, ale jest 4.
    Mam podejrzenie, że to crc tak na prawdę nie jest opisane żadnym z tych
    wielomianów.
    P.G.

    Dla porównania oryginał:
    --------------------------
    #define CRC32_POLY (0x0080001BUL) /* Polynomial for use with Xmega 'A'
    devices */

    /* This CRC Routine is the corresponding routine implemented in Xmega
    hardware: */
    uint32_t CRC_Reference( uint32_t startWord_u32, uint32_t endWord_u32 )
    {
    uint32_t addr_u32, data_reg_u32, help_a_u32, help_b_u32;
    uint32_t crc_reg_u32 = 0;

    for( addr_u32 = startWord_u32; addr_u32 <= endWord_u32; addr_u32 += 2 )
    {
    help_a_u32 = crc_reg_u32 << 1;
    help_a_u32 &= 0x00FFFFFEUL; /* Always act as 24-bit variable */

    help_b_u32 = crc_reg_u32 & (1UL << 23);

    if( help_b_u32 > 0 )
    {
    help_b_u32 = 0x00FFFFFFUL;
    }

    data_reg_u32 = SP_ReadWord( addr_u32 );

    crc_reg_u32 = (help_a_u32 ^ data_reg_u32) ^ (help_b_u32 & CRC32_POLY);
    crc_reg_u32 = crc_reg_u32 & 0x00FFFFFFUL;
    }

    return( crc_reg_u32 );
    }

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: