999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于nRF52840的時槽演示實驗

2021-03-22 02:53:17錢光明康日鄧朝豐
電腦知識與技術 2021年4期
關鍵詞:任務

錢光明 康日 鄧朝豐

摘要:nRF52840是NORDIC公司近年推出的一個無線芯片,具有CORTEX-M4內核,支持多種接口和無線協議。該文基于該芯片設計了一個2.4GHz教學演示實驗,幾個從節點首先與一個主節點同步,然后在各自的時槽內向主節點發送數據包。文中給出了收發程序的詳細設計,意在幫助學生盡快地熟悉這一芯片,盡快入門。

關鍵詞:時槽;任務;事件;主節點;從節點

中圖分類號:TP3? ? ? ? ? ?文獻標識碼:A

文章編號:1009-3044(2021)04-0234-03

Abstract: nRF52840 is a wireless chip in recent years. With a CORTEX-M4 core, it supports many interfaces and several wireless protocols. In this paper, a 2.4GHz teaching demonstration experiment is designed with this chip. First, several slave nodes get synchronized with a master node, then send packets to the master in their own time slots. The detailed design of transmitting and receiving program is presented to help students get familiar with this chip and get started as quickly as possible.

Key words: time slot; task; event; master node; slave node

1引言

從nRF24L01到nRF52840,NORDIC推出了一系列無線收發芯片。在nRF52840中,包括CORTEX-M4內核和無線收發模塊,支持多種接口,支持藍牙和IEEE 802.15.4等多種無線結構[1]。但是,開發者要使用和熟悉nRF52840,還是需要花費時間的,尤其是官方提供的固件程序。該芯片與以往nRF24L01相比,無線收發的具體實現和有關的命名,都有了很大的不同[1-2]。本文使用淘寶網購的nRF52840硬件模塊[3],每一個模塊充當一個無線節點,一個主節點,幾個從節點。設計了一個傳統的2.4GHz收發包演示實驗[4],即從節點在獲得與主節點同步后,在各自的時槽內,向主節點發送各自的數據包。該實驗在芯片硬件和官方基本固件程序的基礎上進行設計,不使用其他軟件模塊和第三方程序,從而有利于熟悉芯片的工作原理,把握底層運行指標。

2 nRF52840的2.4GHz無線狀態轉換圖

nRF52840遵循圖1來進行2.4GHz無線收發[1]。圖中的英文名詞可分為三類。

第一類是每一個方框中的名詞,代表狀態,例如TX代表發送狀態。一共有九個狀態:TXDISABLE(發送取消狀態),RXDISABLE(接收取消狀態),DISABLED(已取消狀態),TXRU(發送準備狀態),RXRU(接收準備狀態),TXIDLE(發送空閑狀態),RXIDLE(接收空閑狀態),TX(發送狀態),RX(接收狀態)。

第二類是方框外帶斜杠的名詞,代表事件(EVENT)或稱事件標志。一共有三類事件:/DISABLED(已取消事件),/READY(準備好事件),/END(結束事件)。

第三類是方框外不帶斜杠的名詞,代表任務(TASK)或稱命令。一共有五類任務:DISABLE(取消任務),TXEN(發送準備任務),RXEN(接收準備任務),START(啟動任務),STOP(停止任務)。注意這里的“任務”,實際上是一種命令,它與操作系統中的“任務”概念非常不同。

在本文下面的程序中,會有這些狀態、任務和事件的使用舉例。

3 同步數據包的發送和接收

為使得每個從節點不沖突,只在各自的時槽中發包,必須先同步。所有從節點復位后,首先處于接收狀態。然后復位主節點,由主節點發出同步數據包beacon。

這里,先明確一下實驗中的收發次序:主節點發beacon,所有從節點接收。beacon完畢后,進入時槽1,從節點1發數據包1,主節點收;時槽1完畢后,進入時槽2,從節點2發數據包2,主節點收;后面的時槽以此類推。實驗中,每個時槽寬度設為1600μs。

圖2是主節點發beacon的程序段。圖中,為了使printf 語句能正常使用,并通過串口調試助手在PC機上輸出有關信息,那么,在初始化階段需要設置好串口,我們使用官方提供的函數APP_UART_FIFO_INIT來完成。

