星期六, 19 12月 2020 21:13

QUALCOMM QCC蓝牙系列量产必备:蓝牙名称存储结构异同

这次我们介绍下QUALCOMM QCC300X 蓝牙名称存储结构与QCC512x_302X存储结构异同。

1QCC300X的蓝牙名称

QCC300X蓝牙名称修改要用 PSkey,而QCC512x_302X 没有明显的PSkey可供修改,这是其不同点。

 Bluecore内部有些配置寄存器,称为PSKEY,这些寄存器不可随意更改,当然也有些是可以自定义修改的。量产时经常在ADK  Application 中修改,用Pstool 可以查看到名称值

QCC300X蓝牙名称的PSkey

本地设备的“用户友好”名称

PSKey保存本地设备的默认“用户友好”名称,HCI Read_Local_NameChange_Local_Name命令和LMP_name_req/LMP_name_res事务使用该名称。

当固件启动时,设备名称从这个PSKey中提取。但是,如果本地主机通过调用HCI Change_Local_Name命令更改了本地设备的名称,那么新名称将保存在RAM中。随后读取设备名称的请求从RAM存储,而不是从这个PSKeyPSKey的值只有在固件重新启动后才会再次可见。

蓝牙v1.1 HCI规范要求设备的默认名称为“”;一个空字符串。这个PSKey的默认值(psrom)是“CSR - bc3”或类似的。因此,psrom值不符合HCI规范。如果这个PSKey被设置为不持有任何东西,也就是说,PSKey下没有存储uint16,那么HCI的默认值就会被获取。

HCILMP中,名称以UTF-8字节序列传递。因为PS将数据存储在uint16s数组中,所以名称被打包在这个PSKey中,每个uint16包含两个八位字节。这种包装是重要的,当PS存储是小的,特别是在那里的PS是在EEPROM中举行。

从设备名称开始工作,第一个字符存储在PSKey的第一个uint16的下八位体中,第二个字符存储在第一个uint16的上八位体中,以此类推。如果名称是奇数字符,那么最后一个uint16的上八位元是'\0'

这个PSKey最多可以保存20uint16,将默认设备名称限制为40个字节。这个PSKey中的行为是未定义的,它包含超过20uint16(此大小约束不适用于通过HCI Change_Local_Name命令写入的名称。)

BlueCore3芯片的默认名称是“CSR - bc3;当打包时,它变成{0x5343, 0x2052, 0x202d, 0x6362, 0x0033}

这个PSKey(HCI) 18中使用。X版本。HCI 17X和早期的构建使用PSKEY_LOCAL_NAME0 -> PSKEY_LOCAL_NAME17PSKEY_LOCAL_NAME_LENGTH

查看 4232
麻喆

专栏编辑