TI中文支持网
TI专业的中文技术问题搜集分享网站

Android手机升级后不能发现CC2541

官方库  BLE-CC254x-1.4.2.2

例程     SimpleBLEPeripheral

手机   华为荣耀7x

手机系统 升级到Android 8.0

现象:

      1、在Android未升级前,打开nRF Connect可扫描到CC2541,Android升级后,nRF Connect不能扫描到CC2541,但在IOS上使用nRF Connect可以扫描到。

       2、将升级后的Android手机打开nRF Connect,并等待很长时间后,偶尔也有发现CC2541的现象,但需要等待的时间较长。

       3、使用IOS的nRF Connect模拟发出广播报文,升级后的Android手机可以正常接收到报文。

已经排查:

       1、已经排查广播包PDU长度不对,导致的Android 8.0不能发现的问题,确认应该不是该问题导致。

        2、程序中所有参数和设置均为例程中给出,未修改。

Viki Shi:

参考下这边的类似问题,扫描应答数据的长度问题: e2e.ti.com/…/687468

user3880898:

回复 Viki Shi:

Hi , Viki Shi我检查了扫描应答数据的长度,是符合要求的。我也尝试修改应答数据到更小的长度,仍然不能被手机发现。

Viki Shi:

回复 user3880898:

查一下安卓8.0升级的release note,看看对蓝牙这块的参数是否有改动

user3880898:

回复 Viki Shi:

Hi, Viki Shi

我查看的安卓8.0的release note,其中蓝牙最初接收扫描数据时,将不再有长度限制,描述如下:

———————————————————————————安卓8.0行为变更—————————————————————————————-

Android 8.0 对 ScanRecord.getBytes()函数检索的数据长度做出以下变更:

getBytes() 函数对于所接收的字节数不作任何假定。因此,应用不应受所返回的任何最小或最大字节数的影响。相反,应用应当计算所返回数组的长度。
兼容蓝牙 5 的设备返回的数据长度可能会超出之前最大约 60 个字节的限制。
如果远程设备未提供扫描响应,则也可能返回少于 60 个字节的数据。

————————————————————————————————————————————————————————————————-

因而我猜测CC2541实际发出的数据除了程序中设置的GAPROLE_ADVERT_DATA外,还有其他数据,导致Android后期处理数据时引发异常。

我通过Packet Sniffer抓包发现,CC2541发出ADV数据后,安卓并没有返回对应的Request包,所以有上面的猜测

赞(0)
未经允许不得转载:TI中文支持网 » Android手机升级后不能发现CC2541
分享到: 更多 (0)