TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2340R5

器件:CC2340

SDK版本:simplelink_cc23xx_sdk_6_40_00_21_eng

问题:cmdId为RCL_CMDID_BLE5_GENERIC_RX,调用RCL_Command_submit和RCL_Command_pend返回错误码138—–RCL_CommandStatus_Error_UnknownOp

麻烦技术解答一下,谢谢!

Nick Sun:

您好,

根据文档api,我们有看到:

您能检查一下您修改的地方是否有误,期待您的回复。

,

wang jiwei:

例程rfPacketRx 调用RCL_Command_submit和RCL_Command_pend不会报错,rfPacketRx例程是用了RCL_CMDID_GENERIC_RX命令,

目前我要接收蓝牙的数据,所以用了RCL_CMDID_BLE5_GENERIC_RX命令,但是出现调用RCL_Command_submit返回0x8A–RCL_CommandStatus_Error_UnknownOp,调用RCL_Command_pend返回0x8A–RCL_CommandStatus_Error_UnknownOp

希望得到您的解答!

,

Nick Sun:

您好,

我们需要一点时间来查看您的问题,有结论及时联系您。

,

wang jiwei:

好的,如果需要命令的参数配置,我这边也可以提供,希望把这个问题解决!谢谢!

,

Nick Sun:

您好,

我们会将您的问题升级与E2E英文论坛与专业产线工程师讨论后和您回复。

,

wang jiwei:

好的,如果需要任何协助我这边都可以支持,希望把这个问题解决!谢谢!

,

Nick Sun:

您好,

好的,我们如果有后续跟进消息会和您及时同步。

感谢您的支持。

,

wang jiwei:

好的,如果需要任何协助您尽管提出,希望把这个问题解决!谢谢

,

Nick Sun:

您好,

收到工程师的回复:

To clarify, the customer wants to receive and decode BLE packets using the rfPacketRx example? Could you provide a bit more information about their use-case? If they want to implement Bluetooth LE communication, then I would recommend that the customer implement a BLE examples on both sides of the connection.

您是想要使用 rfPacketRx 示例接收和解码 BLE 数据包?您能否提供有关其用例的更多信息?如果您想要实现蓝牙 LE 通信,那么我们会建议您在连接的两端都实现一个 BLE 示例。

,

wang jiwei:

您好,

1、想要使用 rfPacketRx 示例接收和解码 BLE 数据包,但是我用的不是RCL_CMDID_GENERIC_RX命令,而是RCL_CMDID_BLE5_GENERIC_RX命令,

2、用例的更多信息就是基于 rfPacketRx 示例修改,把命令改为RCL_CMDID_BLE5_GENERIC_RX命令,目前问题是调用RCL_Command_submit和RCL_Command_pend返回0x8A(RCL_CommandStatus_Error_UnknownOp),修改后的源码下面提供,

3、这样做是为了实现连接监听(connect monitor)功能,

RCL_CmdBle5GenericRxrxCmd;// RX commandRCL_CtxGenericRxctx;RCL_StatsGenericRxstats;// Statistic command/* Initialize and open RCL */RCL_init();RCL_Handle rclHandle = RCL_open(&rclClient, &rclRadioConfigGenericBle);/* Setup generic receive command */rxCmd = RCL_CmdBle5GenericRx_DefaultRuntime();/* Set RF channel */rxCmd.channel = 37;RCL_BLE5_setDefaultRfFrequency(2402000000U);rxCmd.common.phyFeatures = RCL_GENERIC_PHY_FEATURE_PHY_1MBPS;/* Start command as soon as possible */rxCmd.common.scheduling = RCL_Schedule_Now;rxCmd.common.status = RCL_CommandStatus_Idle;rxCmd.common.timing.absStartTime = 0;rxCmd.common.timing.relHardStopTime = 0;/* Set command to run forever until completion */rxCmd.common.timing.relGracefulStopTime = 0;rxCmd.common.runtime.client = &rclClient;/* Callback triggers on last command done or packet received */rxCmd.common.runtime.callback = defaultCallback;rxCmd.common.runtime.rclCallbackMask.value = RCL_EventLastCmdDone.value |RCL_EventRxEntryAvail.value;ctx = RCL_CtxGenericRx_DefaultRuntime();ctx.accessAddress = 0x8e89bed6;ctx.accessAddress = 0x555555;ctx.config.repeated = 1;/* Maximum packet length */ctx.maxPktLen = MAX_LENGTH;rxCmd.ctx = &ctx;/* Setup generic status command */stats = RCL_StatsGenericRx_DefaultRuntime();/* Set RX command statistics structure */rxCmd.stats = &stats;GPIO_setConfig(CONFIG_GPIO_RLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);GPIO_write(CONFIG_GPIO_RLED, CONFIG_GPIO_LED_OFF);/* Initialize multi-buffer to allow RCL to store RX packet */for(int i = 0; i < NUM_OF_PACKETS; i++){multiBuffer = (RCL_MultiBuffer *) buffer[i];RCL_MultiBuffer_init(multiBuffer, BUFF_STRUCT_LENGTH);RCL_MultiBuffer_put(&rxCmd.ctx->rxBuffers, multiBuffer);}/* Submit command */RCL_CommandStatusRCL_Sta = 0;RCL_Sta = RCL_Command_submit(rclHandle, &rxCmd);/* Pend on command completion */RCL_Sta = RCL_Command_pend(&rxCmd);

   

      感谢您的支持,希望得到进一步的支持

