陳 聰
(江蘇航空職業(yè)技術(shù)學(xué)院,江蘇 鎮(zhèn)江 212132)
本文主要研究利用無線數(shù)據(jù)傳輸技術(shù)進行嵌入式應(yīng)用程序下載更新。系統(tǒng)的設(shè)計立足于企業(yè)實際生產(chǎn)測試需求,與企業(yè)生產(chǎn)的產(chǎn)品測試對接的硬件測試設(shè)備無需人工進行嵌入式程序下載更新,直接利用無線通信技術(shù)將最新設(shè)計的測試程序傳輸給相應(yīng)的測試設(shè)備。該技術(shù)不僅可以大大節(jié)約人力、縮短測試時間,同時還可以應(yīng)用于一些特殊生產(chǎn)測試車間,例如無塵車間及對靜電放電敏感產(chǎn)品的測試車間等。本設(shè)計采用的無線通信模塊為工作在2.4 GHz的無線收發(fā)模塊nRF24L01,該模塊采用歐洲頂尖RF公司設(shè)計的無線芯片,除具有成本低、體積小、產(chǎn)品穩(wěn)定等特點外,還具有最大10 dBm的發(fā)射功率、7 mA的接收電流以及-115 dBm的接收靈敏度,經(jīng)測試最大距離可達500 m,遠超同類型的2.4 GHz無線模塊。
系統(tǒng)的總體設(shè)計思路是設(shè)計一塊以STM32為主芯片的主機(程序下載板),先利用電腦端生成需更新程序的bin文件,接著電腦端通過UART串口將bin文件發(fā)送至主機的STM32 Flash中存儲;更新從機(客戶板)程序時,主機從Flash中讀取bin文件,并利用2.4 GHz無線通信模塊nRF24L01將數(shù)據(jù)發(fā)送到從機STM32 Flash中實現(xiàn)程序更新。圖1為下載系統(tǒng)結(jié)構(gòu)框圖。

圖1 下載系統(tǒng)結(jié)構(gòu)框圖
上位機將從機需更新的應(yīng)用程序的bin格式文件通過UART串口通信方式發(fā)送給主機,主機將收到的數(shù)據(jù)寫入自己的微處理器STM32的Flash中。因需要利用主機的STM32的Flash作為更新程序的中轉(zhuǎn)站,因此,選用STM32F103RET6作為主芯片。該芯片屬于大容量芯片,F(xiàn)lash容量為512 kB。大容量產(chǎn)品的Flash模塊組織結(jié)構(gòu)如表1所示。

