国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于雙緩沖器的UART無線模塊設(shè)計(jì)

2015-02-27 10:55鄔芝權(quán)靳桅
現(xiàn)代電子技術(shù) 2015年6期
關(guān)鍵詞:接收數(shù)據(jù)緩沖區(qū)指針

鄔芝權(quán),靳桅

(西南交通大學(xué)峨眉校區(qū)計(jì)算機(jī)與通信工程系,四川峨眉山614202)

基于雙緩沖器的UART無線模塊設(shè)計(jì)

鄔芝權(quán),靳桅

(西南交通大學(xué)峨眉校區(qū)計(jì)算機(jī)與通信工程系,四川峨眉山614202)

在無線通信環(huán)境下,基于UART接口的無線模塊可以釋放CPU軟硬件資源、使用方便、用途廣泛。通過介紹一種廉價(jià)的無線模塊設(shè)計(jì)方案,根據(jù)nRF24L01封裝無線數(shù)據(jù)包和UART接口速度慢的特點(diǎn),設(shè)計(jì)了對(duì)UART數(shù)據(jù)的發(fā)送和接收雙緩沖器,開發(fā)軟硬件,實(shí)現(xiàn)了可靠的無線數(shù)據(jù)通信。實(shí)驗(yàn)表明無線模塊UART接口的可靠通信速率可以達(dá)到128 000 b/s,達(dá)到預(yù)期效果,滿足大部分網(wǎng)絡(luò)化條件下無線通信功能要求。

UART;NRF24L01;緩沖器;無線模塊

0 引言

隨著物聯(lián)網(wǎng)技術(shù)發(fā)展需要,2.4 GHz頻段的無線應(yīng)用得到了空前發(fā)展,無線空中傳輸速率較快,無線模塊提供給用戶使用的大多為SPI接口。相對(duì)于UART接口來說,SPI接口采用同步串行傳輸,傳輸速度較快,但是通信時(shí)傳輸距離短、要占用更多的CPU、內(nèi)存和I/O接口資源。UART接口是全雙工異步接口,大部分MCU自帶這種接口,使用時(shí)編程簡(jiǎn)單,占用內(nèi)存少。根據(jù)用戶需要,可以將UART接口轉(zhuǎn)換為RS 232電平或RS 422電平,延長傳輸距離,所以UART接口在控制類領(lǐng)域仍大量使用。

1 UART無線模塊傳輸數(shù)據(jù)面臨的問題及解決方案

UART無線模塊接口示意如圖1所示,單片機(jī)STC15W204S一方面接收UART接口的數(shù)據(jù)和配置命令,另一方面通過SPI接口與nRF24L01進(jìn)行通信,傳送數(shù)據(jù)、命令、啟動(dòng)發(fā)送和檢測(cè)接收等功能。在設(shè)計(jì)時(shí)一方面要解決各種接口速度不匹配問題,另一方面還要盡量提高數(shù)據(jù)傳輸速度。

圖1 UART無線模塊接口示意圖

1.1 速度匹配問題

通過對(duì)UART、SPI和無線這三種通信模式的數(shù)據(jù)傳輸速度分析來看,SPI通信的速度是由STC15W204S提供的時(shí)鐘信號(hào)決定的,可以達(dá)到5 Mb/s;nRF24L01的無線數(shù)據(jù)包空中速率可以設(shè)置為250 Kb/s,1 Mb/s和2 Mb/s,速度雖然快,但數(shù)據(jù)是以數(shù)據(jù)包方式在空中傳輸,不具備連續(xù)性;UART傳送數(shù)據(jù)的速度范圍為每秒幾百位到1.5 Mb/s,其速率受發(fā)送和接收線對(duì)距離(線長度)的影響非常大,常用速度一般不會(huì)超過128 Kb/s。由于三種通信模式的數(shù)據(jù)傳輸速度不一致,在數(shù)據(jù)傳輸過程中難免會(huì)有部分?jǐn)?shù)據(jù)積壓,需要合理的設(shè)置一段存儲(chǔ)區(qū)來處理數(shù)據(jù)。

1.2 無線通信有效數(shù)據(jù)傳輸速率問題

