接着我之前的引導程序升級,之前的是簡單的設計,並不是通過USB上位機進行下載固件
區域劃分:
應用區:爲0x8000000~0x000020000
引導程序區:0x8020000~0x060000
- 開發板預先下載引導加載程序,這裏由於我的開發板上沒有按鍵,這裏我是直接就進入等待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固件升級小助手:點擊下載