Forum: FPGA, VHDL & Co. CRC5 USB - wie geht das?


von Gerd (Gast)


Lesenswert?

Hi,

ich kenne den Thread:
Beitrag "Usb Checksumme (CRC5)"

In diesem rechnet der Alban etwas aus diesem Paper durch:
http://www.usb.org/developers/whitepapers/crcdes.pdf

Es handelt sich um dieses Beispiel:
crc5 10000000000
10111

Aber leider war das nur Zufall, dass es funktioniert hat!

Im gleichen Paper sind weitere Beispiele und ich rechne jetzt mal eines 
nach Albans Methode durch:
crc5 00001110010
01110
1
1111.1100.0011.1001.0
2
1001.01
3
-------
4
 110.100
5
 100.101
6
 -------
7
  10.0010
8
  10.0101
9
  -------
10
      111.001
11
      100.101
12
      -------
13
       11.1001
14
       10.0101
15
       -------
16
        1.1100.1
17
        1.0010.1
18
        --------
19
          1110.00
20
          1001.01
21
          -------
22
           111.010
23
           100.101
24
           -------
25
            11.1111
26
            10.0101
27
            -------
28
             1.1010.0
29
             1.0010.1
30
             --------
31
               1000.1    <--- Rest  [msb..lsb]

Leider stimmt das nicht!

Wer weiss wies richtig geht?

Gruß Gerd

von Max (Gast)


Lesenswert?

Du hast die 5 Null-Bits nicht angehangen vor der Division.
(Also die Platzhalter für deine spätere CRC)

von Gerd (Gast)


Lesenswert?

Hallo Max,

dann mach ich das mal.
1
                  ...000.00
2
...
3
...
4
               1000.10
5
               1001.01
6
               -------
7
                  1.1100.0
8
                  1.0010.1
9
                  --------
10
                    1110.10
11
                    1001.01
12
                    -------
13
                     111.11

Das stimmt aber auch nicht! Oder hab ich Dich da falsch verstanden?

Gruß Gerd

von Lichtgestalt (Gast)


Lesenswert?

Hallo,

ich weiß dass der Thread alt ist aber ich dachte ich geb mal meinen Senf 
dazu:

Daten: 00001110010
Daten + CRC Platzhalter: 0000 1110 010 00000

Um die CRC zu berechnen muss nun berücksichtigt werden, dass bei USB das 
Schieberegister mit "11111" vorbelegt wird. Da man zum Schluss noch die 
CRC invertieren muss mach ich das auch gleich am Anfang.

0000 1110 010 00000
1111 1000 000 11111 (die 5 Einsen am Anfang für die vorblegeung die 5 
zum Schluss für das invertieren)

--> 1111 0110 010 11111
    1001 01
   --------
     110 001
     100 101
    --------
      10 1000
      10 0101
     --------
         1101 01
         1001 01
        --------
          100 000
          100 101
         --------
              101 111
              100 101
             --------
                1 01011
                1 00101
               --------
                  01110 <- Correct CRC

Zum Test einfach anstatt der 5 0en zum Schluss die CRC einsetzen

Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.