nRF24L01的無線數(shù)據(jù)包包含前導(dǎo)碼、地址、標(biāo)志位、數(shù)據(jù)(1~32 B)和校驗(yàn),發(fā)射時(shí)消耗在啟動(dòng)、發(fā)送接收模式切換和應(yīng)答時(shí)間較長。由于數(shù)據(jù)包中數(shù)據(jù)長度可以設(shè)置1~32 B,其有效數(shù)據(jù)傳輸率相差很大。下面以發(fā)送一包數(shù)據(jù)時(shí)序來分析其有效數(shù)據(jù)傳輸速率,如圖2所示,為增強(qiáng)型SchockBurstTM模式發(fā)送一個(gè)有效字節(jié)的數(shù)據(jù)包所需時(shí)間為339 μs,每增加一個(gè)有效字節(jié)僅需4 μs,設(shè)發(fā)送一包數(shù)據(jù)的時(shí)間為TECB,MCU上傳數(shù)據(jù)至nRF24L01的時(shí)間為TUL,發(fā)送的有效字節(jié)數(shù)為N,則根據(jù)時(shí)序圖可以得到公式(1):

圖2 增強(qiáng)型SchockBurstTM模式發(fā)送一包數(shù)據(jù)時(shí)序(2 Mb/s)

當(dāng)STC15W204S的晶振設(shè)為22.118 4 MHz時(shí),經(jīng)編程測(cè)試,TUL消耗時(shí)間為250 μs,故TECB=250+ 335+4N=585+4N。

其有效數(shù)據(jù)通信頻率設(shè)為F,則得到公式(2):

將TECB的值代入公式(2)得到:

此外,分蔥和洋蔥兩者有著非常高的相似度,分蔥是通過扦插繁殖的,洋蔥是通過播種繁殖的,它們不是同根同源的,可以說是“表親”關(guān)系。分蔥在使用時(shí)多數(shù)是作為一種調(diào)味料出現(xiàn),它的口感跟洋蔥有很大的不同,分蔥不像洋蔥那樣多汁,它的口感會(huì)更干一些;另外與洋蔥相比,它沒有那么辣,像我們切洋蔥時(shí)都會(huì)有“辣眼睛”的現(xiàn)象,分蔥就不會(huì),它要柔和得多。最重要的是它里面會(huì)有一些抗氧化成分,可以有效預(yù)防心血管疾病。

當(dāng)N=1B時(shí),F(xiàn)=13.582 Kb/s;

當(dāng)N=32B時(shí),F(xiàn)=359.04 Kb/s。

由此可見,數(shù)據(jù)長度的大小很大程度上影響了無線數(shù)據(jù)傳輸效率,一個(gè)數(shù)據(jù)包中數(shù)據(jù)長度越大,則數(shù)據(jù)傳輸效率越高。

為了提高數(shù)據(jù)傳輸速率,每個(gè)無線數(shù)據(jù)包盡量包含更多的有效數(shù)據(jù),但是兩個(gè)無線數(shù)據(jù)包之間會(huì)有一定時(shí)間間隔,如果每個(gè)數(shù)據(jù)包都按最大有效數(shù)據(jù)量來打包,當(dāng)UART接收數(shù)據(jù)量達(dá)不到打包條件時(shí),則會(huì)使程序處于等待打包狀態(tài),即使可以增加延時(shí)退出程序來解決,由于消耗CPU時(shí)間較長導(dǎo)致實(shí)時(shí)性差。

如果每從UART接收一個(gè)數(shù)據(jù)就打包發(fā)送,雖然實(shí)時(shí)性高,但傳輸效率很差,經(jīng)測(cè)試,在這種情況下,UART速度最大可設(shè)置為4 800 b/s。

所以在無線數(shù)據(jù)打包時(shí),變長長度的數(shù)據(jù)包可以有效地解決數(shù)據(jù)傳輸速度和實(shí)時(shí)性問題。

2 解決方案

STC15W204S單片機(jī)的UART為全雙工通信方式,但發(fā)送和接收緩沖器只有1個(gè)字節(jié),為了解決數(shù)據(jù)傳輸?shù)乃俣绕ヅ浜蜔o線數(shù)據(jù)實(shí)時(shí)性較差這兩個(gè)問題,需要設(shè)計(jì)一個(gè)緩沖區(qū)對(duì)接收和發(fā)送的數(shù)據(jù)進(jìn)行緩存。在設(shè)計(jì)緩沖區(qū)時(shí),除了考慮其大小來滿足通信需要,還要考慮如何減少CPU處理數(shù)據(jù)的時(shí)間。首先確定UART數(shù)據(jù)緩沖區(qū)大小,設(shè)置數(shù)據(jù)寫入和讀出操作指針,指針通過取模的方式循環(huán)指向緩沖區(qū)內(nèi)的位置。當(dāng)接收新數(shù)據(jù)時(shí),數(shù)據(jù)寫入指針通過加1取模調(diào)整,然后寫入數(shù)據(jù),當(dāng)從緩沖區(qū)讀數(shù)據(jù)時(shí),數(shù)據(jù)讀出指針通過加1取模調(diào)整,然后取出數(shù)據(jù)。這樣,緩沖區(qū)內(nèi)部數(shù)據(jù)不需要進(jìn)行移動(dòng),大大節(jié)省了CPU處理數(shù)據(jù)的時(shí)間。

