本帖最后由 Simon21ic 于 2015-6-12 02:54 编辑
之前的wifi协议栈很顺利的推倒了,下一个挨到蓝牙了,纪录一下进度,也顺便简要说明一下代码。
蓝牙协议栈是否开源还没想好,估计应该不会开源,毕竟现在现成的不多。不过蓝牙技术本来就是公开的,我就结合我们的协议栈的代码片段,说明一下蓝牙协议栈内部是如何运行的。
当然,我并没有做过蓝牙的应用,这些东西,也只是我一周时间,看了协议和一些代码,大致了解的。
先说明一下软硬件平台吧:
从未公开的VersaloonPro3硬件,stm32f103zg处理器,通过接口扩展,外接BCM20702 HCI蓝牙模块(不过也可能使用其他HCI的蓝牙模块)。
有过蓝牙经验的人,可能看到不少坑了吧。没错,BCM20702,没有任何官方的支持,没有任何文档,到处都是坑。
不过,比起wifi来说,至少知道这个是HCI的标准,芯片初始化脚本,就直接截取数据获得了。
软件平台无可争议的使用自己的VSF平台,事件驱动构架,协作式多任务内核,基本的IPC机制等等。基本类似一个小型操作系统了,flash占用根据配置300-600字节左右,定时器管理占用200多字节。
面向对象的C语言代码,如果熟悉linux代码,应该更加容易上手。芯片驱动抽象层,使得不管用啥芯片,应用代码基本上是一样的。
小补一下蓝牙,协议栈里的部分
就协议栈而言,蓝牙协议栈的底层是HCI以及各个transport的驱动。HCI是蓝牙定义的主控芯片和蓝牙芯片之间的接口协议,主要定义了4种数据:
1. SCO 面向连接的数据,一般是蓝牙音频使用的
2. ACL 无连接的数据,大部分其他的协议都用这个,高层是L2CAP
3. 命令报文
4. 事件报文
命令报文和事件报文有茫茫多。。。。。。一般一个命令的,对应一个STATUS报文和一个COMPLETE报文。
HCI上面是L2CAP层,L2CAP是逻辑链路管理以及协议适配。数据流上,是高层的SDU(Service Data Unit)和底层的PDU(Protocol Data Unit)之间的处理层,处理包括分段和重组、流控、最关键的逻辑通道管理等。底层的通路就只有ACL一条,L2CAP在这个上面实现了逻辑通道。当然,按照蓝牙协议文档,还有很多内容,不过一开始也没准备支持,就不多说了。
L2CAP上面,我们会做SDP、RFCOMM和HID,SDP是服务发现协议,用于得到蓝牙设备的服务查询的。RFCOMM是模拟多通道的串口的协议。蓝牙的HID基本是山寨USB的HID。
另外,RFCOMM上面,只会跑一个简单的SPP(Serial Port Profile)。
等周末为兼职人员培训好后,就会开始HCI层的开发,这个等到时候在继续。
|