AM243x 是TI Sitara產(chǎn)品線推出的高性能MCU+產(chǎn)品,是一種性能強(qiáng)勁的多核異構(gòu)MCU,擁有4顆800MHz 主頻的Cortex R5F核心和1顆400MHz 主頻的Cortex M4F,以及專門針對多協(xié)議工業(yè)通信總線的2個PRU_ICSSG(2× Gigabit Industrial Communication Subsystems)模塊,可以實現(xiàn)Profinet IRT,Profinet RT,EtherNet/IP,EtherCAT等通信方式。
在這類多核異構(gòu)MCU / CPU產(chǎn)品開發(fā)中,由于芯片在電源軌上的復(fù)雜性以及外設(shè)的豐富程度,不可避免的會接觸到系統(tǒng)復(fù)雜的boot環(huán)節(jié),以及多核調(diào)試帶來的挑戰(zhàn),本文以AM243x-LP評估板為例,對AM243x的booting相關(guān)內(nèi)容進(jìn)行了初步的介紹,并完整演示了RBL-SBL-APP的整個啟動過程以及程序燒錄的方法。
本文以AM243x多核芯片體系結(jié)構(gòu)為切入點,簡要介紹了AM243x的啟動過程,包括加電順序、引導(dǎo)模式選擇、ROM引導(dǎo)過程、SBL過程、SBL-編譯和SYSFW介紹。以ADC演示為例,結(jié)合AM243x LP評估板,完整演示了RBL->SBL->APP啟動過程,簡要介紹了在UART模式下編程外部OSPI Flash的環(huán)境設(shè)置和操作過程,方便用戶在AM243x芯片上快速啟動應(yīng)用程序開發(fā)。
2.AM243x 上電后的Booting環(huán)節(jié):
下圖是AM243x完整的boot流程:
ROWER ON -> ROM Bootloader(RBL) -> Secondary Bootloader(SBL) -> Application Binary。 上電后,芯片進(jìn)行內(nèi)部邏輯的初始化,之后先執(zhí)行ROM中的BOOT代碼,再執(zhí)行用戶自定義的二級BOOT代碼,最后執(zhí)行應(yīng)用程序.
Figure 1 BOOT 啟動流程
2.1 上電時序和啟動方式介紹
AM243x 芯片擁有多個電源域,為不同的內(nèi)部邏輯和外設(shè)供電,,下圖是AM243x的上電時序圖,可以在datasheet找到更詳細(xì)的介紹。
Figure 2 Power Sequence
在滿足供電時序的情況下,MCU_PORz信號最終釋放了對內(nèi)核復(fù)位的控制, MCU_PORz的上升沿會鎖存SYS_BOOTMODE[0:15]這些管腳的上下拉狀態(tài),并由此確定芯片的啟動模式和啟動介質(zhì),然后由ROM Bootloader來讀取啟動信息。
AM243x 有兩種主要的啟動方式:Host boot modes 和 Memory boot modes。
Host boot modes:MCU從不同的外設(shè)進(jìn)行啟動,比如從UART、Ethernet、USB等接口啟動;
Memory boot modes:MCU從不同的外部存儲介質(zhì),比如QSPI Flash、I2C EEPROM、SD卡、U盤等存儲器啟動;
注意:AM243x 有Primary Boot和Backup Boot功能,這意味著AM243x在Primary Boot失敗的情況下可以用 Backup Boot 來啟動,這個可以由 BOOTMODE 管腳進(jìn)行設(shè)置。
關(guān)于 BOOTMODE 管腳配置,我們可以看到是由16根信號線組成,其中高兩位為Reserved。其16bit對應(yīng)的是BOOTMODE 00-15這16根信號線,原理圖中對應(yīng)的管腳為GPMC0_AD0 – 15。
Figure 3 BOOTMODE Pin Mapping
PLL Config 針對不同的外部晶振頻率進(jìn)行配置。
Figure 4 PLL Reference Clock Selection
Primary Boot 模式如下:
Figure 5 Primary Boot Mode Selection
Backup Boot 模式如下:(注意Backup模式下可啟動的方式較少)
Figure 6 Backup Mode Selection
注意:由于ROM Code對不同的啟動接口或介質(zhì)使用的管腳是固定的,在設(shè)計的過程中需要注意選擇對應(yīng)的管腳,詳細(xì)的管腳信息可以在Technical Reference Manual中查看。
2.2 ROM啟動過程介紹
AM243x的ROM Code分為兩部分,分別是DMSC ROM code和Public ROM code,這里DMSC的全稱為Device Management Security Controller,內(nèi)部是一個主頻250MHz 的Cortex M3協(xié)處理器, DMSC模塊是芯片啟動的主控制器.
DMSC ROM code:DMSC ROM 的代碼會涉及到以下幾個部分:
設(shè)備管理;
在 BOOT_CFG中配置boot vectors,控制 R5內(nèi)核的reset釋放, 需特別指出,啟動過程中DMSC是R5內(nèi)核的控制者;
通過主DMSS(Data Movement Subsystem)和Secure Proxy進(jìn)行IPC的配置;
對R5內(nèi)核和SA2UL(Security Accelerator)的PLL進(jìn)行配置;
X509認(rèn)證的解析;
SHA512算法對image integrity check的SA2UL配置;
Public ROM code:下圖是Public ROM code的框架。
Figure 7 Public ROM Code Architecture
Main Module是整個Public ROM code的頂層代碼循環(huán),它可以調(diào)用X509密碼認(rèn)證模塊、Log Trace模塊、System模塊以及外設(shè)驅(qū)動的相關(guān)功能代碼,在這里會重復(fù)執(zhí)行直到MCU接收到完整的boot image,也可以被 DMSC置于sleep模式;
芯片上電后一級啟動過程可以分為三部分:
Hardware 部分:這里主要指電源的上電過程,以及芯片內(nèi)部邏輯的初始化;
DMSC部分:DMSC ROM Code 會首先配置啟動過程中看門狗WDT的溢出時間為180秒,接下來配置MCU PLL,根據(jù)不同Boot Mode進(jìn)行相應(yīng)的Firewall配置,MCU的Secure Proxy/Ring Accelerator,然后DMSC會給MCU發(fā)送Boot Mode Info,最終DMSC釋放R5內(nèi)核的Reset信號,R5內(nèi)核開始工作;
R5 內(nèi)核部分:R5 內(nèi)核拿到DMSC發(fā)送的Boot Device Info(由BOOTMODE管腳的配置決定)后,通過對應(yīng)的Boot模式開始啟動,R5內(nèi)核會請求DMSC對接收到的image代碼進(jìn)行image integrity check,如果成功則繼續(xù)向下執(zhí)行,如果Primary Boot的image無效,R5會切換到Backup Mode 進(jìn)行boot image接收并再次調(diào)用DMSC進(jìn)行image integrity check,這樣重復(fù)執(zhí)行調(diào)用,直到180秒看門狗溢出為止,這時MCU會被復(fù)位,重復(fù)上面的所有流程。
當(dāng)image integrity check成功后,R5內(nèi)核會對Main Domain的PLL進(jìn)行配置,接下來DMSC會停止Clock并且Reset R5,R5在復(fù)位結(jié)束后開始執(zhí)行Boot Image(這里在RAM里面的Boot Image不受R5復(fù)位的影響,處于保持狀態(tài)),整個Boot流程完成,芯片開始二級BOOT流程。
Figure 8 Boot Process
2.3 二級SBL啟動過程介紹
SBL的全稱是Second boot loader,用于完成芯片的一些初始配置,拷貝DMSC的SYSFW到片內(nèi)RAM以及加載多核應(yīng)用代碼。 下圖是一個典型的SBL流程. DMSC模塊會再次啟動WDT看門狗并設(shè)定開門狗溢出時間為180秒。 R5 core 0執(zhí)行SBL代碼,先拷貝FLASH上的DMSC SYSFW到片內(nèi)RAM, DMSC ROM代碼對SYSFW image 進(jìn)行完整性檢查后,將SYSFW加載到DMSC模塊,之后DMSC模塊會跳出DMSC ROM代碼,改為執(zhí)行DMSC SYSFW代碼。 SBL會繼續(xù)加載和解析R5核的應(yīng)用代碼并根據(jù)Image信息設(shè)定啟動地址,完成后會請求DMSC 釋放其他R5核的復(fù)位信號,所有內(nèi)核開始執(zhí)行程序.
Figure 9 SBL Boot Process
3.AM243x-LP 使用介紹:
AM243x-LP評估板提供了豐富的功能和接口,XDS110調(diào)試器也被集成在電路板上面,方便用戶的燒錄調(diào)試,同時USB轉(zhuǎn)UART功能也通過同一USB接口實現(xiàn),用于串口log信息的打印。
Figure 10 System Architecture
評估板上的另一個USB Type C接口用來供電,整板的電流會在2A左右,這里建議先連接Micro USB,建立串口連接后,然后再連接USB Type C接口。USB Type C的連接線需要使用標(biāo)準(zhǔn)的全功能連接線,否則無法與評估板上的CC邏輯控制器TUSB320LAIRWBR進(jìn)行正常通信,造成輸出電流配置不正常,無法正確對評估板供電。
Figure 11 AM243x-LP Board
正常連接兩根USB線之后,板子上會有4個LED燈點亮,分別是LD6、LD7、LD8和LD11四個綠色LED燈。LD9紅色燈會在USB Type C插入的瞬間亮一次,之后熄滅,如果常亮,則代表供電有問題。
Figure 12 AM243x-LP Board LED Status
在Micro USB線連接后,Windows系統(tǒng)會進(jìn)行XDS110的驅(qū)動安裝(CCS安裝時會自帶驅(qū)動),安裝完成后,會在設(shè)備管理器里面出現(xiàn)兩個對應(yīng)設(shè)備,如下圖。
Figure 13 AM243x-LP Board USB Port
User UART對應(yīng)的是用戶可用的USB轉(zhuǎn)串口打印log的端口,在AM243x-LP評估板中對應(yīng)的是AM243x的MAIN_UART0接口。
下圖是AM243x-LP評估板上的四個按鍵,其功能分別如下:
Figure 14 AM243x-LP Board Push Buttons
在理解這幾種不同的Reset之前,我們先看看AM243x整個芯片構(gòu)成的兩個Domain,分別是MCU Domain和Main Domain,它們分別由下面的子模塊構(gòu)成。
Figure 15 AM243x Power Domain
我們可以看到在不同的Domain里面包含了不同的模塊和外設(shè),這個就決定了不同Domain對不同外設(shè)和模塊的控制權(quán)。在Reset部分,可以通過不同的Reset源對不同的Domain進(jìn)行獨立控制,也可以通過配置改變其控制Domain的范圍。
MCU_PORz:可以看作整個芯片(MCU+MAIN)的冷啟動復(fù)位,可以進(jìn)行動態(tài)Boot Mode更改而不用斷電;
MCU_RESETz:MCU Domain的熱復(fù)位;
SoC_RESET_REQz: Main Domain的熱復(fù)位;
在AM243x-LP評估板上可以由8位撥碼開關(guān)來更改Boot配置,其中第8位沒有使用,是懸空狀態(tài),下面的表格列出了這7位配置對應(yīng)的Boot Mode情況。
Figure 16 AM243x LP Boot Mode Selection Table
其中常用的三種模式如下圖所示:
Figure 17-1 AM243x LP Boot Mode Switch
關(guān)于 Backup Boot Mode,在AM243x-LP是默認(rèn)配置為NONE模式(BOOTMODE13:10 = x 0 0 0),這里暫時不用關(guān)心。
Figure 17-2 AM243x LP Boot Mode Switch (Backup Mode Configuration)
可以在斷電狀態(tài)下更改撥碼開關(guān)的配置,然后重新上電?;蛘咴谕姷那闆r下改變撥碼開關(guān),然后用SW1按鈕實現(xiàn)MCU_PORz冷復(fù)位以使得新的Boot Mode生效。
4. SDK 例程中 SBL 的介紹:
如果要對 SDK 中的 SBL 程序在CCS中進(jìn)行編譯,需要額外安裝OpenSSL,可以在下面的地址下載light版本,
https://slproweb.com/download/Win64OpenSSL_Light-3_0_0.exe
在安裝的過程中,注意選擇 The Windows system directory選項。
Figure 18 OpenSSL Installation
安裝完成后,需要在windows系統(tǒng)的Path變量中加入下面的路徑。
C:Program FilesOpenSSL-Win64bin
完成后,即可導(dǎo)入C:timcu_plus_sdk_am243x_0x_xx_xx_xxexamplesdriversboot 中的例程,并進(jìn)行編譯。這里我們導(dǎo)入的是 sbl_ospi 這個文件夾內(nèi)的工程。
Figure 19 SBL Boot Project
SBL NULL:這個SBL只做了MCU的初始化并且把內(nèi)核至于WFI模式(Wait For Interrupt);
SBL OSPI:初始化MCU并且從OSPI Flash 的 0x80000地址讀取并啟動多核appimage代碼;
SBL OSPI Multi-Partition:初始化MCU并且從OSPI Flash 不同的偏移地址讀取各個內(nèi)核的代碼;
SBL UART:初始化MCU并且從UART通過Xmodem協(xié)議讀取并啟動多核appimage代碼;
SBL UART Uniflash:配合py腳本的flash writer程序,用來燒錄OSPI Flash;
4.1 SBL boot image 創(chuàng)建
SBL 與一般的應(yīng)用程序類似,可以通過CCS來創(chuàng)建并編譯,在從 .out文件到boot image的轉(zhuǎn)化過程,其詳細(xì)情況如下:
雖然SBL工程與應(yīng)用程序類似,但SBL 的入口地址與用戶應(yīng)用程序的入口地址有所不同。在AM243x 的 ROM code 會把程序的入口地址同時配置給 both R5FSS0-0 和R5FSS0-1兩個內(nèi)核。 考慮到SBL只運行在R5SS0-0上,我們需要把R5FSS0-1置于WFI模式,只運行R5FSS0-0內(nèi)核,這個操作可以通過增加link參數(shù) -e_vectors_sbl來實現(xiàn)。
Figure 20 AM243x Link Command
在進(jìn)入main()函數(shù)之后,首先必須調(diào)用Bootloader_socLoadSysFw來加載 SYSFW 到 DMSC 的Cortex M3內(nèi)核,進(jìn)行 board config 操作。
備注:SYSFW默認(rèn)以 .h 頭文件的形式被編譯鏈接到SBL,啟動過程中會發(fā)送到DMSC內(nèi)核的專有RAM區(qū)域,SYSFW的文件內(nèi)容在 C:timcu_plus_sdk_am243x_0x_xx_xx_xxsourcedriverssciclientsocam64x_am243x sysfw_signed.h 里面。
Figure 21 Bootloader_socLoadSysFw
在SBL里,vectors默認(rèn)被鏈接到0x7000000,而且SBL中不能使用ATCM(A Tightly-Coupled Memory)和BTCM(B Tightly-Coupled Memory)的地址空間,SBL 只能使用 0x70000000到0x70080000這個地址范圍的空間,包含code、data、stack之類。
在編譯后,SBL的 .out 文件會通過GCC的objcopy轉(zhuǎn)換成 .bin 文件,接下來會通過 Signing Scripts 簽名生成可啟動的 .tiimage 文件,在這里會使用一個默認(rèn)的key來簽名,即使是非安全啟動MCU芯片也需要走這個流程。這個 Signing Script 會用到前面安裝的 OpenSSL。
RBL在加載SBL的時候是需要SBL為被簽名的格式,可以通過下面的命令來對SBL進(jìn)行簽名。
cd C:timcu_plus_sdk_am243x_0x_xx_xx_xxtoolsbootsigning
.x509CertificateGen.ps1 -b {BOOTIMAGE_BIN_NAME} -o {BOOTIMAGE_NAME} -c R5 -l 0x70000000 -k rom_degenerateKey.pem -d DEBUG -j DBG_FULL_ENABLE -m SPLIT_MODE
這里我們用一個例程生成的bin文件來演示一下,首先拷貝CCS生成的bin文件到C:timcu_plus_sdk_am243x_0x_xx_xx_xxtoolsbootsigning,方便命令行下操作。
Figure 22 Signing Files Folder
注意:這里要用到 Windows 10下面的Powershell命令行環(huán)境,在開始菜單輸入Powershell并執(zhí)行,即可進(jìn)入界面,公司的電腦有可能對Powershell的執(zhí)行權(quán)限有限制,這個在執(zhí)行的時候會提示。
.x509CertificateGen.ps1 -b sbl_ospi_am243x-lp_r5fss0-0_nortos_ti-arm-clang.bin -o sbl_ospi_am243x-lp.tiimage -c R5 -l 0x70000000 -k rom_degenerateKey.pem -d DEBUG -j DBG_FULL_ENABLE -m SPLIT_MODE
至此,我們在這里可以看到最終生成的可以用來啟動的SBL的 tiimage 文件。
Figure 23 Powershell console command execution
Figure 24 Signing result of tiimage
5. SBL 燒錄并引導(dǎo)應(yīng)用程序運行:
下面我們快速驗證一下SBL配合用戶應(yīng)用程序進(jìn)行boot并運行的情況。
5.1 安裝Phython 腳本
板載外部QSPI Flash需要通過python腳本進(jìn)行燒錄,所需的Python 3 環(huán)境下載地址如下。
https://www.python.org/downloads/windows/
注意安裝Python的時候需要選擇把Python的路徑加入到系統(tǒng)路徑,安裝完成后可以在CMD Console下驗證是否安裝成功。
Figure 25 Python Installation
Figure 26 Python Environment Check
接下來需要執(zhí)行下面的命令安裝與串口下載相關(guān)的組件,注意需要在管理員模式打開cmd窗口。
pip install --upgrade pip
pip install pyserial xmodem tqdm
Figure 27 Python toolset installation
5.2 生成應(yīng)用代碼Image
打開 CCS后,導(dǎo)入SDK的ADC驅(qū)動例程,路徑如下。
C:timcu_plus_sdk_am243x_0x_xx_xx_xxexamplesdriversadcadc_singleshotam243x-lpr5fss0-0_freertos
Figure 28 Import SDK ADC example into CCS
Figure 29 Confirm the example import
Figure 30 Build the example
編譯完工程后,我們可以看到生成的相關(guān)文件,其中.appimage是應(yīng)用程序要燒錄到外部 SPI Flash的文件。
5.3 使用UART 啟動模式燒錄OSPI SBL文件和應(yīng)用代碼Image
接下來的燒錄操作需要在windows的command console里操作,為了方便這個流程,我們可以利用bat文件來直接執(zhí)行,提高效率。
在ccs的workspace目錄中adc_singleshot_am243x-lp_r5fss0-0_freertos_ti-arm-clang工程目錄下,我們新建一個文件夾,暫且命名為AM243xProgFlash,如下圖:
Figure 31 UART programing script files
在這個文件夾里面,@Prog-Boot+App.bat 是手工創(chuàng)建的,里面執(zhí)行了簡單的python命令,sbl_ospi.release.tiimage、sbl_uart_uniflash.release.tiimag是從 C:timcu_plus_sdk_am243x_0x_xx_xx_xxtoolsbootsbl_prebuiltam243x-lp 這個路徑拷貝過來的。
其中sbl_ospi.release.tiimage 也可以使用上面我們編譯成功的 sbl_ospi 工程的 tiimage 文件。uart_uniflash.py 從C:timcu_plus_sdk_am243x_0x_xx_xx_xxtoolsboot 拷貝過來。ospi_sbl+app.cfg 是根據(jù) C:timcu_plus_sdk_am243x_0x_xx_xx_xxtoolsbootsbl_prebuiltam243x-lpdefault_sbl_ospi.cfg 文件修改的。
下面是 @Prog-Boot+App.bat和 ospi_sbl+app.cfg 兩個文件的內(nèi)容。
@Prog-Boot+App.bat 文件:這里需要注意 COM17 根據(jù)自己的情況來修改PC端燒錄端口。
@echo off
echo+
echo+
echo **********************************************************************
echo Start to Program "QSPI Bootloader" and "App Image" to QSPI Flash......
echo **********************************************************************
echo+
echo+
python uart_uniflash.py -p COM17 --cfg= ospi_sbl+app.cfg
echo+
echo+
echo ******** Finished!!! ********
echo+
echo+
pause
ospi_sbl+app.cfg 文件:這里注意黃色標(biāo)識部分的路徑和文件名。
#-----------------------------------------------------------------------------#
# #
# DEFAULT CONFIGURATION FILE TO BE USED WITH THE FLASHWRITER SCRIPT #
# #
#-----------------------------------------------------------------------------#
#
# By default this config file,
# - points to pre-built flash writer, bootloader for this LP
# - The application image points to relative path of the ipc echo application image for this LP
# - Make sure this application is built before running this script
# - You can customized this config file to point to your own bootloader and/or application images
# - You can use --operation=flashverify if you just want to verify the flash contents and not flash the file.
#
# First point to sbl_uart_uniflash binary, which function's as a server to flash one or more files
--flash-writer=sbl_uart_uniflash.release.tiimage
# Now send one or more files to flash or flashverify as needed. The order of sending files does not matter
# Program the OSPI PHY tuning attack vector
--operation=flash-phy-tuning-data
# When sending bootloader make sure to flash at offset 0x0. ROM expects bootloader at offset 0x0
--file=sbl_ospi.release.tiimage --operation=flash --flash-offset=0x0
# When sending application image, make sure to flash at offset 0x80000 (default) or to whatever offset your bootloader is configured for
--file=../Debug/adc_singleshot_am243x-lp_r5fss0-0_freertos_ti-arm-clang.appimage --operation=flash --flash-offset=0x80000
# send the XIP image for this application, no need to specify flash offset since flash offset is specified within the image itself
#--file=../Debug/adc_singleshot_am243x-lp_r5fss0-0_freertos_ti-arm-clang.appimage_xip --operation=flash-xip
準(zhǔn)備好這些文件后,把AM243x-LP配置為UART boot后上電,雙擊執(zhí)行@Prog-Boot+App.bat即可燒錄。
Figure 32 UART Programing Result
5.4 使用UART 啟動模式燒錄QPSI SBL文件和應(yīng)用代碼Image
燒錄完成后,切換AM243x-LP為 QSPI BOOT 模式,用按鍵SW1 MCU_PORZ復(fù)位系統(tǒng),可以看到串口輸出的信息,這里可以看到OSPI Bootloader 的信息和 ADC demo 的信息輸出,到此完成了 RBL-SBL-APP 的啟動過程。
Figure 33 ADC Program Running Result
6. 總 結(jié):
由于此類多核異構(gòu)MCU的構(gòu)架與通用MCU的構(gòu)架差異較大,在啟動和調(diào)試帶來的挑戰(zhàn)也是顯而易見的。本文以AM243x的芯片構(gòu)架為切入點,簡要的介紹了AM243x的啟動流程以及涉及到的SBL相關(guān)內(nèi)容,以ADC demo為例,結(jié)合AM243x-LP評估板,完整演示了RBL-SBL-APP 的啟動過程,簡要介紹了 UART 模式燒錄外部OSPI Flash的環(huán)境搭建和操作流程,方便用戶快速進(jìn)入AM243x 芯片的應(yīng)用開發(fā)。
-
電源
+關(guān)注
關(guān)注
185文章
18181瀏覽量
254441 -
mcu
+關(guān)注
關(guān)注
146文章
17734瀏覽量
358576 -
cpu
+關(guān)注
關(guān)注
68文章
11013瀏覽量
215303 -
通信總線
+關(guān)注
關(guān)注
0文章
46瀏覽量
9970
發(fā)布評論請先 登錄
怎么往板載空的spi nand flash中燒錄系統(tǒng)固件?
BSP_OSPI_NOR_Erase_Block() 失敗怎么解決?
可以使用OSPI_RegularCmdTypeDef共享代碼函數(shù)讀取NOR-flash ID和NOR-flash SDFP嗎
請問如何使用HAL_OSPI_Receive提高quad SPI接收的速度?
rt1052 sbl升級固件后硬卡死怎么處理?
Recommendations for Booting Wi
關(guān)于使用燒錄器燒錄Nand Flash
如何進(jìn)行板載SPI flash燒錄

AM243x-LP快速上手—Booting SBL和板載OSPI Flash燒錄

AM243x-LP 快速上手 --- Booting SBL 和板載 OSPI Flash 燒錄

AN122 GD32H7系列MCU OSPI flash執(zhí)行環(huán)境用戶指南

評論