新聞中心

        EEPW首頁 > 汽車電子 > 設計應用 > 基于WiFi的車載終端遠程軟件升級方法

        基于WiFi的車載終端遠程軟件升級方法

        作者: 時間:2016-10-22 來源:網絡 收藏

        ⑤Error(ERROR);

        本文引用地址:http://www.104case.com/article/201610/309975.htm

        ⑥OACK。

        目前常用的是前5種。由于系統只需實現終端從數據采集設備上下載軟件文件,無需實現完整的TFTP協議,僅實現上述第1、3、4、5類數據包功能即可。主要定義以下4個接口函數:

        ①RRQ發送接口函數定義:

        void tftpReadQuerry(void);

        該函數用于終端發送讀文件請求,數據采集設備收到該包將發送文件數據包給終端;

        ②數據包接收接口函數定義:

        void tftp_recvpacket(void);

        該函數用于接收數據采集設備發送到的包,根據包類型分別對ERROR包、DATA包進行處理。如果是ERROR包則需要重新傳輸文件,本次傳輸失敗。如果是DATA包,則校驗后根據包號存儲到FLASH指定位置,然后調用發送ACK函數回復ACK。掉包、錯包等的錯誤處理也在該函數執行;

        ③ACK發送接口函數定義:

        void tftpSendAck(unsigned char BlockNo[2]);

        該函數用于根據接收到的包的編號回復ACK。

        ④ERROR包接口函數定義:

        void tftpSendErr(unsigned char BlockNo[2]);

        該函數用于返回傳輸錯誤信息。

        文件傳輸實現流程如下:

        ①數據采集設備在端口為69的UDP上等待終端發出讀文件請求包;

        ②終端通過UDP發送符合TFTP請求格式的RRQ包給數據采集設備;

        ③數據采集設備收到終端的這個請求包后,將直接發送DATA包給終端,這個DATA包中含數據采集設備選擇的TID作為UDP的源端口和終端的TID作為UDP目標端口,起始包號為1,往后包號逐次加1。

        ④終端接收來自數據采集設備的DATA包并回復ACK。直到請求完成。

        傳輸過程中的掉包或包錯誤會導致重傳,重傳不超過三次,否則認為傳輸失敗。傳輸過程中的錯誤,會觸發發送ERROR包。ERROR包的錯誤代碼值供程序員分析使用。

        (4)拷貝軟件到應用程序區

        軟件正確的下載到臨時區后,需要拷貝到應用程序區。該部分關鍵部分在于內嵌FLASH的擦除與讀寫。

        F107內嵌FLASH是通過分頁機制來實現對尋址空間的擴展和FLASH頁面的使用和管理的。所以對FLASH的擦除操作需要按頁進行擦除。即擦除FLASH不能擦除某一字節或一次擦除小于一頁(2048字節)。

        FLASH擦除的具體步驟:

        ①解鎖FLASH編程控制寄存器;

        ②定位要擦除的扇區;

        ③寫扇區擦除命令;

        ④等待命令執行完成;

        ⑤鎖定FLASH編程控制寄存器。

        對FLASH執行寫操作步驟如下:

        ①解鎖FLASH編程控制寄存器;

        ②向指定的地址寫若干字數據;

        ③等待上一條命令執行完成;

        ④如果未寫完數據,則遞增源地址和目標地址,重復步驟②和③;

        ⑤鎖定FLASH編程控制寄存器。

        (5)軟件跳轉應用程序區

        應用程序準備好后,程序需要從BOOT區跳轉到應用程序區首地址處執行應用程序。這里分為兩步:

        ①修改中斷向量表位置。由于F107采用ARM Cortex—M3內核,該內核的系統控制空間中寫中斷向量表的寄存器地址NVIC_VectTaD_ Addr為0xE000ED08,在該地址寫入應用程序起始地址即可,本程序應用程序起始地址APP_START_ADDRESS為0x08005000。設計如下:

        ldr r0,=0x08005000

        ldr r1,=0xe000ed08

        Str r0, [r1]

        ②跳轉到應用程序首地址處執行應用程序。該步驟完成堆棧指針和程序指針(PC)的修改。在上述匯編代碼之后,通過以下方式實現:

        ;從應用程序向量表中載入堆棧指針

        ldr r1, [r0]

        mov sp,r1

        ;從應用程序向量表中初始化程序指針(PC),并跳轉到應用程序

        ;入口

        ldr r0, [r0,#4]

        bx r0

        為保證軟件升級錯誤不導致系統崩潰,將終端程序隔離為引導程序(BOOT區程序)及應用程序兩部分,如單次軟件升級失敗仍可進行再次升級。兩部分程序分別在Keil中編譯,并把BOOT區程序燒寫在FLASH首地址0x08005000處,以便終端啟動直接進入BOOT區。用于應用程序編譯夾梟瓚ㄉ招吹刂肺應用程序區首地址,并生成bin文件以便直接下載到FLASH中即可運行。

        結語

        該方法實現了采用通信方式,通過TFTP協議將編譯后的軟件文件下載到終端設備,完成軟件升級的功能。在嵌入式系統領域,程序升級可以方便地對程序缺陷進行彌補和修改,或對程序功能進行擴充,運用該方法可極大提高產品的生存周期,節省對項目的維護成本和提高了開發效率。

        基于該方法已成功設計出可遠程程序的車輛管理系統。使用情況表明,該系統能穩定、可靠地工作,且為系統的維護節省了大量的工作量,對同類型的軟件設汁有很好的參考價值。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 上饶市| 海晏县| 开原市| 嘉祥县| 绍兴市| 绥德县| 土默特右旗| 新宾| 嵊州市| 会理县| 叙永县| 靖远县| 石林| 慈利县| 江安县| 南华县| 合川市| 灵川县| 明溪县| 平定县| 桑日县| 隆回县| 金山区| 甘孜| 普格县| 济阳县| 崇礼县| 舞阳县| 秦皇岛市| 稷山县| 许昌县| 石景山区| 登封市| 博客| 兴城市| 慈溪市| 沙洋县| 大足县| 慈利县| 高安市| 乐安县|