А мне другое интересно, эти аппаратные crc считают любой полином? Если нет, то  аппаратный crc на фиг не нужен...
Подсчет crc - стандартная задача для контроллера, на все стандартные задачи не напасешься аппаратных перделок.
Вот для crc8 шустрый способ, полином как у 1-wire dallas (кажись):
На сцы:
- Код: Выделить всё • Развернуть
 //******************************
void CalcCrc8 (unsigned char x)
{
  CrcCalc ^= x;
  x = 0;
  if (CrcCalc & 0x01) x ^= 0x5e;
  if (CrcCalc & 0x02) x ^= 0xbc;
  if (CrcCalc & 0x04) x ^= 0x61;
  if (CrcCalc & 0x08) x ^= 0xc2;
  if (CrcCalc & 0x10) x ^= 0x9d;
  if (CrcCalc & 0x20) x ^= 0x23;
  if (CrcCalc & 0x40) x ^= 0x46;
  if (CrcCalc & 0x80) x ^= 0x8c;
  CrcCalc = x;
}
//******************************
На асм avr:
- Код: Выделить всё • Развернуть
 CalcCrc8_temp1:
   eor   CrcCalc,temp1
   clr   temp1
   ldi   temp3,0x5e
   sbrc   CrcCalc,0
   eor   temp1,temp3
   ldi   temp3,0xbc
   sbrc   CrcCalc,1
   eor   temp1,temp3
   ldi   temp3,0x61
   sbrc   CrcCalc,2
   eor   temp1,temp3
   ldi   temp3,0xc2
   sbrc   CrcCalc,3
   eor   temp1,temp3   
   ldi   temp3,0x9d
   sbrc   CrcCalc,4
   eor   temp1,temp3   
   ldi   temp3,0x23
   sbrc   CrcCalc,5
   eor   temp1,temp3   
   ldi   temp3,0x46
   sbrc   CrcCalc,6
   eor   temp1,temp3   
   ldi   temp3,0x8c
   sbrc   CrcCalc,7
   eor   temp1,temp3   
   mov   CrcCalc,temp1
   ret
На асм pic:
- Код: Выделить всё • Развернуть
 CalcCrc8_w
   xorwf   CrcCalc,f
   movlw   0
   btfsc   CrcCalc,0
   xorlw   0x5e
   btfsc   CrcCalc,1
   xorlw   0xbc
   btfsc   CrcCalc,2
   xorlw   0x61
   btfsc   CrcCalc,3
   xorlw   0xc2   
   btfsc   CrcCalc,4
   xorlw   0x9d   
   btfsc   CrcCalc,5
   xorlw   0x23   
   btfsc   CrcCalc,6
   xorlw   0x46   
   btfsc   CrcCalc,7
   xorlw   0x8c   
   movwf   CrcCalc
   return
Ой, опять на pic код красивше avr  
 Считаем так для асм:
- Код: Выделить всё • Развернуть
    clrf   CrcCalc    ;сбросить регистр crc
   movf   Buf1,w
   call   CalcCrc8_w
   movf   Buf1+1,w
   call   CalcCrc8_w
   movf   Buf1+2,w
   call   CalcCrc8_w
   movf   CrcCalc,w
   xorwf   Buf1+3,w
   btfss   STATUS,Z   ;ошибка crc
   goto   a0_0      ;
;crc верен
Для сцы:
- Код: Выделить всё • Развернуть
      CrcCalc = 0;         //пересчитать CRC
     CalcCrc8(RxBuffer[2]);
     CalcCrc8(RxBuffer[3]);
     CalcCrc8(RxBuffer[4]);
     CalcCrc8(RxBuffer[5]);
     CalcCrc8(RxBuffer[6]);
     CalcCrc8(RxBuffer[7]);
     CalcCrc8(RxBuffer[8]);
     CalcCrc8(RxBuffer[9]);
     CalcCrc8(RxBuffer[10]);
     CalcCrc8(RxBuffer[11]);
     CalcCrc8(RxBuffer[12]);
Таблица весов получается так:
- Код: Выделить всё • Развернуть
 Возмите степени двойки: 1,2,4... и прогоните через пример от производителя -> получите таблицу весов разрядов.
;1=0x31
;2=0x62
;4=0xC4
;8=0xB9
;16=0x43
;32=0x86
;64=0x3D
;128=0x7A
По поиску в гугле "Возмите степени двойки: 1,2,4... и прогоните через пример", найдете источник...
и.т.д. и.т.п.