蓝牙是一种工作在免费的ISM频段(2.4GHz)的短距离无线通信技术,在各种设备之间实现灵活、安全、低成本、低功耗的语音和数据通信。它采用自适应跳频(AFH)技术,可以和多种无线通信共存于ISM频段,与同用于短距离无线通信的Zigbee和UWB相比,蓝牙协议和标准更加完善,设备间一致性和互连通性好,而且以Profile的形式定义了具体应用的实现方式,从而保证了兼容性。一款成熟稳定的蓝牙产品的设计面临诸多技术上的挑战,结合自己设计一款车载蓝牙设备的开发经验,笔者从配对列表管理、连接管理、时钟设计三个方面讲下相关关键技术及开发。
连接机制分析
物理信道(physical channel)是蓝牙系统的最底层结构,通过伪随机跳频序列、发送时槽定时、接入码及帧头编码来表征。蓝牙针对不同应用定义了一系列物理信道,包括用于匹克网内设通信的匹克网物理信道、用于寻呼设备的寻呼扫描物理信道和用于查找设备的查找扫描物理信道。两台设备必须采用相同的物理信道才能进行通信。
主从设备建立连接的过程就是建立相同匹克网信道的过程,该过程确保主从设备以同样的定时和次序进行载波频率的跳变,进行数据传输,同时可以根据匹克网接入码和帧头编码进行数据过滤和解析,避免和其他设备在同一个频段上的相撞。
寻呼扫描物理信道(page scan physical channel)用于主设备寻呼从设备,是设备建立连接的必经阶段。寻呼扫描跳频序列和寻呼请求帧的设备接入码(DAC)是由从设备物理地址运算,处于可被连接模式的从设备以固定的周期(由page scan interval决定)在一个固定的时间窗(由page scan window决定)内以某个跳频频率监听主设备的寻呼请求。
自动连接
为了方便用户的使用,大多蓝牙设备都实现了自动连接功能,根据以上对蓝牙连接机制的分析,设计自动连接方案时必须考虑设备在不同的工作状态下采用不同的物理信道和跳频序列,而不能按照人为的逻辑随意设置,否则会给用户带来不便。
以车载免提装置为例,上电自动连接对驾驶员来说可以提高使用车载免提的自觉性,降低行车期间通话带来的风险。采用搜索方式判断设备是否在有效范围内,按照优先级从低到高连接,最后一次连接的手机为优先级最高的,然后按照配对列表的逆序而优先级依次降低。链路丢失后的自动连接只针对最后一部手机,这样可以实现服务的连续性。
时钟设计
蓝牙核心规范要求时钟频率精度为±20ppm,如果载波频率不稳定,则会发生“过零点”错误(zero-cross)。载波频率由本地时钟(晶振)做为PLL的参考时钟倍频产生。一般说来,蓝牙设备的时钟设计便是指晶振电路的设计及微调。
决定晶振工作精度的两个重要参数是制造公差和温度稳定度,如果选择有源晶振作为本地时钟,需要满足:制造公差+温度稳定度≤±20ppm,有源晶振内部集成晶体和相应的振荡电路,匹配精确,频率稳定性高,而且抗干扰性能好,缺点是成本较高。
图1 震荡电路设计
本文自行设计的振荡电路如图1所示。
选择温度稳定性高、制造公差低的高精度晶体,通过振荡电路设计实现谐振频率的精确调整,这是由晶体负载电容的匹配及可调实现的。负载电容是指CRY_IN和CRY_OUT两端的电容值,在晶体的CRY_IN引脚上并联一个可调电容,调整该电容便可以对谐振频率进行精密微调。晶体负载电容计算公式如下:
Cload=Cint+(Cin+Ctrim)×Cout/(Cin+Ctrim+Cout)
Cint包括IC内部电容(一般为固定值)以及PCB杂散电容(3pF~5pF)。
配对列表管理
为了保证链路级的安全,蓝牙通信要求设备在连接建立前进行“双向认证”。认证成功的前提是设备双方存储了相同的链路密钥Kab,配对是产生初始密钥Kint的阶段,Kint由PIN码、从设备蓝牙地址和主设备发给从设备的一个随机数由一套固定的算法计算出来,只要PIN码一致,主从设备生成的的Kint也是一致的。链路密钥的输入是主从设备的蓝牙地址和主从设备各一随机数,只要主从设备能互换随机数,便能得到一致的Kab。主设备将随机数RandA与Kint异或的结果发给从设备,从设备只将该结果与Kint异或便得到RandA,即
配对列表的管理包括添加、替代及删除,添加配对设备是在非易失性存储中存储该设备的蓝牙地址及Kab。删除配对设备需要谨慎处理,如果存在连接,需要先断开连接然后删除,因为如果删掉该设备而有一种应用的连接没有断开,会存在临时密钥用于当前应用,这时不经配对也可以连接上其他应用,违反了蓝牙安全性要求。
结语
一款成熟稳定的蓝牙产品开发需要在深入了解蓝牙协议栈的基础上不断完善应用程序,笔者从配对、连接和时钟设计三个方面论述了相关技术和开发要点,希望可以带来一些有益的借鉴。