蓝牙LE扫描只有在我的定制设备上运行时才会发现我的服务。

5个员额/0个新员额
最后发表
klim9531
离线
最后一次见到:4年10个月前
加入:2015-01-28 23:52
蓝牙LE扫描只有在我的定制设备上运行时才会发现我的服务。

嗨,首先让我说,这是一个真正的树桩,因为我的自定义设备与我的服务是工作几乎无处不在,只有一个例外。

我的情况如下:

我有一个我设计的定制设备,它使用Murata LBCA2HNZYZ芯片(这实际上只是一个Dialog DA14580,已经被放入一个包含天线的包中)。供您参考,Murata芯片是一个很好的解决方案,可以加快您的设计通过FCC/CE认证的障碍,因为它已经盖章批准。不管怎么说,这款设备的功能并不重要,但它可以连接到我编写的智能手机应用程序(包括iOS和Android)。这两个应用程序都运行良好,我可以连接到我的自定义设备和发送/接收数据没有任何问题,我已经使用各种设备进行了测试。对于iOS系统,我的设备是iPad2, iPhone4S, iphone6,运行的操作系统从7.1到9。在安卓系统中,我测试的设备是三星(Samsung)和摩托罗拉(Motorola),运行操作系统4.4、5.1和6.0。所以我觉得我的应用/设备已经准备好进入开放市场了。直到昨天,哈。

有一款Android设备发现我无法连接到我的定制设备。我想要责怪Android设备或我的应用,但以下是我不能责怪的原因:

(这很难理解,我一直在想,我已经找到了问题的根源,但却被证明是错误的,所以在你下结论之前,不妨先通读两遍)

-我可以访问运行OS5.1的几个相同的Android设备,它们的响应都是相同的(当我扫描时没有找到BLE设备)。所以它不是一个单一的“坏”单元,它在这个安卓模型上是一致的。这是我的应用程序吗?不,因为,;
-在这些Android设备上,我可以使用免费的Android应用程序“蓝牙LE扫描仪”,它也看不到我的设备。那么,究竟是这款Android设备,还是其“风格”的OS 5.1?不,因为;
-如果我关闭我的自定义设备,然后连接DA14580 Dev工具包到我的PC,然后启动调试会话,现在我可以看到我的服务在任何那些Android设备上,使用“蓝牙LE扫描仪应用程序”。因此,这似乎消除了Android设备作为问题的根源。我用的是村田芯片吗?不,因为;
-如果我断开DA14580开发工具包的连接,现在连接我的Murata开发工具包(P2ML3078)并启动调试会话,我可以再次看到我的服务。这一点非常重要,因为它消除了村田芯片本身以及村田可能对DA14580芯片进行的任何可能的OTP修改。那么这是我的固件中的一些东西吗?我不这么认为,因为;
-记住,上面所有的调试会话都在使用我在自定义设备上运行的相同的项目固件。唯一的区别是,对于我的定制设备,我实际上是从外部闪存芯片启动的。所以我的设备使用引导加载程序从闪存芯片获取固件,但它运行的代码是相同的。记住,固件正在做它应该做的事情,因为我可以用各种其他智能手机扫描/连接它。
-最后一件事;失败扫描(当我的设备不在Bluetooth LE Scanner中显示时)的日志实际上与成功扫描(设备确实显示)的日志相同。如果有帮助,我可以在这里包括日志,但我真的不认为它们揭示了任何东西。

所以我认为我已经认识到这个事实,那一定是只有当固件在我的定制设备上运行时才会发生的事情。所以问题就变成了,如果它是我的设备中的东西,那么为什么它可能只影响这个特定的Android模型和它的Android操作系统的味道?

任何人可能拥有的任何见解(甚至胡乱猜测)都是绝对受欢迎的,特别是如果我忽略了一些显而易见的事情。如果有,请告诉我

谢谢,klim

设备:
MT_对话框
离线
最后一次见到:7个月1个星期前
工作人员
加入:2015-06-08 34
嗨klim9531,

嗨klim9531,

我不这背后看到任何合理的解释或者为什么hw应该影响你的设备的服务特别的android手机上运行特定的弗兰克-威廉姆斯,让我回顾一下为了得到这个直,问题只发生(设备是不可见的)当使用:

  • 您的自定义hw设备。(当你使用开发套件时,正在测试的手机能够正常工作)
  • 启用自定义服务时。
  • 在特定手机设备上运行的特定android版本5.1上。

最让我困扰的是,当服务启用时,手机根本无法扫描设备,我理解正确了吗?

