AM243x 是TI Sitara產品線推出的高性能MCU+產品,是一種性能強勁的多核異構MCU,擁有4顆800MHz 主頻的Cortex R5F核心和1顆400MHz 主頻的Cortex M4F,以及專門針對多協議工業通信總線的2個PRU_ICSSG(2× Gigabit Industrial Communication Subsystems)模塊,可以實現Profinet IRT,Profinet RT,EtherNet/IP,EtherCAT等通信方式。
在這類多核異構MCU / CPU產品開發中,由于芯片在電源軌上的復雜性以及外設的豐富程度,不可避免的會接觸到系統復雜的boot環節,以及多核調試帶來的挑戰,本文以AM243x-LP評估板為例,對AM243x的booting相關內容進行了初步的介紹,并完整演示了RBL-SBL-APP的整個啟動過程以及程序燒錄的方法。
本文以AM243x多核芯片體系結構為切入點,簡要介紹了AM243x的啟動過程,包括加電順序、引導模式選擇、ROM引導過程、SBL過程、SBL-編譯和SYSFW介紹。以ADC演示為例,結合AM243x LP評估板,完整演示了RBL->SBL->APP啟動過程,簡要介紹了在UART模式下編程外部OSPI Flash的環境設置和操作過程,方便用戶在AM243x芯片上快速啟動應用程序開發。
2.AM243x 上電后的Booting環節:
下圖是AM243x完整的boot流程:
ROWER ON -> ROM Bootloader(RBL) -> Secondary Bootloader(SBL) -> Application Binary。 上電后,芯片進行內部邏輯的初始化,之后先執行ROM中的BOOT代碼,再執行用戶自定義的二級BOOT代碼,最后執行應用程序.
Figure 1 BOOT 啟動流程
2.1 上電時序和啟動方式介紹
AM243x 芯片擁有多個電源域,為不同的內部邏輯和外設供電,,下圖是AM243x的上電時序圖,可以在datasheet找到更詳細的介紹。
Figure 2 Power Sequence
在滿足供電時序的情況下,MCU_PORz信號最終釋放了對內核復位的控制, MCU_PORz的上升沿會鎖存SYS_BOOTMODE[0:15]這些管腳的上下拉狀態,并由此確定芯片的啟動模式和啟動介質,然后由ROM Bootloader來讀取啟動信息。
AM243x 有兩種主要的啟動方式:Host boot modes 和 Memory boot modes。
Host boot modes:MCU從不同的外設進行啟動,比如從UART、Ethernet、USB等接口啟動;
Memory boot modes:MCU從不同的外部存儲介質,比如QSPI Flash、I2C EEPROM、SD卡、U盤等存儲器啟動;
注意:AM243x 有Primary Boot和Backup Boot功能,這意味著AM243x在Primary Boot失敗的情況下可以用 Backup Boot 來啟動,這個可以由 BOOTMODE 管腳進行設置。
關于 BOOTMODE 管腳配置,我們可以看到是由16根信號線組成,其中高兩位為Reserved。其16bit對應的是BOOTMODE 00-15這16根信號線,原理圖中對應的管腳為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對不同的啟動接口或介質使用的管腳是固定的,在設計的過程中需要注意選擇對應的管腳,詳細的管腳信息可以在Technical Reference Manual中查看。
2.2 ROM啟動過程介紹
AM243x的ROM Code分為兩部分,分別是DMSC ROM code和Public ROM code,這里DMSC的全稱為Device Management Security Controller,內部是一個主頻250MHz 的Cortex M3協處理器, DMSC模塊是芯片啟動的主控制器.
DMSC ROM code:DMSC ROM 的代碼會涉及到以下幾個部分:
設備管理;
在 BOOT_CFG中配置boot vectors,控制 R5內核的reset釋放, 需特別指出,啟動過程中DMSC是R5內核的控制者;
通過主DMSS(Data Movement Subsystem)和Secure Proxy進行IPC的配置;
對R5內核和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的頂層代碼循環,它可以調用X509密碼認證模塊、Log Trace模塊、System模塊以及外設驅動的相關功能代碼,在這里會重復執行直到MCU接收到完整的boot image,也可以被 DMSC置于sleep模式;
芯片上電后一級啟動過程可以分為三部分:
Hardware 部分:這里主要指電源的上電過程,以及芯片內部邏輯的初始化;
DMSC部分:DMSC ROM Code 會首先配置啟動過程中看門狗WDT的溢出時間為180秒,接下來配置MCU PLL,根據不同Boot Mode進行相應的Firewall配置,MCU的Secure Proxy/Ring Accelerator,然后DMSC會給MCU發送Boot Mode Info,最終DMSC釋放R5內核的Reset信號,R5內核開始工作;
R5 內核部分:R5 內核拿到DMSC發送的Boot Device Info(由BOOTMODE管腳的配置決定)后,通過對應的Boot模式開始啟動,R5內核會請求DMSC對接收到的image代碼進行image integrity check,如果成功則繼續向下執行,如果Primary Boot的image無效,R5會切換到Backup Mode 進行boot image接收并再次調用DMSC進行image integrity check,這樣重復執行調用,直到180秒看門狗溢出為止,這時MCU會被復位,重復上面的所有流程。
當image integrity check成功后,R5內核會對Main Domain的PLL進行配置,接下來DMSC會停止Clock并且Reset R5,R5在復位結束后開始執行Boot Image(這里在RAM里面的Boot Image不受R5復位的影響,處于保持狀態),整個Boot流程完成,芯片開始二級BOOT流程。
Figure 8 Boot Process
2.3 二級SBL啟動過程介紹
SBL的全稱是Second boot loader,用于完成芯片的一些初始配置,拷貝DMSC的SYSFW到片內RAM以及加載多核應用代碼。 下圖是一個典型的SBL流程. DMSC模塊會再次啟動WDT看門狗并設定開門狗溢出時間為180秒。 R5 core 0執行SBL代碼,先拷貝FLASH上的DMSC SYSFW到片內RAM, DMSC ROM代碼對SYSFW image 進行完整性檢查后,將SYSFW加載到DMSC模塊,之后DMSC模塊會跳出DMSC ROM代碼,改為執行DMSC SYSFW代碼。 SBL會繼續加載和解析R5核的應用代碼并根據Image信息設定啟動地址,完成后會請求DMSC 釋放其他R5核的復位信號,所有內核開始執行程序.
Figure 9 SBL Boot Process
3.AM243x-LP 使用介紹:
AM243x-LP評估板提供了豐富的功能和接口,XDS110調試器也被集成在電路板上面,方便用戶的燒錄調試,同時USB轉UART功能也通過同一USB接口實現,用于串口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系統會進行XDS110的驅動安裝(CCS安裝時會自帶驅動),安裝完成后,會在設備管理器里面出現兩個對應設備,如下圖。
Figure 13 AM243x-LP Board USB Port
User UART對應的是用戶可用的USB轉串口打印log的端口,在AM243x-LP評估板中對應的是AM243x的MAIN_UART0接口。
下圖是AM243x-LP評估板上的四個按鍵,其功能分別如下:
Figure 14 AM243x-LP Board Push Buttons
在理解這幾種不同的Reset之前,我們先看看AM243x整個芯片構成的兩個Domain,分別是MCU Domain和Main Domain,它們分別由下面的子模塊構成。
Figure 15 AM243x Power Domain
我們可以看到在不同的Domain里面包含了不同的模塊和外設,這個就決定了不同Domain對不同外設和模塊的控制權。在Reset部分,可以通過不同的Reset源對不同的Domain進行獨立控制,也可以通過配置改變其控制Domain的范圍。
MCU_PORz:可以看作整個芯片(MCU+MAIN)的冷啟動復位,可以進行動態Boot Mode更改而不用斷電;
MCU_RESETz:MCU Domain的熱復位;
SoC_RESET_REQz: Main Domain的熱復位;
在AM243x-LP評估板上可以由8位撥碼開關來更改Boot配置,其中第8位沒有使用,是懸空狀態,下面的表格列出了這7位配置對應的Boot Mode情況。
Figure 16 AM243x LP Boot Mode Selection Table
其中常用的三種模式如下圖所示:
Figure 17-1 AM243x LP Boot Mode Switch
關于 Backup Boot Mode,在AM243x-LP是默認配置為NONE模式(BOOTMODE13:10 = x 0 0 0),這里暫時不用關心。
Figure 17-2 AM243x LP Boot Mode Switch (Backup Mode Configuration)
可以在斷電狀態下更改撥碼開關的配置,然后重新上電。或者在通電的情況下改變撥碼開關,然后用SW1按鈕實現MCU_PORz冷復位以使得新的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系統的Path變量中加入下面的路徑。
C:Program FilesOpenSSL-Win64bin
完成后,即可導入C:timcu_plus_sdk_am243x_0x_xx_xx_xxexamplesdriversboot 中的例程,并進行編譯。這里我們導入的是 sbl_ospi 這個文件夾內的工程。
Figure 19 SBL Boot Project
SBL NULL:這個SBL只做了MCU的初始化并且把內核至于WFI模式(Wait For Interrupt);
SBL OSPI:初始化MCU并且從OSPI Flash 的 0x80000地址讀取并啟動多核appimage代碼;
SBL OSPI Multi-Partition:初始化MCU并且從OSPI Flash 不同的偏移地址讀取各個內核的代碼;
SBL UART:初始化MCU并且從UART通過Xmodem協議讀取并啟動多核appimage代碼;
SBL UART Uniflash:配合py腳本的flash writer程序,用來燒錄OSPI Flash;
4.1 SBL boot image 創建
SBL 與一般的應用程序類似,可以通過CCS來創建并編譯,在從 .out文件到boot image的轉化過程,其詳細情況如下:
雖然SBL工程與應用程序類似,但SBL 的入口地址與用戶應用程序的入口地址有所不同。在AM243x 的 ROM code 會把程序的入口地址同時配置給 both R5FSS0-0 和R5FSS0-1兩個內核。 考慮到SBL只運行在R5SS0-0上,我們需要把R5FSS0-1置于WFI模式,只運行R5FSS0-0內核,這個操作可以通過增加link參數 -e_vectors_sbl來實現。
Figure 20 AM243x Link Command
在進入main()函數之后,首先必須調用Bootloader_socLoadSysFw來加載 SYSFW 到 DMSC 的Cortex M3內核,進行 board config 操作。
備注:SYSFW默認以 .h 頭文件的形式被編譯鏈接到SBL,啟動過程中會發送到DMSC內核的專有RAM區域,SYSFW的文件內容在 C:timcu_plus_sdk_am243x_0x_xx_xx_xxsourcedriverssciclientsocam64x_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轉換成 .bin 文件,接下來會通過 Signing Scripts 簽名生成可啟動的 .tiimage 文件,在這里會使用一個默認的key來簽名,即使是非安全啟動MCU芯片也需要走這個流程。這個 Signing Script 會用到前面安裝的 OpenSSL。
RBL在加載SBL的時候是需要SBL為被簽名的格式,可以通過下面的命令來對SBL進行簽名。
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命令行環境,在開始菜單輸入Powershell并執行,即可進入界面,公司的電腦有可能對Powershell的執行權限有限制,這個在執行的時候會提示。
.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 燒錄并引導應用程序運行:
下面我們快速驗證一下SBL配合用戶應用程序進行boot并運行的情況。
5.1 安裝Phython 腳本
板載外部QSPI Flash需要通過python腳本進行燒錄,所需的Python 3 環境下載地址如下。
https://www.python.org/downloads/windows/
注意安裝Python的時候需要選擇把Python的路徑加入到系統路徑,安裝完成后可以在CMD Console下驗證是否安裝成功。
Figure 25 Python Installation
Figure 26 Python Environment Check
接下來需要執行下面的命令安裝與串口下載相關的組件,注意需要在管理員模式打開cmd窗口。
pip install --upgrade pip
pip install pyserial xmodem tqdm
Figure 27 Python toolset installation
5.2 生成應用代碼Image
打開 CCS后,導入SDK的ADC驅動例程,路徑如下。
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
編譯完工程后,我們可以看到生成的相關文件,其中.appimage是應用程序要燒錄到外部 SPI Flash的文件。
5.3 使用UART 啟動模式燒錄OSPI SBL文件和應用代碼Image
接下來的燒錄操作需要在windows的command console里操作,為了方便這個流程,我們可以利用bat文件來直接執行,提高效率。
在ccs的workspace目錄中adc_singleshot_am243x-lp_r5fss0-0_freertos_ti-arm-clang工程目錄下,我們新建一個文件夾,暫且命名為AM243xProgFlash,如下圖:
Figure 31 UART programing script files
在這個文件夾里面,@Prog-Boot+App.bat 是手工創建的,里面執行了簡單的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 是根據 C:timcu_plus_sdk_am243x_0x_xx_xx_xxtoolsbootsbl_prebuiltam243x-lpdefault_sbl_ospi.cfg 文件修改的。
下面是 @Prog-Boot+App.bat和 ospi_sbl+app.cfg 兩個文件的內容。
@Prog-Boot+App.bat 文件:這里需要注意 COM17 根據自己的情況來修改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后上電,雙擊執行@Prog-Boot+App.bat即可燒錄。
Figure 32 UART Programing Result
5.4 使用UART 啟動模式燒錄QPSI SBL文件和應用代碼Image
燒錄完成后,切換AM243x-LP為 QSPI BOOT 模式,用按鍵SW1 MCU_PORZ復位系統,可以看到串口輸出的信息,這里可以看到OSPI Bootloader 的信息和 ADC demo 的信息輸出,到此完成了 RBL-SBL-APP 的啟動過程。
Figure 33 ADC Program Running Result
6. 總 結:
由于此類多核異構MCU的構架與通用MCU的構架差異較大,在啟動和調試帶來的挑戰也是顯而易見的。本文以AM243x的芯片構架為切入點,簡要的介紹了AM243x的啟動流程以及涉及到的SBL相關內容,以ADC demo為例,結合AM243x-LP評估板,完整演示了RBL-SBL-APP 的啟動過程,簡要介紹了 UART 模式燒錄外部OSPI Flash的環境搭建和操作流程,方便用戶快速進入AM243x 芯片的應用開發。
-
電源
+關注
關注
185文章
17897瀏覽量
252403 -
mcu
+關注
關注
146文章
17400瀏覽量
353251 -
cpu
+關注
關注
68文章
10930瀏覽量
213491 -
通信總線
+關注
關注
0文章
45瀏覽量
9905
發布評論請先 登錄
相關推薦
BSP_OSPI_NOR_Erase_Block() 失敗怎么解決?
可以使用OSPI_RegularCmdTypeDef共享代碼函數讀取NOR-flash ID和NOR-flash SDFP嗎
請問如何使用HAL_OSPI_Receive提高quad SPI接收的速度?
rt1052 sbl升級固件后硬卡死怎么處理?
Recommendations for Booting Wi
關于使用燒錄器燒錄Nand Flash
如何進行板載SPI flash燒錄

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

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

AN122 GD32H7系列MCU OSPI flash執行環境用戶指南

評論