摘要:某應(yīng)用藍(lán)牙技術(shù)的醫(yī)療監(jiān)控系統(tǒng)中,單片機(jī)是其數(shù)據(jù)傳輸瓶頸。本設(shè)計采用FPGA取代了原系統(tǒng)的單片機(jī)和8255芯片,使數(shù)據(jù)傳輸速率提高了近10倍。文中討論了設(shè)計的一些關(guān)鍵問題。
關(guān)鍵詞:控制接口;藍(lán)牙HCI-UART;并口;FPGA
1 引言
在藍(lán)牙體系的實現(xiàn)方案中, HCI意義重大,它以一個統(tǒng)一的接口實現(xiàn)主機(jī)設(shè)備與藍(lán)牙模塊之間的互操作。藍(lán)牙HCI層定義了數(shù)據(jù)、命令、事件三類消息,規(guī)定了數(shù)據(jù)如何在藍(lán)牙模塊和藍(lán)牙主機(jī)間進(jìn)行傳輸,以及每一類消息數(shù)據(jù)如何封裝和通過接口硬件進(jìn)行復(fù)用。HCI傳輸層有四個協(xié)議: UART協(xié)議、RS232協(xié)議和USB協(xié)議和PC卡傳輸層協(xié)議。其中UART和RS232傳輸層都采用異步串行通信方式在藍(lán)牙模塊和藍(lán)牙主機(jī)間進(jìn)行數(shù)據(jù)傳輸。兩者間的區(qū)別在于它們所適用的環(huán)境,UART傳輸層適用于板級互連,沒有規(guī)定信號特殊的電氣特性,也沒有定義波特率協(xié)商機(jī)制。UART方式比較靈活,并且可以直接采用TTL、LV-CMOS等IC端電壓,應(yīng)用較多。
某醫(yī)療監(jiān)控設(shè)備中,使用藍(lán)牙的HCI-UART接口實現(xiàn)監(jiān)控數(shù)據(jù)到計算機(jī)并口卡的無線傳輸,藍(lán)牙模塊ROK-101-008的數(shù)據(jù)傳輸由MCS51單片機(jī)控制。在實時監(jiān)控時,數(shù)據(jù)速率較低,單片機(jī)可以很好的完成傳輸控制任務(wù);但是在監(jiān)控結(jié)束需要一次性下載數(shù)據(jù)時,該單片機(jī)的56Kbps最高UART傳輸速率就成為數(shù)據(jù)傳輸?shù)钠款i,遠(yuǎn)遠(yuǎn)低于該藍(lán)牙模塊的UART數(shù)據(jù)傳輸上限460.8Kbps(藍(lán)牙1.1的單向最高傳輸速率為723.2Kbps)。我們使用FPGA代替單片機(jī)對該接口做了改進(jìn)設(shè)計,取得了較好效果。
ACL鏈路建立后,用戶通過應(yīng)用軟件向計算機(jī)并口卡發(fā)出實時監(jiān)控或者瞬時數(shù)據(jù)讀取命令,此命令經(jīng)過Slave端的單片機(jī)、8255和藍(lán)牙傳輸至Host端藍(lán)牙、8255、單片機(jī)和監(jiān)控儀,監(jiān)控儀返回應(yīng)答,隨后即為監(jiān)控數(shù)據(jù)。
對這個系統(tǒng)分析可知,單片機(jī)具有低成本、編程靈活的優(yōu)點,在ACL鏈路建立過程中很方便,但是ACL鏈路建立以后,所有的數(shù)據(jù)仍然通過單片機(jī)進(jìn)行中轉(zhuǎn)和串并轉(zhuǎn)換,而普通51單片機(jī)在11.0592M晶振頻率時執(zhí)行一條單周期指令就需要1微秒以上,由于在藍(lán)牙通信過程中,要加入許多事件、分支判斷,所以這種指令執(zhí)行方式固有的低速特性就使單片機(jī)成為系統(tǒng)的速度瓶頸。我們使用FPGA取代原系統(tǒng)中的單片機(jī)和8255,將藍(lán)牙ACL鏈路建立指令存入FPGA中的ROM,以狀態(tài)機(jī)控制ACL指令讀取、事件判斷和ACL數(shù)據(jù)接收,同樣在11.0592M的主時鐘頻率下,達(dá)到了該藍(lán)牙模塊的最高UART傳輸速度460.8Kbps。
3 FPGA控制接口設(shè)計
本接口模塊在Host和Slave端各有一個,除ROM內(nèi)容外,都采用相同的模塊和層次設(shè)計。這里以計算機(jī)端的接口設(shè)計為例敘述。
頂層模塊在狀態(tài)機(jī)里根據(jù)不同的狀態(tài)調(diào)用單字節(jié)并串轉(zhuǎn)換和單字節(jié)串并轉(zhuǎn)換模塊,ROM模塊部分僅在ACL鏈路建立時有用。各個模塊都使用11.0592MHz的主時鐘,24分頻后為460.8KHz,作為UART收發(fā)的位時鐘。這里單字節(jié)發(fā)送和接收模塊是關(guān)鍵的設(shè)計模塊,以下予以詳細(xì)介紹。
單字節(jié)并串模塊在ACK信號上升沿時讀入一個并行字節(jié),再轉(zhuǎn)換為串行數(shù)據(jù)輸出,OBF信號有效時表示接收端正在忙于處理數(shù)據(jù)。測得計算機(jī)上的8255并口卡輸出數(shù)據(jù)的時序如圖2:
該模塊的主要代碼中,data_flag為'1'表示FPGA正在處理讀入數(shù)據(jù)的標(biāo)志;obf_flag為'1'是表示并串轉(zhuǎn)換處理結(jié)束;bitcnt為對460.8KHz的位時鐘clk2計數(shù)的位計數(shù)器。另外,ACK信號的下降沿作為模塊的復(fù)位信號,上升沿作為讀數(shù)標(biāo)志。
IF obf_flag='1' THEN
data_flag<='0';
ELSIF ack'event and ack='1' THEN
data_buff<='1'& data_p & '0'; --讀入并行字節(jié)數(shù)據(jù),拼裝起始位和停止位
data_flag<='1';
END IF;
……
IF clk2='1' and clk2'event THEN -- 并串轉(zhuǎn)換
IF data_flag='1' THEN
IF bitcnt=0 THEN
obf_flag<='0';
END IF;
tx<=data_buff(bitcnt);
bitcnt<=bitcnt+1;
IF bitcnt=10 THEN
tx<='1'; --空閑位
obf_flag<='1';
bitcnt<=0;
END IF;
END IF;
END IF;
單字節(jié)串并模塊在IBF信號為'1'(表示計算機(jī)空閑,可以接收數(shù)據(jù))時接收一個串行字節(jié),再以并行方式在STB下降沿輸出到并口卡。測得計算機(jī)上的8255并口卡輸入數(shù)據(jù)的時序如圖3:
串并接收過程中,要辨別Rx線上輸入的異步碼流的第一個下降沿去同步本地時鐘,并作為模塊的復(fù)位信號。主時鐘連續(xù)檢測到Rx的12次低表示收到可靠的起始位。同樣,串并模塊的主要代碼中,rcv_flag為'1'表示FPGA正在處理讀入數(shù)據(jù)的標(biāo)志;stop_flag下降沿表示串并轉(zhuǎn)換處理結(jié)束;cnt計數(shù)器的低5位對主時鐘計數(shù)產(chǎn)生460.8KHz,高4位為位計數(shù)器。
IF clk'event and clk='1' THEN
IF rcv_flag='1' THEN
IF conv_integer(cnt)<12 THEN
temp<=(temp OR rx); -- Rx連續(xù)的12次低表示可靠的起始位
END IF;
IF conv_integer(cnt)>=12 and temp='0' THEN
CASE cnt IS
WHEN "000101011" => -- LSB
data_buff(0)<=rx;
…… --讀取1~6位,略去
WHEN "100001011" =>
data_buff(7)<=rx;
stb<='0';
stop_flag<='1';
WHEN "100001100" =>
data_p<=data_buff;
WHEN "100101011" => -- stop bit
stb<='1';
stop_flag<='0';
WHEN OTHERS =>
END CASE;
END IF;
END IF;
END IF;
4 結(jié)語
本設(shè)計用FPGA替代了原系統(tǒng)的單片機(jī)和8255芯片,消除了數(shù)據(jù)傳輸瓶頸,使得藍(lán)牙ACL鏈路的數(shù)據(jù)傳輸速率由57.6Kbps輕松的提高到了該芯片的UART速度上限460.8Khz。從設(shè)計分析過程可以看出,即使11M主時鐘不變,F(xiàn)PGA的UART處理速度仍有較大的提升空間。以上設(shè)計在ALTERA公司的Maxplus2上編譯綜合,下載到EP1K10芯片,在系統(tǒng)中驗證通過。
在較早的許多智能設(shè)備中,單片機(jī)被大量使用。單片機(jī)雖然擁有軟件靈活性,但是處理能力相當(dāng)有限,成為許多系統(tǒng)的性能瓶頸。以上面的設(shè)計為例子,在任務(wù)不復(fù)雜、但是數(shù)據(jù)量很大的場合,使用FPGA或者CPLD取代單片機(jī),是系統(tǒng)升級的好辦法。