當(dāng)UART向無線接口發(fā)送數(shù)據(jù)時(shí),將無線數(shù)據(jù)包的數(shù)據(jù)長度設(shè)置為32個(gè)字節(jié),最后1個(gè)字節(jié)定義為有效數(shù)據(jù)長度,為了保障通信的實(shí)時(shí)性,只要UART接收緩沖區(qū)中有數(shù)據(jù)就啟動(dòng)一次無線打包發(fā)送程序,將數(shù)據(jù)全部打包傳輸,數(shù)據(jù)包的長度是變長的,不超過31個(gè)字節(jié),最后1個(gè)字節(jié)為有效數(shù)據(jù)長度。這樣既提高了數(shù)據(jù)傳輸效率,又保證傳輸實(shí)時(shí)性。

3 程序設(shè)計(jì)

在RAM中定義兩個(gè)存儲(chǔ)區(qū),一個(gè)為接收緩沖區(qū),一個(gè)為發(fā)送緩沖區(qū)。接收緩沖區(qū)長度宏定義為RECV_BUF_ LEN,發(fā)送緩沖區(qū)長度定義為TRANS_BUF_LEN,具體值通過宏定義設(shè)置。定義變量Recv_In_Pointer和Recv_Out_Pointer分別為接收緩沖區(qū)數(shù)據(jù)寫入和讀出指針,Trans_In_Pointer和Trans_Out_Pointer為發(fā)送緩沖區(qū)數(shù)據(jù)寫入和讀出指針,調(diào)整指針后,對(duì)指針取模,則指針固定指向某個(gè)范圍區(qū)域,構(gòu)成循環(huán)緩沖區(qū)。下面討論UART接收數(shù)據(jù)緩沖區(qū)工作原理。

為了避免UART的接收和發(fā)送數(shù)據(jù)時(shí)使CPU處于等待狀態(tài),UART的接收和發(fā)送采用中斷模式,在中斷服務(wù)程序中再判斷是接收中斷還是發(fā)送中斷。如果是接收中斷則將UART數(shù)據(jù)寫入接收緩沖區(qū),并調(diào)整寫入數(shù)據(jù)指針,使之指向下一個(gè)空數(shù)據(jù)項(xiàng)。如果是發(fā)送中斷,則調(diào)整數(shù)據(jù)讀出指針,如果發(fā)送緩沖區(qū)沒有數(shù)據(jù),則將發(fā)送數(shù)據(jù)結(jié)束標(biāo)志置位。

設(shè)置RECV_BUF_LEN=16,在接收數(shù)據(jù)緩沖區(qū),其初始狀態(tài)為輸入指針Recv_In_Pointer和輸出指針Recv_Out_職Pointer都指向接收緩沖區(qū)位置0處,如圖3(a)所示。當(dāng)UART接收到數(shù)據(jù),進(jìn)入U(xiǎn)ART中斷服務(wù)程序,將數(shù)據(jù)寫入接收緩沖區(qū)Recv_In_Pointer指向的位置,然后調(diào)整指針Recv_In_Pointer,使其指向空數(shù)據(jù)項(xiàng),同時(shí)將位變量Recv_End置1,表示接收緩沖區(qū)已有新數(shù)據(jù),如圖3(b)所示。當(dāng)接收緩沖區(qū)有數(shù)據(jù)(Recv_End=1),CPU處理UART數(shù)據(jù)時(shí),從接收緩沖區(qū)Recv_Out_Pointer指向的位置讀出數(shù)據(jù),然后調(diào)整指針Recv_Out_Pointer,使其指向下一個(gè)數(shù)據(jù)項(xiàng),當(dāng)Recv_In_Pointer和Recv_ Out_Pointer的值相同則表示接收緩沖區(qū)中無數(shù)據(jù),同時(shí)將Recv_End清1。如果CPU不及時(shí)處理接收緩沖區(qū)中的數(shù)據(jù),當(dāng)UART接收數(shù)據(jù)過多時(shí),就會(huì)使接收緩沖區(qū)溢出,如圖3(d)所示。

圖3 接收數(shù)據(jù)緩沖區(qū)工作示意圖

下面介紹從UART接收到無線發(fā)送的部分程序。

UART中斷接收部分程序如下:

