Skip to content

Commit b203c02

Browse files
authored
Merge pull request #31 from danielinux/stm32_spi
Stm32 spi
2 parents 453a07b + 00fff87 commit b203c02

18 files changed

Lines changed: 325 additions & 155 deletions

Makefile

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ OBJS:= \
1818
./src/image.o \
1919
./src/libwolfboot.o
2020
WOLFCRYPT_OBJS:=
21+
PUBLIC_KEY_OBJS:=
2122

2223

2324
## Architecture/CPU configuration
@@ -29,17 +30,16 @@ ifeq ($(SIGN),ECC256)
2930
SIGN_OPTIONS=--ecc256
3031
PRIVATE_KEY=ecc256.der
3132
WOLFCRYPT_OBJS+= \
32-
$(ECC_EXTRA_OBJS) \
3333
$(MATH_OBJS) \
3434
./lib/wolfssl/wolfcrypt/src/ecc.o \
3535
./lib/wolfssl/wolfcrypt/src/memory.o \
3636
./lib/wolfssl/wolfcrypt/src/wc_port.o \
3737
./lib/wolfssl/wolfcrypt/src/sha256.o \
3838
./lib/wolfssl/wolfcrypt/src/hash.o \
39-
./src/ecc256_pub_key.o \
4039
./src/xmalloc_ecc.o
41-
CFLAGS+=-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER $(ECC_EXTRA_CFLAGS) \
40+
CFLAGS+=-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER \
4241
-Wstack-usage=1024
42+
PUBLIC_KEY_OBJS=./src/ecc256_pub_key.o
4343
endif
4444

4545
ifeq ($(SIGN),ED25519)
@@ -52,8 +52,8 @@ ifeq ($(SIGN),ED25519)
5252
./lib/wolfssl/wolfcrypt/src/sha256.o \
5353
./lib/wolfssl/wolfcrypt/src/hash.o \
5454
./lib/wolfssl/wolfcrypt/src/wolfmath.o \
55-
./lib/wolfssl/wolfcrypt/src/fe_low_mem.o \
56-
./src/ed25519_pub_key.o
55+
./lib/wolfssl/wolfcrypt/src/fe_low_mem.o
56+
PUBLIC_KEY_OBJS=./src/ed25519_pub_key.o
5757
CFLAGS+=-DWOLFBOOT_SIGN_ED25519 -nostdlib -DWOLFSSL_STATIC_MEMORY \
5858
-Wstack-usage=1024
5959
LDFLAGS+=-nostdlib
@@ -71,8 +71,8 @@ ifeq ($(SIGN),RSA2048)
7171
./lib/wolfssl/wolfcrypt/src/sha256.o \
7272
./lib/wolfssl/wolfcrypt/src/asn.o \
7373
./lib/wolfssl/wolfcrypt/src/hash.o \
74-
./src/rsa2048_pub_key.o \
7574
./src/xmalloc_rsa.o
75+
PUBLIC_KEY_OBJS=./src/rsa2048_pub_key.o
7676
CFLAGS+=-DWOLFBOOT_SIGN_RSA2048 -DXMALLOC_USER $(RSA_EXTRA_CFLAGS) \
7777
-Wstack-usage=12288 -DIMAGE_HEADER_SIZE=512
7878
endif
@@ -95,7 +95,7 @@ ifeq ($(SPI_FLASH),1)
9595
EXT_FLASH=1
9696
CFLAGS+= -DSPI_FLASH=1
9797
OBJS+= src/spi_flash.o
98-
WOLFCRYPT_OBJS+=hal/spi/spi_drv_$(TARGET).o
98+
WOLFCRYPT_OBJS+=hal/spi/spi_drv_$(SPI_TARGET).o
9999
endif
100100

101101
ifeq ($(EXT_FLASH),1)
@@ -126,13 +126,19 @@ ifeq ($(VTOR),0)
126126
CFLAGS+=-DNO_VTOR
127127
endif
128128

129+
ifeq ($(PKA),1)
130+
OBJS += $(PKA_EXTRA_OBJS)
131+
CFLAGS+=$(PKA_EXTRA_CFLAGS)
132+
endif
133+
134+
OBJS+=$(PUBLIC_KEY_OBJS)
135+
129136
ifeq ($(WOLFTPM),1)
130137
OBJS += lib/wolfTPM/src/tpm2.o \
131138
lib/wolfTPM/src/tpm2_packet.o \
132139
lib/wolfTPM/src/tpm2_tis.o \
133140
lib/wolfTPM/src/tpm2_wrap.o \
134-
src/ecc256_pub_key.o \
135-
hal/spi/spi_drv_$(TARGET).o
141+
hal/spi/spi_drv_$(SPI_TARGET).o
136142
CFLAGS+=-DWOLFTPM_SLB9670 -DWOLFTPM2_NO_WOLFCRYPT -DSIZEOF_LONG=4 -Ilib/wolfTPM \
137143
-DMAX_COMMAND_SIZE=1024 -DMAX_RESPONSE_SIZE=1024 -DWOLFTPM2_MAX_BUFFER=1500 -DMAX_SESSION_NUM=1 -DMAX_DIGEST_BUFFER=973 \
138144
-DWOLFTPM_SMALL_STACK
@@ -141,6 +147,7 @@ else
141147
OBJS+=$(WOLFCRYPT_OBJS)
142148
endif
143149