接下來,本程序段中的packet_build_send函數用于準備包、發包、并等待包發送完畢。準備在存儲器中的數據包(數組packet存放)需要由S0、LENGTH、S1和PAYLOAD這四個部分組成,其中S0域、S1域和LENGTH域都是可選的,這三個域加上數據域PAYLOAD,總長不超過258個字節。LENGTH域一般用來表示數據域PAYLOAD的長度(字節數)。本實驗中,不設S0域和S1域,LENGTH域為一個字節,設為255,而PAYLOAD則為255個字節。

我們將PAYLOAD的首字節設為nodenum,代表發包節點的編號,主節點編號為0。從節點1的編號為1,從節點2的編號為2,以此類推。包數組packet中,packet[0]=LENGTH,packet[1]=nodenum。

packet_build_send函數中先準備好一個包(充當beacon),然后將包地址賦給NRF_RADIO->PACKETPTR這一指針,接下來按圖3的順序發包并等待發送結束。圖3中,先發出TXEN任務,然后等待/READY事件。再發出START任務,然后等待/END事件。一旦出現/END事件,就表明發送完畢。

再回到圖2。radio_disable函數中,會通過DISABLE任務,使模塊回到DISABLED狀態。然后,prepare_for_receive函數為接收數據包做準備,該函數主要是發出RXEN任務,并等待/READY事件。接下來,調用nrfx_timer_enable函數,以啟動定時器TIMER_LED0,進入時槽1。該定時器的定時周期,就定為時槽的寬度。當然,需要先初始化該定時器,主要利用nrfx_timer_us_to_ticks函數將時槽寬度1600μs轉換為ticks,另外,還需在TIMER_LED0所配備的事件處理函數timer_led_event_handler0中,將時槽控制變量slotend加1。

對于從節點,其接收beacon的程序段則如圖4所示。prepare_for_receive函數為接收beacon做好了準備,接著,發出START任務,進入RX接收狀態,并等待/END事件標志。/END一旦變為1,則說明收到了一個包。如果CRCSTATUS為1(說明CRC校驗正確)且packet[1]=0(說明該包來自主節點master),就認為正確收到了beacon,便通過nrfx_timer_enable函數,啟動定時器TIMER_LED1,進入時槽1。當然,TIMER_LED1也需要初始化,定時周期也是1600μs。如果CRCSTATUS和packet[1]都出錯,說明收到的不是正確的beacon,程序則回到loop位置,繼續接收。

4 從節點輪流發包

進入時槽1后,從節點1發包,主節點接收。從節點發包的程序段如圖5所示。slotnum++的結果,在時槽1中為1,時槽2中為2,以此類推。顯然,slotnum的值代表時槽的編號。任何一個時槽中,從節點發包都用圖5。對于從節點1,其節點編號nodenum=1,從圖中的if語句可知:只有當nodenum和slotnum相等,即節點編號和時槽編號相等時,發包函數packet_build_send才會被調用。該發包函數準備數據包時,會將nodenum賦值給packet[1]。

現在看看時槽控制變量slotend的使用。每個時槽開始時,slotend=0。定時周期1600μs后,通過中斷,TIMER_LED1所配備的事件處理函數timer_led_event_handler1被調用,該函數中slotend將被置為1,表明一個時槽的時間結束。

從時槽1開始,主節點接收數據包的程序段如圖6所示。主節點的定時器命名為TIMER_LED0,如前所述,其定時周期也是1600μs,時槽控制變量slotend的用法與圖5相同。圖6中,一開始主節點發出START任務,進入RX接收狀態,等待從節點發包。當/END事件到來時,表明收到了包,進一步判斷該包是否正確(CRC檢查),是不是想要的包(nodenum和slotnum是否相等),并用printf語句輸出相關信息。無論是否收到數據包,也無論收到的包正確與否,都要等待時槽結束,一旦slotend=1,就進入下一時槽。

收發雙方的時間一定要注意配合。圖中每一個語句的執行都需要時間,尤其是printf語句,輸出信息越長,耗時就越長。所以,如果要增加發送方或接收方printf的輸出信息,則需細心調試。要保證發送方發出數據時,接收方一定要已經準備好。

5結束語