在無線打包程序設(shè)計(jì)過程中,數(shù)據(jù)包最大數(shù)據(jù)長度為32 B,采用變長數(shù)據(jù)發(fā)送模式,將數(shù)據(jù)包的最后1個(gè)字節(jié)用來表示有效數(shù)據(jù)長度,有效數(shù)據(jù)長度宏定義為TX_PLOAD_WIDTH,可以在編譯之前設(shè)置,最大長度為31 B,無線打包發(fā)送程序如下:

對(duì)于UART發(fā)送數(shù)據(jù)緩沖區(qū),它的工作是接收無線數(shù)據(jù)包至無線接收緩沖區(qū),然后對(duì)數(shù)據(jù)進(jìn)行分析,提取有效數(shù)據(jù),通過UART口發(fā)出。由于無線數(shù)據(jù)包數(shù)據(jù)項(xiàng)的最后一個(gè)字節(jié)表示有效數(shù)據(jù)長度,通過這個(gè)字節(jié)就可以知道應(yīng)該從無線接收緩沖區(qū)取出多少字節(jié)的數(shù)據(jù)。單片機(jī)在這方面處理的速度遠(yuǎn)遠(yuǎn)高于無線打包程序處理速度,所以這方面程序不需要過多優(yōu)化。

4 測(cè)試

測(cè)試時(shí)采用長數(shù)據(jù)串連續(xù)傳輸,傳輸時(shí)會(huì)將數(shù)據(jù)分成多個(gè)數(shù)據(jù)包,根據(jù)UART接收數(shù)據(jù)量的多少變長打包,當(dāng)UART接收數(shù)據(jù)速度越快,則無線數(shù)據(jù)包中含有的有效數(shù)據(jù)量越大。由于無線數(shù)據(jù)包中的數(shù)據(jù)長度設(shè)置為32個(gè)字節(jié),最后1個(gè)字節(jié)表示有效數(shù)據(jù)個(gè)數(shù),只要有效數(shù)據(jù)量不超過31,就說明緩沖區(qū)不會(huì)溢出。

將兩個(gè)UART無線模塊連接至計(jì)算機(jī),在程序代碼中插入測(cè)試代碼,將數(shù)據(jù)包中有效數(shù)據(jù)量返回,使用串口調(diào)試軟件進(jìn)行數(shù)據(jù)通信測(cè)試。其中一個(gè)無線模塊用于接收數(shù)據(jù),如圖4(a)所示,串口號(hào)為COM8,另一個(gè)無線模塊用于發(fā)送數(shù)據(jù),如圖4(b)所示,串口號(hào)是COM9,串口速率都設(shè)置為128 000 b/s,連續(xù)發(fā)送1 000個(gè)字符數(shù)據(jù)用于測(cè)試。測(cè)試結(jié)果表明,無線數(shù)據(jù)發(fā)送時(shí)封裝為70個(gè)數(shù)據(jù)包,其中數(shù)據(jù)包最大有效數(shù)據(jù)長度為15,小于31個(gè),從COM8接收到的數(shù)據(jù)也是1 000個(gè)字符,說明無線模塊在該速率下傳輸是準(zhǔn)確、可靠的。

圖4 無線模塊傳輸測(cè)試

根據(jù)這個(gè)方法對(duì)不同速率情況下,數(shù)據(jù)傳輸和打包情況測(cè)試結(jié)果如表1所示。

該結(jié)果說明當(dāng)速率設(shè)置為4 800 b/s及以下時(shí),可以實(shí)現(xiàn)串口數(shù)據(jù)實(shí)時(shí)打包傳輸,即每接收一個(gè)串口數(shù)據(jù)就立刻打包從無線端口送出,不需要設(shè)置緩沖區(qū)。當(dāng)速率設(shè)置為9 600 b/s及以上時(shí),會(huì)出現(xiàn)幾個(gè)數(shù)據(jù)封裝為一個(gè)無線數(shù)據(jù)包的情況,這種情況就必須要設(shè)置UART接收和發(fā)送緩沖區(qū),才能實(shí)現(xiàn)可靠傳輸。

5 結(jié)語

本無線模塊經(jīng)過多次測(cè)試檢驗(yàn)是非??煽康摹?紤]到無線模塊不同的使用用戶,作者為無線模塊編寫了配置程序,配置信息保存在E2PROM。配置內(nèi)容包括波特率、無線頻道、發(fā)送和接收通道地址、接收運(yùn)行和自動(dòng)應(yīng)答等,用戶在使用時(shí)只需配置一次即可。作者設(shè)計(jì)時(shí)采用了STC新款寬電壓1T單片機(jī)STC15W204S,工作可靠,速度快,價(jià)格便宜。由于無線模塊采用UART接口后,用戶只需要安裝UART接口編程即可,不用考慮無線數(shù)據(jù)收發(fā)問題,使用非常方便。

