一種BootLoader的分析說明

SoC上電後,不同架構的處理器,代碼執行的初始位置不同。

下邊,根據最近的一個項目來做出說明,整體的邏輯規劃是這樣的:

*上電判斷啓動方式,即用戶選擇是否選擇更新程序;

       若是,則判斷是通過SD卡還是通過串口進行更新;

*若用戶不曾選擇進行程序更新,則在跳轉到flash,執行既有代碼;

以上就是bootloader實現的主要功能。


此處上電執行的地址是0x00000000。(此處放置中斷向量表)

1----- 此處第一句Reset/NMI中斷 (跳轉到SOC運行環境初始化函數(CPU初始化、堆棧初始化、內存初始化、跳轉到main)(前三步驟涉及到更底層的硬件暫且不作說明)),

           其後放置的是其他的中斷向量表的內容;

2----- 在main函數:

              2.1  初始化硬件設備驅動(UART 、 FLASH 、I2C、GPIO、SD card等等,根據設計不同,需要初始化的硬件驅動不同)

              2.2   判斷啓動設置( SD卡 或者 USB_Serial   或者   執行flash中原有的程序(位置0x80000000))

                      通過板級的跳線或者按鍵的選擇,來判斷此次啓動的方式: 

                                a、首先,判斷是否有SD卡、並進一步判斷SD卡中是否有可用的更新程序,如果有則將新的程序複寫到0x80000000的位置;

                                b 、若a未能進行,則判斷是否通過USB_Serial進行程序更新,即通過PC上位機將新的程序複寫到0x80000000的位置;

                                c、 經過判斷,若沒有選擇a、b兩種方式,則跳轉到flash的0x80000000位置開始執行,但是 當0x80000000位置存放的代碼有誤的時候(由於某種原遭到破壞),則自動執行b過程,等待上位機對SOC進行 代碼更新;


3------ 當程序更新完畢或者未進行更新直接跳轉到0x80000000位置執行,均意味着BootLoader的一次使命完整結束了。

           需要說明的是,更新成功後,可以選擇進入原處循環等待也可以選擇稍後跳轉到0x80000000執行新的程序

-----------------------------------

在BootLoader中,SOC也可以響應其他中斷,具體能夠響應哪些根據向量表中的不同的設置實現。




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