在利用MCU開發數字電源項目中,對于嵌入式開發而言,Bootloader幾乎與軟件算法同等重要,它可以讓我們擺脫MCU官方工具,定制自己的燒錄工具,不僅提高產品辨識度,同時也大大減少了對外引腳數量(例如兼容通信的Uart或CAN等,而不需要另外接JTAG。接下來,我會通過這個專題對BootLoader做一個入門的介紹,針對dspic33做兩種不同的方式來實現,第一種是采用修改.gld文件的方式;另外一種是采用MCC。
一般MCU的機器碼都是存儲在Flash中,MCU啟動時PC指針會從內部Flash第一個地址開始讀取指令運行,這個過程我們一般無法干涉。但由于我們寫的代碼存于Flash中,所以一旦從Flash啟動,后續操作就完全可以由我們來指定,我們可以指定程序執行位置。
對于低端MCU來說,我們可以通過在Flash初始的位置設置指令,來啟動內部不同flash區域的程序,以及燒寫程序到這些flash區域,這些操作集合叫做Bootloader。Bootloader承擔著用戶程序的燒寫以及跳轉。
BootLoader是在單片機上電復位時執行的一段程序。也稱作Bootlader固件,通過這段程序,可以不使用編程器對應用程序在線升級,來實現應用程序的更新。在單片機上電/復位后,一般都是先運行Bootloader程序。Bootloader運行后,先判斷當前是否需要進入升級狀態。如果不需要升級,就直接運行Flash中原有的應用程序;如果需要升級,首先擦除舊的應用程序,然后從通訊接口接收應用程序代碼,并寫入指定Flash中。直到把新的應用程序全部都寫入Flash,最后進行校驗,確保新的應用程序是正確的、完整的。再跳轉去運行新的應用程序。
對于高級MCU或者CPU來說,可以輕松映射外部存儲(外部Flash、U盤、硬盤等),MCU啟動后,我們可以指定其從哪個存儲啟動,甚至通過通信接口接收數據存儲到這些外部存儲。這些操作集合在嵌入式操作系統中一般稱之為UBoot,在PC中稱之為BIOS,外部存儲一般存放的是操作系統。
dspic33的Flash內部執行流程如下:
通訊接口可以是UART、I2C、SPI、CAN、USB等。通訊速率直接影響整個升級的完成時間,在升級的過程中應用程序是不能被運行的 。CAN Bootloader就是通過CAN總線來傳輸應用程序文件,來實現對應用程序代碼的升級。
在做CAN BootLoader時,一般有兩種形式作為HOST來對目標板進行升級。
1.使用另外一個主MCU,比如用一個UART-CAN的轉接板,主要用到USB轉UART芯片MCP2221A和帶CAN 控制器的MCU PIC18F66K80,66K80作為Host MCU。
2.使用CAN ANALYZER。可以使用ZLG的雙通道CAN分析儀,型號USBCAN-2E-U
大致執行流程如下: