李 焱,張勁松
(1.武漢郵電科學(xué)研究院 湖北 武漢 430074;2.武漢長(zhǎng)江通信智聯(lián)技術(shù)有限公司 湖北 武漢 430074)
ETC系統(tǒng)中FM0軟件解碼的設(shè)計(jì)
李 焱1,張勁松2
(1.武漢郵電科學(xué)研究院 湖北 武漢 430074;2.武漢長(zhǎng)江通信智聯(lián)技術(shù)有限公司 湖北 武漢 430074)
在電子不停車收費(fèi)(Electronic Toll Collection,ETC)系統(tǒng)中車載單元(On Board Unit,OBU)與路側(cè)單元(Road Side Unit,RSU)的短距離通信需要較高的實(shí)時(shí)性和可靠性,無線鏈路使用的是頻點(diǎn)在5.8G的FM0編碼,F(xiàn)M0編碼其特點(diǎn)有便于位同步提取、頻譜帶寬較窄、實(shí)現(xiàn)電路簡(jiǎn)單等。針對(duì)ETC中的FM0編碼,討論了使用意法半導(dǎo)體公司的STM32L0系列低功耗單片機(jī)通過C語(yǔ)言在IAR編譯環(huán)境下實(shí)現(xiàn)FM0解碼,并使用示波器驗(yàn)證出該FM0軟解碼方法30uS內(nèi)即可解出,實(shí)時(shí)性達(dá)到需求。
FM0;短距離通信;ETC;數(shù)據(jù)解碼
Abstract:Short distance communication in electronic toll collection(ETC) system requires high real time and reliability between OBU(on board unit) and RSU(road side unit).The frequency point of ETC system is 5.8 G and the wireless link is using FM0 encoding,because of it's easy to bit-synchronization extraction, the spectral bandwidth is narrow, the realizing circuit is uncomplicated, etc.According to the FM0 coding theory,this paper discusses achieving the FMO decoding by using C Language Programing and the STM32L0 Series low power consumption MCU of STMicroelectronics in the IAR Embedded System development environment.In the end,the feasibility of the FM0 soft decoding method is verified by using the oscilloscope,it only takes 30uS to decode one FM0 frame.
Key words:FM0;DSRC;ETC system;data decoding
經(jīng)過不斷探索和實(shí)踐,中國(guó)ETC的建設(shè)有了飛快的增長(zhǎng)。截至2016年3月,高速ETC全國(guó)聯(lián)網(wǎng)運(yùn)行了半年,總用戶數(shù)達(dá)3 200萬,覆蓋超過29個(gè)省份,跨省通行交易量1.2億筆。ETC系統(tǒng)是建設(shè)智能城市和智能交通的重要部分,它有效地減少了停車收費(fèi)造成的擁擠及延誤,為用戶極大地節(jié)省了出行時(shí)間,同時(shí)為降低資源消耗、減少環(huán)境污染做出了貢獻(xiàn)[1-2]。
在ETC系統(tǒng)中,按照中國(guó)國(guó)家標(biāo)準(zhǔn)GB/T20851-2007中所述,我國(guó)ETC系統(tǒng)的無線數(shù)據(jù)通信使用FM0編碼,但當(dāng)前FM0的編解碼仍然是ETC系統(tǒng)中一個(gè)重難點(diǎn)。雖然現(xiàn)已有少數(shù)射頻芯片自帶FM0的編解碼功能,只需對(duì)其進(jìn)行相應(yīng)的配置就可以通過SPI接口向射頻芯片發(fā)/收數(shù)據(jù)后由射頻芯片進(jìn)行硬件的編/解碼,但是使用該方案成本較高且不通用[3-4]。本文針對(duì)未使用FM0編解碼功能的5.8 G射頻芯片ET6602和STM公司的STM32L0系列低功耗單片機(jī),設(shè)計(jì)和實(shí)現(xiàn)了ETC電子標(biāo)簽的FM0軟件解碼。ET6602是一個(gè)高度集成的5.8 GHz射頻收發(fā)芯片,其待機(jī)時(shí)的電流只有3 uA,成本較低,是使用在OBU上的理想射頻芯片。STM32L0系列是ST公司在2014年推出的基于ARM Cortex M0+內(nèi)核的超低功耗MCU。其待機(jī)電流僅為400 nA,喚醒時(shí)間僅3.5 uS;在運(yùn)行模式下,功耗也只有 139 μA/MHz,優(yōu)化運(yùn)行模式下,功耗下降到87 μA/MHz,而且有足夠的片上外設(shè),適合在OBU上作為主處理器[5]。
FM0編碼(即Bi-Phase Space)即雙相間隔碼編碼,每個(gè)新的比特到來時(shí)會(huì)發(fā)生電平跳變,“1”在一個(gè)比特的中間沒有跳變,“0”在一個(gè)比特的中間也發(fā)生跳變[6]。同時(shí)在國(guó)標(biāo)GB/T 20851.1-2007電子收費(fèi),專用短程通信第2部分中規(guī)定了在ETC中的鏈路層FM0的數(shù)據(jù)幀格式[7]。ETC系統(tǒng)中FM0數(shù)據(jù)幀的長(zhǎng)度是不定的,為了確保標(biāo)志字的唯一性,幀起始標(biāo)志和幀結(jié)束標(biāo)志格式均為二進(jìn)制序列0111 1110(0X7E),當(dāng)收到多個(gè)連續(xù)的起始標(biāo)志時(shí),以最后一個(gè)作為幀的起始。開始標(biāo)志到結(jié)束標(biāo)志之間稱為一個(gè)數(shù)據(jù)幀。在數(shù)據(jù)幀的頭7E標(biāo)志前還有用于同步的前導(dǎo)碼16個(gè)“1”和16個(gè)“0”,數(shù)據(jù)幀的尾7E標(biāo)志后還有后導(dǎo)碼8個(gè)“0”。為了保證透明傳輸,發(fā)送端在發(fā)送數(shù)據(jù)時(shí)連續(xù)發(fā)送5個(gè)“1”后插入一個(gè)“0”;接收端在收到連續(xù)的5個(gè)“1”再判斷后一位,如果第六位是“0”則自動(dòng)刪去后面的“0”,如果第六位是“1”則再判斷后一位,如果第七位是“0”則是幀起始或者幀結(jié)束標(biāo)志,如果第七位是“1”則接收端判斷該數(shù)據(jù)幀無效后舍棄[8-9]。RSU下行數(shù)據(jù)速率達(dá)到256 kbps,所以對(duì)“0”而言,數(shù)據(jù)邊沿之間的寬度只有1.95 us。對(duì)“1”而言,數(shù)據(jù)邊沿寬度只有 3.90 us[10]。
簡(jiǎn)單而言在ETC系統(tǒng)中的FM0編碼即不變則為“1”,變則為“0”,五個(gè)“1”后就插“0”。 FM0 編碼的示意圖如圖1所示。圖1中CLK:數(shù)據(jù)時(shí)鐘;DATA:數(shù)據(jù);FM0:FM0碼的波形輸出。
圖1 FM0編碼示意圖
根據(jù) ETC中 FM0編碼的數(shù)據(jù)“0”和“1”的寬度不一樣,軟解碼可以通過計(jì)算數(shù)據(jù)的電平寬度實(shí)現(xiàn)。FM0軟解碼通常有兩種方式,其一是通過定時(shí)器捕獲數(shù)據(jù)沿,然后通過軟件判斷數(shù)據(jù)邊沿之間的寬度。其二是定時(shí)采樣數(shù)據(jù)口線的電平,通過計(jì)數(shù)方式得到電平寬度。
本設(shè)計(jì)采用第一種方式,在數(shù)據(jù)接收過程中,將STM32L0的通用定時(shí)器TIM2配置為捕獲模式,每1.95 us或者3.90 us捕獲到一個(gè)跳變的邊沿,然后把兩次數(shù)據(jù)沿的值之差保存到對(duì)應(yīng)寄存器,定時(shí)器最快會(huì)每1.95 us更新一次數(shù)據(jù)。這樣以來MCU在1.95 us之內(nèi)必須完成所有的解碼過程,包括判斷“1”、“0”,字節(jié)拼接,判斷是不是“0X7E”和刪除多余的“0”。否則,定時(shí)器捕獲寄存器會(huì)被新來的數(shù)據(jù)覆蓋掉,導(dǎo)致解碼產(chǎn)生錯(cuò)誤。該方式的難點(diǎn)在于要在1.95 us內(nèi)完成以上所有的動(dòng)作MCU必須要有足夠高的主頻,但是在OBU上一旦使用了高速的MCU,其功耗往往難以滿足要求[11-12]。
在本設(shè)計(jì)中,巧妙地利用STM32L0低功耗單片機(jī)的通用定時(shí)器TIM2的從復(fù)位模式和使用DMA傳輸?shù)姆绞娇梢赃_(dá)到1.95 us內(nèi)解碼的要求。根據(jù)STM32L0的手冊(cè)所述,TIM2的從復(fù)位模式是指計(jì)數(shù)器開始依據(jù)內(nèi)部時(shí)鐘計(jì)數(shù),然后正常運(yùn)轉(zhuǎn)直到TI1出現(xiàn)一個(gè)上升沿;此時(shí),計(jì)數(shù)器被清零然后從0重新開始計(jì)數(shù)。如圖2所示,TIM2配置為上下邊沿捕獲模式,在1.95 us或者3.90 us捕獲到一次上升或下降沿時(shí),定時(shí)器的當(dāng)前值被鎖存到捕獲寄存器TIMx_CCR1中,這時(shí)也會(huì)產(chǎn)生一個(gè)DMA請(qǐng)求,觸發(fā)與TIM2綁定的DMA通道,自動(dòng)將TIMx_CCR1中的值搬運(yùn)到MCU;與此同時(shí)TIM2的復(fù)位也被觸發(fā),計(jì)數(shù)器被清零然后從0重新開始計(jì)數(shù),即TIMx_CCR1重新從0開始往上計(jì)數(shù),如此往復(fù)[13]。
通過這種方式可以直接將定時(shí)器捕獲計(jì)數(shù)器TIMx_CCR1中的數(shù)據(jù)自動(dòng)歸零,同時(shí)將要解碼的值直接搬移到MCU。MCU便可以直接通過DMA傳過來的值判斷“1”、“0”,不需要頻繁的進(jìn)出中斷去取數(shù)據(jù),也不用擔(dān)心捕獲寄存器數(shù)據(jù)的丟失,整個(gè)數(shù)據(jù)接收過程不需要MCU的參與,MCU需要處理的流程大大減少,只需專注于解碼過程,使得MCU主頻不再是FM0解碼的瓶頸。
DMA將FM0數(shù)據(jù)幀自動(dòng)搬移到MCU時(shí),需要申請(qǐng)緩存,存放DMA搬移過來的數(shù)據(jù),MCU再對(duì)這些數(shù)據(jù)進(jìn)行解碼。ETC系統(tǒng)中最長(zhǎng)的數(shù)據(jù)幀可以達(dá)到128個(gè)字節(jié)。如果收到的數(shù)據(jù)是全1,1個(gè)字節(jié)需要采集8次邊沿,需要內(nèi)存1 024個(gè)字節(jié);如果收到的數(shù)據(jù)是全0,1個(gè)字節(jié)需要采集16次邊沿,需要內(nèi)存2 048個(gè)字節(jié)。所以至少需要申請(qǐng)2 K的RAM,還不包括ET6602在接受信號(hào)之前可能會(huì)產(chǎn)生的噪聲。由于STM32L0片上RAM有限,利用指針將接收數(shù)據(jù)緩存頭尾連接,形成一個(gè)環(huán)形存儲(chǔ)器,DMA不斷搬移得到新的數(shù)據(jù)會(huì)填充進(jìn)來,老的數(shù)據(jù)會(huì)自動(dòng)地溢出,這樣可以僅僅使用256個(gè)字節(jié)的數(shù)據(jù)緩存就可以完全接收所有的編碼數(shù)據(jù),防止了DMA循環(huán)的時(shí)候數(shù)據(jù)的丟失[14-15]。
圖2 STM32L0對(duì)FM0接收信號(hào)的處理
整個(gè)的解碼流程圖如圖3所示,MCU首先將TIM2設(shè)置為上下邊沿捕獲和從復(fù)位模式,初始化與TIM2綁定的DMA通道DMA1_Channel5,設(shè)置其源地址為TIM2,目的地址為數(shù)據(jù)緩存的地址。而后,進(jìn)入待機(jī)狀態(tài),等待數(shù)據(jù)的到來。當(dāng)有數(shù)據(jù)來臨時(shí),MCU被ET6602產(chǎn)生的wakeup喚醒信號(hào)喚醒,使能TIM2與DMA1_Channel5,此時(shí)DMA開始自動(dòng)將數(shù)據(jù)從TIM2定時(shí)器搬移到MCU緩存數(shù)組中。而在MCU軟件需要完成的便是判斷DMA搬運(yùn)到緩存中的值是“1”還是“0”,判定值由TIM2的采樣頻率決定。由于RSU下發(fā)的“0”的寬度為 1.95 us,“1”的寬度為 3.90 us,如果發(fā)送的是“0”理論上緩存中的值的計(jì)算式為PulseWidth0=1.95 us*TIM2的采樣頻率,如果發(fā)送的是“1”則理論上緩存中的值的計(jì)算式為PulseWidth1=3.90 us*TIM2的采樣頻率,所以PulseWidth1會(huì)是PulseWidth0的2倍,可以直接使用其平均值判定 “0”、“1”,小于1.5*PulseWidth0 判定為“0”,大于 1.5*PulseWidth0 判定為“1”。在解碼過成功同時(shí)啟用另外的一個(gè)定時(shí)器進(jìn)行超時(shí)操作,在解碼中查詢,因?yàn)镋T6602芯片的個(gè)體差異有可能會(huì)產(chǎn)生亂碼,加入定時(shí)器以保證不會(huì)因接收數(shù)據(jù)中出錯(cuò)從而進(jìn)入死循環(huán)。在實(shí)際應(yīng)用中如果判斷已經(jīng)接收到前導(dǎo)碼的16個(gè)“1”,可以不用判斷16個(gè)“0”直接等待幀起始標(biāo)志7E以節(jié)省解碼時(shí)間,判斷起始標(biāo)志7E后開始對(duì)數(shù)據(jù)判定。在接收數(shù)據(jù)時(shí)判斷到幀結(jié)束標(biāo)志7E后,數(shù)據(jù)接收結(jié)束,進(jìn)行CRC校驗(yàn),F(xiàn)M0幀結(jié)構(gòu)中最后兩位為CRC校驗(yàn)位,如果CRC校驗(yàn)成功即解碼成功把幀保留下來,如果CRC校驗(yàn)失敗則將該幀丟棄。最后關(guān)閉TIM2和DMA1_Channel5,進(jìn)入待機(jī)狀態(tài)等待下一次數(shù)據(jù)的來臨。
解碼程序運(yùn)行在IAR Embedded Workbench編譯環(huán)境下,使用意法半導(dǎo)體公司提供的STM32Cube軟件,該軟件可以自動(dòng)生成使用HAL固件庫(kù)的工程,接著在軟件中配置TIM2和DMA通道,直接生成配置后的代碼。在已生成的代碼中加入通過模擬SPI初始化ET6602的寄存器,設(shè)置ET6602的初始狀態(tài)和解碼的流程,編譯后將代碼下載到OBU中運(yùn)行,使用示波器連接上ET6602芯片的管腳即可得到如圖4所示的結(jié)果,探頭1是解碼完成后MCU的IO輸出管腳發(fā)出的跳變,探頭2是RSU發(fā)出的FM0數(shù)據(jù)信號(hào),OBU解出7E即算解碼成功,不需解碼后導(dǎo)碼。從圖4結(jié)果來看,OBU實(shí)時(shí)解碼能力較高,僅需30 us。
圖3 FM0解碼流程圖
在OBU的設(shè)計(jì)中,關(guān)鍵的問題就在于接收到RSU的數(shù)據(jù)后對(duì)其進(jìn)行正確解碼。本文探討了在ETC系統(tǒng)中FM0軟件解碼的實(shí)現(xiàn)方式。靈活的應(yīng)用了STM32L0豐富的片上外設(shè),實(shí)現(xiàn)了OBU對(duì)RSU下行幀的幾乎實(shí)時(shí)的解碼,并通過實(shí)驗(yàn)驗(yàn)證,實(shí)時(shí)性達(dá)到要求,非常適合于低成本的OBU軟件設(shè)計(jì)中。
圖4 解碼實(shí)時(shí)性驗(yàn)證
[1]李雯雯.ETC發(fā)展在高速公路中的現(xiàn)狀分析[J].科技傳播, 2016,8(9):151,200.
[2]龐哲,李磊.高速公路ETC電子收費(fèi)系統(tǒng)的技術(shù)應(yīng)用[J].科技與創(chuàng)新, 2016(9):149.
[3]姚渭箐,周偉.ETC中FM0解碼器的設(shè)計(jì)[J].電子設(shè)計(jì)工程, 2011,19(9):121-124.
[4]昝勇,黎明,楊小芹,等.FM0編碼及其在FPGA中的設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)量技術(shù), 2009,32(2):95-97.
[5]蘆瀟靜.STM32L0微控制器為注重低功耗的應(yīng)用設(shè)計(jì)提供極佳解決方案[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2014(6):85-85.
[6]伍聰子,何怡剛,侯周國(guó),等.LabVIEW平臺(tái)上的FM0碼解碼[J].計(jì)算機(jī)工程,2010,36(12):272-273.
[7]溫志勇.一種基于模式識(shí)別的新型FM0解碼方法[J].移動(dòng)通信, 2016(2):57-60.
[8]黃麗亞,王鵬飛.一種ISO 18000-6C協(xié)議中FM0回波的解碼方法及ARM實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2011,19(14):187-189.
[9]張遠(yuǎn)海,翁佩純.UHF RFID讀寫器基帶信號(hào)FM0解碼研究[J].電子設(shè)計(jì)工程, 2011,19(6):104-106.
[10]王忠焰.不停車收費(fèi)系統(tǒng)(ETC)中車載終端設(shè)計(jì)[D].成都:電子科技大學(xué),2012.
[11]山寶銀,陳俊杰.ETC電子標(biāo)簽的FM0編解碼設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息, 2010,26(35):151-152.
[12]梁飛,張紅雨,陳友平.UHF讀寫器設(shè)計(jì)中的FM0解碼技術(shù)[J].電子設(shè)計(jì)工程, 2010,18(11):172-174.
[13]代玲玉.基于RFID的電子不停車收費(fèi)系統(tǒng)中OBU模塊設(shè)計(jì)[D].武漢:武漢理工大學(xué),2010.
[14]王成.基于STM32的超高頻RFID讀寫器軟件系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)[D].杭州:杭州電子科技大學(xué),2013.
[15]王成,李文鈞,王彬.基于STM32的UHF RFID讀寫器基帶編解碼的實(shí)現(xiàn)[J].硅谷,2012(19):11-12.
Design of FM0 decoding in ETC system on software
LI Yan1,ZHANG Jin-song2
(1.Wuhan Research Institute of Post&Telecommunications,Wuhan430074,China;2.Wuhan YCIG iLink Technology Co.,Ltd,Wuhan430074,China)
TN919
A
1674-6236(2017)19-0157-04
2016-08-16稿件編號(hào)201608118
李 焱(1992—),男,湖北武漢人,碩士研究生。研究方向:ETC系統(tǒng)。