有些程序段在上面并未列出,其中主要有串口的初始化和定時器的有關函數,實驗者可依據官方和商家有關資料,先學會這兩方面的知識。上述實驗演示效果良好,在此基礎上,可以進一步改進和加深。例如,beacon的包可以短一些,從節點可以采用競爭方式發包,發包數據可以嘗試加密等。

參考文獻:

[1] nRF52840 Product Specification v1.1[Z], 2019. https://infocenter.nordicsemi.com/index.jsp

[2] nRF24L01+Product Specification v1.0[Z], 2008. https://infocenter.nordicsemi.com/index.jsp

[3] nRF52840 Eval Kit 用戶手冊 v1.0.2[Z], 2019. https://www.waveshare.net/w/upload/a/a8/NRF52840-Eval-Kit-user-manual-cn.pdf.

[4] 錢光明,易超.短距離無線網的一個教學實驗設計[J].計算機時代,2020,27(6): 109-111.

【通聯編輯:代影】

猜你喜歡
任務
論建設工程項目信息管理
小學英語“任務型”教學模式的探究
活化英語課堂教學“三步驟”探微
文理導航(2016年33期)2016-12-19 18:43:16
關于中職電工電子實訓教學的初步探索
考試周刊(2016年21期)2016-12-16 11:51:59
從預習著手,構建高效的英語寫作課堂
考試周刊(2016年21期)2016-12-16 10:44:16
丟棄“正確的廢話”
任務型教學模式應用于會計英語詞匯教學的有效性研究
淺談任務型教學在高中英語語法教學中的應用
明確“任務” 文中有“我”
當代教育工作者的任務——教會學生做人
主站蜘蛛池模板: 久久福利网| 99热这里只有免费国产精品| 国产成人1024精品| 在线观看国产网址你懂的| 免费人成视频在线观看网站| 免费人成在线观看成人片| 免费无码一区二区| 国产一区二区福利| 国产午夜精品一区二区三| 99在线视频免费观看| 亚洲精品无码AⅤ片青青在线观看| 国产欧美专区在线观看| 国产99精品久久| 日韩在线1| 92午夜福利影院一区二区三区| 谁有在线观看日韩亚洲最新视频| 国产免费精彩视频| 久久综合色天堂av| 日韩色图在线观看| 国产自视频| 国产一区二区丝袜高跟鞋| 久久亚洲中文字幕精品一区| 91精品视频在线播放| 精品三级网站| 国产免费黄| 久久久亚洲色| 久久久四虎成人永久免费网站| 五月婷婷中文字幕| 免费看a级毛片| 国产欧美日韩资源在线观看| 97国产精品视频人人做人人爱| 2021天堂在线亚洲精品专区| 人人91人人澡人人妻人人爽| 国产精品夜夜嗨视频免费视频| 大香伊人久久| 九九热精品视频在线| 国产精品无码一区二区桃花视频| 国产成人综合在线观看| 色婷婷狠狠干| 久久网欧美| 日韩免费视频播播| 视频二区国产精品职场同事| 亚洲熟女偷拍| 亚洲人成高清| 99精品国产自在现线观看| 五月丁香在线视频| V一区无码内射国产| 国产午夜精品一区二区三| 激情综合网址| 91精品国产自产在线老师啪l| 高清欧美性猛交XXXX黑人猛交| 久久国产精品嫖妓| 国产成人精品高清不卡在线| 色综合色国产热无码一| 人人爱天天做夜夜爽| 国产一区二区免费播放| 久青草免费视频| a亚洲天堂| 18禁黄无遮挡网站| a级毛片免费在线观看| 免费可以看的无遮挡av无码 | 亚洲天堂区| 亚洲国产高清精品线久久| 久久窝窝国产精品午夜看片| 99青青青精品视频在线| 久久亚洲国产视频| 99热这里只有精品免费| 精品人妻一区二区三区蜜桃AⅤ| 无码啪啪精品天堂浪潮av| 中文字幕日韩欧美| 日韩在线第三页| 亚洲AV免费一区二区三区| 色天堂无毒不卡| 久久熟女AV| 亚洲熟女偷拍| 欧美一区国产| 伊伊人成亚洲综合人网7777| 欧美精品高清| 国产精品无码影视久久久久久久 | 97av视频在线观看| 超清无码熟妇人妻AV在线绿巨人| 亚洲人网站|