1 /* 2 * Copyright (C) 2017-2020 Alibaba Group Holding Limited 3 */ 4 5 /****************************************************************************** 6 * @file crc.h 7 * @brief Header File for CRC Driver 8 * @version V1.0 9 * @date 02. June 2020 10 * @model crc 11 ******************************************************************************/ 12 13 #ifndef _DRV_CRC_H_ 14 #define _DRV_CRC_H_ 15 16 #include <stdint.h> 17 #include <drv/common.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /** 24 * \brief Compute the CRC-7 checksum of a buffer. 25 * 26 * See JESD84-A441. Used by the MMC protocol. Uses 0x09 as the 27 * polynomial with no reflection. The CRC is left 28 * justified, so bit 7 of the result is bit 6 of the CRC. 29 * init = 0; poly = 0x09 refin = 0 refout = 0 xorout = 0 30 * \param[in] crc Crc init value or crc immediate result 31 * \param[in] data Data buf to be calculate 32 * \param[in] size Data size 33 * 34 * \return The computed CRC7 value 35 */ 36 uint8_t csi_crc7_be(uint8_t crc, uint8_t *data, uint32_t size); 37 38 /** 39 * \brief Compute the CRC-8 checksum of a buffer. 40 * init = 0 or 0xff; poly = 0x07 refin = 0 refout = 0 xorout = 0 41 * \param[in] crc Crc init value or crc immediate result 42 * \param[in] data Data buf to be calculate 43 * \param[in] size Data size 44 * \return The computed CRC8 value 45 */ 46 uint8_t csi_crc8(uint8_t crc, uint8_t *data, size_t size); 47 48 /** 49 * \brief Compute the CRC-8 checksum of a buffer. 50 * init = 0; poly = 0x31 refin = 1 refout = 1 xorout = 0 51 * \param[in] crc Crc init value or crc immediate result 52 * \param[in] data Data buf to be calculate 53 * \param[in] size Data size 54 * \return The computed CRC8 value 55 */ 56 uint8_t csi_crc8_maxim(uint8_t crc, uint8_t *data, size_t size); 57 58 /** 59 * \brief Compute the CRC-16 checksum of a buffer. 60 * init = 0 or 0xffff; poly = 0x8005 refin = 1 refout = 1 xorout = 0 61 * \param[in] crc Crc init value or crc immediate result 62 * \param[in] data Data buf to be calculate 63 * \param[in] size Data size 64 * \return The computed CRC16 without xorout 65 */ 66 uint16_t csi_crc16(uint16_t crc, uint8_t *data, uint32_t size); 67 68 /** 69 * \brief Compute the CRC-16 checksum of a buffer. 70 * init = 0; poly = 0x1021 refin = 1 refout = 1 xorout = 0 71 * \param[in] crc Crc init value or crc immediate result 72 * \param[in] data Data buf to be calculate 73 * \param[in] size Data size 74 * \return The computed CRC16 without xorout 75 */ 76 uint16_t csi_crc16_ccitt(uint16_t crc, uint8_t *data, uint32_t size); 77 78 /** 79 * \brief Compute the CRC-16 checksum of a buffer. 80 * init = 0; poly = 0x3d65 refin = 1 refout = 1 xorout = 0xffff 81 * \param[in] init_value Crc init value 82 * \param[in] data Data buf to be calculate 83 * \param[in] size Data size 84 * \return The computed CRC16 with xorout 85 */ 86 uint16_t csi_crc16_dnp(uint16_t init_value, uint8_t *data, uint32_t size); 87 88 /** 89 * \brief Compute the CRC-16 checksum of a buffer. 90 * init = 0; poly = 0x1021 refin = 0 refout = 0 xorout = 0 91 * \param[in] crc Crc init value or crc immediate result 92 * \param[in] data Data buf to be calculate 93 * \param[in] size Data size 94 * \return The computed CRC16 without xorout 95 */ 96 uint16_t csi_crc16_itu(uint16_t crc, uint8_t *data, uint32_t size); 97 98 /** 99 * \brief Compute the CRC-32 checksum of a buffer.Little-endian by bit. 100 * init = 0; poly = 0xEDB88320 refin = 0 refout = 0 xorout = 0 101 * \param[in] crc Crc init value or crc immediate result 102 * \param[in] data Data buf to be calculate 103 * \param[in] size Data size 104 * \return The computed CRC32 without xorout 105 */ 106 uint32_t csi_crc32_le(uint32_t crc, uint8_t *data, uint32_t size); 107 108 /** 109 * \brief Compute the CRC-32 checksum of a buffer.Big-endian by bit. 110 * init = 0; poly = 0x04C11DB7 refin = 0 refout = 0 xorout = 0 111 * \param[in] crc Crc init value or crc immediate result 112 * \param[in] data Data buf to be calculate 113 * \param[in] size Data size 114 * \return The computed CRC32 without xorout 115 */ 116 uint32_t csi_crc32_be(uint32_t crc, uint8_t *data, uint32_t size); 117 118 #ifdef __cplusplus 119 } 120 #endif 121 122 #endif /* _DRV_CRC_H_ */ 123