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