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

5个职位/ 0个新职位
最后一篇文章
克里姆9531
离线
最后看到: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设备或我的应用程序,但以下是我不能责怪的原因:

(这很难理解,我一直认为我已经找到了问题的根源,但结果却被证明是错误的,所以在你也得出结论之前,请仔细阅读两遍)

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

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

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

谢谢-克里姆

MT_dialog
离线
最后看到:7个月1周前
工作人员
加入:2015-06-08 11:34
嗨,克里姆9531,

嗨,克里姆9531,

我看不到任何逻辑解释,也看不到为什么硬件会影响运行特定fw的特定android手机上您设备的服务,请允许我重述一下,为了弄清楚这一点,只有在使用以下设备时才会出现问题(设备根本不可见):

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

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

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

由于MT_dialog

克里姆9531
离线
最后看到: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

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

嗨MT_Dialog,

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

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

所以我停止了SUOTA应用程序,切断了两台定制设备的电源,并试图重复这个过程。在一点也没有成功之后,我发现关键在于“拿起”我的定制设备,并将其保持在与Android测试设备一定距离的特定方向上。在能够在某种程度上始终如一地再现这种行为之后,我能够拼凑出必须发生的事情。

1.这些Android测试设备的传输/接收范围非常短,我测试过的所有其他Android/iOS设备都可以在大约100米的范围内执行双向通信。
2.我的定制设备的发送/接收范围也比理想的要短,比开发工具包的要小。Murata为我的芯片编写的文档声称“理论范围”为30米,然而,在使用我的定制设备进行测试时,我发现其范围约为5-10米。
3.这个Android测试设备的极短范围,再加上我的定制设备的范围比DA-14580DK和Murata开发工具包要短,导致我的设备根本看不见,除非我把它放在Android测试设备旁边。

谢谢你的帮助,我现在有我的答案了--克里姆

MT_dialog
离线
最后看到:7个月1周前
工作人员
加入:2015-06-08 11:34
嗨,克里姆9531,

嗨,克里姆9531,

很高兴你找到了,谢谢你让我们知道。

MT_dialog问好