Matlab - Cálculo del CRC de 16 bits en Matlab

 
Vista:

Cálculo del CRC de 16 bits en Matlab

Publicado por Sigmar (3 intervenciones) el 23/05/2011 18:40:47
Buenas,
mi problema es que debo calcular el CRC de 16 bits de una trama. He utilizado todos los codigos que hay en MathWorks (crc9,crc16,etc) con el polinomio exacto (0x1021) y no me da el CRC correcto. Éste lo compruebo mediante esta web: http://www.lammertbies.nl/comm/info/crc-calculation.html

Donde el CRC que corresponde con el de mi sistema es el CRC-CCITT (XModem).

Dado que estos codigos no funcionan, he optado por coger las funciones que calculan el CRC en C y probar de leerlas en Matlab mediante mexFunction, pero no termino de apañarmelas puesto que me hago un lío con las variables de salida y entrada. El codigo en C que pretendo leer con Matlab es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
static uint16_t crc_byte(uint16_t crc, uint8_t b)
{
  uint8_t i;
 
  crc = crc ^ b << 8;
  i = 8;
  do
    if (crc & 0x8000)
      crc = crc << 1 ^ 0x1021;
    else
      crc = crc << 1;
  while (--i);
 
  return crc;
}
 
static uint16_t crc_packet(uint8_t *data, int len)
{
  uint16_t crc = 0;
 
  while (len-- > 0)
    crc = crc_byte(crc, *data++);
 
  return crc;
}


donde introduzco mi trama como un vector en binario data, y len es su longitud.

Me sirve cualquier cosa, tanto un codigo que me calcule bien el CRC que necesito o el código C para matlab.

A ver si hay suerte y alguien se ha encontrado con esto, grácias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Cálculo del CRC de 16 bits en Matlab

Publicado por Dave (1094 intervenciones) el 24/05/2011 18:23:45
Hola!!!

Es muy especifica tu consulta, quizas una opcìón podría ser que le escribas a los desarrolladores de Mathwork, ya que si tu dices que no hay correspondencia entre lo teorico y lo implementado, entonces será un gran aporte a mejorar Matlab.

Saludos
Dave
[email protected]
http://fismatlab.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cálculo del CRC de 16 bits en Matlab

Publicado por Sigmar (3 intervenciones) el 24/05/2011 18:49:17
Al final esta mañana he visto el problema. Al usar la función de2bi de matlab, me giraba los bytes poniendo el bit menos significativo en la posición del más significativo y al revés, provocando que la rutina me diera un CRC erróneo. Grácias por la respuesta!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar