基於usb(免驅)的iap升級

接着我之前的引導程序升級,之前的是簡單的設計,並不是通過USB上位機進行下載固件

		區域劃分:		
		應用區:爲0x8000000~0x000020000
		引導程序區:0x8020000~0x060000
  1. 開發板預先下載引導加載程序,這裏由於我的開發板上沒有按鍵,這裏我是直接就進入等待USB上位機程序下載固件,將 收到的數據通過 iap_write_appbin(DataBuf,len),(參考正點原子的iap _ write _ appbin,這裏如果直接用原子哥的這個肯定不行,必須加以修改,不然無法將完整的數據寫入到閃存中)通過寫入到內部閃存0x8020000~0x060000這塊區域中,下載完成後,即收到了數據USB_Received_Flag置爲1,啓動iap_load_app(這裏USB_SendData(“update stm32 bin ok”,20),有時候沒去執行,不知道啥原因,但是應用固件確實是寫入到了內部flash)。

這裏寫圖片描述
2. 看效果圖:
這裏寫圖片描述
3. 上位機這塊,參考我前面的blog中HID上位機部分,主要上位機固件下載函數修改:

        private BinaryReader br;
        /// <summary>
        /// 下載二進制文件
        /// </summary>
        private void DownloadBinFile()
        {
            int length = 0;
            string str = "";
            long lSize = 0;
            Byte[] data = new Byte[64];
            progressBar.Value = progressBar.Minimum;//設置進度條的當前位置爲0
            string fileName = textBox1.Text.Trim();
            if (myHid.Opened == false)
            {
                MessageBox.Show("未檢測到設備接入,請重新插拔設備再試!!!"
                          , "溫馨提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (File.Exists(fileName))
            {
                lSize = new FileInfo(fileName).Length;
            }
            progressBar.Maximum = (int)lSize;
            try
            {
                br = new BinaryReader(new FileStream(fileName,FileMode.Open,FileAccess.Read));
                do
                {

                    if (myHid.Opened == false)
                    {
                        MessageBox.Show("未檢測到設備接入,請重新插拔設備再試!!!"
                                  , "溫馨提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    Array.Clear(data, 0, data.Length);
                    data = br.ReadBytes(64);
                    length = str.Length;
                    progressBar.Value += data.Length;
                    str = Encoding.Default.GetString(data);
                    Report r = new Report(0, data);
                    myHid.Write(r);
                }
                while (data.Length != 0);
            }
            catch (Exception)
            {
                //MessageBox.Show("    發送文件爲空!", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
            }
            progressBar.Value = progressBar.Maximum;
            br.Close();
        }

4 .下位機,其他的參考我之前的下位機部分,具體怎樣修改的,有興趣的私聊我!至此,可以啓動bootloader,通過自定義HID設備,實現usb固件升級告一段落了。
usb固件升級小助手:點擊下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章