<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術 > 設計應用 > 可編程邏輯在藍牙HCI橋中的應用

          可編程邏輯在藍牙HCI橋中的應用

          作者:■Xilinx公司高級工程師 Mamoon Hamid 時間:2001-08-08 來源: 收藏

          今年底將會推出藍牙標準的新版本,將提供更高的帶寬和更大的覆蓋范圍,因此可以預計藍牙技術支持的應用范圍會進一步擴展。這也意味著不僅消費電子或計算機外設會采用藍牙進行通信,許多其它的家用和辦公電器,甚至工業(yè)設備也會采用藍牙技術。因此眾多的現(xiàn)有電子設備都需要支持或利用藍牙。

          本文引用地址:http://www.ex-cimer.com/article/2829.htm

          藍牙標準定義了需要用戶最小干預的一個設備通信接口。然而目前多數(shù)標準藍牙芯片解決方案僅提供了一個UART(通用異步收發(fā)報機)USB主機控制器接口(HCI)。顯然,將現(xiàn)有的電子設備完全重新設計來提供UARTUSB接口有點動作太大了。因此,采用系統(tǒng)上的現(xiàn)有接口作為連接藍牙子系統(tǒng)的橋接接口有重要的意義。

          藍牙標準將實現(xiàn)藍牙接口所需要的功能分成三個如圖1所示的功能模塊。這些功能模塊可直接與藍牙標準中的功能劃分相對應。

          射頻部分實現(xiàn)藍牙設備的寬帶無線接口。典型情況下,射頻單元以多芯片模塊實現(xiàn),包括一個天線開關、阻抗匹配器、放大器、基于數(shù)字鎖相環(huán)路(PLL)的時鐘恢復、調制和解調電路。

          藍牙基帶鏈路控制器功能包括底層的鏈路層功能?;鶐Чδ馨ǎ?/font>

          * CVSD語音編碼

          * 頭錯誤校驗(HEC)生成及校驗

          * 前向糾錯(FEC)生成及校驗

          * 循環(huán)冗余校驗碼(CRC)生成及校驗

          * 數(shù)據(jù)擾碼

          * 有效數(shù)據(jù)加密和解密

          * 跳頻序列

          鏈路管理模塊實現(xiàn)鏈路管理器協(xié)議(LMP),負責處理底層控制方面的功能,包括:

          * 設備間鏈路的建立

          * 生成、交換并檢查加密密鑰

          * 協(xié)調基帶分組大小

          * 功率模式及射頻負載因數(shù)

          * 一個微微網(wǎng)中設備的連接狀態(tài)

          由于這些功能本身所具有的復雜性,因此需要采用軟件來實現(xiàn)。軟件通常運行在一個嵌入式RISC處理器上。這一軟件方法導致其它功能也可采用處理器實現(xiàn),同時還包括實現(xiàn)到主機系統(tǒng)接口所需要的固件。

          藍牙標準對主機控制器接口(HCI)的定義如下:

          HCI提供了一個調用和訪問基帶控制器和鏈路控制器,以及硬件狀態(tài)和控制寄存器的命令接口。這一接口提供了一個訪問藍牙基帶功能的統(tǒng)一方法。

          HCI由兩部分組成,實現(xiàn)命令接口的軟件和用來連接藍牙子系統(tǒng)和主機的物理硬件。HCI軟件的目的是使構成接口的硬件對系統(tǒng)高層軟件來說看起來是透明的。

          藍牙軟件結構包括兩種類型的部件。數(shù)據(jù)相關部件負責數(shù)據(jù)通過鏈路的傳輸??刂葡嚓P部件則負責鏈路的控制和管理。就本文的目的來說,我們將集中討論構成HCI的控制和數(shù)據(jù)相關的部件。圖2 示出了HCI軟件結構以及與藍牙主機接口硬件的關系。

          主機通過HCI驅動程序提供的一系列命令來控制藍牙網(wǎng)絡接口。除這些命令外,藍牙標準還定義了一級由藍牙網(wǎng)絡接口中的HCI固件產(chǎn)生的事件,用來指示接口的狀態(tài)變化。

          HCI命令和事件與來自無連接和同步連接的數(shù)據(jù)一起通過HCI傳輸接口硬件進行傳輸。這些數(shù)據(jù)的復用方式對接口來說是確定的。

          HCI的傳輸層定義了三類數(shù)據(jù)如何在藍牙網(wǎng)絡接口和藍牙主機間進行傳輸。HCI傳輸層定義了每一類數(shù)據(jù)如何封裝和通過接口硬件進行復用。藍牙規(guī)范目前定義了三個HCI傳輸層。

          * UART傳輸層

          * RS232傳輸層

          * USB傳輸層

          藍牙特別興趣組(Bluetooth SIG )的白皮書中描述了第四個傳輸層,即PC卡傳輸層。

          除非有足夠的時間和資源,否則很少有人會從最底層來設計一個藍牙網(wǎng)絡接口,HCI實施的戰(zhàn)略通常是基于已經(jīng)提供的ASSP產(chǎn)品。ASSP可以分成兩大類,一類僅實現(xiàn)了鏈路控制器功能,另一類則同時包括了鏈路控制器和鏈路管理器。這兩類器件的主要區(qū)別是后一類包含了一個嵌入式RISC處理器來實現(xiàn)鏈路管理器和HCI功能。

          要決定采用哪一類器件通常需要針對每種方案進行權衡分析。下面提供了一個實際例子,它展示了可編程邏輯器件(PLD)如何提供可解決HCI接口問題的方案。

          要將藍牙技術以有效的成本集成到系統(tǒng)級設計中要面臨許多挑戰(zhàn),包括:

          * 不斷演化的標準。雖然藍牙核心協(xié)議是穩(wěn)定的,但到高層協(xié)議和服務(IP業(yè)務)的映射卻仍在不斷演化;

          * 可能存在問題的ASSP。目前應用的大多數(shù)ASSP還相對較新,因此會存在一些必須由系統(tǒng)設計人員處理的缺陷;

          * 新出現(xiàn)的產(chǎn)品應用模式。對最初設想的電纜替代應用來說,大多數(shù)情況下藍牙技術目前還是太昂貴了。由于這一原因,和其它一些有利可圖的潛在關鍵應用,使許多人考慮將藍牙推向仍在形成期的新興應用領域;

          很明顯,這里所需要的是一個允許系統(tǒng)設計人員快速開發(fā)藍牙解決方案并可以針對不斷變化的環(huán)境做出響應的靈活技術。對采用前述兩類藍牙ASSP的接口設計,PLD可以滿足這一需要。

          選擇同時包括鏈路控制器和鏈路管理器功能的ASSP產(chǎn)品所具有的優(yōu)點是可以從相當完整的解決方案開始。器件包含一個RISC處理器和一個或多個HCI傳輸接口。制造商同時還提供HCI和鏈路管理器固件。采用此類器件,系統(tǒng)級集成僅需要將HCI傳輸接口與主機相連。如果主機系統(tǒng)已經(jīng)有可用的USBUART端口,那么不需要額外的硬件就可以實現(xiàn)系統(tǒng)集成。

          藍牙子系統(tǒng)的三個部件分別是:

          * 射頻(RF)部分 - 射頻器件

          * 基帶(BB)- 基帶處理器

          * 微控制器(mC)- 微控制器

          然而很多情況下這一方法可能并不適用,可能的原因有:

          * 主機系統(tǒng)可能沒有可用于藍牙子系統(tǒng)的UARTUSB接口;

          *主機系統(tǒng)可能沒有足夠的USBUART端口。當主機僅有有限數(shù)量的端口時,或當應用需要大量的端口時就會出現(xiàn)這種情況;

          * 主機系統(tǒng)可以沒有可以支持全速藍牙數(shù)據(jù)速率的串行端口。為達到最大的系統(tǒng)級性能,藍牙ASSP包含可支持高達1.5Mbps傳輸速率的UART;

          * 標準接口的ASSP可能并不適合藍牙協(xié)議處理,因此在藍牙速率下工作時,可能會消耗太多的處理器處理資源。中斷處理開銷可能會大量消耗主機處理資源。

          在上述任何一種情況下,可編程邏輯都可以用來實現(xiàn)所需要的接口硬件。對深度嵌入式應用,這通常是一個USB或UART核心和系統(tǒng)中采用的嵌入式處理器局部總線間的接口。雖然可編程邏輯可以用來實現(xiàn)兩種傳輸接口的任何一種,但簡單的UART傳輸協(xié)議是一個成本效率較高的接口方案,同時還具有較好的系統(tǒng)級性能。

          系統(tǒng)級性能會更好的原因源于PLD的主要優(yōu)點,即他們可以快速創(chuàng)建一個針對目標應用的特定的接口解決方案。圖3是帶有DMA和HCI幀傳輸狀態(tài)機邏輯增強的一個UART的框圖。

          通過降低發(fā)送和接收時的中斷服務開銷,這一方法提高了系統(tǒng)級性能。在傳統(tǒng)UART情況下每接收或發(fā)送一個數(shù)據(jù)都產(chǎn)生一個中斷。與此不同,這一設計中采用了片上FIFO來進行接收和發(fā)送緩沖,每發(fā)送或接收一個完整的HCI幀才產(chǎn)生一次中斷。這是通過采用專用邏輯電路對HCI頭中的幀大小信息進行解碼并適當配置DMA邏輯來實現(xiàn)的??删幊踢壿媽崿F(xiàn)的專用邏輯還通過檢查來保證幀級同步。

          雖然采用僅包含鏈路控制器的ASSP需要更多的工作才能創(chuàng)造出一個完整的解決方案,但他們也為在深度嵌入式系統(tǒng)實現(xiàn)更緊密的集成和降低系統(tǒng)成本提供了機會。如果藍牙網(wǎng)絡接口和主機位于同一塊電路板上,那么就沒有必要采用一個HCI傳輸層。這種情況下,用來控制基帶處理和射頻功能的接口以及用來傳輸數(shù)據(jù)幀的接口都成為直接簡單的主機處理器接口。由于這些接口通常與采用的ASSP相關,因此可編程邏輯提供了一個到主處理器總線或I/O總線(如PCI)接口的低成本方法。請注意,這是可編程邏輯可以用來集成其它核心邏輯功能的又一種情況。

          在這種方案中,主機CPU完成所有的協(xié)議處理功能。這進一步降低了成本。因為原來專門用于鏈路管理功能的RISC處理器和非易失存儲器在系統(tǒng)中就不需要了。在這一結構中,藍牙軟件協(xié)議層簡化成如圖4所示。

          基于可編程邏輯的快速UART至PCI橋解決方案是為舊系統(tǒng)集成業(yè)界標準的藍牙通信功能的理想方法。其中采用FPGA對系統(tǒng)加速最明顯的是FIFO緩沖器。這些FIFO的深度和寬度可以重新配置以適應更快速的數(shù)據(jù)速率以及更寬的數(shù)據(jù)字或特殊的字寬度。圖5顯示了一個單通道UART到PCI橋的功能部件。由于用于FPGA的標準接口和存儲控制器IP非常多,因此可以導出許多與此類似的幾乎實現(xiàn)了所有其它核心邏輯功能的設計。由圖5還可看出可以集成更多附加的功能,如SDRAM控制器和定制邏輯。這種靈活性使您可趕在競爭對手前,快速有效地改變您的設計以滿足新興的市場機會。

          可編程邏輯是集成藍牙技術到嵌入式系統(tǒng)中的優(yōu)秀解決方案,因為它提供的幾個優(yōu)勢可以幫助壓縮產(chǎn)品上市的時間。第一,有范圍廣泛的IP可以使用,因此可以快速得到關鍵的設計構建模塊。第二,準現(xiàn)成的可編程解決方案使系統(tǒng)設計人員可比任何其它方法更快地完成一個功能硬件平臺。第三,在軟件還在開發(fā)過程中,就可以方便快速地推出有限數(shù)量的設計來進行實際的Beta測試并獲得反饋。

          在集成藍牙技術的過程中,軟件開發(fā)是最大的問題之一。由于可編程邏輯可以更快地完成功能硬件設計,因此具有很大的優(yōu)勢。實際上,這一優(yōu)勢可能比想象的還要大,特別是當你考慮到可編程邏輯所帶來的巨大靈活性時。例如,許多情況下,非常希望能夠重新利用現(xiàn)有的驅動程序和固件。此時,PLD使系統(tǒng)設計人員可以先調整接口邏輯,以使用標準的驅動程序,然后再修改這一邏輯來提高性能。當設計中選擇購買第三方固件時,這一特性更有價值,因為對第三方固件的理解需要時間,而且第三方固件還可能不能非常好地適應目標應用環(huán)境。

          從本質上來說,產(chǎn)品開發(fā)并不是嚴格的科學,因為實際開發(fā)中總是存在錯誤、不兼容性和標準的不斷修改。由于其內在的可重新編程特性,PLD提供了非常有價值的優(yōu)勢,可在任意時間對已安裝系統(tǒng)的硬件進行升級。這使您可以保證現(xiàn)有設計的可用性,并大大降低了過時的器件庫存以及昂貴的現(xiàn)場器件更換所帶來的風險?!?/font>



          關鍵詞:

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();