Raspberry Pi 推出了搭載全新RP2350微控制器的Pico 2。
RP2350是一款有趣的微控制器單元(MCU)。它擁有兩個核心,這兩個核心中的一個或兩個都可以配置為Arm Cortex-M33或Hazard3 RISC-V。但本文將忽略RISC-V功能。
Pico 2并非唯一一款搭載Cortex-M33微控制器的開發板,但我相信它是全球范圍內最便宜且最容易購買的一款。然而,從編程的角度來看,與其他如STM32H5系列的Arm Cortex-M33 MCU相比,Pico 2有一個主要的不同點:RP2350擁有一個(固定的)啟動ROM,這為其提供了額外的功能。這帶來的影響是,RP2350會首先執行其啟動ROM,而不是用戶應用程序。此外,我認為為了支持RP2350的特性(如版本控制、A/B版本、安全啟動、簽名鏡像),引入了塊(以及分區表)的概念。分區表是可選的,但使用塊是必須的。因此,雖然一個用C編寫的簡單裸機應用程序可以使用Arm GNU工具鏈進行編譯(Pico SDK提供了RP2350 CMSIS支持),但它無法直接在RP2350上執行,因為它缺少描述鏡像所需的(元數據)塊。
在Pico SDK構建系統中,所需的塊在和pico-sdk/src/rp2_common/pico_crt0/embedded_end_block.inc.S中定義。這些是包含一些ifdefs的匯編源文件,這些文件中定義的數據被放入一個名為.embedded_block的段中。然后,這個塊根據pico-sdk/src/rp2_common/pico_crt0/rp2350中的鏈接器描述腳本嵌入到鏡像中。
用戶應用程序二進制文件的元數據所需的最小塊在RP2350數據手冊的第5.9.5節“最小可行鏡像元數據”中進行了描述。這些元數據存儲在一個名為IMAGE_DEF的塊中,該塊包含兩個項目:PICOBIN_BLOCK_ITEM_1BS_IMAGE_TYPE和PICOBIN_BLOCK_ITEM_2BS_LAST。每個塊都需要一個類型為LAST的項目作為最后一個項目,這意味著這個最小塊實際上只包含一個有意義的項目(IMAGE_TYPE)。鏡像類型項目包含以下關于鏡像的信息:
鏡像是可執行的(IMAGE_TYPE_EXE)
鏡像在安全模式下運行(EXE_SECURITY_S)
鏡像針對Arm架構(EXE_CPU_ARM)
鏡像針對RP2350(EXE_CHIP_RP2350)
這個塊長20字節,應該位于加載到閃存的二進制文件的前4KB內。這是啟動ROM代碼找到它的方式。
上述所有信息(EXE、ARM、RP2350)除了一個(SECURITY_S)之外都應該很明顯,但你可能會問為什么它在安全模式下運行。原因是RP2350的安全擴展始終啟用(不能像STM32 MCU那樣禁用)。啟動ROM在安全模式下運行,并正常跳轉到用戶應用程序,因此(至少最初)用戶應用程序也應該在安全模式下運行。之后,用戶應用程序可以根據需要配置安全性。
由于通常將向量表保存在閃存鏡像的開頭,并且向量表小于4KB,因此將這個20字節長的塊放在向量表之后是有意義的。與Pico SDK構建系統類似,這個塊可以很容易地在匯編源文件中創建,并使用鏈接器描述腳本鏈接到正確的位置。
我創建了一個非常簡單的LED閃爍項目,沒有使用Pico SDK構建系統。可以在GitHub上的rp2350-bare-metal-build找到該項目。
-
Pico
+關注
關注
0文章
179瀏覽量
17330 -
SDK
+關注
關注
3文章
1054瀏覽量
46902
發布評論請先 登錄
相關推薦
樹莓派 Pico 2040 的“速度狂飆”:時鐘速度幾乎翻倍!

RP2350 現已上市!變體即將發布!

樹莓派 Pico SDK 2.1.1 版本發布!

RP2350與RP2040全面對比
RP2350 數據手冊及深度了解功能性能特性和開源項目案例

Made with KiCad(九十一):基于 RP2350 的最小系統設計

Raspberry Pi Pico 2

評論