下位机人员的要求如下:
上位机发送命令:为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个字节的校验位。
修改如下:上位机发送命令由以往的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个字节的校验位。
修改如下:上位机发送命令由以往的55 AA 01 A1 00 00 00 00改为55 AA 01 A1 56 28 B6 C7 56 8A BD D6 后面是4个字节的校验位。