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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 藍牙接口系統(tǒng)軟件設(shè)計

          藍牙接口系統(tǒng)軟件設(shè)計

          作者: 時間:2011-12-08 來源:網(wǎng)絡(luò) 收藏
            整個系統(tǒng)的軟件有3種設(shè)計方法,根據(jù)不同的應(yīng)用場合和系統(tǒng)的復(fù)雜程序采用不同的設(shè)計方法。一般情況 下,簡單的系統(tǒng)可以采用常規(guī)的軟件設(shè)計方法;較為復(fù)雜的系統(tǒng)可以采用DSP仿真軟件COS提供的DSP/BIOS 設(shè)計方法,DSPiBIOS是TI公司專門為DSP設(shè)計的嵌人式軟件設(shè)計方法;最為復(fù)雜的系統(tǒng)需要采用嵌人式操作 系統(tǒng)進行軟件設(shè)計,目前0MAP5912支持的操作系統(tǒng)包括WinCe、Linux、Nucleus以及VxWorks等,可以根據(jù) 需要選擇不同的操作系統(tǒng)。本文系統(tǒng)著重于介紹系統(tǒng)的實現(xiàn),可以采用常規(guī)的軟件設(shè)計方法,其 實現(xiàn)最為簡單方便。

            系統(tǒng)的軟件結(jié)構(gòu)如圖1所示。軟件結(jié)構(gòu)中的初始化模塊包括0MAP59l0系統(tǒng)、鍵盤液晶、數(shù)據(jù)和語音通信、 FLASH和PC讀寫以及藍牙模塊的初始化。在初始化過程中設(shè)置鍵盤掃描時間、語音采樣頻率、顯示狀態(tài)等各 種參數(shù)。整個系統(tǒng)初始化之后,程序進人監(jiān)控模塊,監(jiān)控模塊隨時判斷各個模塊的狀態(tài),并進人相應(yīng)的處理程序。數(shù)據(jù)通信模塊控制OMAP5910和藍牙模塊的數(shù) 據(jù)接口;語音通信模塊控制0MAP5910和音頻AD/DA的接口;收發(fā)控制OMAP5910和藍牙模塊的信號收 發(fā);FLASH讀寫模塊控制OMAP5910對其片外FLASH的讀寫,必要時可以將某些重要數(shù)據(jù)存儲到FLASH中,此外 OMAP591 0的上電引導(dǎo)程序也存儲在FLASH中;鍵盤和顯示模塊控制系統(tǒng)的人機接口;PC通信模塊控制系統(tǒng) 和PC機的連接。

            圖1 系統(tǒng)軟件結(jié)構(gòu)圖

            由于0MAP5910具有C55系列DSP核,一些數(shù)字信號處理算法可以很容易地實現(xiàn)。對于語音信號,可以進行濾 波以提高語音質(zhì)量;如果傳輸音樂信號,可以加人音樂處理算法,例如混響、鑲邊、削峰等多種處理;可 以將語音壓縮后傳輸?shù)絇C機,或者解壓后播放各種格式的語音信號。使得系統(tǒng)的應(yīng)用范圍更加廣泛和實用 。

            設(shè)計藍牙設(shè)備收發(fā)器的軟仵關(guān)鍵是基于藍牙模塊的軟件驅(qū)動技術(shù)。軟件驅(qū)動包括硬件鏈路管理器驅(qū)動程序 、主機控制接口(HOI)驅(qū)動程序、電源模式管理和電源控制以及其他高層驅(qū)動程序。

            其中硬件鏈路管理器驅(qū)動程序與物理固件直接相連,提供USB/RS232或其他接口的驅(qū)動功能。鏈路管理器 驅(qū)動程序?qū)崿F(xiàn)了鏈路管理協(xié)議(LMP),負責(zé)處理底層鏈路控制與藍牙基帶接口,該固件支持點對點和點對 多點的通信。

            HOI驅(qū)動程序根據(jù)HOI命令的各種數(shù)據(jù)及參數(shù)格式,對HOI事件數(shù)據(jù)包進行處理。HOI為主機提供了訪問微處 理器、鏈路管理器以及硬件狀態(tài)和控制寄存器的各種命令接口。主機通過HOI驅(qū)動程序提供一系列命令控制 ,藍牙固件的HOI收到命令后,會產(chǎn)生事件返回給主機,用來指示接口的當前狀態(tài)變化。主機和 HCI之間共有以下3種類型數(shù)據(jù)。

           ?。?)Hal命令包。從主機發(fā)向藍牙的HOI。

           ?。?)Hal事件包。從藍牙的HOI發(fā)向主機。

           ?。?)HOI數(shù)據(jù)包??梢詮乃{牙的HOI發(fā)向主機,也可以從主機發(fā)向藍牙的Hal。包括擴展同步連接導(dǎo)向數(shù)據(jù) 和非實時的異步無連接數(shù)據(jù)。

            電源模式管理可以對電源設(shè)定3種模式,分別為Hold(保持)、Sniff(喚醒)和Park(休息)模式。電源 控制提供了將電源設(shè)定為休眠狀態(tài)的方法,以便最大程度地降低系統(tǒng)功耗。

            高層驅(qū)動程序則實現(xiàn)嵌入藍牙模塊的外設(shè)的驅(qū)動功能。

            DSP和藍牙接口的軟件結(jié)構(gòu)分為3個層次。

           ?。?)系統(tǒng)的應(yīng)用程序。

           ?。?)為藍牙設(shè)備開發(fā)的設(shè)備驅(qū)動程序,包括藍牙的高層協(xié)議(RFCOMM和L2CAP等)。

            (3)藍牙基帶部分協(xié)議:這部分協(xié)議已經(jīng)固化在藍牙模塊中。

            在本系統(tǒng)中,由于采用藍牙接口模塊,其中基帶和鏈接管理協(xié)議(Link Manager Protocol,LMP)部分由藍牙模塊實現(xiàn)。用戶只需要在DSP即可。

            藍牙軟件使用BlueStack編程,完成初始化、連接等功能。藍牙軟件程序流程如圖1所示。

            初始化設(shè)備包括對指示燈、調(diào)試信息以及系統(tǒng)內(nèi)定時器的初始化。藍牙內(nèi)部有一小塊稱為PS的存儲區(qū),是掉電不丟失數(shù)據(jù)的,藍牙程序就是將對方地址記錄在這一存儲區(qū)里,每次啟動時都對該存儲區(qū)的藍牙地址對應(yīng)的設(shè)備建立連接。在初始化完成之后,程序還需要向底層發(fā)送消以便使藍牙程序進入消息循環(huán)。消息處理函數(shù)是整個程序的核心,所有功能的打開、連接等都由此來完成,其操作均嚴格依照藍牙協(xié)議的RFCOMM層進行。在整個系統(tǒng)中要重點考慮的是數(shù)據(jù)傳輸?shù)乃俾蕟栴}。由于當藍牙工作在1類發(fā)射功率(100mW)時,通信距離可擴展到100m,速率限制了藍牙在寬帶網(wǎng)絡(luò)中的應(yīng)用。藍牙點對點傳輸時對稱的最大有效速率為42316Kbit/s,不對稱最大有效速率為721Kbit/s,反向為5716Kbit/s。

            OMAP5912通過異步串口向BRF6100發(fā)送HCI命令,BRF6100收到命令后,由固化在其ROM的藍牙協(xié)議固件處理,并將向下傳遞到LM層,LM層負責(zé)鏈路的建立、加密和設(shè)置權(quán)限。OMAP5912收到BRF6100發(fā)來的數(shù)據(jù)包,根據(jù)具體的事件采取相應(yīng)的處理。整個異步串口的通信由以下4個功能模塊組成。

           ?。?)初始化模塊。初始化藍牙芯片以及各狀態(tài)變量,包括ΠFO、中斷寄存器和傳輸波特率等。

            (2)事務(wù)調(diào)度模塊。根據(jù)藍牙芯片返回的事件狀態(tài)參數(shù)對系統(tǒng)的事務(wù)進行調(diào)度,跳轉(zhuǎn)到返回事件處理模塊中。

           ?。?)返回事件處理模塊;各個事件處理子程序分別對應(yīng)不同事件的處理。

           ?。?)中斷模塊;負責(zé)數(shù)據(jù)包和事件包的接收和發(fā)送。



          關(guān)鍵詞: 藍牙接口

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();