曹丹丹,景為平
(南通大學(xué) 江蘇省集成電路設(shè)計(jì)重點(diǎn)實(shí)驗(yàn)室,江蘇 南通 226019)
無線射頻識(shí)別(Radio Frequency Identification,RFID)技術(shù)在零售業(yè)、食品溯源、制造業(yè)等領(lǐng)域得到廣泛應(yīng)用并取得良好的效果。PR9200芯片是一款高度集成芯片,內(nèi)部高效集成ARM Cortex TM-M0處理器、超高頻(Ultra High Frequency,UHF)、射頻模塊以及基帶調(diào)制解調(diào)器等,并且包含UART、SPI、I2C等外設(shè)。與同類產(chǎn)品,如R1000芯片相比,PR9200芯片在價(jià)格上占有優(yōu)勢(shì),且內(nèi)部集成了MCU及各種接口。PR9200芯片的UHF RFID讀寫器在體積、低功耗以及成本上的優(yōu)勢(shì)遠(yuǎn)大于其他同類產(chǎn)品。
相較于大功率的RFID讀寫器而言,PR9200這款小功率讀寫器一般作為手持式讀寫器或是嵌入到其他主系統(tǒng)中,如:作業(yè)現(xiàn)場(chǎng)貨物的入庫、出庫、盤點(diǎn)、基本信息錄入和工廠自動(dòng)化生產(chǎn)等。針對(duì)這些對(duì)操作速度有要求的應(yīng)用,目前市面上的小功率讀寫系統(tǒng)的通信速度遠(yuǎn)遠(yuǎn)沒達(dá)到理想要求。本文為PR9200芯片的讀寫器通過將串口通信改成網(wǎng)口通信且加入FPGA處理部分程序來設(shè)計(jì)一個(gè)高速穩(wěn)定的通信系統(tǒng),并對(duì)測(cè)試結(jié)果進(jìn)行比較和分析。
目前市面上的小功率讀寫器大多以串口或USB接口方式與上位機(jī)界面通信,但在實(shí)際應(yīng)用中,考慮到數(shù)據(jù)傳輸速度以及參與工廠管理系統(tǒng)的實(shí)時(shí)性,網(wǎng)口實(shí)現(xiàn)方式是最佳的選擇。基于PR9200芯片的UHF RFID讀寫核心模塊通過網(wǎng)口與PC相連,PC機(jī)中的上位機(jī)程序通過事先約定的通信協(xié)議發(fā)送數(shù)據(jù),網(wǎng)口監(jiān)聽到數(shù)據(jù)后,再傳給FPGA。FPGA提供數(shù)據(jù)包解析,判斷數(shù)據(jù)包完整性、CRC校驗(yàn)、消息類型是否正確、打包數(shù)據(jù)返回上位機(jī)等功能,F(xiàn)PGA旨在通過并行處理數(shù)據(jù)來提高數(shù)據(jù)處理的速度。
FPGA處理后的數(shù)據(jù)發(fā)往MCU,MCU接到操作命令并調(diào)用相應(yīng)的函數(shù);函數(shù)返回得到的值經(jīng)過FPGA組包后由網(wǎng)口反饋給上位機(jī)軟件,如圖1所示。

圖1 數(shù)據(jù)通信架構(gòu)
通信協(xié)議是指通信雙方的一種約定,約定包括對(duì)數(shù)據(jù)格式、傳輸速度、檢糾錯(cuò)方式以及控制字符定義等問題作出的統(tǒng)一規(guī)定,通信雙方必須共同遵守。
數(shù)據(jù)包格式如圖2所示,開始標(biāo)識(shí)和結(jié)束標(biāo)識(shí)都具有固定值。

