潘琢金,李 冰,羅 振,楊 華
(沈陽航空航天大學 計算機學院,沈陽 110136)
隨著物聯(lián)網(wǎng)的日益普及、信息共享程度的不斷提高,嵌入式設備接入網(wǎng)絡的需求越來越高。然而傳統(tǒng)工業(yè)控制領域中,帶有串口的嵌入式設備并不具備聯(lián)網(wǎng)能力。要使此類設備接入網(wǎng)絡,目前解決辦法是采用串口轉以太網(wǎng)服務器的方案,通過串口轉以太網(wǎng)服務器將嵌入式設備產(chǎn)生的串口數(shù)據(jù)轉換為以太網(wǎng)幀,進行遠程傳輸。但以太網(wǎng)存在布線困難、靈活性差等缺點,對于作業(yè)環(huán)境復雜的工業(yè)控制領域,鋪設有線以太網(wǎng)比較困難。WiFi作為一種無線局域網(wǎng)形式,能夠克服以太網(wǎng)布線困難、靈活性差的缺點。綜合考慮上述問題,本文提出并設計實現(xiàn)了基于STM32F103微控制器和88W8385無線網(wǎng)絡控制器的UART-WiFi無線模塊,完成了系統(tǒng)硬件的設計,并實現(xiàn)了LwIP(lightweight IP)協(xié)議棧和WiFi驅動的移植。
UART-WiFi模塊在用戶側留有標準RS232接口,可使串口嵌入式設備便捷的接入無線網(wǎng)絡。該UART-WiFi模塊由三部分組成:串口數(shù)據(jù)收發(fā)模塊、無線網(wǎng)絡數(shù)據(jù)收發(fā)模塊和數(shù)據(jù)處理模塊。系統(tǒng)模塊組成原理框圖如圖1所示。
帶有串口的嵌入式設備產(chǎn)生的數(shù)據(jù),通過UART串口傳給UART-WiFi模塊,該模塊將串口數(shù)據(jù)打包成WiFi數(shù)據(jù)包,通過無線網(wǎng)絡數(shù)據(jù)收發(fā)模塊傳輸WiFi數(shù)據(jù)包,實現(xiàn)串口數(shù)據(jù)的網(wǎng)絡化傳輸。反之,也可遠程無線控制嵌入式串口設備。
系統(tǒng)硬件主要由核心微控制器、WiFi無線網(wǎng)絡控制器模塊、RS232串口模塊、電源模塊、時鐘模塊、JTAG調試接口以及可擴展接口等部分組成。其硬件組成結構框圖如圖2所示。其中微控制器采用STM32F103RET6芯片,WiFi無線網(wǎng)絡控制器采用Marvell的88w8385芯片。
圖2 系統(tǒng)硬件組成結構框圖
STM32是意法半導體基于ARM 32位Cortex-M處理器架構設計的一系列微控制器的總稱。該系列微控制器具有功耗小、運行穩(wěn)定、成本低、速度快等優(yōu)點,被廣泛用于嵌入式開發(fā)。本文設計的UART-WiFi模塊選用該系列中的STM32F103RET6微控制器芯片作為核心。它是同類產(chǎn)品中性能最高的產(chǎn)品,時鐘頻率達到了72MHz。它有豐富的外設接口,如定時器、ADC、SPI、SDIO、USB、IIC等。本模塊主要關注的部分有:
1)3 個USART接口,該模塊中只需其中的1個,外接RS232標準的串口模塊,用作與嵌入式設備的串口相連;
2)3 個通用16位定時器,用于定時;
3)片內(nèi)512K的Flash存儲器可用于存儲程序和數(shù)據(jù),多達64KB的SRAM能夠以CPU的時鐘速度進行讀寫;
4)SDIO接口,用于外接88w8385無線網(wǎng)絡控制器,實現(xiàn)無線收發(fā)數(shù)據(jù)的功能。
本設計方案中,STM32F103核心控制器具有控制和數(shù)據(jù)處理的作用。作為控制器,它控制接收數(shù)據(jù)的轉發(fā)。在數(shù)據(jù)處理方面,它將串口接收的數(shù)據(jù)進行解包、分組,然后將其打包成所需的數(shù)據(jù)幀格式。
Marvell 88w8385是全球首個成功將中央處理器和大量片上存儲器嵌入單一芯片進行完成主機卸載處理的片上系統(tǒng)。同時,88w8385體積小、適合小體積系統(tǒng)集成。該芯片集成了IEEE802.11a/b/g MAC/基帶/射頻WLAN,降低了使用的復雜度,節(jié)省了開發(fā)成本。88w8385 WiFi無線網(wǎng)絡控制器具有優(yōu)異的電源管理、靈活的系統(tǒng)配置、工作在全球通用的2.4GHz頻段等特性。含有豐富的外部接口,如CF接口、USB接口、SDIO接口、SPI接口等。本設計方案中,采用88w8385無線網(wǎng)絡控制器的SDIO接口,將其與STM32F103控制器連接,微控制器STM32F103可直接訪問SDIO接口的寄存器,通過SDIO接口進行固件的下載,及數(shù)據(jù)的傳輸。
STM32F103芯片內(nèi)部集成了3個串口模塊USART1、USART2和USART3,本設計方案使用USART1接收RS232串口數(shù)據(jù)。嵌入式串口設備的RS232數(shù)據(jù)線通過MAXIM公司的MAX3232芯片,連接到微控制器STM32F103的USART1上。MAX3232芯片完成TTL信號和RS232信號的相互轉換。
電源模塊是用來給STM32F103控制器供電的電路。本設計方案選用AMS1117-3.3芯片,輸入5.5V電壓,輸出3.3V穩(wěn)定電壓,用于給STM32F103供電。時鐘模塊為STM32F103輸入時鐘信號。STM32F103的電源管理模塊內(nèi)嵌8MHz的RC振蕩器,因此選用8MHz的晶振。
此外,外接JTAG接口用于調試和下載;利用可擴展接口外接指示燈用于指示UART-WiFi模塊的工作狀態(tài)。
軟件系統(tǒng)的設計主要包括三部分:系統(tǒng)的初始化、LwIP協(xié)議棧和WiFi驅動的移植、數(shù)據(jù)收發(fā)過程的設計。
系統(tǒng)初始化主要包括STM32F103RET6微控制器的初始化、串口的初始化、SDIO的初始化、88w8385芯片的初始化及LwIP協(xié)議棧的初始化。系統(tǒng)初始化過程如圖3所示。
圖3 初始化過程
STM32F103RET6微控制器的初始化包括時鐘的初始化、中斷向量的初始化、端口引腳的初始化等。初始化過程主要包括:調用RCC_Configuration()來初始化系統(tǒng)時鐘;調用GPIO_Configuration()來初始化各端口引腳;調用NVIC_Configuration()來映射中斷處理函數(shù)。
串口初始化由函數(shù)USART_Configuration(USART1)完成,通過初始化完成配置串口1到控制臺的工作。方案中,串口主要用于連接外部嵌入式設備。同時,將串口設置為全雙工異步串行傳輸模式,并使用定時器產(chǎn)生的波特率時鐘。
WiFi網(wǎng)絡控制器的初始化主要包括兩部分:SDIO設備枚舉、加載設備固件,由函數(shù)init_marvell_driver()完成。其中stm32_probe()函數(shù)完成SDIO設備的枚舉,if_sdio_prog_firmware()函數(shù)通過SDIO口完成固件的下載。
LwIP協(xié)議棧的初始化由Init_lwIP()完成,包括初始化內(nèi)存堆函數(shù)mem_init(),初始化內(nèi)存池函數(shù)memp_init(),數(shù)據(jù)包管理初始化函數(shù)pbuf_init(),網(wǎng)絡接口管理初始化函數(shù)netif_init()等。
LwIP協(xié)議棧及WiFi驅動層次結構模型如圖4所示。
圖4 LwIP協(xié)議棧及WiFi結構層次圖
3.2.1 LwIP協(xié)議棧的移植
LwIP是用于嵌入式系統(tǒng)的開源裁剪版TCP/IP協(xié)議棧,可運行在無操作系統(tǒng)的平臺上,整個協(xié)議棧實現(xiàn)了基本的IP、ICMP、UDP、TCP協(xié)議。它只需要十幾KB的RAM和40K的ROM就可運行,尤其適用于內(nèi)存資源有限的嵌入式系統(tǒng)。在初始化LwIP協(xié)議棧之前,需要將各協(xié)議移植到開發(fā)板上,使其支持TCP和UDP兩種方式。
LwIP源碼主要包括以下子目錄:存放應用程序接口文件的api子目錄、提供核心代碼文件的core子目錄、提供整個協(xié)議棧使用頭文件的include子目錄、提供網(wǎng)絡接口驅動程序基本框架的netif子目錄及移植過程中自定義的arch目錄。arch包含網(wǎng)絡設備驅動、移植需要修改的文件。移植LwIP協(xié)議棧,需完成lwipopts.h、perf.h和cc.h三個頭文件的定義:
1)cc.h:根據(jù)所選編譯器和處理器特性完成協(xié)議棧內(nèi)部使用數(shù)據(jù)類型的定義;
2)lwipopts.h:完成協(xié)議棧內(nèi)核的參數(shù)配置,若對某個參數(shù)未配置,則使用opt.h文件中的默認值;
3)per.h:定義與系統(tǒng)統(tǒng)計和測量的宏,該宏與平臺處理器密切相關,本設計方案不需要使用任何統(tǒng)計和測量功能,因此文件中的兩個宏直接定義為空。
協(xié)議棧移植完成后,由于服務器在每次收發(fā)數(shù)據(jù)中都要調用底層驅動,因此該部分代碼需要有良好的健壯性和穩(wěn)定性。本設計方案將發(fā)送流程與接收流程分開實現(xiàn),發(fā)送與接收流程如圖5所示。
圖5 底層程序框架圖
發(fā)送流程從初始化函數(shù)ethernetif_init()開始,它完成網(wǎng)絡接口抽象netif的填充并調用鏈路層發(fā)送函數(shù)low_level_output(),再調用發(fā)送函數(shù)lbs_sendpbuf()發(fā)送數(shù)據(jù)。
接收流程除初始化無線網(wǎng)絡控制器外,需要調用鏈路層初始化函數(shù)low_level_init()。收到的數(shù)據(jù)經(jīng)過函數(shù)ethernetif_input(),根據(jù)幀頭攜帶的上層協(xié)議類型判斷交給IP協(xié)議還是ARP協(xié)議處理。
3.2.2 WiFi驅動程序
Marvell 88w8385WiFi模塊驅動主要包括WLAN驅動和SDIO接口驅動兩部分。WLAN驅動負責將數(shù)據(jù)通過SDIO接口轉發(fā)到WiFi硬件或響應WiFi硬件中斷,并從硬件中斷的緩沖區(qū)讀取數(shù)據(jù),通過驅動程序注冊的接口函數(shù),發(fā)送到上層應用。
WiFi Firmware是WiFi設備硬件中執(zhí)行的一段程序,由WiFi驅動將其通過SDIO接口下載到WiFi模塊中,主要功能是實現(xiàn)WiFi硬件接口控制、數(shù)據(jù)緩沖、數(shù)據(jù)幀的轉換、MAC層管理和中斷管理等。
串口數(shù)據(jù)可連續(xù)發(fā)送,而WiFi數(shù)據(jù)則必須以數(shù)據(jù)包為單位發(fā)送。因此,本方案涉及到一個數(shù)據(jù)包長度選取的問題,即:將多少字節(jié)的串口數(shù)據(jù)封裝成一個WiFi數(shù)據(jù)包。針對該問題有兩種解決方案,一種是設定數(shù)據(jù)包長度,當數(shù)據(jù)達到指定長度時產(chǎn)生中斷,將數(shù)據(jù)打包發(fā)送。但如果所產(chǎn)生的數(shù)據(jù)較少,此種方式會有嚴重的延時現(xiàn)象。第二種是通過數(shù)據(jù)包間隔的方式。當串口轉WiFi轉發(fā)器發(fā)現(xiàn)串口數(shù)據(jù)中出現(xiàn)了T毫秒的空閑時間,則認為收到的串口數(shù)據(jù)可以作為一個WiFi數(shù)據(jù)包發(fā)送了。
綜合考慮以上兩種方案,本方案采用硬件中斷與定時器中斷相結合的方式。串口數(shù)據(jù)到達時產(chǎn)生串口中斷,在串口中斷處理程序中將串口數(shù)據(jù)放到緩沖區(qū)中,并開始計時,當計時器到達指定值,就將數(shù)據(jù)發(fā)送出去。網(wǎng)口接到數(shù)據(jù)時,將數(shù)據(jù)放到另一個緩沖區(qū)中,計時器到,將數(shù)據(jù)從串口發(fā)送出去。如圖6所示。
圖6 收發(fā)流程圖
軟硬件設計完成之后,對整個UART-WiFi網(wǎng)關模塊進行數(shù)據(jù)的收發(fā)測試。首先,當WiFi模塊工作在adhoc模式下,成功為筆記本分配ip地址,使用ping命令測試網(wǎng)絡,能夠正確接收數(shù)據(jù)包,表明網(wǎng)絡正常。其次,使用TCP/UDP Socket調試工具,對UART-WiFi模塊外接的工作狀態(tài)指示燈進行遠程控制,TCP/UDP測試結果如圖7所示。
圖7 TCP/UDP測試
從圖7可以看出,WiFi模塊服務器的ip地址是192.168.10.10,分配給筆記本的ip地址是192.168.10.100。UDP的端口號均為8080,筆記本發(fā)送的LED_OPEN1可以打開WiFi模塊上的指示燈,并回送給調試工具LED_OPEN1以表示測試成功。TCP測試與之類似。最后,將Web服務器嵌入到系統(tǒng)中,進行了Web服務器的測試,在網(wǎng)頁中輸入192.168.10.10對模塊進行控制,控制結果通過串口成功顯示,從而實現(xiàn)了WiFi轉串口的功能。串口顯示測試結果如圖8所示。
本文針對串口設備數(shù)據(jù)遠程傳輸不便問題,提出了一種將串口數(shù)據(jù)轉換成WiFi數(shù)據(jù)包,將數(shù)據(jù)傳入無線傳入網(wǎng)絡的解決方案,完成了UART-WiFi模塊的設計與實現(xiàn)。本方案成本低、功耗小、性能穩(wěn)定,測試結果表明,該模塊能夠滿足工業(yè)控制領域中串口數(shù)據(jù)無線傳入網(wǎng)絡的需求。對于作業(yè)環(huán)境復雜的工業(yè)現(xiàn)場,由于其無線的特性,克服布線困難的問題。由于硬件設備成本低、模塊性能穩(wěn)定、應用范圍廣泛,因此具有廣闊的應用前景。
圖8 串口顯示測試
[1]項雷軍.基于ZigBee、GPRS和TCP/IP協(xié)議的無線網(wǎng)關設計[J].微型機與應用,2013,32(8):51-54.
[2]王希朝,張毅,程鵬.面向物聯(lián)網(wǎng)應用的UART-WIFI網(wǎng)關設計[J].微型機與應用,2013,32(8):45.
[3]董武,陸利坤,李業(yè)麗.基于W5300的以太網(wǎng)和串口數(shù)據(jù)相互轉換系統(tǒng)設計[J].制造業(yè)自動化,2013,35(1):139.
[4]湯宏萍,王竹平.嵌入式TCP/IP協(xié)議棧的設計與實現(xiàn)[J].微電子學與計算機,2008,25(6):168.
[5]劉躍軍,蘇靜.基于串口通訊的打包數(shù)據(jù)的接收方案[J].微計算機信息,2007,24(53):118.
[6]范煒,徐洪澤.基于TCP/IP協(xié)議的嵌入式多串口網(wǎng)關的設計[J].計算機工程與設計,2008,29(1):80.
[7]王曉菊,潘琢金,杜睿.嵌入式網(wǎng)絡接口模塊設計及協(xié)議棧實現(xiàn)[J].沈陽航空工業(yè)學院學報,2007,24(1):49.
[8]Jiang Xiangguo,Qi Yulin,Yang Jiancheng A method of streamline the TCP/IP Protocol Stack at embedded systems[J].2010.147.
[9]W.Richard Stevens.范建華,譯.TCP/IP詳解卷1:協(xié)議[M].機械工業(yè)出版社,2013.
[10]Scaglia Sergio.潘琢金,譯.嵌入式internet tcp/ip基礎實現(xiàn)及應用[M].北京航空航天大學出版社,2008.
[11]In-Su Yoon,Sang-Hwa Chung,Jeong-Soo Kim.Implementation of Lightweight TCP/IP for Small,Wireless Embedded Systems.[J]2009.53.