BlueCore2型模塊及其HCI傳輸驅動的實現
發布時間:2007/4/23 0:00:00 訪問次數:626
1 引言
藍牙技術是一種短距離無線通信技術。遵循開放系統互聯參考模型(OSI/RM),采用分層的協議棧。主機控制接口(HCI)位于藍牙協議棧的L2CAP(邏輯鏈路控制與適配協議)層和LMP(鏈路管理協議)層之間,是藍牙協議棧中軟件與硬件的接口。它為上層軟件調用下層(基帶和鏈路管理層)狀態寄存器和控制寄存器等硬件提供了統一的指令接口。藍牙設備高層軟件和底層硬件模塊接口之間的消息和數據傳遞必須通過藍牙主機控制器接口的解釋才能進行。HCI以上的協議軟件實體運行在主機上,而HCI以下的功能由藍牙模塊來完成,二者之間通過傳輸層進行交互傳輸數據。
2 BlueCore2-external的特點及結構
BlueCore2-external[1]是英國CSR公司推出的基于藍牙技術的收發電路。工作在2.4GHz的ISM(工業、科學、醫學)頻段,主要應用于PC、無線手機、PDA、鼠標、鍵盤、數碼相機等。其主要特點如下:
工作電壓為1.8V;
完全和別的藍牙器件匹配;
采用0.18μm CMOS工藝;
支持8Mb的外圍FLASH;
外圍元器件較少。
該電路集成了藍牙協議棧的射頻和基帶部分,具有SPI、UART、USB、PIO、PCM接口。其中,SPI、UART、USB接口主要用來傳輸數據;PIO接口為可編程接口;PCM接口用來傳輸語音。在BlueCore2-External中UART接口的最大傳輸速率為1.5Mb/s,能夠達到藍牙標準中規定的723.2kb/s的數據傳輸速率。其內部結構如圖1所示。
3 硬件電路設計
系統的硬件組成如圖2所示。串口收發器采用常用的MAX232ACPE,完成BlueCore2與9針串口之間的電平轉換。串口和主機相連,主機可以是PC、ARM或單片機。這里為PC上的串口。藍牙模塊為主機控制器。這樣,藍牙主機可以和藍牙主機控制器之間實現通信。
4 HCI接口分析
HCI通過分組的方式傳輸數據(Data)、命令(Command)和事件(Event)[2],所有主機和主機控制器之間的通信都以分組的形式進行。在HCI分組中。數據分組是雙向的,命令分組只能從主機發往主機控制器,事件分組只能從主機控制器發向主機。主機發出的大多數命令分組都會由主機控制器產生相應的事件分組作為響應。
藍牙標準定義了3種類型的HCI傳輸層[3]:USB、RS232及UART。筆者提出了存在于HCI和UART之間的層-HCI傳輸驅動層,它的上層為HCI層,下層為UART驅動層,實現HCI和UART
之間的數據傳輸。
藍牙HCI接口、藍牙主機及藍牙主機控制器之間的協議棧層次[3]如圖3所示。藍牙主機控制器即BlueCore2模塊集成了藍牙協議棧的射頻、基帶和鏈路管理部分。藍牙模塊通過UART硬件連接到藍牙主機。在藍牙主機中運行藍牙UART驅動程序、HCI傳輸驅動程序、HCI的API函數及上層協議棧。
5 程序設計與實現[4]
在發送數據階段,HCI傳輸驅動層負責把由上層傳輸過來的HCI數據包傳給UART驅動層,然后通過UART驅動層把數據傳輸到藍牙主機控制器。在接收數據時,HCI傳輸驅動層的作用正好相反。
在驅動程序的設計中,把傳輸狀態分為空閑態、傳輸類型態、傳輸頭態和傳輸數據態。HCI數據發送時根據傳輸狀態來判斷在哪一狀態。發送的數據包由類型字段、頭字段和數據構成。在發送數據階段,數據傳輸的類型字段標志傳輸的是命令、ACL數據還是SCO數據,然后根據發送的類型來確定發送頭字段的長度,最后再發送數據。在接收數據階段,數據傳輸的類型字段標志傳輸的是事件、ACL數據還是SCO數據。不同的是在接收數據階段需要緩沖來接收數據。HCI傳輸驅動程序的數據結構如下所示:
在發送流程中,先對發送的狀態、看門狗、UART等初始化。使其處在待發送數據狀態。具體的發送流程如圖4所示。
接收流程和發送流程類似,所不同的是需要緩沖來接收,在此不再贅述。
本文主要解決了存在于藍牙UART和HCI層之間的HCI傳輸驅動問題,給出了硬件設計方案、協議棧框架圖和程序流程,實現了藍牙模塊和藍牙
1 引言
藍牙技術是一種短距離無線通信技術。遵循開放系統互聯參考模型(OSI/RM),采用分層的協議棧。主機控制接口(HCI)位于藍牙協議棧的L2CAP(邏輯鏈路控制與適配協議)層和LMP(鏈路管理協議)層之間,是藍牙協議棧中軟件與硬件的接口。它為上層軟件調用下層(基帶和鏈路管理層)狀態寄存器和控制寄存器等硬件提供了統一的指令接口。藍牙設備高層軟件和底層硬件模塊接口之間的消息和數據傳遞必須通過藍牙主機控制器接口的解釋才能進行。HCI以上的協議軟件實體運行在主機上,而HCI以下的功能由藍牙模塊來完成,二者之間通過傳輸層進行交互傳輸數據。
2 BlueCore2-external的特點及結構
BlueCore2-external[1]是英國CSR公司推出的基于藍牙技術的收發電路。工作在2.4GHz的ISM(工業、科學、醫學)頻段,主要應用于PC、無線手機、PDA、鼠標、鍵盤、數碼相機等。其主要特點如下:
工作電壓為1.8V;
完全和別的藍牙器件匹配;
采用0.18μm CMOS工藝;
支持8Mb的外圍FLASH;
外圍元器件較少。
該電路集成了藍牙協議棧的射頻和基帶部分,具有SPI、UART、USB、PIO、PCM接口。其中,SPI、UART、USB接口主要用來傳輸數據;PIO接口為可編程接口;PCM接口用來傳輸語音。在BlueCore2-External中UART接口的最大傳輸速率為1.5Mb/s,能夠達到藍牙標準中規定的723.2kb/s的數據傳輸速率。其內部結構如圖1所示。
3 硬件電路設計
系統的硬件組成如圖2所示。串口收發器采用常用的MAX232ACPE,完成BlueCore2與9針串口之間的電平轉換。串口和主機相連,主機可以是PC、ARM或單片機。這里為PC上的串口。藍牙模塊為主機控制器。這樣,藍牙主機可以和藍牙主機控制器之間實現通信。
4 HCI接口分析
HCI通過分組的方式傳輸數據(Data)、命令(Command)和事件(Event)[2],所有主機和主機控制器之間的通信都以分組的形式進行。在HCI分組中。數據分組是雙向的,命令分組只能從主機發往主機控制器,事件分組只能從主機控制器發向主機。主機發出的大多數命令分組都會由主機控制器產生相應的事件分組作為響應。
藍牙標準定義了3種類型的HCI傳輸層[3]:USB、RS232及UART。筆者提出了存在于HCI和UART之間的層-HCI傳輸驅動層,它的上層為HCI層,下層為UART驅動層,實現HCI和UART
之間的數據傳輸。
藍牙HCI接口、藍牙主機及藍牙主機控制器之間的協議棧層次[3]如圖3所示。藍牙主機控制器即BlueCore2模塊集成了藍牙協議棧的射頻、基帶和鏈路管理部分。藍牙模塊通過UART硬件連接到藍牙主機。在藍牙主機中運行藍牙UART驅動程序、HCI傳輸驅動程序、HCI的API函數及上層協議棧。
5 程序設計與實現[4]
在發送數據階段,HCI傳輸驅動層負責把由上層傳輸過來的HCI數據包傳給UART驅動層,然后通過UART驅動層把數據傳輸到藍牙主機控制器。在接收數據時,HCI傳輸驅動層的作用正好相反。
在驅動程序的設計中,把傳輸狀態分為空閑態、傳輸類型態、傳輸頭態和傳輸數據態。HCI數據發送時根據傳輸狀態來判斷在哪一狀態。發送的數據包由類型字段、頭字段和數據構成。在發送數據階段,數據傳輸的類型字段標志傳輸的是命令、ACL數據還是SCO數據,然后根據發送的類型來確定發送頭字段的長度,最后再發送數據。在接收數據階段,數據傳輸的類型字段標志傳輸的是事件、ACL數據還是SCO數據。不同的是在接收數據階段需要緩沖來接收數據。HCI傳輸驅動程序的數據結構如下所示:
在發送流程中,先對發送的狀態、看門狗、UART等初始化。使其處在待發送數據狀態。具體的發送流程如圖4所示。
接收流程和發送流程類似,所不同的是需要緩沖來接收,在此不再贅述。
本文主要解決了存在于藍牙UART和HCI層之間的HCI傳輸驅動問題,給出了硬件設計方案、協議棧框架圖和程序流程,實現了藍牙模塊和藍牙