楊絢淵,蔣建武
(泰州職業技術學院,泰州 225300)
日趨激烈的社會競爭導致了亞健康狀態人群增多。通過建立健康檔案預防重大生理疾病將越來越被大眾所接受。健康檔案建立要求在家庭部署簡單方便易于操作的生理信息采集裝置,并能傳輸到社區醫療服務中心,采集裝置的核心是醫療物聯網關。

圖1 醫療物聯接入網關測試模型結構框圖
本文介紹了一種以MK60N512VMD100芯片(以下簡稱K60)內嵌以太網控制模塊(以太網MAC)為核心控制部件的醫療物聯網關(以下簡稱醫療物聯網關)的設計方法,同時構建了以集成醫用體溫傳感器與血壓傳感器作為前端采樣裝置,醫療物聯網關為接入中介,內嵌K60芯片的web service為服務支持,IE瀏覽器為測試終端的測試模型,通過測試模型驗證了本文所設計醫療物聯網關的正確性與實用性,醫療物聯網關以及測試模型的機構框圖如圖1所示。
醫療物聯網關的硬件結構包含三部分內容:K60最小系統、網絡輸出模塊和采樣接入模塊。本文涉及相關硬件設計在筆者另一篇論文《基于嵌入式構件的醫療物聯網關硬件設計與實現》將做詳細闡述,在此不再贅述。
醫療物聯網關軟件利用SD-FSL-K60嵌入式構件庫(以下簡稱K60構件庫)設計,K60構件庫中包含了14類針對K60芯片不同功能模塊的底層構件封裝,在本設計中使用其中的UART、ENTH兩部分內容,以下將結合這兩個構件介紹醫療物聯網關軟件的設計。
UART構件是用于實現芯片異步串行通信的功能模塊,封裝了包括初始化、單字節收發、多字節收發、串行中斷開關等8個功能函數。
3.2.1 物理層構件
物理層構件函數包括兩類,一類是內部函數,用于對MII接口的讀寫操作,僅限于構件內部訪問;第二類是對外接口函數,提供物理層的初始化和網絡連接判斷功能。物理層初始化完成后,物理層與外部設備之間通過硬件完成二進制比特流的發送。

圖2 SD-FSL-K60嵌入式構件庫結構圖
3.2.2 鏈路層構件
鏈路層構件函數用于對鏈路層初始化以及對于緩沖區數據的收發。初始化操作在主程序開始處調用,發送緩沖區數據函數在網絡層封裝好數據后向鏈路層發送時調用,接收緩沖區數據函數在以太幀中斷接收時調用。在此層構件中可以獲得發送方設備MAC地址,響應信息以太幀的目標從此處獲取。
3.2.3 網絡層構件
網絡層構件完成IP數據報的解析與封裝,網絡層中包含了IP信息,最主要作用是獲取發送放設備的IP地址,響應信息IP數據包的目標IP在此獲取。
3.2.4 TCP傳輸層構件
TCP傳輸層構件用于完成TCP的握手連接,TCP或UDP數據報文段的解析與封裝,提供給應用層調用。
測試模型中UART0模塊接收數字體溫計采集的體溫信息,UART1模塊接收血壓傳感器采集的血壓信息。
根據HKT-09系列數字體溫傳感器使用說明[4]和HKB-08血壓模塊通信協議V1.0[5],傳感器通信參數均為:采用全雙工串行通訊接口,1個起始位、8個數據位、1個停止位、無奇偶校驗位,波特率57600bps。
具體協議設計利用UART構建中提供的相關接口函數設計即可,此處不做重點講解。
系統提供Web Service 服務需要解決以太網數據幀的接收、以太網數據幀的解析、以太網數據幀的封裝和以太網數據幀發送四個問題。
3.4.1 以太網數據幀存儲隊列
在設計中為了存儲以太網數據設計了兩個數據存儲隊列,結構如下:
struct list_head enthdatalist;
struct list_head enthfreelist;
enthdatalist隊列用于存儲放從外部接收的所有以太網數據幀,幀內容存放到pbuf中。系統在以太網接收中斷中將接收數據封裝好后插入enthdatalist隊列中。在主程序中依次取出該隊列中數據進行處理,每次處理完一個節點后將該節點回收存儲到enthfreelist中。
3.4.2 以太網數據幀接收設計
當網絡數據通過RJ45接口進入到網關后,首先進入物理層收發器(EPT)芯片KSZ8041NL中,EPT芯片完成接收后存入相關寄存器中,并向主控芯片K60發送以太網數據傳輸中斷請求,后繼處理過程如圖3所示。
3.4.3 TCP數據報解析與封包
當主程序從以太網數據隊列enthdatalist摘下一個節點后,首先將其中pbuf內容拷貝到以太網物理幀原始數據包指針中,根據需求分別解析出以太幀頭部(Dlc_Header),IP報頭(Ip_Header),TCP 報頭(Tcp_Header)。

