余毅,蘇淑靖
(中北大學(xué)省部共建動態(tài)測試技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,山西太原 030000)
隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,讓全部設(shè)備接入網(wǎng)絡(luò)已成為信息通信發(fā)展的必然趨勢[1]。而傳統(tǒng)工業(yè)設(shè)備使用的串口接口不容易更改,因此設(shè)計(jì)開發(fā)低成本、便捷、高穩(wěn)定性的以太網(wǎng)串口服務(wù)器,成為一種工業(yè)設(shè)備聯(lián)網(wǎng)的實(shí)用性方案。
目前主流的串口服務(wù)器設(shè)計(jì)方案有以下兩種:ARM+網(wǎng)絡(luò)控制器芯片、單片機(jī)+網(wǎng)絡(luò)控制芯片。文獻(xiàn)[2-4]中采用的基于ARM 芯片+網(wǎng)絡(luò)控制器芯片的設(shè)計(jì)方案,雖然通道數(shù)量多、支持多種工作模式,但結(jié)構(gòu)復(fù)雜、面積龐大,不易于開發(fā)。文獻(xiàn)[5-7]中采用的基于單片機(jī)+硬件協(xié)議棧芯片的設(shè)計(jì)方案,雖然易于開發(fā)、成本較低,但大部分功能單一,僅僅實(shí)現(xiàn)了單一串口類型或者單一通道的設(shè)備聯(lián)網(wǎng),不具備實(shí)用性。
該文采用的方案在單片機(jī)+硬件協(xié)議棧芯片的基礎(chǔ)上添加了串口擴(kuò)展電路和RS-232/RS-485 自適應(yīng)電路,將串口服務(wù)器的通道數(shù)擴(kuò)展至8 個,并且能夠兼容RS-232 和RS-485 的串口設(shè)備,兼顧了其成本與實(shí)用性。
串口服務(wù)器是一種通信協(xié)議轉(zhuǎn)換器[8]。其設(shè)計(jì)分為硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個部分。其中硬件設(shè)計(jì)部分又分為主控模塊、以太網(wǎng)接口模塊、串口通信模塊和供電電源模塊。系統(tǒng)硬件整體框圖如圖1所示。
圖1 系統(tǒng)硬件整體框圖
主控單元以STM32F103RCT6 為核心,該芯片采用表面貼片的64 管腳LQFP 封裝,工作電壓為2.0~3.6 V,同時配備3 路串口SPI 接口(用于控制以太網(wǎng)芯片收發(fā)數(shù)據(jù)和連接串口擴(kuò)展芯片)和5 路USART接口(用于實(shí)現(xiàn)串口通信)。
該設(shè)計(jì)采用南京沁恒微電子的一款國產(chǎn)TCP/IP網(wǎng)絡(luò)協(xié)議棧芯片CH395Q,該芯片支持兩種通信接口:SPI 接口和異步串口,能夠方便地與單片機(jī)系統(tǒng)進(jìn)行通信。CH395Q 引腳簡圖如圖2 所示。
圖2 CH395Q引腳簡圖
CH395Q 芯片采用QFN 封裝,共64 個引腳,其中VCC33 引腳與VCC18 引腳為供電端,分別為3.3 V、1.8 V 電源輸入,一般外接0.1 μF 電容去耦;引腳4、5、7 和8 分別為以太網(wǎng)RXP、RXN、TXP、TXN 信號端,用于連接網(wǎng)口接插件HR911105A。接插件HR911105A集成了隔離變壓器和RJ-45 接口,簡化了硬件電路設(shè)計(jì)[9]。XO、XI 引腳10、11 外接32 MHz 晶振;SEL 引腳27 為通信接口選擇端;引腳57 和58 分別為異步串口的輸入輸出端;引腳59、60、61 和62 分別為SPI通信的片選、時鐘信號、輸入和輸出端。主控芯片STM32 可以通過片選信號選擇其中的一種通信方式來控制CH395Q 芯片進(jìn)行以太網(wǎng)通信。
RS-232 標(biāo)準(zhǔn)接口是一種常用的串口通信接口標(biāo)準(zhǔn),其傳輸距離約為15 m,異步數(shù)據(jù)傳輸速率在0~20 kbps范圍內(nèi)[10],多用于設(shè)備之間點(diǎn)對點(diǎn)通信。相比RS-232 串口通信,RS-485 通信距離遠(yuǎn)、傳輸速率快,在100 kbps 傳輸速率下,通信距離可達(dá)1 200 m,同時還增加了多點(diǎn)通信及抗干擾能力。
由于RS-232 與RS-485 串口通信應(yīng)用場景不同且同樣被廣泛使用,所以為使得串口服務(wù)器能兼容更多的串口設(shè)備,該系統(tǒng)設(shè)計(jì)了RS-232 與RS-485兩個串口通信模塊,并使用SN75179 芯片實(shí)現(xiàn)兩種串口通信的相互轉(zhuǎn)換。串口通信模塊選用Maxim 公司的MAX3232 和MAX491 電平轉(zhuǎn)換芯片,MAX491采用+5 V 單一電源供電,傳輸速率可高達(dá)2.5 Mbps。該系統(tǒng)共8 路串口,串口通信原理圖如圖3 所示。
圖3 串口通信原理圖
由于主控芯片STM32F103RCT6只有五個USART串口,而系統(tǒng)需要設(shè)計(jì)8 路串口,所以采用串口擴(kuò)展芯片WK2124 將主控芯片上的一路SPI 轉(zhuǎn)換成4 路USART 串口。圖4 為串口擴(kuò)展芯片WK2124 工作原理圖。
圖4 擴(kuò)展芯片WK2124工作原理圖
WK2124 串口擴(kuò)展芯片可以將一路SPI 主接口轉(zhuǎn)換成4 路全雙工的異步串口。WK2124 內(nèi)置可編程的波特率發(fā)生器,可產(chǎn)生16X 系統(tǒng)時鐘的分頻系數(shù),而系統(tǒng)時鐘由外部晶振生成,不同的晶振頻率則對應(yīng)了不同的串口波特率設(shè)置表,其計(jì)算公式為:
式中,fs為系統(tǒng)時鐘頻率,baud 為需要設(shè)置的波特率,Reg 為計(jì)算結(jié)果,最后通過特殊換算填入寄存器。
由于WK2124 內(nèi)部對每個串口子通道都設(shè)有接收和發(fā)送的256 字節(jié)FIFO,所以用戶可以通過設(shè)置波特率發(fā)生器來控制移位寄存器調(diào)節(jié)每個子通道的波特率。同時WK2124 還內(nèi)設(shè)中斷控制寄存器,用戶可通過設(shè)置寄存器參數(shù)來控制各個子串口通道的狀態(tài)。
系統(tǒng)通過外部電源接入供電,外部電源的電壓范圍為DC 12~54 V。為使得外部電源能夠?yàn)橄到y(tǒng)中各個模塊供電,首先使用降壓芯片MP2494 將外部電源轉(zhuǎn)換為5 V 的電壓輸出,再通過電平轉(zhuǎn)換芯片TLV1117 得到3.3 V 和1.8 V 的輸出電壓。電源電路圖如圖5 所示,MP2494 是一個電流模式的降壓調(diào)節(jié)器,由振蕩電路、電流感應(yīng)放大電路、斜坡電路、補(bǔ)償電路、保護(hù)電路等組成。其中VIN 引腳是電源電壓輸入端,輸入電壓范圍為+4.5~+55 V;EN 引腳為輸入控制端;SW 引腳和BST 引腳之間連接一個電容器,形成一個橫跨電源開關(guān)驅(qū)動的浮動電源。在VIN 接入外部電源后,即可得到一個5 V 左右的輸出電壓VOUT。TLV1117-33 和TLV1117-18 是正向低壓降穩(wěn)壓器,輸入電壓范圍都為2.7~15 V,適用溫度范圍為-40~+125 ℃,可分別輸出3.3 V和1.8 V的電壓。
圖5 電源電路圖
為了實(shí)現(xiàn)串口與以太網(wǎng)的相互轉(zhuǎn)換,該系統(tǒng)在ARM Cortex-M3 處理器中運(yùn)行嵌入式操作系統(tǒng),連接TCP/IP 協(xié)議棧硬件芯片,實(shí)現(xiàn)協(xié)議轉(zhuǎn)換。如圖6所示,以串口轉(zhuǎn)以太網(wǎng)流程為例。系統(tǒng)在完成串口初始化設(shè)置后,監(jiān)測串口數(shù)據(jù)的接收,判斷是否打開Socket,然后等待8 路串口數(shù)據(jù)處理完成,存入數(shù)據(jù)緩沖區(qū)后建立Socket 連接,最后對數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)進(jìn)行打包,并由網(wǎng)口端發(fā)送出來。以UDP 模式為例簡述CH395Q 的初始化過程如下:
圖6 串口轉(zhuǎn)以太網(wǎng)流程圖
①發(fā)送CMD_SET_MAC_ADDR 設(shè)置MAC 地址;
②發(fā)送CMD_SET_IP_ADDR 設(shè)置IP 地址;
③發(fā)送CMD_SET_GWIP_ADDR設(shè)置網(wǎng)關(guān)IP地址;
④發(fā)送CMD_SET_MASK_ADDR 設(shè)置子網(wǎng)掩碼;
⑤發(fā)送CMD_SET_PROTO_TYPE_SN設(shè)置Socket工作在UDP 模式;
⑥發(fā)送CMD_SET_IP_ADDR_SN設(shè)置目的IP地址;
⑦發(fā)送CMD_SET_DES_PORT_SN設(shè)置目的端口;
⑧發(fā)送CMD_SET_SOUR_PORT_SN設(shè)置源端口;
⑨發(fā)送CMD_OPEN_SOCKET_TYPE打開Socket;
⑩命令延時2 ms 以上,獲取⑨的執(zhí)行狀態(tài),返回BUSY 則再次執(zhí)行⑨,返回SUCCESS 則表示成功,其余皆為失敗。
嵌入式操作系統(tǒng)以軟件應(yīng)用為中心,從軟件和硬件的實(shí)際需求出發(fā),管理調(diào)配各種硬件資源[11]。移植嵌入式操作系統(tǒng)能夠提高系統(tǒng)開發(fā)效率。能夠移植到STM32 的實(shí)時操作系統(tǒng)并不多,有以下五種:μClinux、μC/OS-Ⅱ、eCos、FreeRTOS 和rt-thread。由于μC/OS-Ⅱ?qū)崟r操作系統(tǒng)內(nèi)核小、任務(wù)多、系統(tǒng)服務(wù)豐富、容易使用[12],因此,該設(shè)計(jì)選用它作為嵌入式實(shí)時操作系統(tǒng)。嵌入式實(shí)時操作系統(tǒng)主要的任務(wù)是建立消息隊(duì)列與任務(wù)來調(diào)控管理各個通道的數(shù)據(jù)收發(fā)及通信。
在各種協(xié)議棧中TCP/IP 協(xié)議棧得到了最廣泛的使用,它已成為現(xiàn)代因特網(wǎng)的基礎(chǔ)和標(biāo)準(zhǔn)協(xié)議[13]。串口服務(wù)器支持的UDP 協(xié)議是一種簡單的、非連接的傳輸層協(xié)議,也是標(biāo)準(zhǔn)TCP/IP 協(xié)議棧中多種處理協(xié)議的一種[14]。不同于TCP 協(xié)議的高可靠性,UDP無法確保數(shù)據(jù)報(bào)文準(zhǔn)確傳輸。系統(tǒng)中使用的以太網(wǎng)芯片CH395Q 內(nèi)置TCP/IP 協(xié)議棧固件,所以不需要在系統(tǒng)中用軟件方式編寫復(fù)雜的TCP/IP 協(xié)議,減少了系統(tǒng)程序設(shè)計(jì)的工作量。系統(tǒng)以太網(wǎng)幀格式如圖7所示。
圖7 以太網(wǎng)幀格式
TYPE 表示幀數(shù)據(jù)類型,NUMBER 為串口通道號,LENGTH 為數(shù)據(jù)長度,CRC 為數(shù)據(jù)校驗(yàn)位。
在整個系統(tǒng)開始工作前,要對其進(jìn)行初始化設(shè)置[15]。主控芯片STM32F103RCT6 的初始化包括單片機(jī)各個端口功能的設(shè)置、內(nèi)部寄存器配置以及時鐘中斷設(shè)置,如分別設(shè)置兩路SPI 通信端口,用于連接串口擴(kuò)展芯片WK2124 以及以太網(wǎng)控制芯片CH395Q,初始化OSC_IN 和OSC_OUT 引腳上的8 MHz 晶振作為系統(tǒng)的主時鐘,將PA0 配置為中斷信號并設(shè)置中斷的開啟狀態(tài)。
串口擴(kuò)展芯片的初始化是通過主控芯片STM 32F103RCT6 向WK2124 芯片的寄存器內(nèi)寫入指令來完成的,主要包括了中斷寄存器、各路串口發(fā)送和接收數(shù)據(jù)的波特率、字長和校驗(yàn)格式[16]。
由于以太網(wǎng)芯片CH395Q 內(nèi)置TCP/IP 協(xié)議棧固件,所以其初始化只需要配置Socket接口。
由于設(shè)備資源有限,所以將串口端使用串口轉(zhuǎn)USB線連接至PC 機(jī),以太網(wǎng)端用網(wǎng)線連接至PC 機(jī),在一臺PC 機(jī)上模擬串口設(shè)備與網(wǎng)絡(luò)設(shè)備通信的過程。
實(shí)驗(yàn)之前,根據(jù)需求設(shè)置各個參數(shù),包括串口服務(wù)器的工作模式、IP地址、串口端口號和波特率,PC機(jī)的IP 地址和端口波特率(與串口服務(wù)器設(shè)置對應(yīng))。實(shí)驗(yàn)過程:通過串口小助手和網(wǎng)絡(luò)調(diào)試助手軟件來對傳數(shù)據(jù),每路串口設(shè)置9 600~115 200 bit/s 的不同波特率進(jìn)行測試。波特率為9 600 bit/s 時如圖8 所示。
圖8 實(shí)驗(yàn)測試圖
如表1 所示,經(jīng)過實(shí)驗(yàn)測試,系統(tǒng)單通道、多通道接收數(shù)據(jù)[17-18]都無明顯丟包現(xiàn)象,系統(tǒng)總體表現(xiàn)穩(wěn)定。
表1 實(shí)驗(yàn)測試數(shù)據(jù)
該文設(shè)計(jì)一種基于ARM Cortex-M3 處理器的嵌入式多路以太網(wǎng)串口服務(wù)器。利用一個串口轉(zhuǎn)換電路實(shí)現(xiàn)多種類型串口的自適應(yīng),以CH395Q 為核心搭建以太網(wǎng)端口,結(jié)合嵌入式實(shí)時操作系統(tǒng)和TCP/IP協(xié)議實(shí)現(xiàn)串口設(shè)備的網(wǎng)絡(luò)化信息傳輸與監(jiān)控,是一種很好的串口設(shè)備聯(lián)網(wǎng)方案。