DSPS设备代码中的参数错误代码

17个员额/ 0个新员额
最后发表
asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49
DSPS设备代码中的参数错误代码


我现在用的是DSPS设备模式代码为我的应用程序。我的代码的一般目的是改变根据我的主机MCU板状态机的广告串。有时候我看到BLE停止传输来自某些原因做广告包。我看到,在gapm_cmp_evt_handler()函数param->状态×43(GAP_ERR_COMMAND_DISALLOWED),之后它更改为0×44(GAP_ERR_CANCELED)。可以请有关什么是获得这些状态,可能原因帮助,如果你认为这可能与我有做广告停止传输?

短代码说明:
在我的代码,当我收到一个通告,主机MCU(通过UART)修改请求对话框MCU发送做广告的gapm_cmp_evt_handler函数调用来获得运转标志停止请求,并等待。一旦达到了,将它发送广告开始的广告串(上在各大串字节的变化)的新值请求,并等待gapm_cmp_evt_handler调用来获取相关的操作标志。
谢谢

关键词:
设备:
MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

我想这件事发生在你执行上的变化广告的字符串。广告串经过时在空中传输的时间,也许是你喂养到580的字符串不是一个有效的(一个奇怪的标志或类似的东西),这将不会导致设备有效性检查广告。或许你正在发行和不取消前一个广告的命令。

由于MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49
你好,感谢你的答案

嗨,谢谢你的回答,
对于第一种选择:
是不是它想送GAP_ERR_ADV_DATA_INVALID如果广告字符串是错了吗?

我将检查不停止广告选项。
还有一件事:我假设GAP_ERR_CANCELED消息是在我调用advertise stop函数之后发送的,对吗?
谢谢
阿米尔

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

是的,在一个无效的数据串,你应该得到一个GAP_ERR_ADV_DATA_INVALID。是的你首先取消广告程序,那么你得到的GAP_ERR_CANCELED消息。

由于MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49
好吧谢谢

好吧谢谢
我有最后一个问题。如果一切正常的话和这些步骤发生:
1.我已经用停止广告功能取消了广告
2.从内核获取GAP_ERR_CANCELED(在param->状态寄存器中)
3.然后我打电话开始做广告功能并修改了广告串
4.我的问题 - 什么是核反应应该是在param->状态之后注册?
再次感谢

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

你的意思是当广告开始时内核会发送什么信息?在你发送GAPM_START_ADVERTISE_CMD之后,你没有从内核得到任何消息,操作将继续(除非是一个定向的广告),直到你停止广告(响应一个GAPM_CMP_EVT)或你收到一个连接请求(GAPC_CONNECTION_rEQ_IND)。请查看RW_BLE_GAP_IS.pdf获取更多信息。

Thansk MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49
你好,谢谢你的回答

你好,谢谢你的回答。在我的例子中,一段时间后(可能是10分钟到24小时)广告会因为某种原因停止。我看到了一连串的事件:
1.我的主机MCU发送新的广告修改请求(我可以触发它,每当我想要的)。
2.我得到的请求,并调用stop_adv()函数,然后我得到param->状态==在gapm_cmp_evt_handler()函数GAP_ERR_CANCELED。
3.我收到此状态后,我打电话adv_start()函数,并修改广告字符串,则gapm_cmp_evt_handler()函数没有被调用。
下面我们的转换,我认为这是应该是正确的程序,但我仍然没有看到我的BLE扫描应用程序的任何通告报文。你能想什么,可以帮助我调试/解决这个问题?
谢谢
阿米尔

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

改变广告字符串的方法是正确的:

1) 开始广告-发布GAPM\u Start\u Advertised\u CMD并继续广告,直到您决定停止

2)停止广告 - 发出一个GAPM_CANCEL_CMD

3)接收该广告已经停止GAPM_CMP_EVT

4)改变广告字符串,重新开始广告。

