問題描述:F28004x在線調(diào)試,如果利用CCS進行reset復位后,點擊run/resume程序?qū)⑼A粼?x3FB02A 而無法繼續(xù)運行, 而需先點擊restart,程序方可正常運行。原因在于F28004x在仿真狀態(tài)下的引導模式(Emulation Boot)尚未配置,因而無法順利完成引導過程,而CCS的restart功能可以屏蔽芯片的引導過程,使得程序自動跳到main()函數(shù)入口。具體分析此問題之前,有必要了解下芯片在復位后的引導過程。下面以F28004x為例介紹C2000芯片的引導過程,老版本的芯片可參考《TMS320x2803x Piccolo Boot ROM reference guide》,基本過程還是一致的。
當芯片重上電或者收到復位信號時,芯片都需要執(zhí)行引導程序,選擇程序入口地址或者通過外設(shè)加載程序(bootloader),后續(xù)才會運行應用程序。復位后,芯片會從地址0x3FFFC0處運行復位向量,從而跳轉(zhuǎn)至Boot ROM里開始執(zhí)行InitBoot功能。芯片會判斷當前是否連接仿真器,進入不同的引導流程。
(1) 若芯片沒有連接仿真器,系統(tǒng)進入脫機模式的引導過程。F28004x在出廠時默認通過引導模式選擇引腳(Boot Mode Select Pin, BMPS) GPIO24和GPIO32的電平狀態(tài)組合選擇不同的引導模式。但與F2803x等老版本芯片不同,F(xiàn)28004x也可以支持用戶自定義BMPS和引導模式,分別通過改寫DCSM OTP中的 Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF對應的值實現(xiàn)自定義引導功能,支持最多3個BMPS引腳和8種引導模式。
具體過程:若Z1-OTP-BOOTPIN-CONFIG.Key=0x5A,則進入自定義引導模式,
芯片根據(jù)Z1-OTP-BOOTPIN-CONFIG.BMPSx設(shè)定的BMPS引腳及其電平狀態(tài),判斷要執(zhí)行的引導模式(對應的引導模式通過Z1-OTP-BOOTDEF.BOOTDEFx進行設(shè)置)。否則,芯片將根據(jù)GPIO24和GPIO32的電平狀態(tài)選擇默認的引導模式。
(2) 若芯片沒有連接仿真器,則進入仿真調(diào)試的引導模式,通過讀取EMU-BOOTPIN-CONFIG和EMU_BOOTDEF的值,從而執(zhí)行特定的引導模式。值得注意的是,上述的自定義模式配置在OTP中的修改是一次性的,無法再次擦寫。因此,系統(tǒng)提供了EMU-BOOTPIN-CONFIG和EMU_BOOTDEF用于仿真模擬自定義的引導過程,用于真正修改DCSM OTP之前的參考。
具體過程:若EMU-BOOTPIN-CONFIG.Key=0x5A,則選擇自定義模式進行引導過程,芯片根據(jù)EMU-BOOTPIN-CONFIG.BMPSx設(shè)定的BMPS引腳及其電平狀態(tài),判斷要執(zhí)行的引導模式。值得注意的是,若EMU-BOOTPIN-CONFIG.Key=0xA5,則意味著芯片可在仿真器連接的情況下,進入脫機運行模式下對應的引導過程,即根據(jù)Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF對應的值進行引導;該模式與F2803x在連接仿真器時將EMU_BMODE配置成GetMode()原理一致。而如果EMU-BOOTPIN-CONFIG.Key的值沒有正確配置,芯片將進入Wait Boot 模式,會處于循環(huán)等待狀態(tài)而無法完成引導過程。
若芯片順利完成引導模式,芯片會通過外設(shè)進行加載程序,或者直接跳轉(zhuǎn)至引導模式對應的程序入口地址開始運行應用程序,即main()。比如,如果是boot to Flash,則跳轉(zhuǎn)至地址0x80000(此時需在CMD文件中配置“codestart” section鏈接至對應的Flash 空間地址)。
基于以上關(guān)于F28004x芯片引導流程的介紹,再回頭分析下芯片在連接仿真器進行調(diào)試時的復位問題。以C2000ware提供的LED程序為例,(C:tic2000C2000Ware_DigitalPower_SDK_1_02_00_00c2000waredevice_supportf28004xexamplesled ),燒寫程序。根據(jù)表 2給出的Boot ROM 寄存器地址,可通過在Memory Browser 窗口查看EMU_BOOTPIN_CONFIG.Key值(高8位),即由于EMU-BOOTPIN-CONFIG.Key = 0xEE, 因此芯片將進入Wait Boot 模式,如果進行reset后直接運行,通過反匯編Disassembly 窗口可知程序停在了0x3FB02A,處于ESTOP0循環(huán)等待狀態(tài),正是在Wait Boot 的運行地址范圍內(nèi)(0x3FAD74 – 0x3FB0CD)。
因此,如果要實現(xiàn)復位后點resume直接運行,解決方法就是要正確配置仿真狀態(tài)下的引導模式。以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芯片的引導過程。可知該芯片已默認配置成GET_BOOT模式(EMU_BMODE= 0x0003),進一步去判斷OTP_KEY的值,該值不等于0x55AA,因此引導模式為boot to flash,經(jīng)驗證,芯片可順利完成引導程序,從而執(zhí)行應用程序。
審核編輯:郭婷
-
芯片
+關(guān)注
關(guān)注
456文章
50932瀏覽量
424610 -
寄存器
+關(guān)注
關(guān)注
31文章
5357瀏覽量
120622 -
仿真器
+關(guān)注
關(guān)注
14文章
1019瀏覽量
83801
發(fā)布評論請先 登錄
相關(guān)推薦
評論