你好,
我正在试验一对DA14531 TINY模块,通过CP2104上的2线UART和USB/UART转换器,使用无代码固件图像codeless_531_standalone_set_two.hex连接到计算机。在它们之间建立连接的工作如UM-B-140第3.3节所述。但问题是,大约3分钟后,模块断开连接。是否有可能修复它,使连接无限期地保持活动?
另外两个预编译的固件映像(codeless_531_standalone。hex和codeless_531_datapump.hex)没有这个缺点,但是我需要I2C支持。我从源代码重新编译了standalone_set_two项目,但它仍然在2-3分钟后断开连接。如果我通过向SET ONE固件添加I2C特性来重新编译它,也会发生同样的情况。对话团队-请建议如何解决这个问题。
Sergei Bezroukov嗨
谢谢你的问题。
>>>但是问题是模块在大约3分钟后断开连接。
你能否提供更多细节?当连接中断时?您是否发送了任何特定的AT命令?你能在调试模式下运行吗?
> > > I2C的支持
您的意思是说有一个I2C接口连接到TINE模块,您的要求是读取和传输I2C数据吗?
我建议在调试模式下运行项目,并检查它是否陷入断言NMI等。
谢谢,PM_Dialog
感谢您的及时回复!
I2C与问题无关,因为到目前为止我甚至没有向模块发出任何I2C命令。而且,它没有连接到它的奴隶。我使用的唯一模块引脚是P0_5和P0_6,用于连接外部USB-UART转换器。
我使用Codeless SDK 6.380.10.4和Keil v5.27.1.0的免费版本,并注释掉user_at_command.h文件中的一些AT命令(见附件),以将codeless_stand_alone图像限制在32K下。按照你的建议,我在Segger J-Link调试器下运行它。在开始代码后,我给它AT+SLEEP=0命令,模块响应OK和+AWAKE下一行。然后我用Cypress的csmart工具和他们的软件狗作为中心设备连接TINY模块。建立连接后,模块响应+CONNECTED(在TeraTerm中),我可以在csmart中作为BLE扫描工具来探索它的服务和属性。在这一点上,一切都像预期的那样正常工作——我可以看到手册中概述的模块特征。然后我让模块在连接模式下空转,即不从TeraTerm发出命令,也不从csmart发出蓝牙命令。如前所述,连接在大约3分钟后被删除。调试器没有显示任何可疑的东西,绝对没有NMI,实际上它没有显示任何东西,只是运行模块代码。TeraTerm报告+READY和csmart报告连接下降。
如果你不知道csmart,我用一对531 TINY模块建立了蓝牙连接,做了同样的实验。其中一个模块运行预编译的映像(与哪个模块无关),其他模块运行我编译的映像。同样的连接下降发生在3分钟后。然而,如果两个模块运行预编译的数据泵或独立的图像(预编译的我指的是SmartBond Flash Programmer提供的图像)工具,那么没有连接下降的经验。但是,一旦其中一个模块加载了预编译的独立集2,就会发生连接丢失。因此,预编译的set-two映像和SDK源代码有些问题。
我写I2C只是因为我需要这个选项。到目前为止,我甚至没有尝试它是如何工作的,所以这个问题肯定与I2C无关。
Sergei Bezroukov嗨
由于应用程序代码不会在任何地方卡住(NMI / WDOG /断言),因此共享嗅探器日志以了解在空中发生的事情将非常有帮助。
是否有可能使用BLE嗅探器工具并共享嗅探器捕获?
你有一个自定义板,或你正在使用任何或dk ?此外,如果您使用睡眠模式,那么您应该使用4个UART信号(URX/UTX/RTS/CTS)。
谢谢,PM_Dialog
给你。附件中有我的硬件(只有DA14531模块和CP2104 USB-UART)和BLE事件日志的照片。日志显示531发出的连接在连接建立3分钟后超时(最后3个记录)。我不使用SLEEP模式。
Sergei Bezroukov嗨
附件日志中,断开原因为连接超时。根据蓝牙LL核心规范,连接超时错误码表示给定连接的链路监督超时已经过期。监管超时在user_connection_param_conf结构中设置。
也请说明设备在断开连接后是否再次开始广告?您可以在断开回调中添加一个断点——user_on_disconnect()——并检查断开原因。请参见gapc_disconnect_ind结构。
谢谢,PM_Dialog
是的,在断开连接后,DA设备再次开始发布。您是对的:由于DA14531停止响应连接事件,链接监督已经过期。
我用Silicon Labs Simplicity Studio和他们的Thunderboard Sense 2板作为Central创建了一个特殊的应用程序,它只连接到DA14531,在保持连接活动的同时不做任何事情。在附件中有两张由Simplicity Studio Network Analyzer提供的图像。在这些图像中,设备90:FD:9F:7B:86:16是我的Central, DA:E4:D9:A6:F6:E9是DA14531。在名为Connection_parameters的映像上,您可以看到DA14531请求设置连接延迟5和监督超时1250ms,客户机接受了这些请求(参见事件详细信息窗口)。然后在图像Log2上,可以看到DA14531根据连接延迟工作,不响应连续的5个连接间隔。但是在138秒之后,在这个例子中,是一连串的数据包没有响应导致了中央的超视超时。我也看到这个原因(错误0x208)从我的中心设备的Tera-Term输出第3个图像。
从这些日志可以看出,在一段时间(2-3分钟)之后,DA14531无故停止响应连接事件。那么,Dialog,你为什么不修复你的软件呢?这种行为绝对是一个bug。您可以通过编译并将提供的源代码加载到两个模块或开发板中来轻松地说服自己。
好的,Dialog,我决定遵循您的建议,在文件user_codeless.c中的user_on_disconnect()函数中添加几个断点。事实证明,在断开连接后,您提供的代码不会进入这个函数。进一步的研究表明,模块在删除连接后会重置自身,如果在main()中添加了断点,代码就会停止。因此,我认为您需要为您的软件开发团队创建一张票。如果你要我做这件事,请给我指示。
Sergei Bezroukov嗨
你能不能在附带调试器的情况下运行它,并分享一个断开连接后代码卡住的截图?
设备从System-RAM还是SPI flash启动?
说实话,我有点困惑。您能在SmartConsole移动应用程序中复制这个问题吗?
在我这边,我无法复制它,而无代码运行得很完美。
谢谢,PM_Dialog
我在调试器中再次运行它,截图已附上。代码不会停留在任何地方,它只是重置模块,然后main()函数重新开始。您将在屏幕截图中看到它,它显示了在删除连接后调试器停止的位置。因此,模块已经准备好建立一个新的,如果我继续运行它,它就会工作。但新连接也会在大约3分钟后被丢弃。同样,在建立连接后,我不会与模块通信——只是让它空着。在我看来这是看门狗的行为。
我不使用任何(外部)闪光灯,只是一个裸模块连接到CP2104 USB转换器,见所附的图像,我不确定设备如何在内部引导。我只是为codeless_531_set_two_standalone编译了codeless_531_set_two_standalone的无代码软件(v6.380.10.4)映像,没有进行任何更改,并通过SWD接口将其加载到我的两个模块中。所以,它是根据软件中的算法启动的。每个模块的工作原理都是一样的,3分钟不活动后断开连接。
使用Android(三星Galaxy S8)上的SmartConsole应用程序作为客户端,也可以观察到同样的连接断开行为。还有什么要检查的吗?
后来添加的(重要的):我刚刚注意到,如果我向调试器下运行的模块发出ATI命令,响应是无代码DA14531 v_6.380.10.4这与我使用的SDK版本相匹配。但是,如果我现在在调试器断开的情况下重新启动模块,则对ATI命令的响应变为无代码DA14531 v_6.380.9.10(? ? ! !)也许这就是他行为不端的原因?
好吧,这些天我了解到,如果一个人从Keil内部(在degug模式下)编程模块和外部使用Dialog SmartBond Flash程序员,那么结果是不同的。也就是说,在用Flash程序员刷新我编译的代码后,它会显示正确的固件镜像版本DA14531 v_6.380.10.4无论您如何引导它(我的意思是在Keil的调试会话期间以及在断开JLink调试器的情况下)。所以,固件图像之间的不匹配后来添加的我上面的部分已经解决了。然而,3分钟后模块仍然会断开连接。只有我一个人有这种经历吗?
对话组:如果你的连接没有掉下来,你能把HEX的图片发给我吗codeless_531_set_two_standalone.hex这对你合适吗?
嗨谢尔盖,
你在大学里有BLE嗅探工具吗?我们想分享一个BLE捕获,这样我们就可以了解在空中发生了什么。这将真正帮助我们更好地理解根本原因。
是否可以将此问题复制到运行SmartConsole应用程序的其他手机上?你是不是只尝试过三星Galaxy S8?
谢谢,PM_Dialog
亲爱的对话框的团队!上面我已经提供了两个由不同的捕获软件和硬件收集的BLE捕获。其中一个是由Cypress csmart工具及其软件狗CY5677收集的,另一个是由Silicon Labs Network analyzer收集的。附件是另一个最详细的捕获由北欧半导体BLE适配器PCA10031和他们的Sniffer 3.0软件与Wireshark (v3.2.5)串联收集。附加的捕获涉及到两台设备(我的Galaxy S8手机运行SmartConsole和DA14531模块,MAC 48:23:35:00:07:AA),可以用Wireshark打开。在每一种情况下,我都让连接在建立之后处于空闲状态。这些都是我的BLE嗅探工具。
我在我妻子的另一部Galaxy S8手机、我的旧款Galaxy S5手机以及至少3部我作为主机使用的非手机BLE手机上复制了连接断开的问题。DA14531模块只是在主连接事件上停止响应,并重置自己(不过,我不确定哪个先来)。同样,只有在将codeless_531_standalone_set_two映像加载到模块中时,我才会遇到这种情况。与其他两个可用的预编译映像(codeless_531_datadump和codeless_531_standalone)的连接看起来很好,即3分钟后不会断开连接,除非我自己从提供的源代码编译它们。在后一种情况下,无论我编译哪个图像,连接下降都会出现。
我使用的预编译图像是由Dialog SmartBond Flash Programmer提供的。我要求你上面发送我的图像,你正在使用的测试。请这样做。另外,请在您的硬件上试用我所附的十六进制。
嗨谢尔盖,
我为混乱道歉-刚刚看到附加的嗅探日志。最后,我可以使用codeless_531_standalone_set_two复制它。十六进制和使用Flash编程工具。让我把问题升级到团队内部,我会尽快给你答复。
谢谢,PM_Dialog
嗨谢尔盖,
很抱歉回复晚了。我从团队内部得到了反馈,很快就会修复。一旦修复程序发布,我会在这个论坛帖子里告诉你。
任何其他关于无代码的评论/反馈都是非常欢迎的!
谢谢,PM_Dialog
谢谢你!我期待这些问题得到解决。
Sergei Bezroukov嗨
新的无代码软件版本6.380.12.6已经在线发布。现在可以从无代码门户网站下载:
//www.wsdof.com/雷电竞官网登录products/smartbond-codeless-commands
谢谢,PM_Dialog
谢谢对话团队。这个问题解决了。等待解决I2C问题……
嗨谢尔盖,
感谢您接受我的回答,并且很高兴新的无代码版本修复了这个问题。关于I2C问题,我会在你的其他论坛帖子中给你回复。
谢谢,PM_Dialog