DSPS设备代码中的错误码

17个帖子/ 0新
最后一篇
Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
DSPS设备代码中的错误码

你好
我正在为我的应用程序使用DSPS设备模式代码。我的代码的一般目的是改变广告字符串根据我的主机MCU板状态机。有时我看到BLE由于某种原因停止发送广告包。我看到在gapm_cmp_evt_handler()函数中,param->状态是0x43 (GAP_ERR_COMMAND_DISALLOWED),然后它变成0x44 (GAP_ERR_CANCELED)。您能帮我一下吗?获得这些状态的可能原因是什么?您是否认为这可能与我所拥有的广告停止传输有关?

短代码说明:
在我的代码中,当我接收主机MCU的广告修改请求(通过UART)时,对话框MCU发送广告停止请求并等待gapm_cmp_evt_handler函数调用来获得操作标志。一旦到达,它就发送带有广告字符串的新值的广告开始请求(MAJOR字符串中的字节变化),并等待gapm_cmp_evt_handler调用来获得操作标志。
谢谢

关键词:
设备:
mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

我想控件上执行更改时,会发生此事件广告字符串。广告字符串通过有效性检查时,它的时间被传输到空中,也许你提供给580的字符串不是一个有效的(一个奇怪的标志或类似的东西),这会导致你的设备不发布广告。或者,您发布和发布命令而没有取消前一个命令。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
你好,谢谢你的回答

你好,谢谢你的回答,
关于第一种选择:
它是不是应该发送GAP_ERR_ADV_DATA_INVALID如果广告字符串是错误的?

我会查看没有停止的广告选项。
还有一件事:我假设在我召唤广告停止功能后发送GAP_ERR_CANCELED消息,对吧?
谢谢
阿米尔

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

是的,在一个无效的数据字符串中,您应该得到一个GAP_ERR_ADV_DATA_INVALID。是的,首先你取消了广告过程然后你得到GAP_ERR_CANCELED消息。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
好,谢谢

好,谢谢
我还有最后一个问题。如果一切顺利,并发生以下步骤:
1.我已经取消了停止宣传功能的广告
2.从内核获取GAP_ERR_CANCELED(在PARAM->状态寄存器中)
3.然后调用start advertise函数并修改advertise字符串
4.我的问题-什么是内核响应应该在param->状态寄存器之后?
再次感谢

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

您的意思是内核在广告启动时发送的消息是什么?发送GAPM_START_ADVERTESE_CMD后,您不会从内核获取任何消息后,操作将继续(除非是指示的广告),直到停止广告(使用GAPM_CMP_EVT)或接收连接请求(GAPC_CONNECTION_REQ_IND)。有关更多信息,请查看RW_BLE_GAP_IS.PDF。

Thansk mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
嗨,谢谢你的答案

嗨,谢谢你的答案。在我的情况下,经过一段时间(可以从10分钟到24小时),广告从某种原因停止。我看到这种出现的流程:
1.我的主机MCU发送一个新的广告修改请求(我可以随时触发它)。
2.我得到请求并调用stop_adv()函数,然后在gapm_cmp_evt_handler()函数中得到param->status==GAP_ERR_CANCELED。
3.在我获得这个状态之后,我调用adv_start()函数并修改advertise字符串,然后gapm_cmp_evt_handler()函数不会被调用。
随着我们的转换,我认为这是正确的程序,但我仍然没有看到任何广告包在我的BLE扫描应用程序。你能想到什么可以帮助我调试/解决这个问题吗?
谢谢
阿米尔

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

更改广告字符串的过程是正确的:

1)启动广告-发布一个GAPM_START_ADVERTISE_CMD并继续广告直到你决定停止

2)停止发布-发布一个GAPM_CANCEL_CMD

3)接收到广告已经停止的GAPM_CMP_EVT

4)更改广告字符串并再次启动广告。

我假设当您取消广告时,您会得到gapm_cmp_evt_handler(),而不是GAP_ERR_CANCELED,您得到的是gap_err_command_disabled。尝试连接到智能片段工具,并检查您的设备肯定没有广告(没有rx, tx活动),当重新启动广告不工作,你也可以检查您的设备的状态,当这个事件发生。我试图修改的DSPS项目,以便得到GAP_ERR_COMMAND_DISALLOWED,似乎当我连接到设备时,我得到了这个错误,我试图开始发布,但一旦我断开连接,设备就能够再次发布。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
你好

你好
我会尝试,但是我检查了一下,我得到了你在上面4个步骤中描述的准确过程。我没有得到gap_err_command_disabled。我将尝试使用智能片段工具,但我仍然很高兴知道是否有另一个标志或任何其他指示,为RF开始广告。目前我需要定期重置,但批量生产的解决方案不会持续。
谢谢

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