表1 STM32大容量Flash模塊組織結(jié)構(gòu)
STM32F1的Flash由主存儲器、信息塊和閃存存儲器接口寄存器3部分組成。主存儲器用來存放代碼和數(shù)據(jù)常數(shù)。大容量產(chǎn)品的主存儲器被劃分為256頁,每頁2 kB。主存儲器的起始地址是0x08000000,BOOT0、BOOT1都接地的時候,就是從0x08000000開始運行代碼。信息塊分為2小部分:啟動程序代碼,用來存儲ST自帶的啟動程序,存放串口下載代碼;用戶選擇字節(jié),則一般用于配置寫保護、讀保護等功能。閃存存儲器接口寄存器用于控制閃存讀寫等,是整個閃存模塊的控制機構(gòu)。
ST固件庫對Flash操作主要提供了以下幾類函數(shù):①Flash上鎖、解鎖函數(shù);②Flash寫操作函數(shù)(包括16位、32位和用戶選擇寫入),F(xiàn)lash讀取可以直接通過地址訪問,因此沒有對應(yīng)的函數(shù);③Flash擦除函數(shù);④獲取Flash狀態(tài)函數(shù),該函數(shù)返回值主要包括忙、編程錯誤、寫保護錯誤、操作完成和操作超時;⑤等待操作完成函數(shù),在進行閃存寫或擦除操作時,不能進行代碼或數(shù)據(jù)的讀取操作,所以在每次操作之前,都要等待上一次操作完成。
對Flash的操作大致需要4個流程:①確定要寫入Flash的首地址;②解鎖Flash;③對Flash進行操作;④對Flash重新上鎖。
nRF24L01無線收發(fā)模塊是一種遠距離、低功耗、高靈敏度的FSK無線數(shù)字通信模塊。該模塊具有126個通信通道、6個數(shù)據(jù)通道,滿足多點通信和調(diào)頻需要。nRF24L01采用4線SPI通信端口,通信速率最高可達8 Mb/s,適合與各種微處理器連接。
nRF24L01可以實現(xiàn)多機通信,一個芯片最多可以設(shè)置六個接收地址,能輕松實現(xiàn)六發(fā)一收功能。而本設(shè)計中主機需要同時更新生產(chǎn)線上的多個從機程序,需要使用到一發(fā)多收的功能。因此,nRF24L01組網(wǎng)方式采用簡單可靠的輪詢方式。輪詢方式是典型的一主多從的組網(wǎng)方式,所有從機都不會主動發(fā)送信息,平時一直處于接收狀態(tài)。只有主機發(fā)送給某個從機詢問指令的時候,該從機才會立刻回復(fù)一條信息,之后立刻再置為接收狀態(tài)。這樣就避免了多個模塊隨意發(fā)產(chǎn)生的頻繁碰撞問題,使得每次通信都安全可靠。
2個nRF24L01之間通信一般需要設(shè)置4個條件相同:發(fā)射接收數(shù)據(jù)寬度、發(fā)射接收地址、發(fā)射接收頻道、發(fā)射接收速率。在輪詢工作方式下,可以通過配置主機的發(fā)射地址或發(fā)射頻道來實現(xiàn)主機與多個不同從機的通信。nRF24L01的發(fā)射接收地址是8位地址,頻道是0~125共126個頻道,理論上可以實現(xiàn)1個主機與無數(shù)個從機之間的通信。實際上通信地址或通信頻道設(shè)置過近會互相干擾,本設(shè)計主要模擬了1主5從之間的通信,通過配置不同的從機通信頻道來實現(xiàn)。從機1設(shè)置的頻道是10,從機2的頻道是30,從機3的頻道是50,從機4的頻道是70,從機5的頻道是90,頻道之間拉開距離??梢酝ㄟ^RF_CH寄存器配置主從機之間的通信頻道,nRF24L01常用寄存器及其功能如表2所示。

表2 nRF24L01常用寄存器及其功能
nRF24L01發(fā)射端初始化過程如下:①設(shè)置發(fā)射節(jié)點的地址TX_ADDR;②設(shè)置接收節(jié)點的地址RX_ADDR_P0,為自動應(yīng)答準備;③使能自動應(yīng)答AUTO ACK EN_AA;④使能通道0接收地址PIPE 0 EN_RXADDR;⑤配置自動重發(fā)次數(shù)SETUP_RETR;⑥選擇通信頻道RF_CH,本設(shè)計中通過更改寄存器RF_CH數(shù)值實現(xiàn)多機通信;⑦配置發(fā)射參數(shù)(低噪放大器增益、發(fā)射功率、無線速率)RF_SETUP;⑧選擇通道0有效數(shù)據(jù)寬度Rx_Pw_P0;⑨通過CONFIG寄存器配置24L01的基本參數(shù)以及切換工作模式。
nRF24L01接收端初始化過程如下:①設(shè)置接收節(jié)點的地址RX_ADDR_P0;②使能自動應(yīng)答AUTO ACK EN_AA;③使能通道0接收地址PIPE 0 EN_RXADDR;④為從機選擇通信頻道RF_CH;⑤選擇通道0有效數(shù)據(jù)寬度Rx_Pw_P0;⑥配置發(fā)射參數(shù)(低噪放大器增益、發(fā)射功率、無線速率)RF_SETUP;⑦通過CONFIG寄存器配置24L01的基本參數(shù)以及切換工作模式。
主機的應(yīng)用程序主要有兩大邏輯:一是判斷是否收到上位機通過串口發(fā)送過來的從機需要更新的應(yīng)用程序數(shù)據(jù),如果收到就按頁將數(shù)據(jù)寫入Flash中;二是如果生產(chǎn)線上的從機需更新應(yīng)用程序,則按下程序更新按鍵,開始讀取Flash中的數(shù)據(jù)并通過nRF24L01無線通信發(fā)送過去。其余時間,主機處于等待狀態(tài)。判斷是否收到上位機數(shù)據(jù)采用查詢方式,按鍵程序采用中斷方式。主機主程序流程如圖2所示。