我想,你得到的gapm_cmp_evt_handler()当您取消广告,而不是GAP_ERR_CANCELED你得到的GAP_ERR_COMMAND_DISALLOWED。尝试连接到智能片段工具,并检查您肯定不是广告(无RX,TX活动)设备时重新启动广告是不是也工作时,这起事件发生时,你可以检查你的设备的状态。我已经尽力修改DSPS项目,以获得GAP_ERR_COMMAND_DISALLOWED,似乎当我连接到设备我得到这个错误,我尝试开始做广告,但只要我正在断开该设备能够再次公告。

由于MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49


我会尝试,但我查得很好,我得到你的4个步骤上述确切的过程。我没有得到GAP_ERR_COMMAND_DISALLOWED。我将尝试使用智能片段的工具,但我仍然会很乐意知道是否有其他标志或任何其他标志,对于RF做起了广告。目前我需要做定期重置,但解决方案将不会持续大规模生产。
谢谢

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

考虑到你的第一个帖子,我认为你的问题是,你得到GAP_ERR_COMMAND_DISALLOWED时,你试图重新广告而不是GAPM_CANCEL_CMD和你的设备刚刚停止广告。您可以使用arch_last_rwble_evt_get()来获取设备经历的最后一个BLE事件。请检查app_sleep.h文件中的app_asynch_trm()函数中的信标参考设计。它使用这个函数来计算广告事件。

由于MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入: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个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

你提到的要点不应该影响580的广告程序,它不应该只是停止广告。请使用定时器发出播发停止、播发开始和修改字符串,不要通过外部MCU发送命令来隔离问题。也许MCU会以某种方式影响您的系统,并以某种方式导致不可拖动的活动。此外,如果您通过跟踪BLE_EVT_端来检查是否存在BLE活动(如信标代码段所做),并且当没有活动发出开始播发命令时,是否执行了该命令,或者您必须重置堆栈才能让设备开始播发?

由于MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49
您好我很抱歉没

你好,很抱歉听不懂你最后一句话(BLE_EVT_END),可以请你再解释一下吗?当我进行调试时,BLE_EVT_END是一个临时状态,在它再次到达断点后,它是状态RX或TX。如果它提到状态是TX,难道它不应该是广告肯定发生了吗?即使我解决了这个问题,我也希望能够知道BLE是否在传输。

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

广告发生时按照以下顺序函数应该返回美国TX / RX / TX / RX / TX / RX / BLE_END_EVT(这是一个广告事件的循环——它将返回其他州觉醒以来但是你不感兴趣,CSNT_EVT和SLP等等),所以每一个成功的广告活动都应该以BLE_END_EVT结束。在我之前的文章中,我提到过你可以通过保持最后和当前的BLE事件来跟踪广告过程的整个周期。如果你的设备状态没有改变到上述状态,并没有完成上述循环,你将能够知道你的设备不是广告。通过只追踪TX只是在一个渠道上投放广告,而不是一个完整的广告运营,如果你想的话,你也可以追踪它。

由于MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49
你好,感谢你的答案

你好,谢谢你的回答。我试着看看在原始代码中发生了什么:我使用了DSPS 3.150.2版本,并做了以下更改:
1.#undef CFG_EXT_SLEEP(是#define)
2.#undef CFG_UART_HW_FLOW_CTRL(是#define)

我上传FW通过UART端口和CRC是OK。该单元开始发送,但一段时间后,它将停止同我的固件版本。

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

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 11:34
嗨asalhuv,

嗨asalhuv,

当你说你不用外部振荡器时,你的意思是,你不用任何外部振荡器,甚至XTAL16也不用?580的XTAL16是强制性的,因为数据表表明,当你处于降压模式时,只能省略XTAL32外部振荡器,在升压模式时,XTAL32也是强制性的。很抱歉之前没有注意到你在11后的指示。

由于MT_dialog

asalhuv
离线
最后看到:2年10个月前
加入:2015年10月22日09:49


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