圖2 通信協(xié)議據(jù)幀格式
開始標(biāo)識(shí)(start_mark):表示1個(gè)數(shù)據(jù)幀的開始,本協(xié)議約定為0xEE,占1 Byte。
報(bào)頭:報(bào)頭由消息類型(msg_type)、控制代碼(code)、數(shù)據(jù)長(zhǎng)度(length)3部分組成。其中消息類型用于指示數(shù)據(jù)類型,分別為命令0x00,反饋0x01,通知0x02,消息類型占1 Byte;控制代碼用于指示控制命令類型或反饋類型,本協(xié)議的控制代碼主要有讀標(biāo)簽(0x22)、寫標(biāo)簽(0x44)、盤存標(biāo)簽(0x11)以及讀寫器的其他基本設(shè)置,占1 Byte;數(shù)據(jù)長(zhǎng)度用于指示數(shù)據(jù)段的有效長(zhǎng)度,有效長(zhǎng)度用2 Byte表示。
數(shù)據(jù)段:包含數(shù)據(jù)或者控制信息,具體取決于數(shù)據(jù)包類型。對(duì)于命令數(shù)據(jù)包,控制信息置于此;對(duì)于響應(yīng)和通知數(shù)據(jù)包,數(shù)據(jù)信息被置于此。
結(jié)束標(biāo)識(shí)(stop_mark):表示一個(gè)數(shù)據(jù)幀的結(jié)束,協(xié)議約定為0x7E,占1 Byte。
CRC碼:為了校驗(yàn)的準(zhǔn)確性,采用循環(huán)冗余校驗(yàn)碼,從數(shù)據(jù)幀開始標(biāo)識(shí)字段到結(jié)束標(biāo)識(shí)字段的所有消息位計(jì)算16位CRC(X16+X12+X5+1),初始值為0xFFFF。生成的CRC值應(yīng)附加到數(shù)據(jù)包的末尾并發(fā)送。每個(gè)字節(jié)的最高有效位應(yīng)首先發(fā)送。CRC校驗(yàn)碼用2 Byte表示。
相較于單片機(jī)的單步處理而言,F(xiàn)PGA并行處理數(shù)據(jù)的能力大大提高了數(shù)據(jù)處理的速度,且相較于常用的串口,網(wǎng)口傳輸速度更快,也更適用于工廠或企業(yè)的管理系統(tǒng)。
本文采用百兆以太網(wǎng)數(shù)據(jù)傳輸,選用主流的TCP/IP協(xié)議,網(wǎng)口通信總體設(shè)計(jì)如圖3所示,主要包括物理層PHY模塊、MAC控制模塊、協(xié)議處理模塊、數(shù)據(jù)緩存FIFO。FPGA選用實(shí)驗(yàn)室現(xiàn)有的Altera Cyclone IV系列,PHY物理層選用PHY Ethernet模塊。

圖3 百兆以太網(wǎng)數(shù)據(jù)傳輸
MAC層發(fā)送模塊的狀態(tài)轉(zhuǎn)換如圖4(a)所示,共有7個(gè)狀態(tài)。① 系統(tǒng)復(fù)位之初處于初始狀態(tài)Idle,當(dāng)rx_finish(接收數(shù)據(jù)結(jié)束)信號(hào)到來時(shí),進(jìn)入Start狀態(tài);② Start狀態(tài):寫入各層首部,進(jìn)入Make狀態(tài);③ Make狀態(tài):生成首部的校驗(yàn),進(jìn)入Send_mac狀態(tài);④ Send_mac狀態(tài):發(fā)送MAC的前導(dǎo)碼和地址,進(jìn)入Send狀態(tài);⑤ Send狀態(tài):發(fā)送IP數(shù)據(jù)包和TCP數(shù)據(jù)包的首部,判斷處于TCP控制的哪個(gè)狀態(tài),若是在連接狀態(tài),則進(jìn)入Link狀態(tài),等待握手成功。若是在釋放狀態(tài),則進(jìn)入Rel狀態(tài),等待下次連接的請(qǐng)求;若是在已建立連接狀態(tài)則進(jìn)入Send_data狀態(tài);⑥ Send_data狀態(tài):發(fā)送緩存在FIFO中的數(shù)據(jù),進(jìn)入Send_crc狀態(tài);⑦ Send_crc狀態(tài):發(fā)送MAC幀數(shù)據(jù)的CRC校驗(yàn)值,最后跳轉(zhuǎn)到Idle狀態(tài),等待新發(fā)送觸發(fā)的到來。

(a)MAC發(fā)送狀態(tài)