圖2 主機主程序流程
本設(shè)計中將主機的Flash主存儲器劃分為兩塊區(qū)域,一塊用于存放正常程序,另一塊用于存放從機待更新的應(yīng)用程序數(shù)據(jù)。一般不復(fù)雜程序的bin文件大約占用幾十k字節(jié),因此,主機中存放正常程序的部分劃分128 kB區(qū)域,從地址0x8020000開始存放從機需更新的程序數(shù)據(jù)。主機收到電腦通過串口發(fā)送的bin文件數(shù)據(jù)后,開始從Flash第64頁按頁寫入數(shù)據(jù),當全部數(shù)據(jù)寫入完成后鎖定Flash。主機Flash寫入流程如圖3所示。

圖3 主機Flash寫入流程
當主機上的下載按鍵按下后,開始從主機的Flash中讀取數(shù)據(jù),并通過nRF24L01無線模塊發(fā)送出去。下載按鍵按下后,首先配置主機作為發(fā)射端的寄存器數(shù)據(jù),先配置主機與1號從機的通信頻道匹配,并建立連接,接著根據(jù)從上位機接收到的bin文件大小依次從主機Flash中讀取數(shù)據(jù)并發(fā)送給1號從機;1號從機接收完畢后,延時等待1 s,開始將主機的通信頻道設(shè)置為2號從機的頻道,主從建立連接后開始發(fā)送數(shù)據(jù)。依次更新從機數(shù)據(jù),直到所有從機完成更新后返回主程序。主機Flash數(shù)據(jù)發(fā)送流程如圖4所示。

圖4 主機Flash數(shù)據(jù)發(fā)送流程
從機未收到更新程序時,執(zhí)行原程序;收到nRF24L01發(fā)來的數(shù)據(jù)后,將數(shù)據(jù)寫入從機的Flash中并執(zhí)行更新程序。因此,從機采用啟動程序加應(yīng)用程序的設(shè)計。啟動程序有兩個主要目的,一是跳轉(zhuǎn)到應(yīng)用程序并執(zhí)行,二是更新從機應(yīng)用程序。從機的Flash劃分和主機一樣,64頁前放置啟動程序,從64頁開始放置應(yīng)用程序。在從機第一次程序燒錄時,為從機編寫兩個工程文件:一個是啟動程序工程,該工程在配置時ROM起始地址設(shè)為0x8000000,大小設(shè)為0xFFFF(128 kB);另一個是應(yīng)用程序工程,該工程在配置時ROM地址設(shè)為0x8020000,大小設(shè)為0xFFFF(128 kB)。要在啟動程序中實現(xiàn)程序跳轉(zhuǎn)需要設(shè)置中斷向量表地址為0x8020000,同時將函數(shù)指針p指向應(yīng)用程序的復(fù)位函數(shù)地址。每次需要更新從機程序時,先給從機斷電再重新上電,重新上電后程序自動跳轉(zhuǎn)到啟動程序執(zhí)行,等待接收主機發(fā)來的數(shù)據(jù)。從機的啟動程序流程如圖5所示。

圖5 從機啟動程序流程
本文設(shè)計的無線下載系統(tǒng)可以面向各類電子通訊設(shè)備的測試企業(yè),通過該系統(tǒng)可以優(yōu)化電子通訊產(chǎn)品的測試流程。在一項測試程序結(jié)束之后不用人工進行每臺測試設(shè)備的程序更新,直接利用主機完成系列生產(chǎn)線上的測試設(shè)備程序更新,從而大大節(jié)約了人力和測試時間,該方法還可以進一步應(yīng)用到特殊場合的生產(chǎn)及測試車間。