Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .gdbinit
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
target ext :3333
monitor init
monitor reset
monitor halt

add-symbol-file build/mcuboot.elf
add-symbol-file build/badgemagic-ch582.elf
break src/boot-entry.c:HardFault_Handler
# break src/boot-entry.c:start_app
# break src/boot-entry.c:boot

break src/mcuboot.c:110


# break *0x10200

layout asm
layout split

# c
# n
# n
# n
# n
# print rv
# set rv=0
# symbol-file build/badgemagic-ch582.elf
# c
# break app.startup.S:162
# break app.startup.S:184
# break src/main.c:main
# break src/main.c:HardFault_Handler

# c

# jump src/main.c:main
8 changes: 8 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
submodules: 'true'
fetch-depth: 0 # fetch tags for versioning

- name: Cache toolchain
Expand All @@ -32,6 +33,13 @@ jobs:
wget http://file-oss.mounriver.com/tools/${{ env.MRS_TOOLCHAIN }}.tar.xz
tar -xvf ${{ env.MRS_TOOLCHAIN }}.tar.xz

- name: Install dependencies for MCUboot imgtool
run: |
pip3 install -e external/mcuboot/scripts/

- name: Install srec_cat
run: sudo apt-get update && sudo apt-get install -y srecord

- name: Build firmware
run: |
export PREFIX=${{ env.MRS_TOOLCHAIN }}/RISC-V_Embedded_GCC/bin/riscv-none-embed-
Expand Down
11 changes: 11 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[submodule "external/mcuboot"]
path = external/mcuboot
url = https://github.com/mcu-tools/mcuboot.git
branch = v2.1.0
[submodule "external/tinycrypt"]
path = external/tinycrypt
url = https://github.com/intel/tinycrypt.git
[submodule "external/lwrb"]
path = external/lwrb
url = https://github.com/MaJerle/lwrb.git
branch = v3.2.0
146 changes: 125 additions & 21 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ TARGET = badgemagic-ch582
# building variables
######################################
# Uncomment below line to enable debugging
# DEBUG = 1
DEBUG = 1
# Uncomment below to build for USB-C version
# USBC_VERSION = 1
USBC_VERSION = 1
# optimization for size
OPT = -Os

OPENOCD ?= ../MRS_Toolchain_Linux_x64_V1.92/OpenOCD/bin/openocd


#######################################
# Get current version
Expand Down Expand Up @@ -55,7 +57,6 @@ CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_uart1.c \
CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_usb2dev.c \
CH5xx_ble_firmware_library/StdPeriphDriver/CH58x_spi1.c \
CH5xx_ble_firmware_library/RVMSIS/core_riscv.c \
src/main.c \
src/debug.c \
src/leddrv.c \
src/button.c \
Expand All @@ -67,6 +68,7 @@ src/ble/profile/ng.c \
src/config.c \
src/legacyctrl.c \
src/util/crc.c \
src/util/base64.c \
src/ngctrl.c \
src/ble/setup.c \
src/ble/peripheral.c \
Expand All @@ -83,11 +85,69 @@ src/resource.c \
src/animation.c \
src/font.c \
src/power.c \


# ASM sources
ASM_SOURCES = \
CH5xx_ble_firmware_library/Startup/startup_CH583.S
src/mcuboot.c \

MCUBOOT_DIR := external/mcuboot
IMGTOOL_PY := $(MCUBOOT_DIR)/scripts/imgtool.py
MCUBOOT_SRC_DIR := $(MCUBOOT_DIR)/boot/bootutil/src
MCUBOOT_INC_DIR := $(MCUBOOT_DIR)/boot/bootutil/include
MCUBOOT_SERIAL_SRC_DIR := $(MCUBOOT_DIR)/boot/boot_serial/src
MCUBOOT_SERIAL_INC_DIR := $(MCUBOOT_DIR)/boot/boot_serial/include
MCUBOOT_ZCBOR_SRC_DIR := $(MCUBOOT_DIR)/boot/zcbor/src
MCUBOOT_ZCBOR_INC_DIR := $(MCUBOOT_DIR)/boot/zcbor/include

