《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 面向小型全自動生化分析儀的同步可靠的UART通信
面向小型全自動生化分析儀的同步可靠的UART通信
張洪輝1,2, 黎海文1, 高春海1,2, 吳一輝, 宣 明1
1.中國科學(xué)院長春光學(xué)精密機械與物理研究所 應(yīng)用光學(xué)國家重點實驗室,吉林 長春130033;2. 中國科學(xué)院研究生院, 北京100039
摘要: 為了在小型全自動生化分析控制系統(tǒng)中實現(xiàn)雙單片機之間同步、可靠的數(shù)據(jù)傳輸,提出了一種基于握手等待協(xié)議的同步可靠的UART通信系統(tǒng)方案。采用3次等待握手協(xié)議實現(xiàn)通信的同步,在數(shù)據(jù)傳輸過程中加入同步數(shù)據(jù)改進傳輸應(yīng)用的穩(wěn)定性。
關(guān)鍵詞: C8051F060 UART通信 三次握手
中圖分類號: TP368.1
文獻標(biāo)識碼: A
The synchronous and reliable UART communication applied for the automatic biochemistry analyzer
ZHANG Hong Hui1,2,LI Hai Wen1, GAO Chun Hai1,2, WU Yi Hui1, XUAN Ming1
1. Changchun Institute of Optics, Fine Mechanics and Physics, Chinese Academy of Sciences, Changchun 130033,China;2. Graduate Institute of Chinese Academy of Sciences,Beijing 100039,China
Abstract: In order to realize synchronous and reliable UART communication, a new system was introduced by this paper. The communication was established by three-way handshaking, and flag data was added during the communication in order to improve the reliability and stability. The experiments results showed the communication system worked stably and reliably.
Key words : C8051F060; UART communication; three-way handshaking

    為了提高小型全自動生化分析儀的工作效率,其控制系統(tǒng)需采取并行處理的策略,以單個單片機為核心的單處理器因其功能的局限性,已不能完成多任務(wù)的并行處理。采用雙單片機的控制方案可以提高系統(tǒng)的性能,但必須為雙機通信提供穩(wěn)定可靠的方案。
  在傳統(tǒng)的8位、16位及32位處理器中,一般都帶有UART串行口。傳統(tǒng)基于UART的數(shù)據(jù)通信有2種方式:查詢方式和中斷方式。查詢方式下CPU的負擔(dān)較重,浪費了處理器資源,不能夠及時處理其他事件[1];另外,因發(fā)送端與接收端不能同步,當(dāng)數(shù)據(jù)需要接收而接收端未及時響應(yīng)時,就導(dǎo)致數(shù)據(jù)的丟失,造成通信不可靠。中斷方式可以在接收到或者發(fā)送完數(shù)據(jù)時產(chǎn)生中斷,在中斷服務(wù)進程中完成數(shù)據(jù)存儲與處理。由于中斷方式下CPU利用率較高,也能夠?qū)崿F(xiàn)發(fā)送與接收的同步[1],因此在CPU任務(wù)簡單的系統(tǒng)中,一般采用中斷方式實現(xiàn)UART數(shù)據(jù)通信。但是小型全自動化生化分析儀控制系統(tǒng)需要實現(xiàn)多電機位置的閉環(huán)控制、多傳感器的數(shù)據(jù)采集及處理、病人資料的傳輸處理等任務(wù),采用中斷方式的UART通信時,一方面帶來中斷的優(yōu)先級分配問題,當(dāng)系統(tǒng)處于更高優(yōu)先級的中斷處理子程序中時,導(dǎo)致串行通信的中斷不能及時被響應(yīng),造成數(shù)據(jù)丟失;另一方面為協(xié)調(diào)雙處理器間各部件的協(xié)同工作,有時不允許程序的正常執(zhí)行流程被打斷,禁止中斷響應(yīng)。為了保證串口通信的可靠性與穩(wěn)定性,在設(shè)計小型全自動生化分析儀的控制系統(tǒng)時,采用了基于3次等待握手協(xié)議的同步、可靠的UART通信。本文將分別從物理層、傳輸層與應(yīng)用層介紹等待握手協(xié)議在同步可靠的UART通信中的實現(xiàn)。
1 物理層
  物理層實現(xiàn)通信底層的物理連接,為數(shù)據(jù)端設(shè)備提供傳送數(shù)據(jù)的通路,其作用是確保比特流能在物理信道上傳輸[2]。物理層的連接由單片機的異步通信端口(UART串口)實現(xiàn)。
