楊絢淵,蔣建武
(泰州職業(yè)技術(shù)學(xué)院,泰州 225300)
日趨激烈的社會競爭導(dǎo)致了亞健康狀態(tài)人群增多。通過建立健康檔案預(yù)防重大生理疾病將越來越被大眾所接受。健康檔案建立要求在家庭部署簡單方便易于操作的生理信息采集裝置,并能傳輸?shù)缴鐓^(qū)醫(yī)療服務(wù)中心,采集裝置的核心是醫(yī)療物聯(lián)網(wǎng)關(guān)。
圖1 醫(yī)療物聯(lián)接入網(wǎng)關(guān)測試模型結(jié)構(gòu)框圖
本文介紹了一種以MK60N512VMD100芯片(以下簡稱K60)內(nèi)嵌以太網(wǎng)控制模塊(以太網(wǎng)MAC)為核心控制部件的醫(yī)療物聯(lián)網(wǎng)關(guān)(以下簡稱醫(yī)療物聯(lián)網(wǎng)關(guān))的設(shè)計(jì)方法,同時構(gòu)建了以集成醫(yī)用體溫傳感器與血壓傳感器作為前端采樣裝置,醫(yī)療物聯(lián)網(wǎng)關(guān)為接入中介,內(nèi)嵌K60芯片的web service為服務(wù)支持,IE瀏覽器為測試終端的測試模型,通過測試模型驗(yàn)證了本文所設(shè)計(jì)醫(yī)療物聯(lián)網(wǎng)關(guān)的正確性與實(shí)用性,醫(yī)療物聯(lián)網(wǎng)關(guān)以及測試模型的機(jī)構(gòu)框圖如圖1所示。
醫(yī)療物聯(lián)網(wǎng)關(guān)的硬件結(jié)構(gòu)包含三部分內(nèi)容:K60最小系統(tǒng)、網(wǎng)絡(luò)輸出模塊和采樣接入模塊。本文涉及相關(guān)硬件設(shè)計(jì)在筆者另一篇論文《基于嵌入式構(gòu)件的醫(yī)療物聯(lián)網(wǎng)關(guān)硬件設(shè)計(jì)與實(shí)現(xiàn)》將做詳細(xì)闡述,在此不再贅述。
醫(yī)療物聯(lián)網(wǎng)關(guān)軟件利用SD-FSL-K60嵌入式構(gòu)件庫(以下簡稱K60構(gòu)件庫)設(shè)計(jì),K60構(gòu)件庫中包含了14類針對K60芯片不同功能模塊的底層構(gòu)件封裝,在本設(shè)計(jì)中使用其中的UART、ENTH兩部分內(nèi)容,以下將結(jié)合這兩個構(gòu)件介紹醫(yī)療物聯(lián)網(wǎng)關(guān)軟件的設(shè)計(jì)。
UART構(gòu)件是用于實(shí)現(xiàn)芯片異步串行通信的功能模塊,封裝了包括初始化、單字節(jié)收發(fā)、多字節(jié)收發(fā)、串行中斷開關(guān)等8個功能函數(shù)。
3.2.1 物理層構(gòu)件
物理層構(gòu)件函數(shù)包括兩類,一類是內(nèi)部函數(shù),用于對MII接口的讀寫操作,僅限于構(gòu)件內(nèi)部訪問;第二類是對外接口函數(shù),提供物理層的初始化和網(wǎng)絡(luò)連接判斷功能。物理層初始化完成后,物理層與外部設(shè)備之間通過硬件完成二進(jìn)制比特流的發(fā)送。
圖2 SD-FSL-K60嵌入式構(gòu)件庫結(jié)構(gòu)圖
3.2.2 鏈路層構(gòu)件
鏈路層構(gòu)件函數(shù)用于對鏈路層初始化以及對于緩沖區(qū)數(shù)據(jù)的收發(fā)。初始化操作在主程序開始處調(diào)用,發(fā)送緩沖區(qū)數(shù)據(jù)函數(shù)在網(wǎng)絡(luò)層封裝好數(shù)據(jù)后向鏈路層發(fā)送時調(diào)用,接收緩沖區(qū)數(shù)據(jù)函數(shù)在以太幀中斷接收時調(diào)用。在此層構(gòu)件中可以獲得發(fā)送方設(shè)備MAC地址,響應(yīng)信息以太幀的目標(biāo)從此處獲取。
3.2.3 網(wǎng)絡(luò)層構(gòu)件
網(wǎng)絡(luò)層構(gòu)件完成IP數(shù)據(jù)報(bào)的解析與封裝,網(wǎng)絡(luò)層中包含了IP信息,最主要作用是獲取發(fā)送放設(shè)備的IP地址,響應(yīng)信息IP數(shù)據(jù)包的目標(biāo)IP在此獲取。
3.2.4 TCP傳輸層構(gòu)件
TCP傳輸層構(gòu)件用于完成TCP的握手連接,TCP或UDP數(shù)據(jù)報(bào)文段的解析與封裝,提供給應(yīng)用層調(diào)用。
測試模型中UART0模塊接收數(shù)字體溫計(jì)采集的體溫信息,UART1模塊接收血壓傳感器采集的血壓信息。
根據(jù)HKT-09系列數(shù)字體溫傳感器使用說明[4]和HKB-08血壓模塊通信協(xié)議V1.0[5],傳感器通信參數(shù)均為:采用全雙工串行通訊接口,1個起始位、8個數(shù)據(jù)位、1個停止位、無奇偶校驗(yàn)位,波特率57600bps。
具體協(xié)議設(shè)計(jì)利用UART構(gòu)建中提供的相關(guān)接口函數(shù)設(shè)計(jì)即可,此處不做重點(diǎn)講解。
系統(tǒng)提供Web Service 服務(wù)需要解決以太網(wǎng)數(shù)據(jù)幀的接收、以太網(wǎng)數(shù)據(jù)幀的解析、以太網(wǎng)數(shù)據(jù)幀的封裝和以太網(wǎng)數(shù)據(jù)幀發(fā)送四個問題。
3.4.1 以太網(wǎng)數(shù)據(jù)幀存儲隊(duì)列
在設(shè)計(jì)中為了存儲以太網(wǎng)數(shù)據(jù)設(shè)計(jì)了兩個數(shù)據(jù)存儲隊(duì)列,結(jié)構(gòu)如下:
struct list_head enthdatalist;
struct list_head enthfreelist;
enthdatalist隊(duì)列用于存儲放從外部接收的所有以太網(wǎng)數(shù)據(jù)幀,幀內(nèi)容存放到pbuf中。系統(tǒng)在以太網(wǎng)接收中斷中將接收數(shù)據(jù)封裝好后插入enthdatalist隊(duì)列中。在主程序中依次取出該隊(duì)列中數(shù)據(jù)進(jìn)行處理,每次處理完一個節(jié)點(diǎn)后將該節(jié)點(diǎn)回收存儲到enthfreelist中。
3.4.2 以太網(wǎng)數(shù)據(jù)幀接收設(shè)計(jì)
當(dāng)網(wǎng)絡(luò)數(shù)據(jù)通過RJ45接口進(jìn)入到網(wǎng)關(guān)后,首先進(jìn)入物理層收發(fā)器(EPT)芯片KSZ8041NL中,EPT芯片完成接收后存入相關(guān)寄存器中,并向主控芯片K60發(fā)送以太網(wǎng)數(shù)據(jù)傳輸中斷請求,后繼處理過程如圖3所示。
3.4.3 TCP數(shù)據(jù)報(bào)解析與封包
當(dāng)主程序從以太網(wǎng)數(shù)據(jù)隊(duì)列enthdatalist摘下一個節(jié)點(diǎn)后,首先將其中pbuf內(nèi)容拷貝到以太網(wǎng)物理幀原始數(shù)據(jù)包指針中,根據(jù)需求分別解析出以太幀頭部(Dlc_Header),IP報(bào)頭(Ip_Header),TCP 報(bào)頭(Tcp_Header)。
圖3 K60 以太網(wǎng)數(shù)據(jù)幀接收數(shù)據(jù)流程圖
圖4 以太幀數(shù)據(jù)格式圖
圖5 醫(yī)療物聯(lián)接入網(wǎng)關(guān)測試界面
TCP數(shù)據(jù)報(bào)是根據(jù)IP報(bào)頭結(jié)構(gòu)中的ip_prot參數(shù)來判斷的,當(dāng)該值為6時為TCP數(shù)據(jù)報(bào)。以下將客戶端HTTP請求TCP三次握手以后的以太幀為例介紹系統(tǒng)醫(yī)療物聯(lián)網(wǎng)關(guān)TCP響應(yīng)請求數(shù)據(jù)封包的方法。
圖4為完整的以太幀包含的數(shù)據(jù)格式,其中應(yīng)用層首部和用戶數(shù)據(jù)部分是在客戶端IE瀏覽器看到的靜態(tài)網(wǎng)頁的HTML源碼。該數(shù)據(jù)中時間數(shù)據(jù)通過讀取系統(tǒng)時鐘獲得,體溫、收縮壓、舒張壓以及脈搏數(shù)據(jù)通過前端采樣傳感器獲得,其他部分為靜態(tài)網(wǎng)頁的固定數(shù)據(jù)。將以上數(shù)據(jù)送入字符數(shù)組page[]中,等待傳輸層封裝。
TCP數(shù)據(jù)報(bào)頭部的源端口號(tcp_srcPort)由為醫(yī)療物聯(lián)網(wǎng)關(guān)提供固定值為80;目標(biāo)端口號(tcp_dstPort)、順序號(tcp_seqNum)從客戶端請求數(shù)據(jù)包中解析獲得;確認(rèn)號(tcp_ackNum)在三次握手后系統(tǒng)生成;頭長(tcp_dataOff)固定為5;標(biāo)志位(tcp_f l ags)為PUSH與ACK置1;窗口默認(rèn)最大為0xFFFF;校驗(yàn)和(tcp_chksum)由固定算法獲??;緊急指針(tcp_urgptr)默認(rèn)值為0x00。由此完成TCP封裝工作。
IP頭部源IP(ip_srcIP[4])由醫(yī)療物聯(lián)網(wǎng)關(guān)提供為192.168.1.80;目標(biāo)IP(ip_dstIP[4])由客戶端請求數(shù)據(jù)包中解析獲得;報(bào)文總長度(ip_totalLen)由TCP頭長,加IP頭長,應(yīng)用層頭長和用戶數(shù)據(jù)長度相加獲得;分片標(biāo)識(ip_ID)隨機(jī)產(chǎn)生,3位標(biāo)志和13位片內(nèi)偏移( ip_f l agsOff)取固定值為0x0000;生存時間( ip_timeLive)初始值設(shè)為0x80;上層協(xié)議(ip_prot)設(shè)為0x60,表示上層為TCP協(xié)議;校驗(yàn)和( ip_checkSum)按固定算法計(jì)算。由此完成IP封裝。
以太幀頭部源機(jī)器地址 (mac_srcMac[6])由醫(yī)療物聯(lián)網(wǎng)關(guān)提供,目前設(shè)置為00:BA:DB:AD:01:02;目標(biāo)機(jī)器地址(mac_desMac[6])由客戶端請求數(shù)據(jù)包中解析獲得;以太幀長度(mac_typLen)由Dlc_Header長度、IP_Header長度、TCP_Header長度、上層協(xié)議頭長度、用戶數(shù)據(jù)長度以及以太幀結(jié)尾長度相加獲得。
至此完成了對TCP數(shù)據(jù)報(bào)的以太幀封裝,當(dāng)客戶端收到響應(yīng)信息后顯示如圖5所示的瀏覽界面。
本文分析了SD-FSL-K60嵌入式構(gòu)件庫的結(jié)構(gòu),介紹了利用K60構(gòu)件庫完成設(shè)計(jì)醫(yī)療物聯(lián)網(wǎng)關(guān)的方法,并結(jié)合前端醫(yī)用采樣傳感器設(shè)計(jì)了醫(yī)療物聯(lián)網(wǎng)關(guān)的測試模型,通過測試驗(yàn)證了醫(yī)療物聯(lián)網(wǎng)關(guān)的正確性。本文對于利用內(nèi)嵌網(wǎng)絡(luò)模塊芯片設(shè)計(jì)嵌入式網(wǎng)關(guān)的應(yīng)用具有一定的參考價(jià)值。
[1] 王宜懷, 吳瑾, 蔣銀珍. 嵌入式系統(tǒng)原理與實(shí)踐——ARM Cortex-M4 Kinetis微控制器[M]. 北京: 電子工業(yè)出版社,2012.
[2] 陳安宇. 醫(yī)用傳感器[M]. 北京: 科學(xué)出版社, 2008.
[3] 華科醫(yī)用傳感器選型目錄V9.1[M]. 合肥華科電子技術(shù)研究所, 2011.
[4] HKT-09系列數(shù)字體溫傳感器使用說明[Z]. 合肥華科電子技術(shù)研究所, 2011.
[5] HKB-08血壓模塊通信協(xié)議[Z]. V1.0合肥華科電子技術(shù)研究所, 2011.