考虑到你的第一篇文章,我认为你的问题是你在尝试重新打造而不是GapM_Cancel_cmd和你的设备刚刚停止广告时,你正在获得Gap_err_command_disogped。您可以使用ARCH_LAST_RWBLE_EVT_GET()以获取您的设备通过的最后一个BLE事件。请在app_sleep.h文件中查看app_asynch_trm()函数中的信标参考设计。它使用此功能来计算广告事件。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
你好

你好
我确实在rwble_last_event中追踪了最后一个状态,似乎可以获得几个0x02(ble_evt_rx)和0x03(ble_evt_rx),直到我得到0x04(ble_evt_end)。我假设(根据信标项目),BLE_EVT_TX和之后BLE_EVT_END意味着这1次广告数。但仍然在一段时间之后,我没有看到空中的数据包。我有一些输入可能可以帮助您帮助我:
1.我不使用任何外部振荡器-我取消了两个睡眠与CFG_EXT_SLEEP和CFG_DEEP_SLEEP的#undef
2.我取消了SW和HW UART流量控制(没有足够的引脚)
3.我使用开发调试
再次感谢你的帮助,我真的很感激

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

你提到的要点不应该影响580的广告流程,它不应该只是停止广告。你能不能请发出广告停止,广告启动和修改字符串使用定时器,而不是通过外部MCU发送命令,以隔离问题。也许MCU会以某种方式影响您的系统,并导致以某种方式中断BLE活动。同样,如果您通过跟踪BLE_EVT_END来检查是否有BLE活动,正如信标片段所做的那样,当没有活动来发出一个start advertise命令时,命令是否被执行,或者您必须重置堆栈以使您的设备开始发布通告?

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
嗨,对不起,我没有

嗨,我很抱歉不明白你最后一句话(用ble_evt_end),你能再次解释一下。当我执行调试时,BLE_EVT_END是临时状态,再次到达断点后,它与状态Rx或Tx。如果提到该状态是Tx,它不是假设是肯定发生的广告吗?即使我解决了这个问题,我也希望能够知道是否发送或不发送。

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

当广告发生时,函数应该以下列顺序返回状态Tx / Rx / Tx / Rx / Tx / Rx / BLE_END_EVT(这是广告事件的周期 - 它将返回其他州,因为您的觉醒对此不感兴趣,CSNT_EVT和SLP等)因此每个成功的广告活动应该以BLE_END_EVT结尾。在我上一篇文章中,我提到通过保持最后一个和当前的BLE事件来跟踪广告过程的完整周期。如果您的设备状态无更改为上述状态,则无法完成上述循环,您将能够知道您的设备不是广告。通过跟踪只有TX只是在一个频道中进行广告而不是完整的广告操作,您也可以跟踪,如果您想要。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
你好,谢谢你的回答

嗨,谢谢你的答案。我试图看看原始代码发生的事情:我使用Version DSPS 3.150.2使用此更改:
1. #undef cfg_ext_sleep(是#define)
2. #undef cfg_uart_hw_flow_ctrl(是#define)

我正在通过UART端口上传FW, CRC正常。该单位开始传输,但一段时间后,它停止相同的我的固件版本。

正如我之前提到的,我不使用外部振荡器,在我的设置中,我几个单元约为8个单位,它们之间的距离为约30cm,在每个单元内部有ZigBee发射器(距离BLE模块约5厘米)偶尔传输数据。也许这会帮助你帮助我。
谢谢

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 34
嗨asalhuv,

嗨asalhuv,

当你说你不使用外部振荡器时,你不使用任何外部静脉器,甚至不是xtal16?对于580,XTAL16是强制性的,因为数据表指示您只能在降压模式下省略XTAL32外部振荡器时,XTAL32也是强制性的。对不起,没有注意到早些时候的第11篇帖子中的指示。

谢谢mt_dialog.

Asalhuv.
离线
最后一次露面:2年9个月前
加入:2015-10-22 09:49
你好

你好
我使用MURATA模块与您的嵌入式芯片(ZY型),包括Xtal16。我认为DSPS版本3.0.8在加载环境下存在一些问题:
当我周末在家里测试时(只有一个模块)一切正常,它持续传输了3天。当我在工作中开始测试时(我们有很多BLE模块{至少30},ZigBee发射器和WIFI),广告一段时间后就停止了,即使是我在之前的文章中描述的参考FW。
我尝试了SDK 5的DSPS(你发布的新版本),现在看起来更好,但我将知道只有在周日,我将再次检查它。
也许我值得看看这个问题,我会在周日再次更新。