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