圖3 K60 以太網數據幀接收數據流程圖

圖4 以太幀數據格式圖

圖5 醫療物聯接入網關測試界面
TCP數據報是根據IP報頭結構中的ip_prot參數來判斷的,當該值為6時為TCP數據報。以下將客戶端HTTP請求TCP三次握手以后的以太幀為例介紹系統醫療物聯網關TCP響應請求數據封包的方法。
圖4為完整的以太幀包含的數據格式,其中應用層首部和用戶數據部分是在客戶端IE瀏覽器看到的靜態網頁的HTML源碼。該數據中時間數據通過讀取系統時鐘獲得,體溫、收縮壓、舒張壓以及脈搏數據通過前端采樣傳感器獲得,其他部分為靜態網頁的固定數據。將以上數據送入字符數組page[]中,等待傳輸層封裝。
TCP數據報頭部的源端口號(tcp_srcPort)由為醫療物聯網關提供固定值為80;目標端口號(tcp_dstPort)、順序號(tcp_seqNum)從客戶端請求數據包中解析獲得;確認號(tcp_ackNum)在三次握手后系統生成;頭長(tcp_dataOff)固定為5;標志位(tcp_f l ags)為PUSH與ACK置1;窗口默認最大為0xFFFF;校驗和(tcp_chksum)由固定算法獲取;緊急指針(tcp_urgptr)默認值為0x00。由此完成TCP封裝工作。
IP頭部源IP(ip_srcIP[4])由醫療物聯網關提供為192.168.1.80;目標IP(ip_dstIP[4])由客戶端請求數據包中解析獲得;報文總長度(ip_totalLen)由TCP頭長,加IP頭長,應用層頭長和用戶數據長度相加獲得;分片標識(ip_ID)隨機產生,3位標志和13位片內偏移( ip_f l agsOff)取固定值為0x0000;生存時間( ip_timeLive)初始值設為0x80;上層協議(ip_prot)設為0x60,表示上層為TCP協議;校驗和( ip_checkSum)按固定算法計算。由此完成IP封裝。
以太幀頭部源機器地址 (mac_srcMac[6])由醫療物聯網關提供,目前設置為00:BA:DB:AD:01:02;目標機器地址(mac_desMac[6])由客戶端請求數據包中解析獲得;以太幀長度(mac_typLen)由Dlc_Header長度、IP_Header長度、TCP_Header長度、上層協議頭長度、用戶數據長度以及以太幀結尾長度相加獲得。
至此完成了對TCP數據報的以太幀封裝,當客戶端收到響應信息后顯示如圖5所示的瀏覽界面。
本文分析了SD-FSL-K60嵌入式構件庫的結構,介紹了利用K60構件庫完成設計醫療物聯網關的方法,并結合前端醫用采樣傳感器設計了醫療物聯網關的測試模型,通過測試驗證了醫療物聯網關的正確性。本文對于利用內嵌網絡模塊芯片設計嵌入式網關的應用具有一定的參考價值。
[1] 王宜懷, 吳瑾, 蔣銀珍. 嵌入式系統原理與實踐——ARM Cortex-M4 Kinetis微控制器[M]. 北京: 電子工業出版社,2012.
[2] 陳安宇. 醫用傳感器[M]. 北京: 科學出版社, 2008.
[3] 華科醫用傳感器選型目錄V9.1[M]. 合肥華科電子技術研究所, 2011.
[4] HKT-09系列數字體溫傳感器使用說明[Z]. 合肥華科電子技術研究所, 2011.
[5] HKB-08血壓模塊通信協議[Z]. V1.0合肥華科電子技術研究所, 2011.