表1 不同速率下無線數(shù)據(jù)狀態(tài)表

[1]李輝,宋詩,周建江.基于ARM和nRF24L01的無線數(shù)據(jù)傳輸系統(tǒng)[J].國外電子元器件,2008(12):44?46.

[2]曾勇,楊濤,馮月暉.基于nRF24L01的超低功耗無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2008(7):45?48.

[3]劉志平,趙國良.基于nRF24L01的近距離無線數(shù)據(jù)傳輸[J].應(yīng)用科技,2008(3):55?58.

[4]劉超偉,趙俊淋,易衛(wèi)東.基于nRF24L01的無線圖像傳感器節(jié)點(diǎn)設(shè)計(jì)實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2008(6):136?139.

[5]黃秀節(jié),顏可煌,趙偉.基于nRF24L01的無線USB控制系統(tǒng)[J].國外電子測(cè)量技術(shù),2009(12):43?46.

[6]韋積慧.基于nRF24L01的無線網(wǎng)絡(luò)設(shè)計(jì)與實(shí)現(xiàn)[D].長春:吉林大學(xué),2012.

[7]郝文延,焦明華.基于DSP和nRF24L01的無線環(huán)境監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011(3):51?54.

[8]楊旭,李德敏,張謙益.基于nRF24L01的一種無線通信協(xié)議設(shè)計(jì)[J].通信技術(shù),2011(7):57?59.

[9]朱慧彥,林林.基于MCU和nRF24L01的無線通信系統(tǒng)設(shè)計(jì)[J].電子科技,2012(4):81?83.

Design of UART wireless module based on double buffers

WU Zhi?quan,JIN Wei
(Department of Computer and Communication Engineering in Emei Branch,Southwest Jiaotong University,Emei 614202,China)

In the wireless communication environment,the wireless module based on UART interface can release the hard?ware and software resources of CPU.It′s easy to use,and has a wide range of applications.A low cost scheme to design wire?less module is introduced in this paper.According to the encapsulation wireless data packet of nRF24L01 and the slow?speed feature of the UART interface,the double?buffer transmitting and receiving the UART data was designed,the corresponding soft?ware and hardware were developed,and the reliable wireless data communication was realized.Experiments show that the wire?less module with UART interface achievesthedesiredeffect,whichimplements a reliable transmission rate of128 000 b/s,and meets the most requirements of wireless communication function.

UART;NRF24L01;buffer;wireless module

TN911?34;TP368.1

A

1004?373X(2015)05?0005?04

鄔芝權(quán)(1976—),男,工學(xué)碩士,實(shí)驗(yàn)師。研究方向?yàn)榍度胧娇刂啤?/p>

靳桅(1960—),男,工學(xué)學(xué)士,副教授。研究方向?yàn)闊o線電、單片機(jī)控制。

2014?09?18

教育部春暉計(jì)劃科研合作項(xiàng)目(22014044)

猜你喜歡
接收數(shù)據(jù)緩沖區(qū)指針
沖激噪聲背景下基于幅度預(yù)處理的測(cè)向新方法*
低復(fù)雜度多輸入多輸出雷達(dá)目標(biāo)角度估計(jì)方法
嫩江重要省界緩沖區(qū)水質(zhì)單因子評(píng)價(jià)法研究
為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
單片機(jī)模擬串口數(shù)據(jù)接收程序的實(shí)現(xiàn)及優(yōu)化
關(guān)鍵鏈技術(shù)緩沖區(qū)的確定方法研究
基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
地理信息系統(tǒng)繪圖緩沖區(qū)技術(shù)設(shè)計(jì)與實(shí)現(xiàn)
電視技術(shù)(2012年1期)2012-06-06
新竹市| 潢川县| 尉犁县| 芮城县| 阿拉尔市| 彰武县| 商洛市| 汶上县| 磐安县| 陇川县| 嫩江县| 南阳市| 夹江县| 宁晋县| 乳山市| 芒康县| 宁武县| 海盐县| 铁岭县| 阿瓦提县| 台湾省| 玉树县| 九龙县| 长葛市| 柳江县| 连城县| 交口县| 元谋县| 邹城市| 黔东| 广宁县| 岳普湖县| 称多县| 金山区| 盐亭县| 辉南县| 德庆县| 特克斯县| 无棣县| 电白县| 芒康县|