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

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

嗨,让我先说这是一个真正的难题,因为我的定制设备和我的服务几乎在任何地方都能工作,只有一个例外。

这是我的情况:

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

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

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

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

因此,我认为我已经认识到,只有当固件在我的定制设备上运行时,才会发生这种情况。所以问题变成了,如果它在我的设备中,那么为什么它只会影响这个特定的安卓模式和它的安卓操作系统的味道呢?

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

谢谢,klim

MT_dialog
离线
最后看到:7个月1个星期前
工作人员
加入:2015-06-08 34
嗨klim9531,

嗨klim9531,

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

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

最让我烦恼的是,当这项服务启用时,手机根本无法扫描设备,我理解对了吗?

我会做什么,是专注于任何差异数据emmited从开发工具和定制的设备(任何数据在开发工具上设置但不是定制板上),例如,你试过使用不同的bd地址(据我所知日本村田公司模块的OTP头燃烧设备id字段,它不应该影响任何事情,但你可以给它一个尝试-大胆的猜测你说)。我也明白,这里描述的调试过程很长,很容易发生错误,所以我将状态明显,自从android缓存的数据服务和特色,你试图消灭手机上的android缓存有问题?此外,来自发现过程的嗅探器日志将有助于检查正在发生的情况。

由于MT_dialog

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

嗨MT_Dialog,

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

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

根据我对Android操作系统工作方式的理解,关闭设备将清除BLE设备的任何缓存数据。我不知道在操作系统运行时还有什么其他方法可以“清除缓存”。因为我只是使用第三方应用程序(蓝牙LE扫描仪)来扫描任何设备,它应该会返回任何结果广告。当我使用Dialog或Murata开发工具包时,它确实做到了这一点。

我将看看我是否能找到如何把一个嗅探日志,我没有BLE包嗅探器,但似乎我看了嗅探设备一段时间后,他们是相当便宜的。我只是从来没有真正需要过。

谢谢,klim

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_dialog
离线
最后看到:7个月1个星期前
工作人员
加入:2015-06-08 34
嗨klim9531,

嗨klim9531,

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

向MT_dialog致意