150+
144151
ASFLAGS:=$(CFLAGS)
145152

146153
all: factory.bin

arch.mk

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ endif
1010
# Default flash offset
1111
ARCH_FLASH_OFFSET=0x0
1212

13+
# Default SPI driver name
14+
SPI_TARGET=$(TARGET)
15+
1316
## ARM
1417
ifeq ($(ARCH),ARM)
1518
CROSS_COMPILE:=arm-none-eabi-
@@ -21,21 +24,28 @@ ifeq ($(ARCH),ARM)
2124
ifeq ($(TARGET),samr21)
2225
CORTEX_M0=1
2326
endif
24-
27+
2528
ifeq ($(TARGET),stm32l0)
2629
CORTEX_M0=1
2730
endif
28-
31+
2932
ifeq ($(TARGET),stm32g0)
3033
CORTEX_M0=1
3134
endif
3235

3336
ifeq ($(TARGET),stm32f7)
3437
ARCH_FLASH_OFFSET=0x08000000
38+
SPI_TARGET=stm32
3539
endif
3640

3741
ifeq ($(TARGET),stm32h7)
3842
ARCH_FLASH_OFFSET=0x08000000
43+
SPI_TARGET=stm32
44+
endif
45+
46+
ifeq ($(TARGET),stm32wb)
47+
ARCH_FLASH_OFFSET=0x08000000
48+
SPI_TARGET=stm32
3949
endif
4050

4151
## Cortex-M CPU
@@ -68,25 +78,25 @@ ifeq ($(ARCH),RISCV)
6878
CROSS_COMPILE:=riscv32-unknown-elf-
6979
CFLAGS+=-fno-builtin-printf -DUSE_M_TIME -g -march=rv32imac -mabi=ilp32 -mcmodel=medany -nostartfiles -DARCH_RISCV
7080
LDFLAGS+=-march=rv32imac -mabi=ilp32 -mcmodel=medany
71-
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
72-
81+
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
82+
7383
# Prune unused functions and data
7484
CFLAGS +=-ffunction-sections -fdata-sections
7585
LDFLAGS+=-Wl,--gc-sections
7686

7787
OBJS+=src/boot_riscv.o src/vector_riscv.o
7888
ARCH_FLASH_OFFSET=0x20010000
7989
endif
80-
81-
90+
91+
8292
ifeq ($(TARGET),kinetis)
8393
CFLAGS+= -I$(KINETIS_DRIVERS)/drivers -I$(KINETIS_DRIVERS) -DCPU_$(KINETIS_CPU) -I$(KINETIS_CMSIS)/Include -DDEBUG_CONSOLE_ASSERT_DISABLE=1
8494
OBJS+= $(KINETIS_DRIVERS)/drivers/fsl_clock.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_flash.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_cache.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_controller.o
8595
## The following lines can be used to enable HW acceleration
8696
ifeq ($(KINETIS_CPU),MK82FN256VLL15)
8797
ifeq ($(PKA),1)
88-
ECC_EXTRA_CFLAGS+=-DFREESCALE_LTC_ECC -DFREESCALE_USE_LTC -DFREESCALE_LTC_TFM
89-
ECC_EXTRA_OBJS+=./lib/wolfssl/wolfcrypt/src/port/nxp/ksdk_port.o $(KINETIS_DRIVERS)/drivers/fsl_ltc.o
98+
PKA_EXTRA_CFLAGS+=-DFREESCALE_LTC_ECC -DFREESCALE_USE_LTC -DFREESCALE_LTC_TFM
99+
PKA_EXTRA_OBJS+=./lib/wolfssl/wolfcrypt/src/port/nxp/ksdk_port.o $(KINETIS_DRIVERS)/drivers/fsl_ltc.o
90100
endif
91101
endif
92102
endif
@@ -102,11 +112,15 @@ OBJCOPY:=$(CROSS_COMPILE)objcopy
102112
SIZE:=$(CROSS_COMPILE)size
103113
BOOT_IMG?=test-app/image.bin
104114

115+
ifeq ($(TARGET),stm32f4)
116+
SPI_TARGET=stm32
117+
endif
105118

