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.

[参考译文] CC2642R:HCI_EXT_ModemTestTxCmd ()未返回

Guru**** 2539500 points
Other Parts Discussed in Thread: CC2640, CC2642R, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1195455/cc2642r-hci_ext_modemtesttxcmd-does-not-return

器件型号:CC2642R
Thread 中讨论的其他器件:CC2640SysConfig

我们将有效的 EMC 测试设置从 cc2640移植到 cc2642R。  

在固件应用程序初始化期间、我们调用: GAP_RegisterForMsgs (selfentity);

然后调用:
hciStatus_t HCI_EXT_ModemTestTxCmd (uint8 cwMode、uint8 txChan)

带有参数 HCI_EXT_ModemTestTxCmd (1、0)  // 1:LL_EXT_TX_UNMODURATED_CARRIER;0:freq=2402
匹配规格:
software-dl.ti.com/.../group___h_c_i.html


我步入了:调试器最初运行正常并成功进入文件 iCall.c、函数:
iCall_errno iCall_send (iCall_EntityID src、
                   iCall_EntityID 目标、
                   ICall_MSGFormat 格式、
                   空*msg)

。 。 。

然后运行 OK (包括下一行):
iCall_msgEnqueue (&iCall_entities[dest].task->queue、msg);

但调试器将在下面的下一行失去控制权:
当我尝试步入或步越时、此调用未返回:
行:2838 icalll_sync_handle_post (iCall_entities[dest].task->syncHandle);