(b)MAC接收狀態(tài)
圖4 MAC工作示意圖
MAC接收模塊的狀態(tài)是發(fā)送模塊的反過程,狀態(tài)轉(zhuǎn)換圖如圖4(b)所示,共10個(gè)狀態(tài)。① 系統(tǒng)復(fù)位之初處于初始狀態(tài)Idle:等待Tx_finish(發(fā)送數(shù)據(jù)結(jié)束)信號(hào)到來,進(jìn)入Rx_wait狀態(tài);② Rx_wait狀態(tài):判斷并接收前導(dǎo)碼,判斷到第1個(gè)0x55,進(jìn)入Start狀態(tài);③ Start狀態(tài):接收剩下的6個(gè)0x55,接收完成后進(jìn)入Frame狀態(tài);④ Frame狀態(tài):接收并判斷幀起始定界符,判斷正確則進(jìn)入Rx_mac狀態(tài);⑤ Rx_mac 狀態(tài):接收目標(biāo)地址和源地址,進(jìn)入Rx_Ip_Protocol狀態(tài);⑥ Rx_Ip_Protocol狀態(tài):接收2 Byte IP類型,跳轉(zhuǎn)到Rx_Ip_layer狀態(tài);⑦ Rx_Ip_layer狀態(tài):接收TCP虛擬包頭以及IP地址,進(jìn)入Rx_Tcp_layer狀態(tài);⑧ Rx_Tcp_layer狀態(tài):接收TCP數(shù)據(jù)包頭,端口號(hào)等,進(jìn)入Rx_data狀態(tài);⑨ Rx_data狀態(tài):接收TCP數(shù)據(jù),進(jìn)入Rx_end狀態(tài);RX_end狀態(tài):接收數(shù)據(jù)完成,跳轉(zhuǎn)到Idle狀態(tài),等待發(fā)送觸發(fā)的到來。
MCU選型則由PR9200芯片自帶的內(nèi)部ARM Cortex TM-M0,MCU與FPGA之間的數(shù)據(jù)傳遞是通過單片機(jī)的外部中斷機(jī)制來實(shí)現(xiàn)。MCU引腳采用P17、P10、P12、P13、P14、E6、E7這7個(gè)端口與FPGA完成通信,相應(yīng)的引腳連接以及功能意義如表1所示。
FPGA向MCU發(fā)送數(shù)據(jù):FPGA判斷完消息類型后,產(chǎn)生復(fù)位信號(hào)rst,準(zhǔn)備向MCU發(fā)送數(shù)據(jù)。首先FPGA 給MCU發(fā)送接收使能信號(hào)(en_fm),通知MCU準(zhǔn)備接收信號(hào);然后FPGA將同步時(shí)鐘信號(hào)(clk_rx_50 MHz)送至MCU中斷0處,F(xiàn)PGA在clk_rx_50 MHz信號(hào)的上升沿向數(shù)據(jù)通信口(data)發(fā)送數(shù)據(jù),MCU在clk_rx_50 MHz信號(hào)的下降沿向數(shù)據(jù)通信口(data)接收數(shù)據(jù);當(dāng)MCU數(shù)據(jù)接收結(jié)束,返回?cái)?shù)據(jù)接收完成信號(hào)(rx_done),并將接收使能信號(hào)(en_fm)拉低,如圖5所示。
MCU向FPGA傳遞數(shù)據(jù):MCU向FPGA發(fā)送復(fù)位信號(hào)rst。首先MCU給FPGA發(fā)送接收使能信號(hào)(en_mf),通知FPGA準(zhǔn)備接收數(shù)據(jù);然后FPGA將clk_tx_50 MHz信號(hào)送至MCU中斷1,MCU在clk_tx_50 MHz信號(hào)的下降沿時(shí)向數(shù)據(jù)通信口(data)發(fā)送數(shù)據(jù),F(xiàn)PGA在clk_tx_50 MHz信號(hào)的上升沿時(shí)接收數(shù)據(jù)通信口(data)接收數(shù)據(jù);當(dāng)FPGA數(shù)據(jù)接收結(jié)束,返回?cái)?shù)據(jù)接收完成信號(hào)(tx_done),并將接收使能信號(hào)(en_mf)拉低,如圖6所示。

表1 FPGA與MCU管腳連接

圖5 FPGA向MCU傳遞數(shù)據(jù)

