1. 摘要:
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的整個啟動過程以及程序燒錄的方法。
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環節:
下圖是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 Files\OpenSSL-Win64\bin
完成后,即可導入C:\ti\mcu_plus_sdk_am243x_0x_xx_xx_xx\examples\drivers\boot 中的例程,并進行編譯。這里我們導入的是 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:\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轉換成 .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命令行環境,在開始菜單輸入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:\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
編譯完工程后,我們可以看到生成的相關文件,其中.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:\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 是根據 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 兩個文件的內容。
@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 芯片的應用開發。
參考文檔:
- 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
-
芯片
+關注
關注
456文章
51157瀏覽量
426542 -
mcu
+關注
關注
146文章
17316瀏覽量
352352 -
嵌入式處理
+關注
關注
0文章
341瀏覽量
10049
發布評論請先 登錄
相關推薦
評論