有什么建议吗? 这是针对 BLE 堆栈的请求是否失败、该请求是否向目标任务生成事件?

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

    您好!

    感谢您与我们联系。 我们会尽快答复您的问题。 与此同时、您能否提供您正在使用的 SDK 版本?

    此致、

    1月

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

    您好!

    您还能否说明一下在不处于调试模式时无线电是否正确执行了命令?  

    为此、您能否使用射频分析仪(或 SmartRF Studio 作为接收器)并检查是否产生2402MHz 的连续波?

    此致、

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

    大家好、Jan、我们正在使用:SDK SimpleLink CC13xx CC26xx [6.10.0.29]。

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

    您好、 Clement、我们过去始终使用调试模式进行 EMC 测试、我们是否以释放模式运行是否重要?

    我找到了一个射频表、并将尝试检查信号。 我正在使用以下设置:
    初始调用:   GAP_RegisterForMsgs (selfEntity);

    GAP_TerminateLinkReq (LL_CONNHANDLE_ALL、0);  
    GapAdv_disable (advHandleLongRange);
    GapAdv_disable (advHandleLegacy);

    然后调用:   HCI_EXT_ModemTestTxCmd (1、0)  // 1:LL_EXT_TX_UNMODULE_CARRIER;0:freq=2402

    这是正确的顺序吗?

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

    您好!

    顺序正确,但我认为您应该使用 HCIExt_EnhancedModemTestTxCmd,而不是 HCI_EXT_ModemTestTxCmd。

    您是否可以使用 HCIExt_EnhancedModemTestTxCmd (1、0、0)运行测试?  [未调制_发送_载波、One_Mbps_PHY、2402MHz]

    此致、

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

    根据上述顺序、我仍然看到相同的问题。 我是否需要使用:
    HCI_EXT_EnhancedModemTestTxCmd ()而不是:
    HCI_EXT_ModemTestTxCmd ()

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

    您好!

    感谢您查看此内容。

    我建议您继续使用 HCI_EXT_EnhancedModemTestTxCmd ()

    请随时向我们通报使用射频分析仪测得的最新测试结果。

    此致、

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

    您好,Clement,我正在尝试使用增强型命令,但无法生成,我收到链接错误:

    我在编译器中检查包含路径"确定  "、在.c 文件中我有#include "HCI.h"

    我获得:




    第一个引用了未定义的
    符号的输入
    ---------------- ----------------
    HCI_Ext_EnhancedModemTestTxCmd

    错误#10234-D:未解析的符号仍存在
    错误#10010:链接期间遇到错误;未生成"activbody-firmware-BT5.out"

      

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

    hci.h 具有正确的行:

    extern hciStatus_t HCI_EXT_EnhancedModemTestTxCmd (uint8 cwMode、
                              UINT8 rfPhy、
                              uint8 rfChan);

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

    我是否需要在链接器搜索路径中包含另一个蓝牙库?

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

    您好!

    为了健全性、请仔细检查您的名是否为"HCI_EXT_EnhancedModemTestTxCmd"(大写为"EXT")。

    此致、

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

    是的、谢谢、是小写、我更正了这个问题并建立了它、运行了它、新的增强型 API 没有在同一个地方返回:在 return 语句前死于 POST:

    iCall_errno iCall_send (iCall_EntityID src、
    iCall_EntityID 目标、
    ICall_MSGFormat 格式、
    空*msg)

    。 。 。 。

    #ifdef ICALL_NO_APP_EVENTS
    //对于应用,直接调用回调,不带排队/event_pend/dequeue
    如果(iCall_entities[dest].service == ICALL_service_class_application)

    if (iCall_entities[dest].appCallback!= NULL)

    uint8_t safeToDealloc = iCall_entities[dest].appCallback (0 /* event */、(uint8_t *) msg);
    if (msg && safeToDealloc)

    iCall_freeMsg (msg);
    }
    }
    返回(ICALL_ERROR_SUCCESS);
    }
    #endif // ICALL_NO_APP_EVENTS
    iCall_msgEnqueue (&iCall_entities[dest].task->queue、msg);
    iCall_sync_handle_post (iCall_entities[dest].task->syncHandle);  <<<我在此处的调试器中介入,此帖子没有正确进入 Event_post ()调用,并且没有以与旧的 API 相同的方式返回!

    返回(ICALL_ERROR_SUCCESS);

    -------------------------------------------------------
    这是可重复的。

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

    您好!

    感谢您进行测试。

    您能否提供修改 simple_peripheral 示例(或我们 SDK 中提供的任何其他示例)来重现问题的步骤? 基于这些要素、我将进一步重现该问题并发表评论。

    此致、

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

    感谢 Clement、我可以尝试这样做:提供更新步骤、但我们对 Simple Peripheral 示例进行了大量更改、因此会有点复杂。 失败发生在  ICALL_SYNC_Handle_post (iCall_entities[dest].task->syncHandle)中调用的标准调用 Event_post()中;我们调用高级 API HCI_EXT_EnhancedModemTestTxCmd。 似乎 syncHandle 错误,调试器无法进入 ICALL_SYNC_Handle_post。 在中的步骤中、"播放"按钮变得不可用。 是否应该检查简单外设和输出工程之间的配置差异? 我曾尝试在 Arm 编译器的预定义符号中包含 BLE_V50_features、但针对许多 LL_xxx 符号遇到了链接器未定义的错误。  HCI_EXT_EnhancedModemXXX API 是否需要任何预定义符号或任何其他配置/包含? 我的#include 是:
    #include "GATT.h"
    #include "ll_common.h"//为 CONNHANDLE 添加了
    #include "HCI.h"

    #include "hci_tl.h"
    #include "util.h"
    #include

    我使用射频分析仪进行了射频测试:它 成功捕获了我们旧的 cc2640 EMC 代码(蓝牙4.1)的2402 MHz 未调制载波、但新的 cc2642R 代码(蓝牙5)未生成任何此类射频。 我认为这证实了函数 Event_post ()的早期问题,可能是错误的同步句柄?

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

    您好!

    为了保持理智、您能否确认以下信息?

    - API 在启用 ICALL 的任务中被调用

    -该 API 在 BLE 堆栈初始化之后被调用

    -只要 API 未被调用,系统就能按预期运行

    此致、

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

    尊敬的 克莱门特,感谢您回答您的问题:是的,我确认所有,以下详细信息:
    - API 在启用 ICALL 的任务 LK 中调用:是的,我们在我们唯一的一个主要固件应用程序任务中调用它, ICALL 已启用:我们在初始化时调用 iCall_registerApp (&selfenty,&syncEvent );

    在 BLE 堆栈 LK 初始化之后调用 API:是的,我们在使用 API 关闭当前的成功 BLE 连接之后调用此 API HCI_EXT_EnhancedModemTestTxCmd ():GAP_TerminateLinkREQ (LL_CONNHANDLE_ALL,0 ) 。 为了快速关闭连接,我正在考虑 API 的可能使用: HCI_EXT_DiscontectImmedCmd (  uint16 connHandle );任何建议都会被接受。

    -只要 API 不被调用,系统就能正常运行: LK 是的,一些定制 BT 特征在正常的非 EMC 模式下运行良好。

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

    您好!

    有一个途径我们还没有探讨过。 您能否分享您在到达"iCall_msgEnqueue "时收到的消息的内容?

    其他要探讨的思路是、

    -检查堆栈准备就绪后以及任何其他射频操作之前是否调用 HCI_EXT_EnhancedModemTestTxCmd

    -检查在您的项目上启用 PTM 是否可以解决问题

    请注意、这一点很重要、要确保在启动调制解调器测试命令时没有其他射频操作(广播、扫描、连接)正在进行。

    HCI_EXT_DisconnectImmedCmd 允许立即停止与连接相关的所有射频操作。 因此、连接不会被轻轻终止、而另一个器件将继续重试、直到监控超时结束。 如您所说,对于使用 HCI_EXT_DisconnectImmedCmd 的器件,这确实是退出连接的最快方式。

    我希望这将有所帮助、

    此致、

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

    你好, 克莱门特, 谢谢你的建议,我今天将尝试他们,让你知道。

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

    您好, Clement, 根据您的 请求:以下是 ICALL 消息内容的详细信息,当 我们到达"iCall_msgEnqueue"时:

    我使用了调试器来获取实际参数和值、请参阅下面的注释//:

    初始消息标头 为:
    liteMsg.hdr.len = sizeof (icallLiteMsg_t);// liteMsg.hdr.len = 20
    liteMsg.HDR.NEXT = NULL;
    liteMsg.hdr.dest_id //设置为 ICALL_UNDEF_DEST_ID

    只有味精的身体在较低的水平上才能通过!!! 重新创建标头并在稍后完成。

    关于:调用中的 API 参数:iCall_sendServiceMsg (iCall_getEntityId ()、服务、ICALL_MSG_FORMAT_DIRTE_API_ID、&(liteMsg.msg));
    对应于函数声明:iCall_sendServiceMsg (iCall_EntityID src、iCall_ServiceEnum dest、iCall_MSGFormat 格式、void *msg)
    1) src = 2 //我在由当前 ICALL 任务句柄确定的调试器中找到它

    2)格式= 3 //我发现它硬编码为参数:iCall_MSG_FORMAT_DIRIT_API_ID 在调用 iCall_sendServiceMsg()时--见上文

    3) 3) dest =下面所示的#define 中的 ICALL_SERVICE_CLASS_BLE

    4) void *msg //此消息指针在消息正文中只有2个项目:

    4.1) liteMsg.msg.directAPI = id;////这是来自 API 名称的 API ID、通过第二个 IDx_微型参数进行硬编码:
    #define HCI_EXT_EnhancedModemTestTxCmd (...) (iCall_directAPI (ICALL_SERVICE_CLASS_BLE、(uint32_t) IDX_HCI_EXT_EnhancedModemTestTxCmd、##_VA_args_)

    4.2) liteMsg.msg.pointerStack =(uint32_t*)(((uint32_t*)(&argp));///具有初始消息参数的 argp 指针:未调制、1Mbit、RF_CHAN

    msg 指针似乎是一个有效的非零指针:名称: msg,我无法通过调试器看到正文:
    默认值:0x20003EE2
    十六进制:0x20003EE2

    但 MSG 标题被重新创建(希望以相同的方式'因为类型是相同的)使用指针计算,在我看来,一个危险的覆盖消息:

    iCall_errno (iCall_EntityID src、     // Lk:注意:iCall_send()是#defined, 定义中没有函数名称
              iCall_EntityID 目标、
              ICall_MSGFormat 格式、
              空*msg)

    iCall_CSState 密钥;
    iCall_MsgHdr * HDR =(iCall_MsgHdr *) msg - 1; // LK:我们已将先前的  argp 存储在消息中:变量参数指针

    hdr->srcentity = src;
    hdr->dstentity = dest;  //// 这最终由 iCall_send()在消息头中设置为1。 此值由 ICALL_SERVICE_CLASS_BLE 的 iCall_sendServiceMsg ()在如上所示的#define 中确定,然后输入到代码中验证的函数 iCall_searchServiceEntity()中。  

    hdr->format =格式;

    调用同步句柄的 POST 宏时、我们的新消息将作为队列中的唯一消息放置、此操作运行正常:
    名称:iCall_entities[dest].task->queue
    默认值:0x20003EE2
    十六进制:0x20003EE2

    POST 获取 dest 任务的同步句柄、我只能看到该句柄为非零值:
    名称: iCall_entities[dest].task->syncHandle
    默认值:0x20006358
    十六进制:0x20006358
    我无法验证该值、此处是 API 故障点:
    iCall_sync_handle_post (iCall_entities[dest].task->syncHandle)
    我无法步入、API 不返回。

    -------------------------------------------------------

    关于您的另一个问题,我们可以在堆栈设置之前运行 HCI API :
    我运行了相同的 API:HCI_EXT_EnhancedModemTestTxCmd ()
    在建立任何 BLE 连接之前、在通过消息 GAP_DEVICE_INIT_DONE_EVENT 报告堆栈初始化之后
    与以前相同的结果:iCall_sync_handle_post (iCall_entities[dest].task->syncHandle)以同样的方式失败。

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

    您好!

    您是否还尝试过使用 SysConfig 启用 PTM? 结果如何?

    此致、

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

    还没有。 我今天或明天会尝试 PTM 并在这里提供结果。

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

    您好、 Cl é ment、我运行的是 PTM 模式(我必须将位添加到用于 NPI 任务的代码中)、但堆栈初始化序列未按预期完成、我正在调试代码。

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

    您好!

    感谢您发送编修。

    请继续关注我们。

    此致、

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

    您好、Clement、我设法使 HCIExt_EnhancedModemTestTxCmd (1、0、0)在 PTM 模式下以2402MHz 的频率工作:API 现在返回、射频分析仪显示2402MHz 的连续传输。 在通过消息 GAP_DEVICE_INIT_DONE_EVENT 报告堆栈初始化之后、我在建立任何 BLE 连接之前运行该代码。

    如果没有 PTM 模式、此 API 不按相同顺序工作。
    我明天要查看其他频率。 我在 SysConfig 文件中选择了 PTM、并在"帮助"部分找到:"dtm 命令也可以被嵌入式 BLE 应用程序调用"。 您知道该帮助指的是哪个应用程序吗? 在 PTM 模式下、我无法可靠地将旧的测试 Android 蓝牙应用程序连接到 cc2642R MCU、MCU 也没有收到此应用程序的消息。 如果蓝牙连接不好、我会尝试更改设计并在没有此 Android 应用的情况下运行。


    非常感谢您的帮助。

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

    您好!

    做得好、我相信大家正在接近分辨率。

    "DTM 命令也可以由嵌入式 BLE 应用程序调用。"

    这意味着应用程序级(即您正在编写的代码)可以调用 DTM 命令。

    随时向我们通报最新情况。

    此致、

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

    您好、Clement、感谢您提供的信息。 我设法使 HCIExt_EnhancedModemTestTxCmd (1、0、0)在所有3种频率2402MHz、2440、2480下 工作: 射频分析仪显示每个频率上的连续传输。 非常感谢您的帮助。