#include "includes.h" /** * @name 两字节CRC校验 * @param aStr 需要校验的数组首地址 len 数组总长度 * @retval 无 * @brief 无 */ void NetCRC16(uint8_t *aStr ,uint16_t len) { uint16_t alen = len-2; //CRC16 uint16_t xda , xdapoly ; uint16_t i,j, xdabit ; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for(i=0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } aStr[alen] = (uint8_t)(xda & 0xFF) ; aStr[alen+1] = (uint8_t)(xda>>8) ; } /******************************************************************************* * Function Name : SRAM_CRC16 * Description : CRC校验 - 读取SRAM中数据 * Input : len : 数据的长度 -- Flash中的数据校验一般是512Byte * Return : 数据的校验值 *******************************************************************************/ uint16_t SRAM_CRC16(uint32_t addr,uint16_t len) { uint16_t xda , xdapoly ; uint16_t i, j, xdabit ; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for (i = 0; i < len; i++) { xda ^= SRAM_Read_Byte(addr+i) ; for (j = 0; j < 8; j++) { xdabit = (unsigned char)(xda & 0x01) ; xda >>= 1 ; if ( xdabit ) xda ^= xdapoly ; } } return xda; } /******************************************************************************* * Function Name : NetCRC16_2 * Description : CRC校验 - 读取SRAM中数据 * Input : aStr : 需要校验的数组首地址 len : 数据的长度 -- Flash中的数据校验一般是512Byte * Return : 数据的校验值 *******************************************************************************/ uint16_t NetCRC16_2(uint8_t *aStr ,uint16_t len) { uint16_t xda , xdapoly ; uint16_t i,j, xdabit ; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for(i=0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } return xda; } /******************************************************************************* * Function Name : NetCRC16_Data * Description : CRC校验 - CRC在检验数据中 * Input : aStr : 需要校验的数组首地址 len : 数据的长度 -- Flash中的数据校验一般是512Byte crc_id :CRC在数组中的下标位置,低地址在前 * Return : 数据的校验值 *******************************************************************************/ uint16_t NetCRC16_Data(uint8_t *aStr ,uint16_t len,uint16_t crc_id) { uint16_t xda , xdapoly ; uint16_t i,j, xdabit ; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for(i=0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } return xda; } /******************************************************************************* * Function Name : 用于网络升级时对flash的数据计算CRC * Description : CRC校验 - 读取SRAM中数据 * Input : aStr : 需要校验的数组首地址 len : 数据的长度 -- Flash中的数据校验一般是512Byte * Return : 数据的校验值 *******************************************************************************/ //uint16_t FlashData_NetCRC16(uint32_t FlashAddr ,uint8_t* aStr ,uint16_t len) //{ // uint16_t xda , xdapoly; // uint16_t i,j, xdabit ; // xda = 0xFFFF ; // xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) // for(i=0;i>= 1 ; // if( xdabit ) xda ^= xdapoly ; // } // } // return xda; //} /******************************************************************************* * Function Name : 用于网络升级时对flash的数据计算CRC * Description : CRC校验 - 读取SRAM中数据 * Input : aStr : 需要校验的数组首地址 len : 数据的长度 -- Flash中的数据校验一般是512Byte * Return : 数据的校验值 *******************************************************************************/ uint16_t FlashData_NetCRC16(uint32_t FlashAddr, uint16_t len) { uint16_t xda , xdapoly; uint16_t i,j, xdabit ; uint8_t Fdata =0; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for(i=0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } return xda; } /******************************************************************************* * Function Name : UDP_Data_Pack_CRC16 * Description : UDP服务器协议数据CRC校验函数 - 与正常的CRC校验有些不同,CRC在包头内部,在校验过程需要将CRC值默认为零计算正确的CRC16的值 * Input : aStr : 需要校验的数组首地址 len : 数据的长度 * Return : None *******************************************************************************/ uint16_t UDP_Data_Pack_CRC16(uint8_t *aStr ,uint16_t len) { uint16_t alen = len; //CRC16 uint16_t xda , xdapoly ; uint16_t i,j, xdabit ; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for(i=0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } return xda; } /******************************************************************************* * Function Name : Dev_CheckSum * Description : 和校验取反,数据内容从SRAM中读取 *******************************************************************************/ uint8_t Dev_CheckSum(uint32_t addr,uint16_t len) { uint8_t data_sum = 0; uint8_t check_temp_buff[SRAM_Device_List_Size] = {0}; SRAM_Read_Buff(check_temp_buff,len,addr); for(uint16_t i = 0;i SRAM_Device_List_Size) return 1; uint8_t check_temp_buff[SRAM_Device_List_Size] = {0}; SRAM_Read_Buff(check_temp_buff,data_len,sram_addr); for(uint16_t i = 0;i= SnMin)) //Sn号 { (*SnValue)++; } else { *SnValue = SnMin; } return *SnValue; }