啟動(dòng)軟件是芯片復(fù)位后執(zhí)行的第一個(gè)軟件。
SSW在CPU0上執(zhí)行 - 所有其他CPU在引導(dǎo)期間保持Halt狀態(tài),由用戶軟件啟動(dòng),而:
BootROM中的SSW起始地址是CPU0的程序計(jì)數(shù)器寄存器中的復(fù)位值。從該位置獲取指令,這是在任何設(shè)備啟動(dòng)之后執(zhí)行的第一條指令。在此入口點(diǎn)之后,固件立即檢查testmode,如果選擇了testmode,則執(zhí)行跳轉(zhuǎn)到測(cè)試固件
最后一條SSW指令跳轉(zhuǎn)到第一條用戶代碼指令。取決于用戶選擇的啟動(dòng)配置,可以從不同位置獲取該第一用戶指令。
啟動(dòng)軟件包含根據(jù)以下一項(xiàng)或多項(xiàng)初始化設(shè)備的過(guò)程:
以前存儲(chǔ)在專用Flash位置的信息
專用寄存器/存儲(chǔ)器位置中的特殊位/字段的當(dāng)前狀態(tài)
觸發(fā)SSW執(zhí)行的事件類型(最后一次重置事件),SSW執(zhí)行可以由不同的事件觸發(fā),包括上電、系統(tǒng)復(fù)位、應(yīng)用復(fù)位。
應(yīng)用于外部(配置)引腳的值(可選)SSW還會(huì)調(diào)用 - 以防 - 其他固件模塊。
啟動(dòng)時(shí)的時(shí)鐘系統(tǒng)
上電或是系統(tǒng)復(fù)位后,時(shí)鐘模塊處于初始化狀態(tài),各個(gè)總線的時(shí)鐘頻率如下:
而應(yīng)用程序復(fù)位后,時(shí)鐘系統(tǒng)不會(huì)改變其狀態(tài),因此器件以與復(fù)位事件之前相同的頻率和時(shí)鐘源運(yùn)行。
有個(gè)注意的點(diǎn)是上電啟動(dòng)過(guò)程和系統(tǒng)復(fù)位會(huì)重寫(xiě)從CPU0 DSPR起的8 KByte空間。因此,應(yīng)用軟件不應(yīng)使用該區(qū)域保存數(shù)據(jù)。不同復(fù)位的影響如下圖所示。
啟動(dòng)模式
其中HWCFG[0:2]用于配置MCU的供電模式,HWCFG[3]是BMI的選擇引腳,它決定啟動(dòng)配置從引腳HWCFG[4:5]選擇,還是從Flash中BMI選擇。為了節(jié)省引腳資源和避免安全漏洞,通常啟動(dòng)模式選擇用Flash中的BMI,芯片的判斷流程如下圖所示。
BMI信息存放在BMHD寄存器中,共由9個(gè)字段組成,如下圖所示,F(xiàn)lash中的BMHD寄存器總共有4個(gè),如圖2所示,其目的是為了做冗余設(shè)計(jì),保證在一個(gè)或多個(gè)損壞時(shí),芯片仍能正常啟動(dòng)。
其中:
1、STADABM存放的是用戶代碼的入口地址;
2、BMI用于配置用戶的啟動(dòng)模式,BMI.PINDIS用于配置是否屏蔽硬件HWCFG[3:5]引腳功能,如果該位置位,那么BMI.HWCFG用作啟動(dòng)配置;
3、LCL0LSEN、LCL1LSEN用于配置是否使能core0、core1的鎖步功能;
4、BMHDID為固定值0xB359;
5、ChkStart、ChkEnd用于存放計(jì)算CRC的起始地址和末尾地址,CRCrange、CC—R—C—r—a—n—g—e—分別是按照IEEE802.3中的CRC算法計(jì)算的CRC值和其取反的值;
6、CRChead、C—R—C—h—e—a—d—是計(jì)算BMHD的00H~17H的CRC值和其取反的值。
啟動(dòng)流程
如下圖所示,主要的初始化過(guò)程在CPU0上執(zhí)行,如果初始化階段要求鎖步核校驗(yàn),也可以切換至CPU1。其中Firmware固化在BootROM中的啟動(dòng)程序。對(duì)于冷復(fù)位,可以通過(guò)配置PROCOND寄存器選擇性地初始化內(nèi)存區(qū)。下面結(jié)合圖3介紹啟動(dòng)的主要步驟:
1、調(diào)用Cstart()函數(shù)初始化C運(yùn)行環(huán)境;初始化堆棧指針和程序狀態(tài)字(PSW)寄存器,A10寄存器用作堆棧指針,用戶堆棧指針基地址和堆棧大小通過(guò)連接文件設(shè)置,啟動(dòng)代碼應(yīng)該測(cè)試和初始化用于堆棧的存儲(chǔ)區(qū),對(duì)齊堆棧邊界;上下文存儲(chǔ)區(qū)(CSA)初始化,PSW(CDC )寄存器中表示連續(xù)上下文切換的調(diào)用深度內(nèi)容應(yīng)該被重置,通過(guò)PCXI、LCX、FCX寄存器初始化CSA鏈表,通過(guò)連接文件配置CSA的大小;中斷及陷阱向量表的基地址初始化,也就是BIV和BTV寄存器;初始化PCON和DCON寄存器使能程序緩存、數(shù)據(jù)緩存,該寄存器的配置能有效縮短程序的運(yùn)行時(shí)間;清除bss段的內(nèi)存,復(fù)制data段的數(shù)據(jù)至內(nèi)存中。
2、確認(rèn)已發(fā)生的復(fù)位時(shí)間類型,并測(cè)試是否有電源故障和內(nèi)存數(shù)據(jù)是否一致。如果復(fù)位類型為應(yīng)用復(fù)位,且內(nèi)存數(shù)據(jù)沒(méi)有破壞,則不需要初始化內(nèi)存、時(shí)鐘、Flash模塊,從而進(jìn)入快速啟動(dòng)過(guò)程。
3、初始化驅(qū)動(dòng)和外設(shè)至默認(rèn)狀態(tài)。例如將端口引腳初始化為所需要的初始電氣狀態(tài)。
4、進(jìn)行安全測(cè)試和初始化。包括CPU測(cè)試、RAM測(cè)試、SMU警告檢測(cè)和其他重要的安全啟動(dòng)測(cè)試。另外可以調(diào)用safeTlib程序。
5、完成安全測(cè)試之后,對(duì)應(yīng)用需要的硬件模塊驅(qū)動(dòng)進(jìn)行初始化,時(shí)鐘初始化,F(xiàn)lash配置,GTM初始化等。
6、在驅(qū)動(dòng)程序初始化后,此時(shí)硬件只啟動(dòng)了CPU0,其他核仍保持Halt狀態(tài),軟件通過(guò)調(diào)用Startcore()、Cstart()函數(shù)啟動(dòng)和初始化相應(yīng)的核,最后把控制權(quán)交給操作系統(tǒng)。
審核編輯:湯梓紅
-
英飛凌
+關(guān)注
關(guān)注
66文章
2136瀏覽量
138261 -
寄存器
+關(guān)注
關(guān)注
31文章
5295瀏覽量
119824 -
cpu
+關(guān)注
關(guān)注
68文章
10807瀏覽量
210852
原文標(biāo)題:英飛凌TC27X芯片的啟動(dòng)學(xué)習(xí)筆記
文章出處:【微信號(hào):汽車電子嵌入式,微信公眾號(hào):汽車電子嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論