SPI息線的UART擴展方法
目前,UART(Universal Asynchronous Receiver Transmitter,通用異步收發(fā)器)接口的使用越來越廣泛,許多設(shè)備上都提供了UART接口。工業(yè)使用的微處理器一般都只包括2個UART口。在實際工業(yè)數(shù)據(jù)發(fā)送和采集應(yīng)用系統(tǒng)中,為了節(jié)省資源,微處理器直接通過UART口與設(shè)備進行數(shù)據(jù)交互。這樣勢必會導(dǎo)致微處理器的UART口不夠,為了方便設(shè)備的接入,因此擴展UART口是一種理想的解決方案。同時,考慮到微處理器的SPI/I2C總線上可以連接多個總線器件,為了充分利用資源,在實際應(yīng)用中可以通過SPI/I2C實施對UART接口的擴展。本文提出了一種SPI擴展UART的方法,主要采用SCl6IS752芯片進行UART接口擴展。SCl6IS752提供了標準SPI總線接口,只需要微處理器能提供標準的SPI或模擬SPI總線接口。整個設(shè)計簡捷、經(jīng)濟,具有通用性。
本文最后介紹了擴展接口在無線數(shù)據(jù)采集集中器中的應(yīng)用,可方便地使用擴展出的UART口連接相應(yīng)的無線通信模塊,實現(xiàn)數(shù)據(jù)的采集和通信。
1 SPI總線
串行外圍設(shè)備接口(Serial Peripheral Interface,SPI)是Motorola公司推出的一種同步串行接口,其硬件功能強大,因此與SPI有關(guān)的軟件比較簡單。一般情況下,實現(xiàn)SPI通信需要3~4根線:同步時鐘(SCK)線,用于實現(xiàn)主器件和從器件在MISO和MOSI線上串行數(shù)據(jù)傳輸?shù)耐?;主輸出/從輸?MOSI)線,用于主器件的輸出或從器件的輸入;主輸入/從輸出(MISO)線,用于主器件的輸入或從器件的輸出;片選控制(CS)線,用于從設(shè)備的選擇。SPI的工作模式有4種,本文采用了其中的一種主模式。
2 SCl6IS752擴展芯片
SCl6IS752是NXP公司推出的一款通過SPI/I2C總線擴展為UART接口的芯片。擴展出雙通道高性能的UART,并且能到達5 Mbps的數(shù)據(jù)率;提供8個額外的可編程的I/O腳;還可以提供數(shù)據(jù)速率高達115.2 kbps的IrDA。另外,SCl6IS752還具有其他高級的特性,例如自動硬件和軟件流控制、自動的RS485支持和軟件復(fù)位。
作為UART擴展接口芯片,SCl6IS752的引腳定義并不復(fù)雜,如圖1所示。XTAL1、XTFAL2引腳用來連接晶振電路,CS/A0用作SPI片選或者I2C總線器件地址選擇A0;I2C/SPI為I2C總線或SPI總線接口選擇;IRQ中斷引腳。其他引腳就主要包括擴展后的2個UART及I/O。
帶有SPI接口的微處理器與SCl6IS752的連接十分方便;如果不帶SPI接口,則可以通過I/O口來實現(xiàn)模擬SPI口的功能。
3 擴展UART的設(shè)計過程及原理
3.1 SPI-UART的工作過程
SPI接口協(xié)議要求接口設(shè)備按主從方式進行配置,且同一時間內(nèi)總線上只能有一個主器件。主輸出/從輸入(MOSI)信號是主器件的輸出和從器件的輸入,數(shù)據(jù)傳輸時最高位在先;主輸入/從輸出(MISO)信號是從器件的輸出和主器件的輸入,數(shù)據(jù)傳輸時也是最高位在先。串行時鐘(SCLK)信號是用于同步主器件和從器件之間在MOSI和MISO線上的串行數(shù)據(jù)傳輸。在整個數(shù)據(jù)傳輸過程中,片選信號(CS)應(yīng)該處于低電平狀態(tài)。
在擴展方案中,微處理器作為主器件,SCl6IS752作為從器件。因此,在設(shè)置SPI控制器時,應(yīng)該設(shè)置SPI為從機。具體工作時序如圖2和圖3所示。
3.2 軟件設(shè)計
軟件設(shè)計的依據(jù):一是硬件系統(tǒng)連接關(guān)系;二是SPI的工作時序;三是SCl6IS752的工作方式。程序主要包括對SPI接口和SCl6IS752的初始化、數(shù)據(jù)的發(fā)送和接收。
SPI接口的初始化。如果處理器提供標準的SPI口,那么只需要選擇SPI引腳功能,然后設(shè)置輸入/輸出;如果處理器不帶標準的SPI口,可以通過普通的I/0口來模擬SPI接口,完成引腳的設(shè)置后,還需要對SPI的模式、時鐘頻率進行設(shè)置。
SCl6IS752的初始化。通過SCl6IS752轉(zhuǎn)換為串口輸出,所以必須考慮到串口的波特率、數(shù)據(jù)位、停止位、校驗位等的設(shè)置。同時,在實驗過程中,采用接收中斷,這些也是在初始化SCl6IS752時要考慮的。
波特率的計算公式如下:
在下面的程序中,給出了對SC16IS752擴展出的A通道的初始化。
數(shù)據(jù)的發(fā)送。SCl6IS752發(fā)送器部分由一個發(fā)送保存寄存器(THR)和發(fā)送移位寄存器(TSR)組成。THR實際是一個64字節(jié)FIFO。THR接收數(shù)據(jù)并將其移入TSR,然后在TSR中將其轉(zhuǎn)化為串行數(shù)據(jù)并在TX端移出。處理器將數(shù)據(jù)通過SPI總線送入SCl6IS752的發(fā)送寄存器中,等待數(shù)據(jù)被取走。
數(shù)據(jù)的接收。SCl6IS752接收器由一個接收保存寄存器(RHR)和接收移位寄存器(RSR)組成。RHR實際上是一個64字節(jié)FIFO。RSR接收RXD端的串行數(shù)據(jù),然后將數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù)轉(zhuǎn)移到RHR。
一般的情況下,為了系統(tǒng)設(shè)計的方便,可以選擇SCl6IS752的數(shù)據(jù)發(fā)送所采用的查詢方式;而接收數(shù)據(jù)是通過芯片的IRQ引腳觸發(fā)處理器的外部中斷,產(chǎn)生中斷信號,通知處理器接收和處理數(shù)據(jù)。其工作程序流程如圖4所示。
4 擴展UART接口實例
采用SPI擴展出的UART可滿足標準串行端口UART的要求,而且操作簡單。設(shè)置串口的波特率、數(shù)據(jù)位、停止位和校驗位,數(shù)據(jù)的發(fā)送與接收都可由用戶自行定義。筆者在無線數(shù)據(jù)采集集中器系統(tǒng)中,對擴展UART的可行性和實用性進行了論證。下面以無線數(shù)據(jù)采集集中器為例,說明SCl6IS752的實際應(yīng)用。
4.1 可行性
在設(shè)計無線數(shù)據(jù)采集集中器過程中,選用了NXP公司的LPC2148作為集中器的處理器。LPC2148自帶2個UART口,而無線數(shù)據(jù)采集集中器需要4個UART,分別為RS232數(shù)據(jù)傳輸、紅外數(shù)據(jù)傳輸、接收數(shù)據(jù)UART和無線通信UART口。很明顯,需要擴展UART口才能滿足要求。微處理器LPC2148有標準的SPI/I2C總線,因此筆者就選擇了SCl6IS752作為UART的擴展芯片。
SCl6IS752具有16C450可兼容的寄存器集,擴展出的UART引腳分別為TX、RX、RTS和CTS。這些都和標準的UART一樣,只是初始化的設(shè)置不同。初始化完成后,具體操作函數(shù)和標準的UART接口操作類似。只是芯片在讀取和發(fā)送數(shù)據(jù)時,與微處理器的數(shù)據(jù)交互是通過SPI總線進行的。
4.2 應(yīng)用設(shè)計
集中器系統(tǒng)具體設(shè)計硬件連接圖如圖5所示。SCl6IS752的IRQ直接與LPC2148的外部中斷EINTl連接。擴展的UART接收到數(shù)據(jù)后,就會通過IRQ產(chǎn)生一個低電平觸發(fā)外部中斷,而在處理器的外部中斷服務(wù)程序中處理接收到的數(shù)據(jù)。在實際集中器測試中,擴展出的UART口與標準的UART具有同樣功效。芯片的晶振頻率采用1.843 2 MHz,與晶振連接的是22 pF的電容,芯片需要采用3.3 V電源供電。與CPU連接的引腳共有6個,功能如表1所列。其中,SPI配置必需的引腳是MO-SI、MISO、SCK。因為選用芯片的功能是SPI轉(zhuǎn)UART,所以直接把12C/SPI引腳接地。
結(jié) 語
UART廣泛用于Modem、手持工業(yè)設(shè)備、條形閱讀器、測試設(shè)備、消費產(chǎn)品與PC機之間,以及小型網(wǎng)絡(luò)之間的通信。本文結(jié)合微處理器的SPI或I2C接口功能,設(shè)計了一種擴展UART接口;微處理器沒有標準的SPI或I2C接口時,也可通過普通的I/O來模擬SPI/I2C總線。擴展出的UART應(yīng)用于實際無線數(shù)據(jù)采集系統(tǒng),實驗結(jié)果表明,完全能夠達到標準UART接口的要求。處理器的UART口不夠用時,也可通過此方案達到設(shè)計的要求。
評論