問題描述:F28004x在線調試,如果利用CCS進行reset復位后,點擊run/resume程序將停留在0x3FB02A 而無法繼續運行, 而需先點擊restart,程序方可正常運行。原因在于F28004x在仿真狀態下的引導模式(Emulation Boot)尚未配置,因而無法順利完成引導過程,而CCS的restart功能可以屏蔽芯片的引導過程,使得程序自動跳到main()函數入口。具體分析此問題之前,有必要了解下芯片在復位后的引導過程。下面以F28004x為例介紹C2000芯片的引導過程,老版本的芯片可參考《TMS320x2803x Piccolo Boot ROM reference guide》,基本過程還是一致的。
當芯片重上電或者收到復位信號時,芯片都需要執行引導程序,選擇程序入口地址或者通過外設加載程序(bootloader),后續才會運行應用程序。復位后,芯片會從地址0x3FFFC0處運行復位向量,從而跳轉至Boot ROM里開始執行InitBoot功能。芯片會判斷當前是否連接仿真器,進入不同的引導流程,如圖1和圖2分別給出了芯片在脫機模式和仿真調試模式的引導過程。
(1) 若芯片沒有連接仿真器,系統進入脫機模式的引導過程。F28004x在出廠時默認通過引導模式選擇引腳(Boot Mode Select Pin, BMPS) GPIO24和GPIO32的電平狀態組合選擇不同的引導模式,如表1所示。但與F2803x等老版本芯片不同,F28004x也可以支持用戶自定義BMPS和引導模式,分別通過改寫DCSM OTP中的 Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF對應的值實現自定義引導功能,支持最多3個BMPS引腳和8種引導模式。
具體過程:若Z1-OTP-BOOTPIN-CONFIG.Key=0x5A,則進入自定義引導模式,
芯片根據Z1-OTP-BOOTPIN-CONFIG.BMPSx設定的BMPS引腳及其電平狀態,判斷要執行的引導模式(對應的引導模式通過Z1-OTP-BOOTDEF.BOOTDEFx進行設置)。否則,芯片將根據GPIO24和GPIO32的電平狀態選擇默認的引導模式。
(2) 若芯片沒有連接仿真器,則進入仿真調試的引導模式,通過讀取EMU-BOOTPIN-CONFIG和EMU_BOOTDEF的值,從而執行特定的引導模式。值得注意的是,上述的自定義模式配置在OTP中的修改是一次性的,無法再次擦寫。因此,系統提供了EMU-BOOTPIN-CONFIG和EMU_BOOTDEF用于仿真模擬自定義的引導過程,用于真正修改DCSM OTP之前的參考。
具體過程:若EMU-BOOTPIN-CONFIG.Key=0x5A,則選擇自定義模式進行引導過程,芯片根據EMU-BOOTPIN-CONFIG.BMPSx設定的BMPS引腳及其電平狀態,判斷要執行的引導模式。值得注意的是,若EMU-BOOTPIN-CONFIG.Key=0xA5,則意味著芯片可在仿真器連接的情況下,進入脫機運行模式下對應的引導過程,即根據Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF對應的值進行引導;該模式與F2803x在連接仿真器時將EMU_BMODE配置成GetMode()原理一致。而如果EMU-BOOTPIN-CONFIG.Key的值沒有正確配置,芯片將進入Wait Boot 模式,會處于循環等待狀態而無法完成引導過程。
若芯片順利完成引導模式,芯片會通過外設進行加載程序,或者直接跳轉至引導模式對應的程序入口地址開始運行應用程序,即main()。比如,如果是boot to Flash,則跳轉至地址0x80000(此時需在CMD文件中配置“codestart” section鏈接至對應的Flash 空間地址)。
基于以上關于F28004x芯片引導流程的介紹,再回頭分析下芯片在連接仿真器進行調試時的復位問題。以C2000ware提供的LED程序為例,(C:\ti\c2000\C2000Ware_DigitalPower_SDK_1_02_00_00\c2000ware\device_support\f28004x\examples\led ),燒寫程序。根據表 2給出的Boot ROM 寄存器地址,可通過在Memory Browser 窗口查看EMU_BOOTPIN_CONFIG.Key值(高8位),結果如圖 3所示,即由于EMU-BOOTPIN-CONFIG.Key = 0xEE, 因此芯片將進入Wait Boot 模式,如果進行reset后直接運行,通過反匯編Disassembly 窗口可知程序停在了0x3FB02A,處于ESTOP0循環等待狀態,正是在Wait Boot 的運行地址范圍內(0x3FAD74 – 0x3FB0CD),如圖 4所示。
因此,如果要實現復位后點resume直接運行,解決方法就是要正確配置仿真狀態下的引導模式。以boot to flash 為例(F28004x TRM手冊中的4.3.3.1), 有以下兩種思路:
1) 在EMU_BOOTPIN_CONFIG地址寫入0x5AFFFFFF,同時在EMU_BOOTDEF_LOW地址對應的低8位寫入0x03(BOOTDEF.BOOTDEF0=0x03)
2) 如果芯片在單機時可正常運行,例如GPIO24和GPIO32電平都為高(默認進入boot to flash),則在EMU_BOOTPIN_CONFIG地址0xD00寫入0xA5FFFFFF即可。
最后,對比下老版本的F28035芯片的引導過程。如圖 5所示,可知該芯片已默認配置成GET_BOOT模式(EMU_BMODE= 0x0003),進一步去判斷OTP_KEY的值,該值不等于0x55AA,因此引導模式為boot to flash,經驗證,芯片可順利完成引導程序,從而執行應用程序。
審核編輯:何安
-
嵌入式處理
+關注
關注
0文章
341瀏覽量
10042
發布評論請先 登錄
相關推薦
評論