新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 無線傳感器網絡底層平臺的深層研究

        無線傳感器網絡底層平臺的深層研究

        作者: 時間:2013-08-10 來源:網絡 收藏

        引言
        目前,對WSN(Wireless Sensor Netwoek)的研究主要集中在協議棧、定位算法、能耗管理以及體系結構設計上,而針對無線傳感網絡操作系統的研究卻相對較少,尤其是對其的研究更少,所以針對無線傳感網絡操作系統的研究有十分廣闊的空間。本論文針對意法半導體系列MCU和TI公司的無線模塊進行介紹。主要描述了操作系統的構建,以及硬件驅動程序的實現。本論文的底層硬件抽象層是針對無線射頻模塊的,包括了平臺構建、相關寄存器,以及外圍接口等各個部分。而硬件驅動程序主要是為完成無線通信所需的硬件驅動設計,這主要包括:相應異步事件的中斷機制;和PC通信的USART驅動;連接MCU和的SPI驅動;完成超時計時的定時器等。這些模塊的有效組成,才能構成一個完整的最小通信系統,完成節點間數據傳輸、數據處理,以及定位和導航等任務。
        系列MCU采用ARM公司V7架構的Correx—M3內核。CC2520是第二代ZigBee/IEEE 802.15.4收發器。

        1 底層平臺研究
        硬件抽象層的底層硬件模塊有很多,本節只簡單介紹和相關的底層模塊設計。
        1.1 定時器
        系列的CPU能提供8個定時器,其中TIM1和TIM8是高級定時器,可用于各種用途,包括測量輸入信號的脈沖長度(輸入捕捉)或產生輸出波形(輸出比較)等,它們的時鐘由APB2提供。TIM2~TIM7是普通定時器,時鐘由APB1提拱。圖1為STM32時鐘樹中有關定時器的部分。

        a.jpg

        從圖1可以看出,從系統設置的時鐘源產生的時鐘頻率輸入到AHB預分頻器,進行分頻處理,然后經過APB1預分頻器和APB2預分頻器給不同模塊提供不同的時鐘頻率。下面以定時器2作為例子說明。當AHB預分頻器輸入頻率為72 MHz的時候,由于APB1支持的最大頻率為36 MHz,所以APB1預分頻器,設置必須大于或等于2,假設設置為2,則在APB1倍頻器中,頻率被設置為72 MHz(當APB1分頻數=1的時候,APB1倍頻器加倍系數為1,當APBl分頻數>1的時候,APB1倍頻器加倍系數為2),所以最終提供給定時器2~7的頻率為72 MHz。所以只需要設置APB1預分頻器和APB1倍頻器的值,便可以提供不同頻率的定時器。定時器采用計數溢出的方式觸發定時器中斷,因此想要使用定時器,必須先配置好定時器中斷。
        1.2 中斷
        對STM32系列MCU的中斷配置步驟如下:
        ①系統初始化:如系統時鐘初始化,使用固件模板中自帶的SystemInit()函數即可,此函數把主頻默認調整到72 MHz。
        ②GPIO配置:配置觸發CPU中斷的引腳,務必注意打開相應引腳的GPIO時鐘和AFIO時鐘。配置引腳的頻率和輸入模式,一般為浮空輸入模式。
        ③EXTI配置:首先指明當前系統中使用哪個引腳作為觸發外部中斷的引腳,然后清除中斷標志位,配置中斷請求和觸發方式(上升沿觸發或下降沿觸發)。
        ④NVIC配置:主要配置中斷對應的通道,并且設置優先級別,最后需要對通道使能。
        ⑤編寫中斷服務程序:中斷服務程序是發生中斷時實際運行的程序,它打斷了正在運行的程序,對相應中斷事件進行相應處理。由于中斷程序打斷了現有程序的運行,而且需要對中斷事件作出快速響應,所以要盡量短小,而且不能傳遞參數,沒有返回值。
        1.3 USART
        USART模塊一般分為三大部分:數據發送器、數據接收器和時鐘發生器。所有模塊共享控制寄存器。時鐘發生器由波特率發生器和同步邏輯電路組成。
        數據發送器部分由寫入緩沖寄存器(USART DR)、校驗位發生器、串行移位寄存器和控制邏輯電路構成。使用寫入緩沖寄存器,可以連續快速地發送多幀數據。
        數據接收器是USART模塊最復雜的部分最主要的是數據接收單元和時鐘。數據接收單元用作異步數據的接收。數據接收器還包括移位寄存器、控制邏輯、校驗位校驗器和接收緩沖器。數據接收器支持與數據發送器相同的幀結構,同時支持數據溢出、幀錯誤和校驗錯誤的檢測。
        無線節點可以通過USART與PC通信。本文只實現了簡單的USART功能。串口使用前需要完成初始化,主要設置字長、波特率、奇偶校驗位、傳輸模式、數據位數、流控制、打開串口時鐘和配置串口發送接收引腳等。
        有了串口的輸入/輸出功能后,可以自己重寫庫函數printf,便于調試和觀察節點運行情況,讓節點終端輸出重定向到PC,然后在PC上通過串口工具顯示節點發送過來的數據信息,從而分析終端運行情況。具體函數設計是:如果節點輸出字符串數據,則直接調用串口輸出字符串函數,通過串口把字符串數據發送到PC顯示;如果是輸出數字,則先把數字按指定顯示進制轉換成字符串,然后按照輸出字符串方式處理。可以重寫itoa()函數,把輸入的數字按照任意進制保存到字符串中。
        1.4 SPI
        SPI有三種寄存器:控制寄存器(SPI_CR)、狀態寄存器(SPI_SR)、數據寄存器(SPI_DR)。SPI接口包括4種信號:MOSI——從器件數據輸入,主器件數據輸出;MISO——從器件數據輸出,主器件數據輸入;SCLK——時鐘信號,由主器件產生;NSS——從器件選擇使能信號,由主器件控制,有的芯片廠家會標注為CS(Chip Select)。
        由于無線模塊CC2520必須通過SPI接口才能和MCU通信,所以必須先實現SPI接口,才能控制CC2520接收和發送數據。SPI接口的處理方式和USART接口的處理方式很像,本文只實現了簡單的SPI功能。SPI使用前必須初始化,主要工作包括設置主從模式、波特率、數據位數、數據幀格式、配置輸入/輸出引腳和時鐘信號的相位和極性等。
        1.5 CC2520驅動
        MCU通過SPI接口控制CC2520啟動、關閉、收發數據等。SPI接口由SI、SO、CSn和SCLK四個引腳構成。在MCU和CC2520通信過程中,CC2520為SPI接口從設備,接收MCU發來的時鐘信號和片選信號,并在MCU的控制下執行發送數據、接收數據等操作;STM32為接口主設備,可以通過SPI接口訪問CC2520內部存儲區和寄存器。CC2520通過FIFO、FIFOP、SFD和CCA四個引腳來表示工作狀態。MCU可以通過讀取這些引腳的數據來獲得CC2520收發數據的狀態。SFD信號表示剛接收到或者剛發送完幀開始信號;FIFO信號表示一個或者多個字節在接收緩沖區;FIFOP信號表示接收緩沖區中的字節數超出設置的門限或者接收到至少一幀完整的數據;CCA信號表示信道空閑。
        CC2520大概工作流程:首先是準備工作。上層應用程序中使用halRfInit()函數完成CC2520的一些初始化工作,如復位CC2520,關閉電壓調整器,根據CC2520數據手冊需要延時1100μs。延時完成后,開啟電壓調整器,再延時200μs,然后使能CC2520,完成后,申請SPI資源并初始化。開啟振蕩器,然后通過SPI接口配置CC2520中一些寄存器的默認值,如TXPOWER、CCACTRL0、MAMCTRL0、MAMCTRL1等寄存器的值。然后對MCU和CC2520相連的引腳進行初始配置,比如把RSTN、VREN和CSN配置為輸出模式,把FIFO、FIFOP、CCA和SFD配置為輸入模式。
        上層應用程序中使用basicRfInit()函數完成對信道、短地址和網絡ID的設置,并配置接收中斷處理函數,用于接收到數據產生中斷時處理接收數據。
        應用程序執行發送命令時,按照協議棧從上層一層層封裝好數據后,最終把數據交給basicRfSendPacket()函數處理。具體發送過程如圖2所示。

        b.jpg

        圖中封裝的格式按照協議要求,內容主要包括數據長度、幀控制域(FCF)、目的地址、源地址、目的網絡ID、源網絡ID、發送數據、CRC(Cyclic Redundancy Check)校驗碼等。當采用的是硬件CRC檢驗時,不需要用戶計算添加CRC檢驗碼,也不需要CRC檢驗數據寫入TXFIFO(CC2 520發送緩沖區)中,有專門的寄存器存儲CRC檢驗數據,由硬件完成檢驗和發送。當采用軟件CRC檢驗時,需要用戶自己計算CRC檢驗數據,并填寫在幀的最后兩字節中,隨幀中其他數據一起寫入TXFIFO。

        分頻器相關文章:分頻器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 瑞丽市| 江安县| 开鲁县| 青海省| 纳雍县| 九寨沟县| 武乡县| 乌拉特后旗| 海南省| 天等县| 汾阳市| 临夏市| 孟津县| 石泉县| 博罗县| 武安市| 水城县| 侯马市| 呼图壁县| 临颍县| 临泽县| 克什克腾旗| 北安市| 永平县| 东辽县| 黄石市| 大关县| 和平区| 北安市| 顺昌县| 长丰县| 电白县| 河南省| 盐亭县| 澄迈县| 福安市| 塘沽区| 巧家县| 罗源县| 呼玛县| 玉溪市|