圖6 MCU向FPGA傳遞數(shù)據(jù)
上位機(jī)發(fā)送的數(shù)據(jù)包經(jīng)網(wǎng)口傳送至FPGA,F(xiàn)PGA對(duì)接收到的數(shù)據(jù)進(jìn)行并行處理。由數(shù)據(jù)的開始標(biāo)識(shí)、數(shù)據(jù)有效長(zhǎng)度以及結(jié)束標(biāo)識(shí)來判斷數(shù)據(jù)包的完整性。若數(shù)據(jù)包不完整直接跳出程序,返回錯(cuò)誤代碼DATA_ERROR(10),錯(cuò)誤代碼進(jìn)入組包函數(shù)Pack_write(),Pack_write()函數(shù)是將返回的代碼按照通信協(xié)議打包成約定格式傳給上位機(jī)。否則進(jìn)行CRC校驗(yàn),CRC檢驗(yàn)錯(cuò)誤則直接返回CRC_ERROR(20)表示CRC錯(cuò)誤,由組包函數(shù)Pack_write()組包并傳給上位機(jī)否則進(jìn)行消息類型判斷,如果不是對(duì)應(yīng)的消息類型,那么返回Not_Support cmd(30)指令,表示不是支持的代碼類型。case語句實(shí)現(xiàn)控制命令(code)的識(shí)別處理,返回的關(guān)鍵數(shù)據(jù)再傳到MCU中斷,調(diào)用對(duì)應(yīng)的函數(shù)。具體處理流程如圖7所示。

圖7 數(shù)據(jù)處理流程

為測(cè)試本文設(shè)計(jì)的基于PR9200模塊通信協(xié)議的高速穩(wěn)定性,對(duì)FPGA與上位機(jī)之間的網(wǎng)口通信進(jìn)行使用Quartus II自帶的Signal Tap II工具進(jìn)行仿真,利用上位機(jī)測(cè)試指定時(shí)間中PR9200讀寫器能讀到的指定標(biāo)簽的數(shù)量。
使用Quartus II自帶的Signal Tap II工具進(jìn)行仿真,Signal Tap II是嵌入式邏輯分析儀工具,工程中加入中.stp文件,相當(dāng)于在FPGA內(nèi)部接入一個(gè)數(shù)字示波器,可以觀察到FPGA內(nèi)部的任何信號(hào)。圖8(a)、(b)為PC端發(fā)送一串?dāng)?shù)據(jù)時(shí),在Signaltap II上抓到的數(shù)據(jù)波形,圖8(c)為波形圖放大之后,對(duì)其作的解釋說明。

(a)以太網(wǎng)口接收數(shù)據(jù)波形

(b)以太網(wǎng)口發(fā)送數(shù)據(jù)波形

(c)以太網(wǎng)發(fā)送(接收)數(shù)據(jù)波形放大圖
在上位機(jī)軟件給定時(shí)間2 s對(duì)同一個(gè)標(biāo)簽自循環(huán)讀取,并記錄讀到標(biāo)簽的個(gè)數(shù)如圖9所示,可以測(cè)得在固定時(shí)間2 s內(nèi),能讀取標(biāo)簽110個(gè),相比圖10用串口通信且未加FPGA進(jìn)行數(shù)據(jù)處理的通信系統(tǒng),平均每秒多識(shí)別了20個(gè)標(biāo)簽。

圖9 改后通信系統(tǒng)讀取標(biāo)簽

圖10 原始通信系統(tǒng)讀取標(biāo)簽
本文將PR9200讀寫器的通信過程加以改善,首先網(wǎng)口在提高通信速度的同時(shí),也更有利于該讀寫器應(yīng)用于物聯(lián)網(wǎng)系統(tǒng)中,便于使用于工廠車間等管理系統(tǒng)中。其次使用FPGA來實(shí)現(xiàn)一部分?jǐn)?shù)據(jù)的并行處理,在確保穩(wěn)定性不變的前提下顯著提高了讀寫器的數(shù)據(jù)處理速度。下一步的研究方向?qū)⒅赜谠鰪?qiáng)整個(gè)通信系統(tǒng)的可靠性、保密性以及可擴(kuò)展性。