请帮助一段CRC校验代码

时间:2021-07-11 00:37:48
本人对CRC校验不熟,要用上位机和单片机通讯,现在求助一段代码,最好能有注解,谢谢了!!

下位机人员的要求如下:
  
 上位机发送命令:为55 AA 01 A1 56 28 B6 C7 56 8A BD D6 
 56 8A BD D6 是4个字节的校验位。
  检验公式为:
  
  u32    Fml_Constant = 0XBDCA5A32;
  u8     *C=(u8*)&Fml_Constant;
  u32 Formula_102(u8 *D) 
  { 
   u8 *crc; 
   u16 dat;
   u32 i; 
   union
   {
   u32 dword;
   u8 byte[4];
   }flash_addr;
   crc = (u8*)&dat; 
   Fml_CRC16 = 0; 
   dat = Formula_CRC16(D,12); 
   flash_addr.byte[0] = C[0] ^ crc[0]; 
   flash_addr.byte[1] = C[1] ^ crc[1]; 
   flash_addr.byte[2] = C[2] ^ crc[1]; 
   flash_addr.byte[3] = C[3] ^ crc[0]; 
   i = flash_addr.dword;
   return i;
  }
  
  调用函数示例:
  D[0]=UID[1]; 
   D[1]=UID[6]; 
   D[2]=UID[2]; 
   D[3]=UID[3]; 
   D[4]=UID[0]; 
   D[5]=UID[5]; 
   D[6]=UID[4];
   D[7]=UID[7]; 
   D[8]=UID[9]; 
   D[9]=UID[8]; 
   D[10]=UID[11];
   D[11]=UID[10];
   j=Formula_102(D);
其中UID[0]对用的是发送命令的第一个字节,UID[1]对用的是发送命令的第二个字节,依次论推,如果访问第二个地址的数据的话,将01变为02,以后原理一样。

1 个解决方案

#1


更正一下,下位机人员的原话是:
  修改如下:上位机发送命令由以往的55 AA 01 A1 00 00 00 00改为55 AA 01 A1 56 28 B6 C7 56 8A BD D6 后面是4个字节的校验位。

#1


更正一下,下位机人员的原话是:
  修改如下:上位机发送命令由以往的55 AA 01 A1 00 00 00 00改为55 AA 01 A1 56 28 B6 C7 56 8A BD D6 后面是4个字节的校验位。