摘要: 傳統(tǒng)的醫(yī)療電子設(shè)備并不具備無(wú)線(xiàn)功能,不能實(shí)現(xiàn)隨時(shí)隨地的醫(yī)療監(jiān)控。文中提出一個(gè)基于IPV6 的用于醫(yī)療電子無(wú)線(xiàn)網(wǎng)絡(luò)的路由協(xié)議,并基于國(guó)產(chǎn)CK610 CPU 和TI 公司的CC2520射頻芯片實(shí)現(xiàn)了基本無(wú)線(xiàn)通信,,并在PC 上通過(guò)圖形界面顯示出醫(yī)療檢驗(yàn)結(jié)果。
0 引言
醫(yī)療電子領(lǐng)域中,,在嵌入式處理器方面,,目前使用最廣泛和主流的象ARM.MIPS 都是國(guó)外廠商生產(chǎn)的CPU,而國(guó)內(nèi)的具有自主知識(shí)產(chǎn)權(quán)的CPU 卻很少被人注意,。
此外,,隨著無(wú)線(xiàn)技術(shù)的進(jìn)步和無(wú)線(xiàn)設(shè)備成本的降低,醫(yī)療電子無(wú)線(xiàn)化必將是未來(lái)發(fā)展的趨勢(shì),。目前已經(jīng)有一些企業(yè)和團(tuán)體在醫(yī)療電子無(wú)線(xiàn)化的方向上作出了研究和開(kāi)發(fā),,但是目前的無(wú)線(xiàn)醫(yī)療電子使用的網(wǎng)絡(luò)協(xié)議基本都是基于IPV4 的,將更加先進(jìn)的IPV6 網(wǎng)絡(luò)運(yùn)用到無(wú)線(xiàn)醫(yī)療電子是未來(lái)發(fā)展必須面臨的問(wèn)題,。
本文主要為醫(yī)療電子設(shè)計(jì)了一個(gè)基于IPV6 的網(wǎng)絡(luò)協(xié)議,,為實(shí)現(xiàn)該協(xié)議編寫(xiě)了路由協(xié)議程序和射頻適配程序,實(shí)現(xiàn)了醫(yī)療電子的無(wú)線(xiàn)功能,。
1 系統(tǒng)概述
主要系統(tǒng)架構(gòu)如圖1 所示: 單個(gè)節(jié)點(diǎn)由CK610開(kāi)發(fā)板與醫(yī)療電子板和CC2520 射頻芯片組成,,控制器為普通節(jié)點(diǎn)與PC 相連接.Linux 用作CK610 的操作系統(tǒng),CK610 通過(guò)操作FPGA IP 核模擬的SPI 來(lái)控制CC2520,CC2591 由CC2520 的管腳控制,。
在整個(gè)醫(yī)療電子應(yīng)用的網(wǎng)絡(luò)系統(tǒng)中,,可以有多個(gè)節(jié)點(diǎn),但是只有一個(gè)控制器,。所有節(jié)點(diǎn)數(shù)據(jù)發(fā)送的終點(diǎn)是控制器,,距離較遠(yuǎn)的節(jié)點(diǎn)可以通過(guò)其他節(jié)點(diǎn)轉(zhuǎn)發(fā)來(lái)傳輸數(shù)據(jù)。
2 網(wǎng)絡(luò)協(xié)議設(shè)計(jì)
為了實(shí)現(xiàn)圖1 的系統(tǒng)架構(gòu),,需要為系統(tǒng)設(shè)計(jì)一個(gè)基于IPV6 的網(wǎng)絡(luò)協(xié)議,。
2. 1 路由算法設(shè)計(jì)
建立和維護(hù)無(wú)線(xiàn)網(wǎng)絡(luò),必須要發(fā)送和處理三種形式的數(shù)據(jù)包,,分別是路由請(qǐng)求包,。路由廣播包和路由匯報(bào)包。
網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都維護(hù)一個(gè)路由表,,路由表的每項(xiàng)都是與本節(jié)點(diǎn)相鄰的節(jié)點(diǎn),。一個(gè)典型節(jié)點(diǎn)路由表內(nèi)容如表1所示。
每個(gè)節(jié)點(diǎn)會(huì)對(duì)路由表中的每項(xiàng)根據(jù)總鏈路代價(jià)進(jìn)行排序,,總鏈路代價(jià)最小的對(duì)應(yīng)的節(jié)點(diǎn)會(huì)被選為默認(rèn)路由,只要節(jié)點(diǎn)有數(shù)據(jù)要發(fā)送或者轉(zhuǎn)發(fā),,都會(huì)將數(shù)據(jù)發(fā)往默認(rèn)路由,。
總鏈路代價(jià)表示的是這條鏈路信道的質(zhì)量,該值越小越好,,它是本地鏈路代價(jià)和前驅(qū)節(jié)點(diǎn)鏈路代價(jià)兩者之和,。前驅(qū)節(jié)點(diǎn)鏈路代價(jià)是從本節(jié)點(diǎn)定期發(fā)送的路由廣播包中獲取的。如果前驅(qū)節(jié)點(diǎn)是控制器,,那么前驅(qū)節(jié)點(diǎn)鏈路代價(jià)是0.本地鏈路代價(jià)指的是自身節(jié)點(diǎn)同前驅(qū)節(jié)點(diǎn)之間信道的鏈路代價(jià),,表示的是通信信道質(zhì)量,該值越小越好,。為了計(jì)算本地鏈路代價(jià),,必須要維護(hù)長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT.長(zhǎng)期發(fā)送數(shù)據(jù)包成功數(shù)LS.近期發(fā)送數(shù)據(jù)包總數(shù)ST 和近期發(fā)送數(shù)據(jù)包成功數(shù)SS 這四個(gè)數(shù)據(jù)。
ST 和SS 從零開(kāi)始計(jì)數(shù),,節(jié)點(diǎn)每發(fā)送一次數(shù)據(jù)( 包括重傳) ,,近期發(fā)送數(shù)據(jù)包總數(shù)ST 就會(huì)加1,而近期發(fā)送數(shù)據(jù)包成功數(shù)SS 則是每成功發(fā)送一次數(shù)據(jù)就加1.這兩個(gè)值會(huì)在RTIMER 定時(shí)器到期之時(shí)更新完長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT 和長(zhǎng)期發(fā)送數(shù)據(jù)包成功數(shù)LS 之后清零,。長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT 和長(zhǎng)期發(fā)送數(shù)據(jù)包成功數(shù)LS 在RTIMER 定時(shí)器到期之時(shí)更新,,更新的規(guī)則是將當(dāng)前長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT 加上近期發(fā)送數(shù)據(jù)包總數(shù)ST 作為新的長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT,將長(zhǎng)期發(fā)送數(shù)據(jù)包成功數(shù)LS加上近期發(fā)送數(shù)據(jù)包成功數(shù)SS 作為新的長(zhǎng)期發(fā)送數(shù)據(jù)包成功數(shù)LS,,如果此時(shí)長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT 大于0XF000,,那么將長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT 和長(zhǎng)期發(fā)送數(shù)據(jù)包成功數(shù)LS 右移一位。這樣做有兩個(gè)好處:
( 1) 避免長(zhǎng)期發(fā)送數(shù)據(jù)包總數(shù)LT 和長(zhǎng)期發(fā)送數(shù)據(jù)包成功數(shù)LS 無(wú)限增大到無(wú)法存儲(chǔ),。
?。?2) 離當(dāng)前時(shí)間越遠(yuǎn)的統(tǒng)計(jì)值對(duì)計(jì)算鏈路代價(jià)的影響越小,符合自然規(guī)律,。
本地鏈路代價(jià)的計(jì)算公式如下:
節(jié)點(diǎn)會(huì)在收到鄰居節(jié)點(diǎn)的路由廣播包和RTIMER定時(shí)器到期的時(shí)候更新路由表鏈路代價(jià)信息,。
2. 2 網(wǎng)絡(luò)節(jié)點(diǎn)的加入
當(dāng)節(jié)點(diǎn)1 要加入網(wǎng)絡(luò)中時(shí)首先要發(fā)送一個(gè)路由請(qǐng)求包,申請(qǐng)加入無(wú)線(xiàn)網(wǎng)絡(luò),??刂破鹘邮盏竭@個(gè)請(qǐng)求之后,向節(jié)點(diǎn)1 發(fā)送一個(gè)路由廣播包,。節(jié)點(diǎn)1 接收到該路由廣播包之后,,將網(wǎng)絡(luò)地址前綴加上自己的節(jié)點(diǎn)ID 組成自己的網(wǎng)絡(luò)地址,并且將控制器加入自己的路由表,。此時(shí)節(jié)點(diǎn)1 的默認(rèn)路由是控制器,。
同時(shí),節(jié)點(diǎn)1 會(huì)立即啟動(dòng)TTIMER 和RTIMER 兩個(gè)定時(shí)器,,當(dāng)TTIMER 到期時(shí),,節(jié)點(diǎn)1 就會(huì)向控制器發(fā)送路由匯報(bào)包,控制器收到該包及時(shí)更新網(wǎng)絡(luò)拓?fù)洹?/span>
而控制器的RTIMER 到期之時(shí),,也會(huì)給節(jié)點(diǎn)1 發(fā)送路由廣播,,節(jié)點(diǎn)1 立即更新路由表。
網(wǎng)絡(luò)運(yùn)行的過(guò)程中,,有新的節(jié)點(diǎn)要加入這個(gè)網(wǎng)絡(luò),,且該節(jié)點(diǎn)能夠直接同控制器通信,此時(shí)的情況比第一個(gè)節(jié)點(diǎn)加入網(wǎng)絡(luò)的情況復(fù)雜些,。節(jié)點(diǎn)2 啟動(dòng)時(shí),,首先發(fā)送一個(gè)路由請(qǐng)求包,控制器和節(jié)點(diǎn)1 接收到該包后會(huì)先后發(fā)送路由廣播包,,節(jié)點(diǎn)2 收到這些包之后修改自己的網(wǎng)絡(luò)地址,,并且將控制器和節(jié)點(diǎn)1 都加入自己的路由表中。當(dāng)RTIMER 定時(shí)器到期時(shí),,會(huì)發(fā)送路由匯報(bào)包給控制器,,經(jīng)過(guò)一段時(shí)間穩(wěn)定之后,路由匯報(bào)包的內(nèi)容應(yīng)該包括節(jié)點(diǎn)1 和控制器,。
之后節(jié)點(diǎn)1 的RTIMER 定時(shí)器到期,,發(fā)送路由廣播包,控制器和節(jié)點(diǎn)2 都能收到,,節(jié)點(diǎn)2 更新其路由表,,節(jié)點(diǎn)2 的RTIMER 定時(shí)器到期也會(huì)發(fā)送路由廣播包,此時(shí)節(jié)點(diǎn)1 將節(jié)點(diǎn)2 加入自己的路由表。
如果新加入的節(jié)點(diǎn)無(wú)法直接同控制器通信,,即節(jié)點(diǎn)1 已經(jīng)存在于網(wǎng)絡(luò)中,,節(jié)點(diǎn)2 無(wú)法同控制器通信。節(jié)點(diǎn)2 啟動(dòng)的時(shí)候也會(huì)發(fā)送路由請(qǐng)求包,,這個(gè)包只有節(jié)點(diǎn)1 可以收到,,于是節(jié)點(diǎn)1 給節(jié)點(diǎn)2 回復(fù)一個(gè)路由廣播包,節(jié)點(diǎn)2 和控制器都可以收到,。節(jié)點(diǎn)2 收到這個(gè)包之后,,會(huì)設(shè)置好自己的網(wǎng)絡(luò)地址,同時(shí)將節(jié)點(diǎn)1 加入自己的路由表中,。此時(shí)節(jié)點(diǎn)2 的路由表只有節(jié)點(diǎn)1 這一項(xiàng),,因此節(jié)點(diǎn)2 的默認(rèn)路由是節(jié)點(diǎn)1.節(jié)點(diǎn)2 的TTIMER 定時(shí)器到期時(shí)會(huì)向默認(rèn)路由,即節(jié)點(diǎn)1 發(fā)送路由匯報(bào)包,,節(jié)點(diǎn)1 收到路由匯報(bào)包之后將其轉(zhuǎn)發(fā)給控制器,。節(jié)點(diǎn)1 的RTIMER 定時(shí)器到期,發(fā)送路由廣播包,,節(jié)點(diǎn)2 更新其路由表,。
節(jié)點(diǎn)2 的RTIMER 定時(shí)器到期之時(shí)發(fā)送路由廣播包,節(jié)點(diǎn)1 接收到該包之時(shí)更新路由表,。
2. 3 網(wǎng)絡(luò)的維護(hù)與更新
網(wǎng)絡(luò)運(yùn)行過(guò)程中,,信道都是隨時(shí)變化的。為了使整個(gè)網(wǎng)絡(luò)工作正常,,必須要及時(shí)更新網(wǎng)絡(luò)參數(shù)。
網(wǎng)絡(luò)的維護(hù)和更新是通過(guò)每個(gè)節(jié)點(diǎn)的RTIMER 定時(shí)器實(shí)現(xiàn)的,,每當(dāng)該定時(shí)器到期,,節(jié)點(diǎn)都會(huì)廣播路由廣播包,所有接收到該廣播包的節(jié)點(diǎn)都會(huì)更新自己的路由表信息,,這樣整個(gè)網(wǎng)絡(luò)的信道信息得到了更新,。
3 軟件和硬件設(shè)計(jì)
3. 1 硬件結(jié)構(gòu)
圖1 中的硬件主要包括CK610 開(kāi)發(fā)板.CC2591和
CK610 為杭州中天微系統(tǒng)有限公司生產(chǎn)的CPU,主要特性有: 八級(jí)流水線(xiàn),; 雙發(fā)射超標(biāo)量流水線(xiàn)技術(shù),,提升性能近50%; 非阻塞指令發(fā)射。投機(jī)執(zhí)行和按序退休,; 返回地址預(yù)測(cè)( 4 – entry returnstack) ; 哈佛結(jié)構(gòu)數(shù)據(jù)/指令Cache 和SPM,,大小可配置; 數(shù)據(jù)Cache Write – back /Write – through 動(dòng)態(tài)可配置,; 內(nèi)部雙通用數(shù)據(jù)總線(xiàn),; AHB /AXI 總線(xiàn)接口,和可擴(kuò)展的協(xié)處理器接口。
CC2520 為T(mén)I 公司生產(chǎn)的一款低功耗射頻芯片,,主要特性有: 發(fā)射功率可達(dá)到5dBm; 數(shù)據(jù)傳輸速率最大可達(dá)250kbps; 工作在2. 4GHz ISM 頻段,;4 – 線(xiàn)SPI; 6 個(gè)可配置
CC2591 為T(mén)I 公司生產(chǎn)的一款高性能低成本前端,適用于如ZigBee 網(wǎng)絡(luò)等2. 4GHz 無(wú)線(xiàn)系統(tǒng),,可以改善RF 性能,。
CC2520 與CC2591 結(jié)合使用可以使得輸出功率范圍擴(kuò)大到- 24dBm ~ 22dBm,接收靈敏度增加到- 90dBm,,傳輸距離可達(dá)到幾百米甚至上千米,。
3. 2 網(wǎng)絡(luò)系統(tǒng)架構(gòu)
為了實(shí)現(xiàn)在第3 節(jié)中定義的網(wǎng)絡(luò)協(xié)議,需要在Linux 之上編寫(xiě)一個(gè)應(yīng)用程序,,該程序需要實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議中的規(guī)則,。除此以外,還需要根據(jù)協(xié)議,,選擇合適的路由,,該程序稱(chēng)為路由協(xié)議程序。此外,,為了使IPV6 運(yùn)行在CC2520 射頻芯片上,,移植了6LoWPAN協(xié)議到Linux 系統(tǒng)中,大大減小了包頭的字節(jié),,減少了能量消耗,。
在用戶(hù)應(yīng)用程序中,當(dāng)有數(shù)據(jù)要發(fā)送時(shí),,Linux內(nèi)核會(huì)查找內(nèi)核路由表,,找到下一跳的地址,然后將數(shù)據(jù)交給相應(yīng)的設(shè)備以發(fā)送數(shù)據(jù),。系統(tǒng)所用的網(wǎng)絡(luò)設(shè)備是CC2520 射頻芯片,,但是Linux 并沒(méi)用為CC2520 開(kāi)發(fā)對(duì)應(yīng)的網(wǎng)絡(luò)驅(qū)動(dòng),因此可以虛擬一個(gè)網(wǎng)絡(luò)設(shè)備tun,,將網(wǎng)絡(luò)層傳過(guò)來(lái)的數(shù)據(jù)都交給tun,,讀取tun 接口便能夠得到要發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)。射頻適配層得到該數(shù)據(jù)之后,,經(jīng)過(guò)適配層6LoWPAN 協(xié)議的壓縮之后,,然后再通過(guò)SPI 操作CC2520 芯片發(fā)送數(shù)據(jù)。對(duì)應(yīng)從底層來(lái)的數(shù)據(jù),,其處理過(guò)程跟上述方式類(lèi)似,。
3. 3 射頻適配程序的設(shè)計(jì)
當(dāng)內(nèi)核有數(shù)據(jù)要發(fā)送之時(shí),要使用正確的方法驅(qū)動(dòng)CC2520 芯片無(wú)線(xiàn)發(fā)送出去,,負(fù)責(zé)這部分內(nèi)容的程序稱(chēng)為射頻適配程序,。
在實(shí)現(xiàn)過(guò)程中,,使用CC2520 芯片作為無(wú)線(xiàn)網(wǎng)絡(luò)收發(fā)設(shè)備。在Linux 內(nèi)核中,,并無(wú)CC2520 作為網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng),。為了實(shí)現(xiàn)使用CC2520 收發(fā)數(shù)據(jù)的功能,可以建立一個(gè)虛擬網(wǎng)絡(luò)設(shè)備tun.字符設(shè)備tun 是內(nèi)核空間和用戶(hù)空間的數(shù)據(jù)接口,,內(nèi)核將數(shù)據(jù)包發(fā)送到虛擬網(wǎng)絡(luò)設(shè)備上,,數(shù)據(jù)包會(huì)被保存到設(shè)備的隊(duì)列中,此時(shí)用戶(hù)空間可以通過(guò)打開(kāi)字符設(shè)備tun 并調(diào)用read 函數(shù)讀取其中的數(shù)據(jù),,此時(shí)數(shù)據(jù)傳遞到了用戶(hù)空間,,程序可以對(duì)這些數(shù)據(jù)進(jìn)行處理。
同樣,,用戶(hù)空間程序可以通過(guò)write 函數(shù)將收到的數(shù)據(jù)包交給內(nèi)核,。這樣就可以在上層有數(shù)據(jù)來(lái)的時(shí)候先經(jīng)過(guò)6LoWPAN 的處理壓縮,再通過(guò)驅(qū)動(dòng)CC2520發(fā)送數(shù)據(jù),,在CC2520 收到數(shù)據(jù)的時(shí)候,,將數(shù)據(jù)經(jīng)過(guò)6LoWPAN 還原之后交給Linux 內(nèi)核,實(shí)現(xiàn)無(wú)線(xiàn)收發(fā)數(shù)據(jù)包的功能,。
4 系統(tǒng)測(cè)試
整個(gè)系統(tǒng)的工作流程為: 醫(yī)療板首先采集醫(yī)療檢驗(yàn)結(jié)果,,將其傳遞給CK610 開(kāi)發(fā)板,開(kāi)發(fā)板通過(guò)操作CC2520 進(jìn)行無(wú)線(xiàn)發(fā)送,。而當(dāng)CC2520 接收到數(shù)據(jù)時(shí),,通過(guò)讀取CC2520 SO 管腳獲得收到的數(shù)據(jù),通過(guò)UART 輸出給PC,,PC 運(yùn)行C#編寫(xiě)的圖形界面將檢驗(yàn)結(jié)果顯示出來(lái),,如圖2 所示。
5 結(jié)束語(yǔ)
本文主要提出了一種基于國(guó)產(chǎn)CPU 的SOC 醫(yī)療電子無(wú)線(xiàn)網(wǎng)絡(luò)的路由協(xié)議以及整個(gè)平臺(tái)的軟件架構(gòu)和射頻適配程序,,并實(shí)現(xiàn)了醫(yī)療電子板的點(diǎn)對(duì)點(diǎn)無(wú)線(xiàn)通信,,實(shí)驗(yàn)結(jié)果證明,系統(tǒng)運(yùn)行正常,,達(dá)到預(yù)期效果。在后期工作中,,將加入更多節(jié)點(diǎn)來(lái)驗(yàn)證系統(tǒng)性能.