TA的每日心情 | 开心 2019-11-20 15:05 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
BlueCore2型模块及其HCI传输驱动的实现 % D5 E8 h" w) j. b. U! a# b5 R
) Q; C% ?% u: [: n1 引言
# ~" `! z5 x1 I9 ]" u) ~5 w# n8 T3 v8 `5 |
蓝牙技术是一种短距离无线通信技术。遵循开放系统互联参考模型(OSI/RM),采用分层的协议栈。主机控制接口(HCI)位于蓝牙协议栈的L2CAP(逻辑链路控制与适配协议)层和LMP(链路管理协议)层之间,是蓝牙协议栈中软件与硬件的接口。它为上层软件调用下层(基带和链路管理层)状态寄存器和控制寄存器等硬件提供了统一的指令接口。蓝牙设备高层软件和底层硬件模块接口之间的消息和数据传递必须通过蓝牙主机控制器接口的解释才能进行。HCI以上的协议软件实体运行在主机上,而HCI以下的功能由蓝牙模块来完成,二者之间通过传输层进行交互传输数据。
" c. m" z! |5 n' f$ T5 c; H2 BlueCore2-external的特点及结构
" R& K: a8 O' U/ _ S BlueCore2-external[1]是英国CSR公司推出的基于蓝牙技术的收发电路。工作在2.4GHz的ISM(工业、科学、医学)频段,主要应用于PC、无线手机、PDA、鼠标、键盘、数码相机等。其主要特点如下:! r' E6 \5 L9 H) [+ D4 E8 `" c
工作电压为1.8V;( _; `8 a9 B. J; s( h9 A& A
完全和别的蓝牙器件匹配;# ^' y/ e) Z$ G |
采用0.18μm CMOS工艺;
4 B9 Y4 |6 _. H( ?; A, U 支持8Mb的外围FLASH;
7 q2 @9 o$ E h# t, K4 Y& o5 f 外围元器件较少。
' T( F. z, [- i 该电路集成了蓝牙协议栈的射频和基带部分,具有SPI、UART、USB、PIO、PCM接口。其中,SPI、UART、USB接口主要用来传输数据; PIO接口为可编程接口 ; PCM接口用来传输语音。在BlueCore2-External中UART接口的较大传输速率为1.5Mb/s,能够达到蓝牙标准中规定的723.2kb/s的数据传输速率。其内部结构如图1所示。 ? & G7 Y$ E1 y5 y+ l/ g& p+ x D0 S
3 硬件电路设计
, {7 V5 D1 b5 u: { 系统的硬件组成如图2所示。串口收发器采用常用的MAX232ACPE,完成BlueCore2与9针串口之间的电平转换。串口和主机相连,主机可以是PC、ARM或单片机。这里为PC上的串口。蓝牙模块为主机控制器。这样,蓝牙主机可以和蓝牙主机控制器之间实现通信。
. R* C$ W5 `6 u. _7 T. w?![]()
9 {0 e9 e2 t: q4 [6 ], N* i4 HCI接口分析8 y- O) y* K( X5 U9 d
HCI通过分组的方式传输数据(Data)、命令(Command)和事件(Event)[2],所有主机和主机控制器之间的通信都以分组的形式进行。在HCI分组中。数据分组是双向的,命令分组只能从主机发往主机控制器,事件分组只能从主机控制器发向主机。主机发出的大多数命令分组都会由主机控制器产生相应的事件分组作为响应。$ J& z( H* Q6 |( e4 L3 \. Q( v
蓝牙标准定义了3种类型的HCI传输层[3] :USB、RS232及UART。笔者提出了存在于HCI和UART之间的层-HCI传输驱动层,它的上层为HCI层,下层为UART驱动层,实现HCI和UART之间的数据传输。* d* n Y- \; S
蓝牙HCI接口、蓝牙主机及蓝牙主机控制器之间的协议栈层次[3]如图3所示。蓝牙主机控制器即BlueCore2模块集成了蓝牙协议栈的射频、基带和链路管理部分。蓝牙模块通过UART硬件连接到蓝牙主机。在蓝牙主机中运行蓝牙UART驱动程序、HCI传输驱动程序、HCI的API函数及上层协议栈。2 p" {) A" H ~4 j* ^
j9 p: M2 E" D% [" P7 n+ F
5 程序设计与实现[4]( T) @! j M6 [& r5 J* b
在发送数据阶段,HCI传输驱动层负责把由上层传输过来的HCI数据包传给UART驱动层,然后通过UART驱动层把数据传输到蓝牙主机控制器。在接收数据时,HCI传输驱动层的作用正好相反。
9 ?3 r( ], S- q5 f+ ?! F# U0 G: o' \ 在驱动程序的设计中,把传输状态分为空闲态、传输类型态、传输头态和传输数据态。HCI数据发送时根据传输状态来判断在哪一状态。发送的数据包由类型字段、头字段和数据构成。在发送数据阶段,数据传输的类型字段标志传输的是命令、ACL数据还是SCO数据,然后根据发送的类型来确定发送头字段的长度,较后再发送数据。在接收数据阶段,数据传输的类型字段标志传输的是事件、ACL数据还是SCO数据。不同的是在接收数据阶段需要缓冲来接收数据。HCI传输驱动程序的数据结构如下所示:
- }) c! u. Q3 H8 `1 O$ k4 v% _ ![]()
' u9 o5 k8 a0 W% |9 F 在发送流程中,先对发送的状态、看门狗、UART等初始化。使其处在待发送数据状态。具体的发送流程如图4所示。
& a; U8 S. D4 p" R& \$ n?![]()
0 H5 O- B7 A7 |1 J9 M$ G1 t# B 接收流程和发送流程类似,所不同的是需要缓冲来接收,在此不再赘述。* y# q# K8 F- o0 M$ n2 B( M
本文主要解决了存在于蓝牙UART和HCI层之间的HCI传输驱动问题,给出了硬件设计方案、协议栈框架图和程序流程,实现了蓝牙模块和蓝牙主机之间的数据传输,在无线传输中有较好的应用价值。) L* b/ L; {4 e& ~( h4 a; |( t
4 ~; J m- K: _7 s9 u; Y
% T3 s1 [2 U: ^! N7 W$ c" r7 W1 @
|
|