我要做的是,关注从开发工具包和定制设备(在开发工具包上设置但不在定制板上的任何数据)发送的数据之间的任何差异,例如,您是否尝试使用不同的bd地址(据我所知,Murata模块的OTP头与设备id字段一起被烧掉,这不应该影响任何事情,但你可以尝试一下——你说的疯狂猜测)。另外,我知道您在这里描述的调试过程相当长,因此很容易出错,因此我将陈述一个显而易见的事实,因为android缓存了来自服务和特性的数据,您是否尝试清除存在问题的手机上的安卓缓存?以及发现过程中的嗅探日志e将帮助检查正在发生的事情。

谢谢你的对话

klim9531
离线
最后一次见到:4年10个月前
加入:2015-01-28 23:52
嗨,MT_Dialog,

嗨,MT_Dialog,

谢谢你的帮助,我真的很感激你的“胡乱猜测”。你上面的要点完全正确。你给了我一个关于第2项的好主意——我已经将SUOTA服务集成到我的设计中,目前它正在工作(主要是由于几个月前你的帮助——再次感谢你!)。因此,我将把Dialog SUOTA应用程序下载到测试手机上,看看它是否能看到我的设备运行该服务。我会在这里报告结果。

我不知道村田开发套件中设置的任何数据与我定制的PCB上的数据有什么不同。村田开发套件P2ML3078有几个可以购买的子卡,这些子卡只不过是一种简单的方法,可以交换对话DA14580的各种村田包变体。可能村田开发套件P2ML3078我女儿卡上的ta芯片发送的数据与他们实际销售的村田芯片不一样,但这似乎不太可能。BD地址被烧录到村田OTP报头中,这样会有所不同,但这不重要。

据我所知,安卓操作系统的工作方式是,关闭设备电源将清除所有关于可编程设备的缓存数据。在操作系统运行时,我不知道还有什么其他方法可以“清除缓存”。而且,因为我只是使用第三方应用程序(蓝牙LE扫描仪)扫描任何设备,这应该会返回任何产生的广告。当我使用Dialog或Murata开发工具包时,它就是这样做的。

我会看看我是否能找到如何建立一个嗅探器日志,我没有一个BLE数据包嗅探器,但似乎我不久前看过嗅探器设备,它们非常便宜。我只是从来没有真正需要其中一个。

谢谢,克里姆

klim9531
离线
最后一次见到:4年10个月前
加入:2015-01-28 23:52
嗨,MT_Dialog,

嗨,MT_Dialog,

我有一个更新,我想我发现了问题:

--我下载了SUOTA应用程序并运行了它,当我在DA-14580开发工具包上运行固件时,我首先测试了我是否能够看到SUOTA服务。是的,我能够看到它(到目前为止,事情就像我前面描述的那样)。
所以现在我将电池连接到我的定制设备上并打开它,然后再次运行SUOTA应用程序并按下“扫描”。我惊讶地看到我的服务出现了,拿起我的定制设备按下了按钮。在我的定制服务中,按下按钮通常会改变广告数据,这是我将应用连接到特定设备/BD地址的方法——对于SUOTA服务来说,按下按钮并不重要,但我正在进行试验。无论如何,当我拿起我的定制PCB时,我碰巧把它带到了离Android测试设备大约6英寸的地方。突然间,我的设备名称的另一个实例出现在了SUOTA应用的扫描列表中。它们有不同的BD地址,我花了一些时间才意识到我没有从我的PC上断开DA_14580 Dev工具包——它仍然在运行上次测试。这就是为什么我看到了我的设备的两个实例。
但最重要的是,我现在看到我的自定义设备出现在Android测试设备上了!

所以我停止了SUOTA应用程序,关闭了这两款自定义设备的电源,并尝试重复这个过程。在一段时间没有任何成功后,我发现关键是“拿起”我的定制设备,并在一定的方向手持它,与Android测试设备保持一定的距离。在能够某种程度上一致地复制这种行为之后,我就能够拼凑出一定会发生的事情。

1.这些Android测试设备的传输/接收范围非常短,而我测试过的其他所有Android/iOS设备的双向通信范围约为100M。
2.我的定制设备的发射/接收范围也比理想的短,比Dev套件的短。Murata的文件称我的芯片的“理论范围”是30M,然而,在用我的定制设备测试时,我发现它的范围大约是5-10M。
3.这个Android测试设备的范围非常短,加上我的定制设备的范围比DA-14580DK和Murata Dev工具包更短的事实,导致我的设备只是不被看到,除非我把它literally RIGHT NEXT TO The Android测试设备。

谢谢你的帮助,我现在有我的答案了。——klim

MT_对话框
离线
最后一次见到:7个月1个星期前
工作人员
加入:2015-06-08 34
嗨klim9531,

嗨klim9531,

很高兴你找到了,谢谢你告诉我们。

MT_dialog问好