MCUBOOT_SRC_FILES += \
$(MCUBOOT_SRC_DIR)/boot_record.c \
$(MCUBOOT_SRC_DIR)/bootutil_misc.c \
$(MCUBOOT_SRC_DIR)/bootutil_public.c \
$(MCUBOOT_SRC_DIR)/caps.c \
$(MCUBOOT_SRC_DIR)/encrypted.c \
$(MCUBOOT_SRC_DIR)/fault_injection_hardening.c \
$(MCUBOOT_SRC_DIR)/fault_injection_hardening_delay_rng_mbedtls.c \
$(MCUBOOT_SRC_DIR)/image_ecdsa.c \
$(MCUBOOT_SRC_DIR)/image_ed25519.c \
$(MCUBOOT_SRC_DIR)/image_rsa.c \
$(MCUBOOT_SRC_DIR)/image_validate.c \
$(MCUBOOT_SRC_DIR)/loader.c \
$(MCUBOOT_SRC_DIR)/swap_misc.c \
$(MCUBOOT_SRC_DIR)/swap_move.c \
$(MCUBOOT_SRC_DIR)/swap_scratch.c \
$(MCUBOOT_SRC_DIR)/tlv.c \
$(MCUBOOT_SERIAL_SRC_DIR)/boot_serial.c \
$(MCUBOOT_SERIAL_SRC_DIR)/boot_serial_encryption.c \
$(MCUBOOT_SERIAL_SRC_DIR)/zcbor_bulk.c \
$(MCUBOOT_ZCBOR_SRC_DIR)/zcbor_common.c \
$(MCUBOOT_ZCBOR_SRC_DIR)/zcbor_decode.c \
$(MCUBOOT_ZCBOR_SRC_DIR)/zcbor_encode.c \

TINYCRYPT_DIR := external/tinycrypt/lib
TINYCRYPT_SRC_DIR := $(TINYCRYPT_DIR)/source
TINYCRYPT_INC_DIR := $(TINYCRYPT_DIR)/include

TINYCRYPT_SRC_FILES += \
$(TINYCRYPT_SRC_DIR)/aes_decrypt.c \
$(TINYCRYPT_SRC_DIR)/aes_encrypt.c \
$(TINYCRYPT_SRC_DIR)/cbc_mode.c \
$(TINYCRYPT_SRC_DIR)/ccm_mode.c \
$(TINYCRYPT_SRC_DIR)/cmac_mode.c \
$(TINYCRYPT_SRC_DIR)/ctr_mode.c \
$(TINYCRYPT_SRC_DIR)/ctr_prng.c \
$(TINYCRYPT_SRC_DIR)/hmac.c \
$(TINYCRYPT_SRC_DIR)/hmac_prng.c \
$(TINYCRYPT_SRC_DIR)/sha256.c \
$(TINYCRYPT_SRC_DIR)/utils.c

LWRB_DIR := external/lwrb/lwrb
LWRB_SRC_DIR := $(LWRB_DIR)/src
LWRB_INC_DIR := $(LWRB_DIR)/src/include

LWRB_SRC_FILES += \
$(LWRB_SRC_DIR)/lwrb/lwrb.c \
$(LWRB_SRC_DIR)/lwrb/lwrb_ex.c \

C_SOURCES += $(TINYCRYPT_SRC_FILES)
C_SOURCES += $(MCUBOOT_SRC_FILES)
C_SOURCES += $(LWRB_SRC_FILES)

#######################################
# binaries
Expand Down Expand Up @@ -121,11 +181,17 @@ MCU = $(CPU) $(FPU) $(FLOAT-ABI)
AS_INCLUDES =

# C includes
C_INCLUDES = \
C_INCLUDES += \
-ICH5xx_ble_firmware_library/StdPeriphDriver/inc \
-ICH5xx_ble_firmware_library/RVMSIS \
-ICH5xx_ble_firmware_library/Core \
-ICH5xx_ble_firmware_library/BLE \
-Iinc \
-Iexternal/tinycrypt/lib/include \
-I$(MCUBOOT_INC_DIR) \
-I$(MCUBOOT_SERIAL_INC_DIR) \
-I$(MCUBOOT_ZCBOR_INC_DIR) \
-I$(LWRB_INC_DIR) \

# compile gcc flags
ASFLAGS = $(MCU) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
Expand All @@ -151,19 +217,26 @@ CFLAGS += -MMD -MP
# LDFLAGS
#######################################
# link script
LDSCRIPT = CH5xx_ble_firmware_library/Ld/Link.ld
# LDSCRIPT = CH5xx_ble_firmware_library/Ld/Link.ld

