说明:主要介绍两个方面的内容,一个是电源管理,一个是bcsp。实际上就是两个dll文件,通过这两个文件来介绍开发mobile下蓝牙驱动的相关技术。
同时介绍一下bcsp和bccmd协议
推荐文档: http://download.csdn.net/source/3461668
导出函数
1、PowerOn
开启电源,初始化硬件。
2、PowerOff
关闭电源,恢复硬件状态。
包含的源代码文件
1、bth_powerMgr.cpp
主要实现了btReset();btConfigPin();btPowerOn();btPowerOff();这几个函数,导出的函数的实现就是通过这几个函数来控制底层实现的。具体见流程图。
2、generic_debug_zones.cxx
是用来调试驱动,输出调试的信息。文件内部实现了DebugOutW();
DebugOutModuleW();DebugInitialize();DebugUninitialize();函数内部主要是通过使用临界区域实现同步访问共享区域,输出调试信息。
实现流程
1、Dll文件调用整体示意图
2、PowerOn实现流程
3、PowerOff实现流程
4、调试信息说明
当系统创建进程调用此dll时,会调用generic_debug_zones.cxx文件中的DebugOutW();DebugInitialize();函数,打出调试信息,可以通过串口观察;当系统销毁进程的时候,会调用DebugUninitialize();来恢复相应参数的值。
简介
Bcsp全名:BlueCore Serial Protocol。这个协议是用来通过高度可靠的串口连接传输数据流集的。设计这个协议栈是为了在蓝牙主机和蓝牙主机控制器之间进行数据传输。这个协议也是为了支持HCI协议和其他协议。
Bcsp被用于CSR BlueCore 主机控制器,同时,CSR也提供了更多的硬件来支持协议栈的更多的功能。
语义
Bcsp被用来控制和安排蓝牙主机和蓝牙主机控制器之间的信息流,如下图所示。协议栈在一个UART连接上承载着两台主机之间双向的信息流交互。
Bcsp向上提供了两种服务:一种是双向可靠数据报服务,一种是双向不可靠数据报服务。上层的协议也可以建立在这两种数据报服务之上。
综述
上图是bcsp的元素的综述图。下面就从下到上进行说明:
l UART驱动层初始化并控制本地的UART,将物理层串口连接的字节流翻译成基于SLIP层的字节流给连接的主机。
l SLIP层用串口连接网络协议将字节流转换为数据报流
l 完善数据报层确保从SLIP层接收的数据报是完整的
l MUX层将收到的数据报交给Sequecing层或者Datagram Queue层。MUX层也会用一个标识来表示最后成功收到数据报的时间
l Sequecing层利用窗口机制提供双向可靠的数据报流的交互,上层会用协议的一个标识值将数据报交给下面。
l Datagram Queue层提供双向不可靠的数据报流的交互,上层会用协议的一个标识值将数据报交给下面。
简介
命令解释器协议(BlueCore Command),允许一个蓝牙主机上的软件实体监控蓝牙芯片,因此,这个协议逻辑上是在HCI通道上的协议。虽然BCCMD协议是特定芯片命令和记录数据的通道之一,但是这个协议有时候被称为芯片的私密通道。这个协议一般是载在BCSP通道上的,虽然也可以选着其他的通道。
语义
1、标准语义
BCCMD协议允许一台主机监控自己的BlueCore芯片。下面的图显示了作为bcmgr(BlueCore manager)进程和芯片响应固件bccmd(BlueCore commandinterpreter)进程的实体图。
2、HCI 通道语义
最早的BlueCore芯片只通过BCSP连接自己的主机。后来的版本也允许用标准的USB和H4 HCI接口作为可选的BCSP。如果BCSP不备用,那么标准的BCCMD语义就不起作用。
最直接的解决办法是用指定经销商的扩展的指令或者事件集将BCCMD传给HCI。这种方法对通过USB、H4、BCSP和3线串口作为物理传输是有效的。
3、芯片命令缓冲区语义
BlueCore芯片的串口外围设备接口(SPI)可以给予主机直接的访问处理器的权利。
一种访问bccmd的方法是允许主机直接写命令给内存缓冲区,并且触发这个命令。协议的本质是允许只用一个内存缓冲区同时为命令和响应服务。
这种语义的主要价值是用来开发调试,也就使得变bcmgr将成为系统配置或者调试的工具之一。
导出函数
1、HCI_ReadHciParameters
读取HCI相关变量参数值
2、HCI_StartHardware
开启硬件并检测是否存在蓝牙设备
3、HCI_StopHardware
关闭硬件并检测是否有蓝牙设备连接
4、HCI_SetCallback
回调函数,用于检测蓝牙设备
5、HCI_OpenConnection
打开连接,初始化硬件
6、HCI_CloseConnection
关闭连接,恢复硬件参数
7、HCI_ReadPacket
读取数据包
8、HCI_WritePacket
写数据包
9、BCS_Init
返回一个初始化的句柄
10、 BCS_Deinit 空接口
11、 BCS_Open 返回一个句柄
12、 BCS_Close 返回一个句柄
13-16空接口
13、 BCS_Read
14、 BCS_Write
15、 BCS_PowerUp
16、 BCS_PowerDown
17、 BCS_IOControl
根据相应的参数执行相应的操作(复位、获取pskey等)
包含的源代码文件
1、hci_bcsp.cpp
主要是实现以HCI开头的导出的函数
2、hci_bcsp_driver.cpp
主要是实现以BCS开头的导出的函数,其他提供接口,只是实现了BCS_IOControl函数和一些进行初始化的函数
3、hci_bccmd.cxx
处理命令的相关函数
4、hci_sniffer.cpp
主要是实现文件的初始化,写和文件的关闭
5、generic_debug_zones.cxx
是用来调试驱动,输出调试的信息。文件内部实现了DebugOutW();
DebugOutModuleW();DebugInitialize();DebugUninitialize();函数内部主要是通过使用临界区域实现同步访问共享区域,输出调试信息。
实现流程
1、整体流程
2、读线程
3、写线程
总结
本文简单地介绍了CSR_BlueTooth_Driver的实现流程以及其中用到的bcsp协议。具体细节可以参看已经注释好的源代码和bcsp协议文档。