106119
ifeq ($(TARGET),stm32wb)
120+
SPI_TARGET=stm32
107121
ifneq ($(PKA),0)
108-
ECC_EXTRA_OBJS+= $(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pka.o ./lib/wolfssl/wolfcrypt/src/port/st/stm32.o
109-
ECC_EXTRA_CFLAGS+=-DWOLFSSL_STM32_PKA -I$(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Inc \
122+
PKA_EXTRA_OBJS+= $(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pka.o ./lib/wolfssl/wolfcrypt/src/port/st/stm32.o
123+
PKA_EXTRA_CFLAGS+=-DWOLFSSL_STM32_PKA -I$(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Inc \
110124
-Isrc -I$(STM32CUBE)/Drivers/BSP/P-NUCLEO-WB55.Nucleo/ -I$(STM32CUBE)/Drivers/CMSIS/Device/ST/STM32WBxx/Include \
111125
-I$(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Inc/ \
112126
-I$(STM32CUBE)/Drivers/CMSIS/Include \

config/examples/stm32wb-tpm.config

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
TARGET=stm32wb
2+
SIGN=ECC256
3+
WOLFBOOT_SECTOR_SIZE?=0x20000
4+
WOLFBOOT_PARTITION_SIZE?=0x60000
5+
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x20000
6+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x00000
7+
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x60000
8+
NVM_FLASH_WRITEONCE=1
9+
PKA=0
10+
WOLFTPM=1

config/examples/stm32wb.config

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
TARGET=stm32wb
2+
SIGN=ECC256
3+
WOLFBOOT_SECTOR_SIZE?=0x20000
4+
WOLFBOOT_PARTITION_SIZE?=0x60000
5+
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x20000
6+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x00000
7+
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x60000
8+
NVM_FLASH_WRITEONCE=1
9+
PKA=1

config/openocd/openocd_stm32f4.cfg

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
source [find interface/stlink.cfg]
2+
source [find target/stm32f4x.cfg]
3+
$_TARGETNAME configure -event reset-init {
4+
mmw 0xe0042004 0x7 0x0
5+
}
6+
init
7+
reset
8+
halt

config/openocd/openocd_stm32h7.cfg

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
source [find interface/stlink.cfg]
2+
source [find target/stm32h7x.cfg]
3+
$_CHIPNAME.cpu0 configure -event reset-init {
4+
mmw 0xe0042004 0x7 0x0
5+
}
6+
init
7+
reset
8+
halt
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
source [find interface/stlink.cfg]
2+
source [find target/stm32wbx.cfg]
3+
$_TARGETNAME configure -event reset-init {
4+
mmw 0xe0042004 0x7 0x0
5+
}
6+
init
7+
reset
8+
halt

docs/Targets.md

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ Compile with:
8888

8989
`make TARGET=stm32g0 NVM_FLASH_WRITEONCE=1`
9090

91+
9192
## STM32WB55
9293

9394
Example partitioning on Nucleo-68 board:
@@ -115,6 +116,30 @@ Compile with:
115116

116117
`make TARGET=stm32wb NVM_FLASH_WRITEONCE=1`
117118

119+
### Loading the firmware
120+
121+
`openocd --file ./config/openocd/openocd_stm32wbx.cfg`
122+
123+
```
124+
telnet localhost 4444
125+
flash write_image unlock erase wolfboot.bin 0x08000000
126+
flash verify_bank 0 wolfboot.bin
127+
flash write_image unlock erase test-app/image_v1_signed.bin 0x080008000
128+
flash verify_bank 0 test-app/image_v1_signed.bin 0x080008000
129+
reset
130+
```
131+
132+
### Debugging
133+
134+
Use `make DEBUG=1` and reload firmware.
135+
136+
```
137+
arm-none-eabi-gdb wolfboot.elf -ex "set remotetimeout 240" -ex "target extended-remote localhost:3333"
138+
(gdb) add-symbol-file test-app/image.elf 0x8000
139+
(gdb) add-symbol-file wolfboot.elf 0x0
140+
```
141+
142+
118143
## SiFive HiFive1 RISC-V
119144

120145
### Features
@@ -367,9 +392,8 @@ telnet localhost 4444
367392
flash write_image unlock erase wolfboot.bin 0x08000000
368393
flash verify_bank 0 wolfboot.bin
369394
flash write_image unlock erase test-app/image_v1_signed.bin 0x08020000
370-
flash verify_bank 0 test-app/image_v1_signed.bin 0x20000
395+
flash verify_bank 0 test-app/image_v1_signed.bin 0x08020000
371396
reset
372-
resume 0x08000000
373397
```
374398

375399
To sign the same application image as new version (2), use the python script `sign.py` provided:

0 commit comments

Comments
 (0)