• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 手機與無線通信 > 設計應用 > 基于CAN總線的軟件IAP技術

    基于CAN總線的軟件IAP技術

    作者: 時間:2012-08-24 來源:網絡 收藏

    摘要:是一種使用協議的串行通信網絡。Silicon Laboratories公司的單片機C8051F040是完全集成的混合信號系統級芯片,而且內部集成了控制器。文中詳述了如何通過CAN實現對的升級,并給出具體的設計方案。
    關鍵詞:C8051F040;CAN;

    CAN是低成本、高利用率的工業(yè)控制總線,在工業(yè)控制、汽車電子等方面有十分廣泛的用途。
    C8051F040單片機內部集成的CAN控制器是Bosch全功能CAN模塊的完全實現,完全符合CAN規(guī)范2.0 B,其內部還集成了64 kB系統編程用FLASH存儲器,這就為的更新、升級提供了可能。當產品安裝位置不方便拆卸或需要一次更新大量產品軟件的時候,使用單片機JTAG接口來實現幾乎是不可能的事情。本文提出一種系統升級的方法,也對單片機的產品設計具有重要的參考價值。

    1 總體思路
    將C8051F040的64KB存儲器分為三個區(qū)域:0x0000~0x5fff作為正常運行的程序存儲區(qū),0x6000~0xbfff作為從CAN總線接收到的需要更新程序的存儲區(qū),0xc000以上作為bootloader程序的存儲區(qū)。
    正常運行的程序在接收到上位機的程序更新命令后(用戶自定義通訊協議來實現),接收數據,且將其按接收順序寫入到以0x6000開始的區(qū)域中,直到接收完畢,然后主程序判斷接收數據是否完整、有效,如完整且有效則跳轉到bootloader程序中,由bootloader程序完成更新程序的工作。

    2 程序軟件框圖
    (1)bootloader程序
    新建立一個proiect,其中包含程序初始化、端口配置、FLASH讀/寫等函數。
    ①FLASH寫框圖(見圖1)
    ②編譯控制項
    在linker中,使用“CODE(0c000h,MAINRUN_3s(0c000h))”將程序編譯完成后的代碼放置到以0xc000開始的地址空間。

    本文引用地址:http://www.czjhyjcfj.com/article/154083.htm

    a.JPG


    (2)主程序
    主程序在確認更新程序的有效性后,需要跳轉到bootloader程序中運行。由于主程序和bootloader程序是采用不用的項目進行編譯的,故不能直接調用,必須采用絕對調用的方法。采用函數指針是一種可行的方式,如:
    void(*update_flash) 0=0xc000;
    //定義函數指針指向0Xc000
    (3)上位機軟件
    由于本文中節(jié)點采用CAN總線連接到同一網絡上,且采用CAN通訊的方式來更新程序內容,所以,上位機也必須帶CAN控制器。
    將需要更新的程序的hex文件通過HEXBTN.EXE文件轉換成BIN文件,然后再用BIN2C.EXE將生成的BIN文件轉換成一字節(jié)數組,將其拷貝到上位機軟件中,這就是需要更新的源程序。按自定義通訊協議,將其發(fā)送到目標CPU即可。

    3 需要注意的事項
    (1)程序有效性的判斷由自定義通訊協議完成
    (2)在寫FLASH的過程中,需要關中斷
    (3)在寫FLASH的過程中,需要關中斷

    4 結束語
    文中的通過CAN總線實王見軟件的方法,完全可以使用,而且抗干擾能力較強,已成功應用于蓄電池檢測系統中各個檢測模塊的程序更新。



    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 璧山县| 阿勒泰市| 成武县| 上蔡县| 庐江县| 吉首市| 龙州县| 开封市| 岱山县| 垣曲县| 吉林省| 安化县| 慈溪市| 尉犁县| 句容市| 平谷区| 屯门区| 城口县| 南木林县| 宜君县| 邵阳县| 克东县| 佛冈县| 分宜县| 海原县| 迁西县| 上杭县| 唐河县| 新郑市| 依安县| 聂荣县| 贡觉县| 工布江达县| 淮阳县| 鄂托克前旗| 五家渠市| 宜兰县| 普宁市| 金塔县| 固原市| 海城市|