1. 摘要:
AM243x 是TI Sitara產(chǎn)品線最新推出的高性能MCU+產(chǎn)品,是一種性能強勁的多核異構(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)容進行了初步的介紹,并完整演示了RBL-SBL-APP的整個啟動過程以及程序燒錄的方法。
Abstract:
This article takes the AM243x multi-core chip architecture as the entry point, briefly introduces the AM243x startup process, including Power up sequence, Boot Mode selection, ROM boot process, SBL process, SBL compiling, and SYSFW introduction. Taking the ADC demo as an example, combined with the AM243x-LP evaluation board, a complete demonstration of the RBL -> SBL -> APP startup process, briefly introduces the environment setup and operation process of programming external OSPI Flash in UART mode, which is convenient for users to quickly start the application development on AM243x chips.
2.AM243x 上電后的Booting環(huán)節(jié):
下圖是AM243x完整的boot流程:
ROWER ON -> ROM Bootloader(RBL) -> Secondary Bootloader(SBL) -> Application Binary。 上電后,芯片進行內(nèi)部邏輯的初始化,之后先執(zhí)行ROM中的BOOT代碼,再執(zhí)行用戶自定義的二級BOOT代碼,最后執(zhí)行應(yīng)用程序.

Figure 1 BOOT 啟動流程
2.1 上電時序和啟動方式介紹
AM243x 芯片擁有多個電源域,為不同的內(nèi)部邏輯和外設(shè)供電,,下圖是AM243x的上電時序圖,可以在datasheet找到更詳細的介紹。

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è)進行啟動,比如從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 管腳進行設(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 針對不同的外部晶振頻率進行配置。

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)的管腳,詳細的管腳信息可以在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進行IPC的配置;
- 對R5內(nèi)核和SA2UL(Security Accelerator)的PLL進行配置;
- X509認證的解析;
- 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密碼認證模塊、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進行相應(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代碼進行image integrity check,如果成功則繼續(xù)向下執(zhí)行,如果Primary Boot的image無效,R5會切換到Backup Mode 進行boot image接收并再次調(diào)用DMSC進行image integrity check,這樣重復(fù)執(zhí)行調(diào)用,直到180秒看門狗溢出為止,這時MCU會被復(fù)位,重復(fù)上面的所有流程。
當image integrity check成功后,R5內(nèi)核會對Main Domain的PLL進行配置,接下來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 進行完整性檢查后,將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的連接線需要使用標準的全功能連接線,否則無法與評估板上的CC邏輯控制器TUSB320LAIRWBR進行正常通信,造成輸出電流配置不正常,無法正確對評估板供電。

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)會進行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進行獨立控制,也可以通過配置改變其控制Domain的范圍。
- MCU_PORz:可以看作整個芯片(MCU+MAIN)的冷啟動復(fù)位,可以進行動態(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是默認配置為NONE模式(BOOTMODE13:10 = x 0 0 0),這里暫時不用關(guān)心。

Figure 17-2 AM243x LP Boot Mode Switch (Backup Mode Configuration)
可以在斷電狀態(tài)下更改撥碼開關(guān)的配置,然后重新上電。或者在通電的情況下改變撥碼開關(guān),然后用SW1按鈕實現(xiàn)MCU_PORz冷復(fù)位以使得新的Boot Mode生效。
4. SDK 例程中 SBL 的介紹:
如果要對 SDK 中的 SBL 程序在CCS中進行編譯,需要額外安裝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 Files\OpenSSL-Win64\bin
完成后,即可導(dǎo)入C:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\examples\drivers\boot 中的例程,并進行編譯。這里我們導(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)化過程,其詳細情況如下:
雖然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
在進入main()函數(shù)之后,首先必須調(diào)用Bootloader_socLoadSysFw來加載 SYSFW 到 DMSC 的Cortex M3內(nèi)核,進行 board config 操作。
備注:SYSFW默認以 .h 頭文件的形式被編譯鏈接到SBL,啟動過程中會發(fā)送到DMSC內(nèi)核的專有RAM區(qū)域,SYSFW的文件內(nèi)容在 C:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\source\drivers\sciclient\soc\am64x_am243x\ sysfw_signed.h 里面。

Figure 21 Bootloader_socLoadSysFw
在SBL里,vectors默認被鏈接到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 文件,在這里會使用一個默認的key來簽名,即使是非安全啟動MCU芯片也需要走這個流程。這個 Signing Script 會用到前面安裝的 OpenSSL。
RBL在加載SBL的時候是需要SBL為被簽名的格式,可以通過下面的命令來對SBL進行簽名。
cd C:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\tools\boot\signing
.\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:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\tools\boot\signing,方便命令行下操作。

Figure 22 Signing Files Folder
注意:這里要用到 Windows 10下面的Powershell命令行環(huán)境,在開始菜單輸入Powershell并執(zhí)行,即可進入界面,公司的電腦有可能對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)用程序進行boot并運行的情況。
5.1 安裝Phython 腳本
板載外部QSPI Flash需要通過python腳本進行燒錄,所需的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:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\examples\drivers\adc\adc_singleshot\am243x-lp\r5fss0-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:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\tools\boot\sbl_prebuilt\am243x-lp\ 這個路徑拷貝過來的。
其中sbl_ospi.release.tiimage 也可以使用上面我們編譯成功的 sbl_ospi 工程的 tiimage 文件。uart_uniflash.py 從C:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\tools\boot 拷貝過來。ospi_sbl+app.cfg 是根據(jù) C:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\tools\boot\sbl_prebuilt\am243x-lp\default_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 文件:這里注意黃色標識部分的路徑和文件名。
#-----------------------------------------------------------------------------#
# #
# 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
準備好這些文件后,把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)境搭建和操作流程,方便用戶快速進入AM243x 芯片的應(yīng)用開發(fā)。
參考文檔:
- AM243x SitaraMicrocontrollers datasheet (Rev. B)
- AM64x/AM243x Technical Reference Manual (Rev. B)
- AM243x MCU+ SDK 08.00.00 User Guide
- AM243x LP User's Guide
-
芯片
+關(guān)注
關(guān)注
462文章
53325瀏覽量
456193 -
mcu
+關(guān)注
關(guān)注
147文章
18465瀏覽量
381880 -
嵌入式處理
+關(guān)注
關(guān)注
0文章
341瀏覽量
10434
發(fā)布評論請先 登錄
?AM243x Sitara? 微控制器技術(shù)文檔總結(jié)
AM2431技術(shù)文檔總結(jié)
瑞薩RA8D1 MCU如何進行OSPI Flash驅(qū)動的適配工作
AM263x控制卡擴展塢技術(shù)解析與應(yīng)用指南
基于AM243x Sitara?微控制器的工業(yè)通信與實時控制解決方案
德州儀器AM243x LaunchPad?開發(fā)套件技術(shù)解析與應(yīng)用指南
瑞薩RA8D1 MCU的OSPI Flash適配指南
恩智浦NXP LinkServer Flash工具使用介紹與燒錄教程
使用Renesas Flash Programmer軟件燒錄芯片程序——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(08)
AN122 GD32H7系列MCU OSPI flash執(zhí)行環(huán)境用戶指南
為 AM570x 供電的 LP87332D 和 LP873220 用戶指南
TPS659037為AM574x、AM572x和AM571x供電的用戶指南
AM64x/AM243x GP EVM用戶指南

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