# libraries
LIBS = -lc -lm -lnosys \
./CH5xx_ble_firmware_library/StdPeriphDriver/libISP583.a \
./CH5xx_ble_firmware_library/BLE/LIBCH58xBLE.a \

LIBDIR =
LDFLAGS = $(MCU) -mno-save-restore -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized -T $(LDSCRIPT) -nostartfiles -Xlinker --gc-sections -Wl,-Map=$(BUILD_DIR)/$(TARGET).map --specs=nano.specs $(LIBS)
LDFLAGS = $(MCU) -mno-save-restore -fmessage-length=0 -fsigned-char \
-ffunction-sections -fdata-sections -Wunused -Wuninitialized -nostartfiles \
-Xlinker --gc-sections -Wl,-Map=$(BUILD_DIR)/$(TARGET).map \
--specs=nano.specs $(LIBS) \

# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin

all: $(BUILD_DIR)/$(TARGET).elf \
$(BUILD_DIR)/$(TARGET).hex \
$(BUILD_DIR)/$(TARGET).bin \
$(BUILD_DIR)/$(TARGET).signed.bin \
$(BUILD_DIR)/mcuboot.bin \
$(BUILD_DIR)/combined.bin \

#######################################
# build the application
Expand All @@ -182,9 +255,14 @@ $(BUILD_DIR)/%.o: %.S Makefile
@mkdir -pv $(dir $@)
$(AS) -c $(CFLAGS) $< -o $@

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) $(BUILD_DIR)/src/main.o $(BUILD_DIR)/app.startup.o Makefile app.ld
@mkdir -pv $(dir $@)
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(CC) $(OBJECTS) $(BUILD_DIR)/src/main.o $(BUILD_DIR)/app.startup.o -T app.ld $(LDFLAGS) -o $@
$(SZ) $@

$(BUILD_DIR)/mcuboot.elf: $(OBJECTS) $(BUILD_DIR)/src/boot-entry.o $(BUILD_DIR)/bootloader.startup.o Makefile bootloader.ld
@mkdir -pv $(dir $@)
$(CC) $(OBJECTS) $(BUILD_DIR)/src/boot-entry.o $(BUILD_DIR)/bootloader.startup.o $(LDFLAGS) -T bootloader.ld -o $@
$(SZ) $@

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf
Expand All @@ -193,16 +271,42 @@ $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf

$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf
@mkdir -pv $(dir $@)
$(BIN) $< $@
$(BIN) $< $@

$(BUILD_DIR)/combined.bin: $(BUILD_DIR)/mcuboot.bin $(BUILD_DIR)/$(TARGET).signed.bin
srec_cat $(BUILD_DIR)/mcuboot.bin -Binary -offset 0 \
-fill 0xff 0 0x0010000 \
$(BUILD_DIR)/$(TARGET).signed.bin -Binary -offset 0x00010000 \
-o $@ -Binary \

#######################################
# Program
#######################################
program: $(BUILD_DIR)/$(TARGET).elf
sudo wch-openocd -f /usr/share/wch-openocd/openocd/scripts/interface/wch-riscv.cfg -c 'init; halt; program $(BUILD_DIR)/$(TARGET).elf; reset; wlink_reset_resume; exit;'

isp: $(BUILD_DIR)/$(TARGET).bin
wchisp flash $(BUILD_DIR)/$(TARGET).bin
program: $(BUILD_DIR)/combined.bin
$(OPENOCD) -f interface/wch-riscv.cfg -c 'init; halt; program $(BUILD_DIR)/combined.bin ; reset; wlink_reset_resume; exit;'

debug:
wlink reset
wlink halt
$(OPENOCD) -f openocd.cfg

$(BUILD_DIR)/$(TARGET).signed.bin: $(BUILD_DIR)/$(TARGET).bin
python $(IMGTOOL_PY) sign \
--header-size 0x200 \
--align 4 \
-S 204800 \
-v 1.0.0 \
--pad-header \
$< $@

wlink-combine:
wlink flash build/combined.bin

isp: $(BUILD_DIR)/$(TARGET).elf
wchisp flash $(BUILD_DIR)/$(TARGET).elf

isp-bootld: $(BUILD_DIR)/mcuboot.elf
wchisp flash $(BUILD_DIR)/mcuboot.elf -E

#######################################
# clean up
Expand Down
Loading
Loading