評(píng)估板上的開發(fā)實(shí)戰(zhàn)指南)
Zephyr 在 Infineon KIT_PSC3M5_EVKPSOC? Control C3M5評(píng)估板上的開發(fā)實(shí)戰(zhàn)指南【免費(fèi)下載鏈接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ze/zephyr導(dǎo)讀本文圍繞 Infineon KIT_PSC3M5_EVK 評(píng)估板在 Zephyr RTOS 中的板級(jí)支持展開系統(tǒng)講解該板卡基于 PSOC? Control C3M5PSC3M5FDS2AFQ1Cortex-M33 主控的硬件資源、三種板級(jí)變體、默認(rèn)外設(shè)映射、系統(tǒng)時(shí)鐘樹、構(gòu)建燒錄與調(diào)試流程以及基于 ROM BootFLASH_BOOT與 MCUboot 的安全啟動(dòng)簽名方案。讀完本文你將掌握如何在 Zephyr 中為目標(biāo)板編譯并燒錄應(yīng)用程序、如何啟用 NOR Flash 變體并完成硬件改造以及如何使用 Infineon EdgeProtect Tools 對(duì)鏡像進(jìn)行簽名與安全啟動(dòng)配置。板卡概述面向工業(yè)控制與電機(jī)驅(qū)動(dòng)的評(píng)估平臺(tái)KIT_PSC3M5_EVK 是 Infineon 推出的評(píng)估套件核心 SoC 為 PSOC? Control C3M5型號(hào) PSC3M5FDS2AFQ1搭載一顆主頻最高240 MHz的Arm? Cortex?-M33內(nèi)核專門面向工業(yè)控制與電機(jī)驅(qū)動(dòng)類應(yīng)用設(shè)計(jì)。板卡關(guān)鍵硬件指標(biāo)如下SoCPSOC? Control C3M5PSC3M5FDS2AFQ1CPUArm? Cortex?-M33 240 MHzFlash256 KBSRAM64 KB連接性2× CAN FD、6× SCB可配置為 UART/SPI/I2C外設(shè)高分辨率定時(shí)器、可編程模擬子系統(tǒng)、比較器安全Arm? TrustZone?-M調(diào)試板載 KitProg3SWD UART 橋接供電USB 供電3.3V 工作電壓接口USB Type-C編程與供電一體擴(kuò)展Arduino Uno R3、mikroBUS、兩路 40-pin 排針用戶 IO兩顆用戶 LED、兩顆用戶按鍵、電位器從板級(jí)元數(shù)據(jù)kit_psc3m5_evk.yaml可以看到Zephyr 已為該板聲明支持can、gpio、spi、timer、uart、dma、comparator、rtc等外設(shè)類別工具鏈支持 Zephyr SDK 與 GNU Arm Embedded。套件內(nèi)容PSOC? Control C3M5 評(píng)估板USB Type-A 轉(zhuǎn) Type-C 線纜跳線若干快速入門指南印刷于包裝上板級(jí)變體KIT_PSC3M5_EVK 在 Zephyr 中支持三種構(gòu)建目標(biāo)對(duì)應(yīng) board.yml 中聲明的 SoC 變體變體說(shuō)明kit_psc3m5_evkSecure 變體默認(rèn)啟用 Arm? TrustZone?-M 安全態(tài)kit_psc3m5_evk/psc3m5fds2afq1/nsNon-secure 變體面向非安全態(tài)應(yīng)用kit_psc3m5_evk/psc3m5fds2afq1/norflashNOR Flash 變體需要執(zhí)行板卡硬件改造默認(rèn)的 Secure 變體在 kit_psc3m5_evk_defconfig 中通過(guò)CONFIG_TRUSTED_EXECUTION_SECUREy與CONFIG_ARM_TRUSTZONE_My開啟安全執(zhí)行環(huán)境同時(shí)默認(rèn)啟用 Infineon MXCRYPTOLITE 的 TRNG 熵源CONFIG_ENTROPY_INFINEON_MXCRYPTOLITE_TRNGy與加密加速CONFIG_CRYPTO_INFINEON_MXCRYPTOLITEy而非安全變體則在 kit_psc3m5_evk_psc3m5fds2afq1_ns_defconfig 中通過(guò)CONFIG_TRUSTED_EXECUTION_NONSECUREy配置。連接與 IO 映射用戶 LED名稱GPIO Pin極性LED0P8.5Active LowLED1P8.4Active Low在 kit_psc3m5_evk-common.dtsi 中兩顆 LED 通過(guò)gpio-leds兼容節(jié)點(diǎn)聲明并分別被別名到led0與led1leds { compatible gpio-leds; user_led0: led_0 { label LED_0; gpios gpio_prt8 5 GPIO_ACTIVE_LOW; }; user_led1: led_1 { label LED_1; gpios gpio_prt8 4 GPIO_ACTIVE_LOW; }; };用戶按鍵名稱GPIO Pin極性SW1P5.0Active LowSW2P2.0Active Low按鍵在 devicetree 中以gpio-keys兼容節(jié)點(diǎn)聲明并帶有上拉與輸入事件碼INPUT_KEY_0/INPUT_KEY_1方便直接接入 Zephyr Input 子系統(tǒng)gpio_keys { compatible gpio-keys; user_bt0: user_btn0 { label SW_1; gpios gpio_prt5 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); zephyr,code INPUT_KEY_0; }; user_bt1: user_btn1 { label SW_2; gpios gpio_prt2 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); zephyr,code INPUT_KEY_1; }; };默認(rèn) Zephyr 外設(shè)映射Pin功能用途P6.3SCB3 UART TXConsole TXP6.2SCB3 UART RXConsole RXP6.1SCB3 UART RTSConsole RTSP6.0SCB3 UART CTSConsole CTSP8.5GPIOLED0P8.4GPIOLED1P5.0GPIOButton SW1P2.0GPIOButton SW2UART 引腳在 kit_psc3m5_evk-pinctrl.dtsi 中配置了驅(qū)動(dòng)模式TX/RTS 為推挽輸出drive-push-pullRX/CTS 使能輸入input-enable。系統(tǒng)時(shí)鐘樹PSOC? Control C3M5 默認(rèn)以IMOInternal Main Oscillator作為系統(tǒng)時(shí)鐘源Zephyr 板級(jí)描述中的完整時(shí)鐘路徑為IMO內(nèi)部主振蕩器8 MHzFLLIMO → 100 MHzCLK_HF0180 MHz系統(tǒng)時(shí)鐘CLK_HF3240 MHz高性能外設(shè)時(shí)鐘在 kit_psc3m5_evk-common.dtsi 中可以找到與文檔對(duì)應(yīng)的時(shí)鐘配置證據(jù)fll0被配置為 96 MHz 輸出dpll_lp0位于 CLKPATH1配置為 180 MHzfeedback-div 45; reference-div 6; output-div 2dpll_lp1位于 CLKPATH2配置為 240 MHzfeedback-div 60; reference-div 6; output-div 2。其中CLK_HF2從 CLKPATH2240 MHz三分頻得到 80 MHz專門用于驅(qū)動(dòng)外設(shè)組 4UART、CAN、SPI、計(jì)數(shù)器以保證符合 CiA 601-3 規(guī)范的 CAN FD 位速率UART 驅(qū)動(dòng)會(huì)動(dòng)態(tài)重算其外設(shè)分頻系數(shù)。CLK_HF4 則為 NOR Flash 變體中的 SCB5 SPI 外設(shè)時(shí)鐘源見(jiàn) kit_psc3m5_evk_psc3m5fds2afq1_norflash.dts。串口ConsolePSOC? Control C3M5 擁有 6 個(gè) SCBSerial Communication Block接口每個(gè) SCB 均可配置為 UART、SPI 或 I2C。Zephyr 控制臺(tái)輸出被分配至SCB3設(shè)備樹節(jié)點(diǎn)uart3經(jīng) KitProg3 的 USB-UART 橋接路由到上位機(jī)。在 kit_psc3m5_evk-common.dtsi 中SCB3 被配置為uart3: scb3 { compatible infineon,uart; status okay; current-speed 115200; clocks peri0_group4_8bit_0; pinctrl-0 p6_3_scb3_uart_tx p6_2_scb3_uart_rx p6_1_scb3_uart_rts p6_0_scb3_uart_cts; pinctrl-names default; };并在 kit_psc3m5_evk.dts 的chosen節(jié)點(diǎn)中被指定為控制臺(tái)與 shell 串口chosen { zephyr,sram sram0; zephyr,flash flash0; zephyr,flash-controller flash_controller; zephyr,console uart3; zephyr,shell-uart uart3; zephyr,canbus can1; zephyr,entropy mxcryptolite_trng; };默認(rèn)通信參數(shù)為115200 8N18 數(shù)據(jù)位、無(wú)校驗(yàn)、1 停止位。構(gòu)建應(yīng)用程序以 Zephyr 的hello_world示例為例在 Zephyr 環(huán)境已安裝 west 并完成 SDK 配置下執(zhí)行west build -b kit_psc3m5_evk -p always samples/hello_world-b kit_psc3m5_evk指定目標(biāo)板默認(rèn) Secure 變體-p always每次都進(jìn)行 pristine 構(gòu)建確保干凈輸出。編譯產(chǎn)物默認(rèn)輸出在build/zephyr/目錄下。NOR Flash 變體kit_psc3m5_evk/psc3m5fds2afq1/norflash變體啟用了一片通過(guò)SCB5連接的外部S25FL128P SPI NOR Flash16 MB。該 Flash 被暴露為一個(gè) storage 分區(qū)storage_partition適用于 Zephyr 的 Flash API、文件系統(tǒng)或 Settings 存儲(chǔ)。注意該變體需要硬件改造。未經(jīng)改造的板卡應(yīng)始終使用默認(rèn)目標(biāo)kit_psc3m5_evk。NOR Flash 板卡改造Kit Rework根據(jù) KIT_PSC3M5_EVK 用戶指南Table 7需要按下表進(jìn)行電阻改造以啟用 SCB5 SPI NOR Flash 接口。該改造會(huì)將LPCOMP1 輸入斷開并復(fù)用這些引腳作為 SPI 接口。參考位號(hào)Reference Designator裝配AssemblyR96StuffR105StuffR101StuffR114StuffR113DNIR95DNIR104DNIR100DNI“Stuff”表示焊裝電阻“DNI”表示不焊裝/移除。改造完成后SPI 與 Flash 節(jié)點(diǎn)在 kit_psc3m5_evk_psc3m5fds2afq1_norflash.dts 中被啟用spi5: scb5 { #address-cells 1; #size-cells 0; compatible infineon,spi; status okay; pinctrl-0 p8_1_scb5_spi_m_mosi p8_2_scb5_spi_m_miso p8_3_scb5_spi_m_clk; pinctrl-names default; cs-gpios gpio_prt8 0 GPIO_ACTIVE_LOW; clocks peri0_group6_16_5bit_0; s25fl128p: s25fl128p0 { compatible jedec,spi-nor; reg 0; spi-max-frequency DT_FREQ_M(8); jedec-id [01 60 18]; size 0x8000000; /* 128 Mbit */ partitions { compatible fixed-partitions; #address-cells 1; #size-cells 1; storage_partition: partition0 { label storage; reg 0x0 DT_SIZE_M(16); }; }; }; };同時(shí)該變體的 Kconfigkit_psc3m5_evk_psc3m5fds2afq1_norflash_defconfig開啟CONFIG_SPIy與CONFIG_SPI_NORy。構(gòu)建 NOR Flash 變體使用flash_shell示例驗(yàn)證 NOR Flash 的讀寫操作west build -b kit_psc3m5_evk/psc3m5fds2afq1/norflash -p always samples/drivers/flash_shell編程與調(diào)試KIT_PSC3M5_EVK 板載KitProg3編程器/調(diào)試器可用于對(duì) PSOC? Control C3M5 的 Cortex-M33 內(nèi)核進(jìn)行編程與調(diào)試。Zephyr 側(cè)通過(guò) OpenOCD runner 支持燒錄board.cmake 中指定了--target-handleTARGET.cm33并引入openocd.board.cmake。Infineon OpenOCD 安裝燒錄依賴Infineon OpenOCD標(biāo)準(zhǔn) OpenOCD 不含 PSOC Control C3 目標(biāo)支持有兩種獲取方式ModusToolbox? Programming Tools 軟件包自帶 Infineon OpenOCD獨(dú)立安裝下載 Infineon OpenOCD 對(duì)應(yīng)系統(tǒng)的發(fā)布版本解壓到任意位置。Linux 提示Linux 需要為 KitProg3 配置設(shè)備訪問(wèn)權(quán)限。ModusToolbox? Programming Tools 安裝時(shí)會(huì)自動(dòng)完成獨(dú)立安裝 OpenOCD 時(shí)可手動(dòng)執(zhí)行腳本openocd/udev_rules/install_rules.sh完成配置。配置控制臺(tái)將 USB 線纜從 PC 連接到板卡 KitProg3 的 USB Type-C 接口J15然后使用任意串口終端minicom、PuTTY 等連接參數(shù)如下Speed波特率115200Data數(shù)據(jù)位8 bitsParity校驗(yàn)NoneStop bits停止位1燒錄Windows一次性配置 Infineon OpenOCD 路徑west config build.cmake-args -- -DOPENOCDpath/to/infineon/openocd/bin/openocd.exe構(gòu)建并燒錄west build -b kit_psc3m5_evk -p always samples/hello_world west flashLinux一次性配置 Infineon OpenOCD 路徑west config build.cmake-args -- -DOPENOCDpath/to/infineon/openocd/bin/openocd構(gòu)建并燒錄west build -b kit_psc3m5_evk -p always samples/hello_world west flash燒錄成功后串口控制臺(tái)應(yīng)輸出*** Booting Zephyr OS build vX.Y.Z *** Hello World! kit_psc3m5_evk調(diào)試通過(guò) GDB 啟動(dòng)調(diào)試會(huì)話west build -b kit_psc3m5_evk -p always samples/hello_world west debugGDB 控制臺(tái)啟動(dòng)后即可在 PSOC? Control C3M5 的 Cortex-M33 內(nèi)核上設(shè)置斷點(diǎn)并進(jìn)行標(biāo)準(zhǔn) GDB 調(diào)試。安全啟動(dòng)Secure BootPSOC? Control C3M5 內(nèi)置 ROM 啟動(dòng)階段FLASH_BOOT負(fù)責(zé)認(rèn)證并啟動(dòng)內(nèi)部 Flash 中的第一個(gè) OEM 應(yīng)用。BOOT_SIMPLE_APP 模式設(shè)備默認(rèn)工作于BOOT_SIMPLE_APP模式FLASH_BOOT 直接加載內(nèi)部 Flash 起始處的應(yīng)用鏡像不進(jìn)行任何加密簽名校驗(yàn)。鏡像采用基本的 Cortex-M33 格式中斷向量表 代碼。在該模式下標(biāo)準(zhǔn)的 Zephyr 構(gòu)建無(wú)需簽名即可直接運(yùn)行。當(dāng)通過(guò) sysbuild 使用MCUboot引導(dǎo)加載程序時(shí)MCUboot 本身是 FLASH_BOOT 啟動(dòng)的第一個(gè)應(yīng)用隨后 MCUboot 使用標(biāo)準(zhǔn) Zephyrimgtool簽名流程獨(dú)立認(rèn)證位于slot0_partition中的應(yīng)用鏡像。該配置無(wú)需 OEM 密鑰預(yù)置BOOT_SIMPLE_APP模式同樣適用MCUboot 二進(jìn)制在無(wú) BootROM 簽名校驗(yàn)的情況下運(yùn)行。啟用 BootROM 簽名校驗(yàn)要啟用 BootROM 簽名校驗(yàn)必須對(duì)設(shè)備執(zhí)行預(yù)置provision操作。流程概述參考AN240106 PSoC Control C3 Security應(yīng)用筆記初始化Infineon EdgeProtect Tools項(xiàng)目生成 OEM 密鑰對(duì)運(yùn)行provision-device。警告provision-device是不可逆操作執(zhí)行后 OEM 密鑰哈希會(huì)被寫入 SFLASH且生命周期狀態(tài)將推進(jìn)。請(qǐng)務(wù)必使用專用開發(fā)板進(jìn)行預(yù)置。預(yù)置完成后FLASH_BOOT 校驗(yàn)的第一個(gè)鏡像必須使用 OEM 密鑰簽名。使用 sysbuild 時(shí)這個(gè)鏡像是 MCUboot 二進(jìn)制不使用 MCUboot 的獨(dú)立 Zephyr 應(yīng)用則同樣執(zhí)行sign-image僅需根據(jù)應(yīng)用二進(jìn)制與其分區(qū)大小調(diào)整--image與--slot-size。參考簽名命令使用 PSC3 特定參數(shù)源自 Zephyr 分區(qū)布局edgeprotecttools sign-image \ --image build/mcuboot/zephyr/zephyr.hex \ --output build/mcuboot/zephyr/zephyr.signed.hex \ --key oem-private-key.pem \ --hex-addr 0x32000000 \ --header-size 0x400 --slot-size 0x10000 \ --align 1 --min-erase-size 0x200 --erased-val 0 --overwrite-only west flash --hex-file build/mcuboot/zephyr/zephyr.signed.hex參數(shù)要點(diǎn)--hex-addr 0x32000000必須使用 SAHB 窗口地址因?yàn)?SAHB 窗口是可寫的 Flash 數(shù)據(jù)訪問(wèn)路徑而 CBUS 窗口0x12000000是只讀的無(wú)法寫入--header-size 0x400、--slot-size 0x10000、--align 1、--min-erase-size 0x200、--erased-val 0、--overwrite-only均需與 Zephyr 的 MCUboot 分區(qū)布局一致使用 MCUboot 時(shí)位于slot0_partition的 Zephyr 應(yīng)用由標(biāo)準(zhǔn)imgtoolsysbuild 流程簽名無(wú)需 EPTEdgeProtect Tools簽名。總結(jié)KIT_PSC3M5_EVK 在 Zephyr 中的支持已經(jīng)相當(dāng)完整從默認(rèn) Secure 變體的 TrustZone?-M 配置、180/240 MHz 雙 DPLL 時(shí)鐘樹、SCB3 控制臺(tái)、CAN FD 使能到 NOR Flash 變體的 SCB5 SPI 外部存儲(chǔ)擴(kuò)展再到 FLASH_BOOT MCUboot EdgeProtect Tools 的完整安全啟動(dòng)鏈路均能在本倉(cāng)庫(kù)的板級(jí)文件中找到一一對(duì)應(yīng)的實(shí)現(xiàn)證據(jù)kit_psc3m5_evk-common.dtsi、kit_psc3m5_evk.dts、kit_psc3m5_evk_psc3m5fds2afq1_norflash.dts。開發(fā)者可據(jù)此快速評(píng)估并落地面向工業(yè)控制、電機(jī)驅(qū)動(dòng)場(chǎng)景的 Zephyr 應(yīng)用?!久赓M(fèi)下載鏈接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ze/zephyr創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考