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.

[参考译文] 使用 CC1350接收 BLE 通告数据包

Guru**** 2555630 points
Other Parts Discussed in Thread: CC2640, CC2650, CC1350

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/571940/receiving-ble-advertisment-packets-with-cc1350

主题中讨论的其他器件:CC2640CC2650CC1350

大家好、

我已经在 Smart RF Studio 的帮助下收到 BLE 数据包、将通道设置为37、38或39。 我知道、此软件使用无线电命令来配置和强制无线电使用此命令进行侦听。

CMD_RADIO_SETUP 已执行

>状态:0x400 DONE_OK

>CMD_FS 已执行

>状态:0x400 DONE_OK

已执行>CMD_BLE_general_RX

>状态:0x2激活

是否有使用此命令的示例? 我已经下载了 BLE 堆栈、我可以看到我找不到任何此实现。

我的目的是了解这在命令级别的工作方式、以便为 Contiki 编写接收函数。

在 Contiki 中、已经有一个使用 CMD_BLE_ADV_NC 发送通告数据包的示例、但对于接收器件、没有通告数据包。

我尝试编写如下函数:

#define BLE_ACCESS_ADDRESS 0x8E89BED6

静态 dataQueue_t Rx_data_queue ={0};

静态 int
SEND_ble general_rx ()

 uint32_t cmd_status;
 RFC_CMD_BLE_general_RX_t cmd;
 RFC_bleGenericRxPar_t *参数;
 
 Params =(RFC_bleGenericRxPar_t *) ble_params_buf;
   
 /*清除两个缓冲区*/
 memset (&cmd、0x00、sizeof (cmd));
 memset (ble_params_buf、0x00、sizeof (ble_params_buf));
   
 /* Adv RX */
 cmd.commandNo = CMD_BLE_general_RX;//
 cmd.condition.rule = COND_Never;//
 cmd.whitening.bOverride = 0;
 cmd.whitening.init = 0;
 cmd.pParams =参数;//
 cmd.channel = 37;//

 /*设置 BLE 参数*/
 params->accessAddress = BLE_ACCESS_ADDRESS;//
 params->endTrigger.triggerType = trig_never;//
 Params->EndTime = trig_never;//
 
 /*设置 BLE 参数*/
 Params =(RFC_bleGenericRxPar_t *) ble_params_buf;
 params->pRxQ =&rx_data_queue;


 if (rf_core_send_cmd ((uint32_t)&cmd、&cmd_status)=rf_core_cmd_error){
   printf ("send_generic_rx_nC:chan=%d CMDSA=0x%08lX、status=0x%04x\n"、
          37、cmd_status、cmd.status);
   返回 RF_CORE_CMD_ERROR;
 }

 返回 RF_CORE_CMD_OK;

当我使用它时、它不会返回任何错误、但我还不知道我是否可以获取数据、以防它正常工作。  

如果有人能给我一点建议、我会很喜欢这里的信息。

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您可以看一下 GitHub 示例、该示例仅使用射频驱动程序在 CC2650/CC2640上运行信标
    github.com/.../beacon_rfdriver
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你。

    我认为此示例可能会帮助我更深入地了解射频的工作原理。 仅使用广播命令的方法太糟糕了。

    我希望曾经尝试过这样的东西的人能给我另一个建议。 同时、我仍将尝试使用 CMD_BLE_general_RX someway 进行接收。

    ---- 编辑---

    我找到了此文档。

    http://dev.ti.com/tirex/content/simplelink_cc13x0_sdk_1_00_00_13/docs/proprietary-rf/html/rf-core/callback-events.html

    这似乎更清楚,让我们看看我是否能取得更大的进展。

    ---- 编辑2 ---

    由于射频内核的实现方式与 Contiki 中的实现方式不同、因此对我来说没有什么用处...

    函数 rf_core_send_cmd 在其参数中不会显示通过回调来连接它以接收数据的方式。 标题如下所示:

    uint_fast8_t rf_core_send_cmd (uint32_t cmd、uint32_t *状态)

    我的主要问题是如何使用某种中断或回调来了解何时有数据等待读取。 然后从我声明的指针读取它、并将其连接到"params->pRxQ"。

    如果是参数、则是"rf_ble_cmd.h"中定义的 RFC_bleGenericRxPar_t 结构的指针

    我无法理解在 IEEE (2、4ghz)或专有模式(低于 GHz)等其他情况下是如何实现这一目标的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Eduardo、

    要在接收时使用回调函数:可以使用 RF_postCmd (),例如(从数据包错误率示例项目)。

    rxCmdHalf = rf_postCmd (rfHandle、(rf_Op*)&rf_cmdPropRx、rf_PriorityNormal、&rx_callback、rf_EventRxEntryDone); 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答

    遗憾的是、我使用的是 Contiki、我没有该函数向射频内核发送命令。

    我很难理解 Contiki 如何管理 CC1350或 CC2650器件的射频通信。

    这些来源是我拥有的唯一工具。

    https://github.com/g-oikonomou/contiki/tree/master/cpu/cc26xx-cc13xx/rf-core

    我注定要使用 Contiki、因为我要修改的项目已经可以使用它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Eduardo、

    很抱歉、我不熟悉 Contiki、因此我无法为您提供帮助。 您可以尝试在以下论坛中发布您的问题: e2e.ti.com/.../158