@@ -45,6 +45,7 @@ This README describes configuration of supported targets.
4545* [ STM32U5] ( #stm32u5 )
4646* [ STM32WB55] ( #stm32wb55 )
4747* [ TI Hercules TMS570LC435] ( #ti-hercules-tms570lc435 )
48+ * [ Vorago VA416x0] ( #vorago-va416x0 )
4849* [ Xilinx Zynq UltraScale] ( #xilinx-zynq-ultrascale )
4950
5051## STM32F4
@@ -3562,3 +3563,286 @@ Currently, wolfBoot for TC3xx is distributed as part of the wolfHSM TC3xx platfo
35623563
35633564For access to the TC3xx platform release or for more information on using wolfBoot and wolfHSM on AURIX devices, contact
[ [email protected] ] ( mailto:[email protected] ) .
35643565
3566+
3567+ ## Vorago VA416x0
3568+
3569+ Tested on VA41620 and VA41630 MCU's.
3570+
3571+ MCU: Cortex-M4 with Triple-Mode Redundancy (TMR) RAD hardening at up to 100MHz.
3572+ FLASH: The VA41630 has 256KB of internal SPI FRAM (for the VA41620 its external). FRAM is Infineon FM25V20A.
3573+ SRAM: 64KB on-chip SRAM and 256KB on-chip program memory
3574+
3575+ Boot ROM loads at 20MHz from SPI bus to internal data SRAM
3576+
3577+ ### Building Vorago VA416x0
3578+
3579+ All build settings come from .config file. For this platform use ` TARGET=va416x0 ` .
3580+ See example configuration at ` config/examples/vorago_va416x0.config ` .
3581+
3582+ ``` sh
3583+ cp config/examples/vorago_va416x0.config .config
3584+ make VORAGO_SDK_DIR=$PWD ../VA416xx_SDK/
3585+ [CC ARM] src/string.o
3586+ [CC ARM] src/image.o
3587+ [CC ARM] src/libwolfboot.o
3588+ [CC ARM] hal/hal.o
3589+ [CC ARM] hal/va416x0.o
3590+ [CC ARM] src/keystore.o
3591+ [CC ARM] src/loader.o
3592+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal.o
3593+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_spi.o
3594+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_clkgen.o
3595+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_ioconfig.o
3596+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_irqrouter.o
3597+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_uart.o
3598+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_timer.o
3599+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/mcu/src/system_va416xx.o
3600+ [CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/utils/src/spi_fram.o
3601+ [CC ARM] src/boot_arm.o
3602+ [AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm.o
3603+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm_c.o
3604+ [AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm.o
3605+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.o
3606+ [AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm.o
3607+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm_c.o
3608+ [AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm.o
3609+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm_c.o
3610+ [AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-chacha-asm.o
3611+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-chacha-asm_c.o
3612+ [CC ARM] src/update_flash.o
3613+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sha256.o
3614+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/hash.o
3615+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/memory.o
3616+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/wc_port.o
3617+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/wolfmath.o
3618+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/logging.o
3619+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/asn.o
3620+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/ecc.o
3621+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sp_int.o
3622+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sp_cortexm.o
3623+ [CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sha512.o
3624+ [LD] wolfboot.elf
3625+ [BIN] wolfboot.bin
3626+ [SIZE]
3627+ text data bss dec hex filename
3628+ 33900 4 26976 60880 edd0 wolfboot.elf
3629+ ```
3630+
3631+ ### Flashing Vorago VA416x0
3632+
3633+ Flash using Segger JLink: ` JLinkExe -CommanderScript tools/scripts/flash_va416xx.jlink `
3634+
3635+ Example JLink flash script ` tools/scripts/flash_va416xx.jlink ` :
3636+
3637+ ```
3638+ device VA416XX
3639+ si 1
3640+ speed 2000
3641+ r
3642+ h
3643+ write4 0x40010010 0x1
3644+ loadbin factory.bin 0x0
3645+ write4 0x40010010 0x0
3646+ loadfile ../VA416xx_SDK/loader.elf
3647+ exit
3648+ ```
3649+
3650+ The ` loader.elf ` programs the external SPI FRAM with the IRAM image. It is created with ` make loader ` from the SDK.
3651+
3652+ Example boot ouput on UART 0 (MCU TX):
3653+
3654+ ```
3655+ wolfBoot HAL Init
3656+ Boot partition: 0xFC00 (sz 5144, ver 0x1, type 0x601)
3657+ Partition 1 header magic 0x00000000 invalid at 0x27C00
3658+ Boot partition: 0xFC00 (sz 5144, ver 0x1, type 0x601)
3659+ Booting version: 0x1
3660+ ========================
3661+ VA416x0 wolfBoot demo Application
3662+ Copyright 2025 wolfSSL Inc
3663+ GPL v3
3664+ Version : 0x1
3665+ ========================
3666+
3667+ System information
3668+ ====================================
3669+ Firmware version : 0x1
3670+ Current firmware state: NEW
3671+ No image in update partition.
3672+
3673+ Bootloader OTP keystore information
3674+ ====================================
3675+ Number of public keys: 1
3676+
3677+ Public Key #0: size 96, type 6, mask FFFFFFFF
3678+ ====================================
3679+ 08 A3 83 69 90 76 12 24 4E 86 17 0B 44 63 FF E7
3680+ 4C 81 AD DD 15 8A 08 B7 EC 1C D2 F3 13 51 97 E1
3681+ C0 5A 7E BF D2 95 7D EC 49 FC EF 26 90 AD CC 9D
3682+ AD 4C 31 3A ED 18 6E 17 57 97 7F F5 3A 79 AA 6B
3683+ 8A 0B 16 90 C5 6C 2A CF BE EE 59 99 B2 C7 B6 44
3684+ BA 3E 1A C3 92 48 1B 5C D2 AF B4 0A 83 2F 74 37
3685+ ```
3686+
3687+ ### Debugging Vorago VA416x0
3688+
3689+ Start the GDB server: ` JLinkGDBServer -device VA416XX -if SWD -speed 2000 -port 3333 `
3690+
3691+ Run: ` arm-none-eabi-gdb ` . This will source the ` .gdbinit ` to load symbols for ` wolfboot.elf ` and ` test-app/image.elf ` . It will also attempt to connect to the GDB server on default port 3333.
3692+
3693+ ### Testing updates on VA416x0
3694+
3695+ Note: This test was run with DEBUG=1 and DEBUG_UART=1 to generate logging on the UART.
3696+
3697+ See ` tools/scripts/vorago/build_test_update.sh ` :
3698+
3699+ ``` sh
3700+ # Sign a new test app with version 2
3701+ IMAGE_HEADER_SIZE=512 ./tools/keytools/sign --ecc384 --sha384 test-app/image.bin wolfboot_signing_private_key.der 2
3702+
3703+ # Create a bin footer with wolfBoot trailer "BOOT" and "p" (ASCII for 0x70 == IMG_STATE_UPDATING)
3704+ echo -n " pBOOT" > trigger_magic.bin
3705+
3706+ # Assembly new factory update.bin
3707+ ./tools/bin-assemble/bin-assemble \
3708+ update.bin \
3709+ 0x0 wolfboot.bin \
3710+ 0xFC00 test-app/image_v1_signed.bin \
3711+ 0x27C00 test-app/image_v2_signed.bin \
3712+ 0x3FBFB trigger_magic.bin
3713+
3714+ # Use JLink to load
3715+ device VA416XX
3716+ si 1
3717+ speed 2000
3718+ r
3719+ h
3720+ write4 0x40010010 0x1
3721+ loadbin update.bin 0x0
3722+ write4 0x40010010 0x0
3723+ loadfile ../VA416xx_SDK/loader.elf
3724+ exit
3725+ ```
3726+
3727+ Example update output:
3728+
3729+ ```
3730+ wolfBoot HAL Init
3731+ Boot partition: 0xFC00 (sz 8976, ver 0x1, type 0x601)
3732+ Update partition: 0x27C00 (sz 8976, ver 0x2, type 0x601)
3733+ Starting Update (fallback allowed 0)
3734+ Update partition: 0x27C00 (sz 8976, ver 0x2, type 0x601)
3735+ Boot partition: 0xFC00 (sz 8976, ver 0x1, type 0x601)
3736+ verify integrity: img 0x1FFFE844, part 1
3737+ verify authenticity: img 0x1FFFE844, part 1
3738+ Versions: Current 0x1, Update 0x2
3739+ Copy sector 0 (part 1->2)
3740+ Copy sector 0 (part 0->1)
3741+ Copy sector 0 (part 2->0)
3742+ Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3743+ Update partition: 0x27C00 (sz 8976, ver 0x1, type 0x601)
3744+ Copy sector 1 (part 1->2)
3745+ Copy sector 1 (part 0->1)
3746+ Copy sector 1 (part 2->0)
3747+ Copy sector 2 (part 1->2)
3748+ Copy sector 2 (part 0->1)
3749+ Copy sector 2 (part 2->0)
3750+ Copy sector 3 (part 1->2)
3751+ Copy sector 3 (part 0->1)
3752+ Copy sector 3 (part 2->0)
3753+ Copy sector 4 (part 1->2)
3754+ Copy sector 4 (part 0->1)
3755+ Copy sector 4 (part 2->0)
3756+ Copy sector 5 (part 1->2)
3757+ Copy sector 5 (part 0->1)
3758+ Copy sector 5 (part 2->0)
3759+ Copy sector 6 (part 1->2)
3760+ Copy sector 6 (part 0->1)
3761+ Copy sector 6 (part 2->0)
3762+ Copy sector 7 (part 1->2)
3763+ Copy sector 7 (part 0->1)
3764+ Copy sector 7 (part 2->0)
3765+ Copy sector 8 (part 1->2)
3766+ Copy sector 8 (part 0->1)
3767+ Copy sector 8 (part 2->0)
3768+ Copy sector 9 (part 1->2)
3769+ Copy sector 9 (part 0->1)
3770+ Copy sector 9 (part 2->0)
3771+ Erasing remainder of partition (85 sectors)...
3772+ Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3773+ Update partition: 0x27C00 (sz 8976, ver 0x1, type 0x601)
3774+ Copy sector 94 (part 0->2)
3775+ Copied boot sector to swap
3776+ Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3777+ Booting version: 0x1
3778+ verify integrity: img 0x1FFFE904, part 0
3779+ verify authenticity: img 0x1FFFE904, part 0
3780+ ========================
3781+ VA416x0 wolfBoot demo Application
3782+ Copyright 2025 wolfSSL Inc
3783+ GPL v3
3784+ Version : 0x2
3785+ ========================
3786+
3787+ System information
3788+ ====================================
3789+ Firmware version : 0x2
3790+ Current firmware state: TESTING
3791+ Backup firmware version : 0x1
3792+ Update state: NEW
3793+ Update image older than current.
3794+
3795+ Bootloader OTP keystore information
3796+ ====================================
3797+ Number of public keys: 1
3798+
3799+ Public Key #0: size 96, type 6, mask FFFFFFFF
3800+ ====================================
3801+ 08 A3 83 69 90 76 12 24 4E 86 17 0B 44 63 FF E7
3802+ 4C 81 AD DD 15 8A 08 B7 EC 1C D2 F3 13 51 97 E1
3803+ C0 5A 7E BF D2 95 7D EC 49 FC EF 26 90 AD CC 9D
3804+ AD 4C 31 3A ED 18 6E 17 57 97 7F F5 3A 79 AA 6B
3805+ 8A 0B 16 90 C5 6C 2A CF BE EE 59 99 B2 C7 B6 44
3806+ BA 3E 1A C3 92 48 1B 5C D2 AF B4 0A 83 2F 74 37
3807+
3808+ Booting new firmware, marking successful boot
3809+ ```
3810+
3811+ Boot logs after hard reset:
3812+
3813+ ```
3814+ wolfBoot HAL Init
3815+ Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3816+ Update partition: 0x27C00 (sz 8976, ver 0x1, type 0x601)
3817+ Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3818+ Booting version: 0x2
3819+ verify integrity: img 0x1FFFE904, part 0
3820+ verify authenticity: img 0x1FFFE904, part 0
3821+ ========================
3822+ VA416x0 wolfBoot demo Application
3823+ Copyright 2025 wolfSSL Inc
3824+ GPL v3
3825+ Version : 0x2
3826+ ========================
3827+
3828+ System information
3829+ ====================================
3830+ Firmware version : 0x2
3831+ Current firmware state: CONFIRMED
3832+ Backup firmware version : 0x1
3833+ Update state: NEW
3834+ Update image older than current.
3835+
3836+ Bootloader OTP keystore information
3837+ ====================================
3838+ Number of public keys: 1
3839+
3840+ Public Key #0: size 96, type 6, mask FFFFFFFF
3841+ ====================================
3842+ 08 A3 83 69 90 76 12 24 4E 86 17 0B 44 63 FF E7
3843+ 4C 81 AD DD 15 8A 08 B7 EC 1C D2 F3 13 51 97 E1
3844+ C0 5A 7E BF D2 95 7D EC 49 FC EF 26 90 AD CC 9D
3845+ AD 4C 31 3A ED 18 6E 17 57 97 7F F5 3A 79 AA 6B
3846+ 8A 0B 16 90 C5 6C 2A CF BE EE 59 99 B2 C7 B6 44
3847+ BA 3E 1A C3 92 48 1B 5C D2 AF B4 0A 83 2F 74 37
3848+ ```
0 commit comments