1.1 異步通信簡介[3-4]
  在異步通信中,數(shù)據(jù)是以字符為單位組成字符幀進行傳送的。發(fā)送端與接收端分別按字符幀規(guī)定的格式和波特率來協(xié)調(diào)數(shù)據(jù)的發(fā)送和接收。字符幀和波特率可以由用戶根據(jù)實際情況選擇。
    字符幀由起始位、數(shù)據(jù)位、停止位和空閑位4部分組成,如圖1所示。


1.2 C8051F060的UART
    C8051F060 是SiLab公司推出的混合信號系統(tǒng)芯片,是高度集成的片上系統(tǒng),具有高速指令處理能力[3]。C8051F060有2個UART口,并沒有分配在固定的I/O端口上,而是需要通過優(yōu)先權(quán)交叉開關(guān)譯碼器進行分配。“交叉開關(guān)”按優(yōu)先權(quán)順序?qū)⒍丝?~3的引腳分配給器件上的數(shù)字外設(shè)。C8051F060的UART串口與端口的連接有多種形式,靈活可靠。
2 傳輸層
  傳輸層實現(xiàn)數(shù)據(jù)流的傳輸,并負責(zé)傳輸控制,具備流量控制的功能。其目的是為應(yīng)用層提供可靠無誤的數(shù)據(jù)傳輸。傳輸層的服務(wù)要經(jīng)歷傳輸連接建立階段和數(shù)據(jù)傳送階段[2]。該層由軟硬件結(jié)合實現(xiàn)。硬件實現(xiàn)傳輸線路與控制線路的連接,軟件對其進行設(shè)置和控制。
2.1 傳輸層的硬件電路設(shè)置
  傳輸層的數(shù)據(jù)傳輸線路為物理層的UART串口,其傳輸連接的建立、傳輸流量的控制則通過單片機的另外2個獨立I/O口,用于實現(xiàn)3次等待握手協(xié)議。電路設(shè)計的原理為:發(fā)送端單片機UART口的TX0和RX0分別連接到接收端單片機的UART口的RX0和TX0。在每1個單片機上分別使用2個I/O端口用于握手信號的發(fā)送和接收。其電氣連接如圖2所示。

UART傳輸層的硬件電路設(shè)置

2.2 傳輸層的軟件設(shè)計原理
    為實現(xiàn)數(shù)據(jù)通信的同步和提高通信的可靠性,傳輸層采用3次等待握手協(xié)議實現(xiàn)數(shù)據(jù)的實時同步通信。協(xié)議的原理如圖3所示。

  協(xié)議的原理如下:
    (1)當(dāng)發(fā)送端要發(fā)送數(shù)據(jù)時,發(fā)出第1次握手信號,通知接收端,第1次握手信號始終有效,直到收到接收端對第1次握手信號的應(yīng)答信號,即第2次握手信號。當(dāng)發(fā)送端接收到第2次握手信號后,使第1次握手信號無效,發(fā)出對第2次握手信號的應(yīng)答信號,即第3次握手信號,并隨即發(fā)送數(shù)據(jù)。至此,3次握手協(xié)議完成,發(fā)送端與接收端實現(xiàn)了數(shù)據(jù)的同步傳輸。
  (2)當(dāng)接收端要接收數(shù)據(jù)時,首先等待發(fā)送端發(fā)出的第1次握手信號,當(dāng)發(fā)送端發(fā)送第1次握手信號后,表明發(fā)送端已經(jīng)準(zhǔn)備好要發(fā)送數(shù)據(jù),接收端將第2次握手信號持續(xù)一段時間后清除,等待第3次握手信號。檢測到第3次握手信號后,隨即開始接收數(shù)據(jù)。至此,3次握手協(xié)議完成,發(fā)送端與接收端實現(xiàn)了數(shù)據(jù)的同步傳輸。
2.3 傳輸層的軟件實現(xiàn)
  傳輸層的軟件與硬件電路密切相關(guān),傳輸層的軟件質(zhì)量的好壞決定了最終應(yīng)用層軟件的質(zhì)量。在傳輸層的軟件實現(xiàn)中,與硬件相關(guān)的系統(tǒng)初始化尤為重要。系統(tǒng)上電后,首先要進行的就是初始化,初始化包括系統(tǒng)時鐘初始化、EMIF初始化、定時器初始化、端口初始化以及交叉開關(guān)的配置等??梢酝ㄟ^設(shè)置相應(yīng)的特殊功能寄存器(SFR)來進行。由于篇幅所限,這里主要介紹關(guān)鍵初始化模塊:端口初始化與UART初始化。系統(tǒng)的初始化分為主機的初始化與從機的初始化部分。