,

Nick Sun:

您好,

收到您的跟进,已经同步E2E工程师,有答复及时联系您。

感谢您的支持。

,

Nick Sun:

您好,

收到工程师回复,如同之前说的,查看 RCL_Command.h 文件,我们可以找到错误代码的含义。

RCL_CommandStatus_Error_UnknownOp,/*!< Command ended because radio did not recognize command; probably wrong image for given command */

这意味着无线电配置(radio configuration)不正确。您能验证一下吗?

,

?? ?:

我这边尝试了很多种方法,源码都提供了,哪里配置不对你们能直接指出吗?

提出修改配置,我可以验证

,

Nick Sun:

您好,

收到工程师回复:

Since you are using a BLE5 command (RCL_CmdBle5GenericRx_DefaultRuntime), try to make sure you are using BLE5 setup for RCL_open.

Specifically, try the files C:\ti\simplelink_cc23xx_sdk_6_40_00_21_eng\source\ti\boards\cc23x0\ble_setup.c (and ble_setup.h).Look for "rclRadioConfigBle" –> then do RCL_Handle rclHandle = RCL_open(&rclClient, &rclRadioConfigBle);

由于您正在使用 BLE5 命令 (RCL_CmdBle5GenericRx_DefaultRuntime),请尝试确保您正在为 RCL_open 使用 BLE5 设置。

具体来说,尝试文件 C:\ti\simplelink_cc23xx_sdk_6_40_00_21_eng\source\ti\boards\cc23x0\ble_setup.c(和 ble_setup.h)。寻找“rclRadioConfigBle”——> 然后执行 RCL_Handle rclHandle = RCL_open(&rclClient, &rclRadioConfigBle);

,

wang jiwei:

之前的代码,修改为RCL_Handle rclHandle = RCL_open(&rclClient, &rclRadioConfigBle);

RCL_Command_submit(rclHandle, &rxCmd);返回码为3,正常

但是一直监听不到相关数据

如果设置rxCmd.common.timing.relHardStopTime = 0;

会一直停留在RCL_Command_pend(&rxCmd);

麻烦再看一下!可以的话可以用上面的代码进行验证

,

Nick Sun:

您好,

我们建议检查这些参数,并确保它们与 TX 端匹配:

ctx.accessAddress = 0x8e89bed6;ctx.accessAddress = 0x555555;

目前,代码似乎正在覆盖 accessAddress。

I recommend checking these parameters, and making sure they match the TX side:

ctx.accessAddress = 0x8e89bed6;ctx.accessAddress = 0x555555;

Currenlty, it seems the code is overwriting the accessAddress.

,

wang jiwei:

您好,我感觉你们又弄错方向了,我是做连接监听(connect monitor)功能,TX端就是手机,

ctx.accessAddress = 0x8e89bed6;ctx.accessAddress = 0x555555;

这些参数就是配置监听手机广播的参数

,

Nick Sun:

您好,

ctx.accessAddress = 0x8e89bed6;ctx.accessAddress = 0x555555;

What I mean is that they are writing twice the value of ctx.accessAddress (first time it is 0x8e89bed6, second time it is 0x555555 — in the end, final value is 0x555555 ) — please confirm exactly which value they want for ctx.accessAddress.

工程师的意思是您写的值是ctx.accessAddress的两倍 。(第一次是 0x8e89bed6, 第二次是 0x555555  –最后,最终值为0x555555 ) — 请确认您想要 ctx.accessAddress 的确切值。

,

wang jiwei:

Sorry!

I try to modify,But it had no effect!

ctx.accessAddress = 0x8e89bed6; ctx.crcInit = 0x555555;

I want to realize ble connect monitor,Not just any rf transmission!

thanks!

,

Nick Sun:

您好,

已帮您同步工程师。

赞(0)
未经允许不得转载:TI中文支持网 » CC2340R5
分享到: 更多 (0)