CRC

函数列表

简要说明

CRC(Cyclic Redundancy Check)循环冗余校验是一种根据数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。CRC算法可采用不同的生成多项式版本。

接口描述

csi_crc_initialize

crc_handle_t csi_crc_initialize(int32_t idx, crc_event_cb_t cb_event)
  • 功能描述:

    • 通过传入设备数初始化对应的crc实例,返回crc实例的句柄。
  • 参数:

    • idx: 设备号。

    • cb_event: crc实例的事件回调函数。回调函数原型定义见crc_event_cb_t。

      回调函数类型crc_event_cb_t定义如下:

      typedef void (*crc_event_cb_t)(int32_t idx, crc_event_e event);
      

      其中idx为设备号,event 为传给回调函数的事件类型,crc回调事件枚举类型 crc_event_e 。

  • 返回值:

    • NULL: 初始化失败。

    • 其它: 实例句柄。

crc_event_e:

名字 定义 备注
CRC_EVENT_CALCULATE_COMPLETE 计算完成事件

csi_crc_uninitialize

int32_t csi_crc_uninitialize(crc_handle_t handle)
  • 功能描述:

    • crc实例反初始化。该接口会停止crc 实例正在进行的工作(如果有),并且释放相关的软硬件资源。
  • 参数:

    • handle: 实例句柄。
  • 返回值:

    • 错误码。

csi_crc_power_control

int32_t csi_crc_power_control(crc_handle_t handle, csi_power_stat_e state)
  • 功能描述:

    • 配置设备实例的功耗模式。
  • 参数:

    • handle: 实例句柄。

    • state: 设备实例的功耗模式,参看 csi_power_stat_e的定义。

  • 返回值:

    • 错误码。
    csi_power_stat_e:

    | 名字 | 定义 | 备注 | | :---------------- | :----------- | :--- | | DRV_POWER_OFF | 关电源状态 | | | DRV_POWER_LOW | 低电平状态 | | | DRV_POWER_FULL | 全电源状态 | | | DRV_POWER_SUSPEND | 挂起电源状态 | |


csi_crc_get_capabilities

crc_capabilities_t csi_crc_get_capabilities(int32_t idx)
  • 功能描述:

    • 获取crc实例支持的能力。
  • 参数:

    • idx:
  • 返回值:

    • 描述crc 能力的结构体,crc 的能力定义见 crc_capabilities_t 。

crc_capabilities_t:

名字 定义 备注
uint32_t ROHC :1 支持ROHC模式
uint32_t MAXIM :1 支持MAXIM模式
uint32_t X25 :1 支持X25模式
uint32_t CCITT :1 支持CCITT模式
uint32_t USB :1 支持USB模式
uint32_t IBM :1 支持IBM模式
uint32_t MODBUS :1 支持MODBUS模式

csi_crc_config

int32_t csi_crc_config(crc_handle_t handle, crc_mode_e mode, crc_standard_crc_e standard)
  • 功能描述:

    • 配置crc实例的工作模式。
  • 参数:

    • handle: 实例句柄。

    • mode: crc 模式,参看 crc_mode_e 定义。

    • standard: crc 的标准,参看 crc_standard_crc_e的定义。

  • 返回值:

    • 错误码。

crc_mode_e:

名字 定义 备注
CRC_MODE_CRC8 CRC8模式
CRC_MODE_CRC16 CRC16模式
CRC_MODE_CRC32 CRC32模式

crc_standard_crc_e:

名字 定义 备注
CRC_STANDARD_CRC_ROHC CRC标准RHOC
CRC_STANDARD_CRC_MAXIM CRC标准MAXIM
CRC_STANDARD_CRC_X25 CRC标准X25
CRC_STANDARD_CRC_CCITT CRC标准CCITT
CRC_STANDARD_CRC_USB CRC标准USB
CRC_STANDARD_CRC_IBM CRC标准IBM
CRC_STANDARD_CRC_MODBUS CRC标准 MODBUS

csi_crc_calculate

int32_t csi_crc_calculate(crc_handle_t handle, const void *in, void *out, uint32_t len)
  • 功能描述:

    • 计算crc,如果传入的数据长度不是字对齐,接口内部会以0填充。
  • 参数:

    • handle: 实例句柄。

    • in: 待传入数据的缓冲区地址。

    • out: 待接收数据的缓冲区地址。

    • len: 待传入的数据的长度。

  • 返回值:

    • 错误码。

csi_crc_get_status

crc_status_t csi_crc_get_status(crc_handle_t handle)
  • 功能描述:

    • 获取当前时刻CRC 的状态。
  • 参数:

    • handle: 实例句柄。
  • 返回值:

    • crc状态的结构体,crc的状态定义见 crc_status_t。

crc_status_t:

名字 定义 备注
uint32_t busy :1 计算忙

示例

CRC示例1

static crc_handle_t crc= NULL;

void example_main(void)
{
    int ret;
    crc_status_t status;

    crc_capabilities_t cap;
    //get crccapabilities
    cap = csi_crc_get_capabilities(0);
    printf("crc %s ROHC standard \n",cap.ROHC==1 ? "support":"not support");

    //initialize crc by idx
    crc= csi_crc_initialize(0, NULL);
    if (crc== NULL) {
        //fail
        return;
    }
    uint32_t crc_input[] = {0x44332211, 0x44332211, 0x44332211, 0x44332211};
    uint32_t expect_out = 0x8efa;
    uint32_t out;

    //config crc mode and standard
    ret = csi_crc_config(crc, CRC_MODE_CRC16, CRC_STANDARD_CRC_MODBUS);
    if (ret < 0){
        //fail
        return;
    }
    ret = csi_crc_calculate(crc, &crc_input, &out, 4);

    do {
        status = csi_crc_get_status(crc);
    } while (status.busy == 1);

    ret = csi_crc_uninitialize(crc);
    if (out != expect_out) {
        printf("crc MODBUS mode calculate failed!!!\n");
    } else {
        printf("crc MODBUS mode calculate success!!!\n");
    }
}

results matching ""

    No results matching ""