This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2640R2F BLE模式,接收出现错误,该如何处理?

Other Parts Discussed in Thread: CC2640

根据相关文档描述,在接收过程中,rxConf.bAutoFlushCrcErr 设置1,CC2640会自动丢弃crc出错的包。

我的场景如下:

在scanner模式下(RF_cmdBleScanner) ,接收蓝牙广播。RF_EventLastCmdDone 这个事件发生以后去RFQueue中取PDU,测试下来发现,接收到的PDU中数据是有错误的。我理解这个包是一个crc出错的包。(发射端固定2402频点,发送固定数据,容易对比)

请问,

目前bAutoFlushCrcErr 设置为1了,RFQueue中还是读到错误包了,暂不清楚如何根据crc出错来丢弃错包。

请帮忙解答,谢谢!

  • 我不清楚是否理解了你的意思,是不是说设置了bAutoFlushCrcErr,但是依然有数据包出错?
  • 不好意思, 我的描述可能过于细节。
    现象就是设置了bAutoFlushCrcErr, 依然有数据包出错。
    我们应用程序是希望收到正确包以后进行处理,但现在发现有错误包,导致了应用程序异常。
    一般都是检查到crc出错,就直接丢掉了。目前这个情况,不太清楚该如何处理。

    谢谢!
  • 明白了,我跟同事讨论一下,后续再来回复
  • 好的 非常感谢 :)
  • 你好,设置的相关代码能否提供一下?
  • 可以的,RF_bleScannerPar 配置如下,如果还需要其他部分,都可以提供,谢谢!

    // CMD_BLE_SCANNER
    rfc_CMD_BLE_SCANNER_t RF_cmdBleScanner =
    {
    .commandNo = CMD_BLE_SCANNER,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x1,
    .condition.rule = 0x1, // Never run next command
    .condition.nSkip = 0x0,
    .channel = 37,
    .whitening = 0,
    .pParams = &RF_bleScannerPar,
    .pOutput = NULL,
    };


    rfc_bleScannerPar_t RF_bleScannerPar =
    {
    .pRxQ = NULL, // insert pointer
    .rxConfig.bAutoFlushIgnored = 1, //0
    .rxConfig.bAutoFlushCrcErr = 1,
    .rxConfig.bAutoFlushEmpty = 1, //0
    .rxConfig.bIncludeLenByte = 1,
    .rxConfig.bIncludeCrc = 0,
    .rxConfig.bAppendStatus = 0,
    .rxConfig.bAppendTimestamp = 0,
    .scanConfig.scanFilterPolicy = 0, // Accept all device addresses
    .scanConfig.bActiveScan = 0, // Passive scanner
    .scanConfig.deviceAddrType = 0, // Public address (TBD)
    .scanConfig.bStrictLenFilter = 1,
    .scanConfig.bAutoWlIgnore = 0,
    .scanConfig.bEndOnRpt = 1,
    .randomState = 0, // N/A for passive scanner
    .backoffCount = 0, // N/A for passive scanner
    .backoffPar.logUpperLimit = 0, // N/A for passive scanner
    .backoffPar.bLastSucceeded = 0, // N/A for passive scanner
    .backoffPar.bLastFailed = 0, // N/A for passive scanner
    .scanReqLen = 0, // N/A for passive scanner
    .pScanReqData = NULL, // N/A for passive scanner
    .pDeviceAddress = NULL, //TBD
    .pWhiteList = NULL, // No white list
    .timeoutTrigger.triggerType = TRIG_REL_START,
    .timeoutTrigger.bEnaCmd = 0x0,
    .timeoutTrigger.triggerNo = 0x0,
    .timeoutTrigger.pastTrig = 0x1,
    .timeoutTime = 4e3 * 500,
    .endTrigger.triggerType = TRIG_NEVER,
    .endTrigger.bEnaCmd = 0x0,
    .endTrigger.triggerNo = 0x0,
    .endTrigger.pastTrig = 0x0,
    .endTime = 0x00000000,
    };

  • hi, Viki
    你好! 关于这个错包问题 ,有相关解决方案么 ?还是用法上的问题? 谢谢!
  • 你用的是driver lib里的RF command,不是BLE协议栈,是否可以用协议栈测试一下呢?
    dev.ti.com/.../node
  • 请尝试把 bIncludeCrc设为1