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