2.3.1 端口初始化
  端口初始化的關(guān)鍵是合理地分配C8051F060的數(shù)字外設(shè),使其依據(jù)硬件電路的設(shè)計,對交叉開關(guān)進行配置,并設(shè)置相應(yīng)的端口輸入輸出類型。主機端口初始化中交叉開關(guān)配置部分的程序如下:
void  MasterPORTInit (void)        
{
    OldSFRPAGE = SFRPAGE;   
    SFRPAGE = CONFIG_PAGE;                //切換頁面地址
       XBR0 = 0x02;                                    //SPI0連接到端口
                                         //腳P0.0~P0.3
       XBR1  = 0x00;
       XBR2  = 0x44;                                  //弱上拉全局禁止,交叉
                                                             //開關(guān)使能, UART連接到P0.4~P0.5
       SFRPAGE = OldSFRPAGE;               //恢復(fù)頁面地址   }
  從機的端口初始化與主機的端口初始化原理相同,這里不再累述。
2.3.2 UART初始化
    UART初始化主要包括時鐘源的選擇、工作方式的選擇,邏輯電平的選擇及處理中斷的方式等,其中主機的UART初始化程序如下:
void  MasterUARTInit(void)
{
    OldSFRPAGE = SFRPAGE;
    SFRPAGE = UART_PAGE;     //切換頁面地址
    SCON1 = 0x40;                      //波特率可編程的8位UART,
                                                //停止位的邏輯電平被忽略,
                                               //禁止接收,清空發(fā)送及接收中斷標(biāo)志
    SFRPAGE = OldSFRPAGE;            //恢復(fù)頁面地址
}
    傳輸層數(shù)據(jù)傳輸軟件實現(xiàn)元數(shù)據(jù)傳輸?shù)墓δ?,在這里實現(xiàn)傳輸層的3次握手協(xié)議。依據(jù)3次握手協(xié)議的設(shè)計原理,主機發(fā)送軟件的實現(xiàn)如下:
{
    while(P0_6==1)            //等待第2次握手信號
     P0_7=0;                      //發(fā)出第1次握手信號
    Delay1us(1);      //延時1 ?滋s
    P0_7=1;       //發(fā)送第3次握手信號
}
    工作時序為:當(dāng)主機需要發(fā)送數(shù)據(jù)時,首先將P0_7設(shè)置為低,即為第1次握手信號,從機檢測到該信號后,知道主機將發(fā)送數(shù)據(jù),于是發(fā)出第2次握手信號,將與主機P0_6相連的引腳置低。主機檢測到P0_6為低電平,即第2次握手信號后,將發(fā)出第3次握手信號,即把P0_7設(shè)置為高電平,并隨即發(fā)送數(shù)據(jù)。
    從機接收數(shù)據(jù)時的軟件實現(xiàn)如下:
{
    while(P5_5==1)                 //等待的第1次握手信號
    P5_4=1;   
    P5_4=0;                           //發(fā)出第2次握手信號
    Delay1us(1);
    P5_4=1;
    }
    從機的P5_4、P5_5分別連接主機的P0_6、P0_7。當(dāng)從機接收數(shù)據(jù)時,首先等待主機發(fā)送的第1次握手信號,即主機的P0_7端口(從機的P5_5端口)為低電平。若檢測到第1次握手信號,則發(fā)送第2次握手信號(即將P5_4置低),隨即將P5_4拉高,檢測到第3次握手信號后開始接收數(shù)據(jù)。為實現(xiàn)軟件的簡便性,減少編程出錯的概率,本文定義了2個宏來完成上述握手的過程。宏定義如下:
    #define Send while(P0_6==1)P0_7=0;
    \Delay1us(1); P0_7=1;          //主機發(fā)送的宏定義
    #define Receive  OldSFRPAGE=SFRPAGE;
    \SFRPAGE=CONFIG_PAGE;while(P5_5==1)P5_4=1;
    \P5_4=0;Delay1us(1);P5_4=1;
    \SFRPAGE=OldSFRPAGE;           //從機接收的宏定義
    主機發(fā)送與從機接收元數(shù)據(jù)的函數(shù)分別如下:
void  MasterSendUART (Uchar sdata)
{
        Send;                                                   //完成握手協(xié)議
        OldSFRPAGE = SFRPAGE;               //寄存器頁面切換
        SFRPAGE = UART_PAGE;
        TI1 = 0;                                            //清除發(fā)送完成中斷標(biāo)志
        SBUF1 = sdata;                                  //發(fā)送數(shù)據(jù)
        while(TI1==0);                                  //等待發(fā)送完成
        TI1 = 0;                                            //清空發(fā)送完成標(biāo)志
        SFRPAGE = OldSFRPAGE; }
        Uchar SlaverReceiveUART(void)
{
        Receive;                                            //完成握手協(xié)議
        OldSFRPAGE = SFRPAGE;
        SFRPAGE = UART_PAGE;                //寄存器頁面切換
        SCON1 = 0x50;                                  //允許接收,清空接收完標(biāo)志
        while((SCON1&0x01)==0);                   //等待接收完成
        ReData = SBUF1;                                 //接收數(shù)據(jù)
        SCON1 = 0x40;                                   //清空接收及發(fā)送完成標(biāo)志位
        SFRPAGE = OldSFRPAGE;
        return ReData;                                  //返回接收到的數(shù)據(jù)
}
3  應(yīng)用層
    應(yīng)用層軟件主要為實際應(yīng)用服務(wù),實現(xiàn)系統(tǒng)的應(yīng)用需求。本文所設(shè)計的通信方案是為小型全自動化的生化分析儀控制系統(tǒng)的數(shù)據(jù)通信服務(wù)的,應(yīng)用程序包括生化檢測結(jié)束后病人檢測結(jié)果的交互,以及雙機對各功能器件的控制指令等,下面簡要介紹應(yīng)用層軟件的流程。
  應(yīng)用層軟件完成數(shù)據(jù)的發(fā)送和接收,應(yīng)用層數(shù)據(jù)接收軟件將實現(xiàn)數(shù)據(jù)的完整接收與存儲,發(fā)送軟件完成完整的數(shù)據(jù)發(fā)送。小型全自動生化分析儀控制系統(tǒng)的通信內(nèi)容有結(jié)果數(shù)據(jù)和控制指令。為進一步保障數(shù)據(jù)傳輸?shù)目煽啃耘c同步性,在應(yīng)用層的數(shù)據(jù)傳輸中加入了同步數(shù)據(jù)。應(yīng)用層函數(shù)完成有關(guān)數(shù)據(jù)接收的處理,首先判斷接收到的數(shù)據(jù)類型,并依次調(diào)用相應(yīng)的軟件處理模塊來對接收后數(shù)據(jù)的存儲。圖4為應(yīng)用層的接收端軟件的執(zhí)行流程。


4  結(jié)果
  本文在小型全自動生化分析儀控制系統(tǒng)的通信中分別使用基于3次等待握手協(xié)議的UART通信與基于查詢式的UART通信方案并進行了對比,其結(jié)果如表1所示。當(dāng)系統(tǒng)使用基于查詢式的UART通信時,因雙處理器未能同步工作,導(dǎo)致了接收端未能及時查詢及存儲數(shù)據(jù),造成了數(shù)據(jù)的丟失。而通信建立時的等待握手協(xié)議則提高了通信的穩(wěn)定性與可靠性。


    本文提出的基于3次等待握手協(xié)議的UART傳輸通信同步可靠,應(yīng)用于小型全自動生化分析儀的控制系統(tǒng)通信時,解決了查詢方式下UART因接收與發(fā)送端未同步造成數(shù)據(jù)幀丟失及中斷方式打斷正常程序流程執(zhí)行的問題,取得了令人滿意的效果。
參考文獻
[1]  楊福廣,李貽斌,尹占芳,等.ARM中基于DMA的高效UART通信及其應(yīng)用[J]. 微計算機信息,2008(1-2).
[2]  TANENBAUM A S. AMSTERDAM U V. The netherlands computer networks,forth editI/On[M].北京:清華大學(xué)出版社,2004.
[3]  新華龍電子有限公司.C8051F060混合信號ISP FLASH微控制器數(shù)據(jù)手冊.潘琢金,譯. 2004.
[4]  王曉劍,潘順良,沈為群,等. TMS320DM642中利用McBSP與EDMA實現(xiàn)UART[J]. 電子測量技術(shù) 2008(2).
[5]  Cygnal Integrated Products. Inc. C8051F單片機應(yīng)用解析[M].潘琢金,譯.北京:北京航空航天大學(xué)出版社, 2002.
[6]  何建標(biāo),王宏遠,林靜宜,等.基于最佳接收的UART的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2006,34(8).

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。