From d2579157d4636d9b6d43fbb229b9dfc782e8fc42 Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 21 Nov 2022 16:29:11 +0100 Subject: [PATCH 1/4] Customize dfu flash operations according to key presence --- app/dfu/usbd_dfu_flash.cpp | 23 +++++++++++++++++++++-- app/dfu/usbd_dfu_flash.h | 3 ++- app/main.cpp | 6 +++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/dfu/usbd_dfu_flash.cpp b/app/dfu/usbd_dfu_flash.cpp index e74c929..f83e53a 100644 --- a/app/dfu/usbd_dfu_flash.cpp +++ b/app/dfu/usbd_dfu_flash.cpp @@ -28,6 +28,7 @@ #include "FlashSimBlockDevice.h" #include "flash_map_backend/secondary_bd.h" #include "bootutil/bootutil.h" +#include "bootutil/bootutil_extra.h" /* Private typedef ----------------------------------------------------------- */ /* Private define ------------------------------------------------------------ */ @@ -60,7 +61,21 @@ mbed::BlockDevice* dfu_secondary_bd = get_secondary_bd(); const uint32_t QSPIFLASH_BASE_ADDRESS = 0x90000000; const uint32_t FILEBLOCK_BASE_ADDRESS = 0xA0000000; -USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops = { +USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_default = { + { + (uint8_t *) FLASH_DESC_STR, + (uint8_t *) QSPI_FLASH_DESC_STR, + (uint8_t *) BOOTLOADER_DESC_STR + }, + Flash_If_Init, + Flash_If_DeInit, + Flash_If_Erase, + Flash_If_Write, + Flash_If_Read, + Flash_If_GetStatus, +}; + +USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_MCUboot = { { (uint8_t *) FLASH_DESC_STR, (uint8_t *) QSPI_FLASH_DESC_STR, @@ -83,7 +98,11 @@ void init_Memories() { if (dfu_secondary_bd != nullptr) { dfu_secondary_bd->init(); } - snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@MCUBoot version %d /0x00000000/0*4Kg", BOOTLOADER_VERSION); + if(boot_empty_keys()) { + snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@Arduino boot v.%d /0x00000000/0*4Kg", BOOTLOADER_VERSION); + } else { + snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@MCUboot v.%d /0x00000000/0*4Kg", BOOTLOADER_VERSION); + } } Thread writeThread(osPriorityHigh); diff --git a/app/dfu/usbd_dfu_flash.h b/app/dfu/usbd_dfu_flash.h index 7f1eb42..f527149 100644 --- a/app/dfu/usbd_dfu_flash.h +++ b/app/dfu/usbd_dfu_flash.h @@ -48,7 +48,8 @@ #define ADDR_FLASH_SECTOR_7_BANK2 ((uint32_t)0x081E0000) /* Base @ of Sector 7, 128 Kbytes */ /* Exported macro ------------------------------------------------------------*/ -extern USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops; +extern USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_default; +extern USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_MCUboot; #define FLASH_BASE_ADDR (uint32_t)(FLASH_BASE) #define FLASH_END_ADDR (uint32_t)(0x081FFFFF) diff --git a/app/main.cpp b/app/main.cpp index dcc0f0c..2699b0f 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -151,7 +151,11 @@ static int start_dfu(void) { USBD_RegisterClass(&USBD_Device, USBD_DFU_CLASS); /* Add DFU Media interface */ - USBD_DFU_RegisterMedia(&USBD_Device, &USBD_DFU_Flash_fops); + if(boot_empty_keys()) { + USBD_DFU_RegisterMedia(&USBD_Device, &USBD_DFU_Flash_fops_default); + } else { + USBD_DFU_RegisterMedia(&USBD_Device, &USBD_DFU_Flash_fops_MCUboot); + } /* Start Device Process */ USBD_Start(&USBD_Device); From d04eb7be9e04b70705bd69a1f96c4b837ae9f991 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 23 Nov 2022 15:39:19 +0100 Subject: [PATCH 2/4] Restore full list of dfu operations --- app/dfu/usbd_dfu_flash.cpp | 16 +--------------- app/dfu/usbd_dfu_flash.h | 3 +-- app/main.cpp | 6 +----- 3 files changed, 3 insertions(+), 22 deletions(-) diff --git a/app/dfu/usbd_dfu_flash.cpp b/app/dfu/usbd_dfu_flash.cpp index f83e53a..8640c9c 100644 --- a/app/dfu/usbd_dfu_flash.cpp +++ b/app/dfu/usbd_dfu_flash.cpp @@ -61,21 +61,7 @@ mbed::BlockDevice* dfu_secondary_bd = get_secondary_bd(); const uint32_t QSPIFLASH_BASE_ADDRESS = 0x90000000; const uint32_t FILEBLOCK_BASE_ADDRESS = 0xA0000000; -USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_default = { - { - (uint8_t *) FLASH_DESC_STR, - (uint8_t *) QSPI_FLASH_DESC_STR, - (uint8_t *) BOOTLOADER_DESC_STR - }, - Flash_If_Init, - Flash_If_DeInit, - Flash_If_Erase, - Flash_If_Write, - Flash_If_Read, - Flash_If_GetStatus, -}; - -USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_MCUboot = { +USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops = { { (uint8_t *) FLASH_DESC_STR, (uint8_t *) QSPI_FLASH_DESC_STR, diff --git a/app/dfu/usbd_dfu_flash.h b/app/dfu/usbd_dfu_flash.h index f527149..7f1eb42 100644 --- a/app/dfu/usbd_dfu_flash.h +++ b/app/dfu/usbd_dfu_flash.h @@ -48,8 +48,7 @@ #define ADDR_FLASH_SECTOR_7_BANK2 ((uint32_t)0x081E0000) /* Base @ of Sector 7, 128 Kbytes */ /* Exported macro ------------------------------------------------------------*/ -extern USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_default; -extern USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops_MCUboot; +extern USBD_DFU_MediaTypeDef USBD_DFU_Flash_fops; #define FLASH_BASE_ADDR (uint32_t)(FLASH_BASE) #define FLASH_END_ADDR (uint32_t)(0x081FFFFF) diff --git a/app/main.cpp b/app/main.cpp index 2699b0f..dcc0f0c 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -151,11 +151,7 @@ static int start_dfu(void) { USBD_RegisterClass(&USBD_Device, USBD_DFU_CLASS); /* Add DFU Media interface */ - if(boot_empty_keys()) { - USBD_DFU_RegisterMedia(&USBD_Device, &USBD_DFU_Flash_fops_default); - } else { - USBD_DFU_RegisterMedia(&USBD_Device, &USBD_DFU_Flash_fops_MCUboot); - } + USBD_DFU_RegisterMedia(&USBD_Device, &USBD_DFU_Flash_fops); /* Start Device Process */ USBD_Start(&USBD_Device); From 089917d344f6d1856a5c5e9f09c5639128ab70fa Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 23 Nov 2022 15:40:23 +0100 Subject: [PATCH 3/4] Align dfu BOOTLOADER_DESC_STR --- app/dfu/usbd_dfu_flash.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/dfu/usbd_dfu_flash.cpp b/app/dfu/usbd_dfu_flash.cpp index 8640c9c..4834b63 100644 --- a/app/dfu/usbd_dfu_flash.cpp +++ b/app/dfu/usbd_dfu_flash.cpp @@ -85,9 +85,9 @@ void init_Memories() { dfu_secondary_bd->init(); } if(boot_empty_keys()) { - snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@Arduino boot v.%d /0x00000000/0*4Kg", BOOTLOADER_VERSION); + snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@Arduino boot v.%02d /0x00000000/0*4Kg", BOOTLOADER_VERSION); } else { - snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@MCUboot v.%d /0x00000000/0*4Kg", BOOTLOADER_VERSION); + snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@MCUboot v.%02d /0x00000000/0*4Kg", BOOTLOADER_VERSION); } } From 7a7b9e4c51f0bf2b287c60226b119a8a60f69617 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 23 Nov 2022 16:02:48 +0100 Subject: [PATCH 4/4] Simplify logic and update file flash size according key presence --- app/dfu/usbd_dfu_flash.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/dfu/usbd_dfu_flash.cpp b/app/dfu/usbd_dfu_flash.cpp index 4834b63..d17e5e7 100644 --- a/app/dfu/usbd_dfu_flash.cpp +++ b/app/dfu/usbd_dfu_flash.cpp @@ -28,14 +28,12 @@ #include "FlashSimBlockDevice.h" #include "flash_map_backend/secondary_bd.h" #include "bootutil/bootutil.h" -#include "bootutil/bootutil_extra.h" /* Private typedef ----------------------------------------------------------- */ /* Private define ------------------------------------------------------------ */ #define FLASH_DESC_STR "@Internal Flash 2MB /0x08000000/01*128Ka,15*128Kg" //#define BOOTLOADER_DESC_STR "@Option Bits /0x52002000/01*1Ka" #define QSPI_FLASH_DESC_STR "@Ext RAW Flash 16MB /0x90000000/4096*4Kg" -#define FILE_FLASH_DESC_STR "@Ext File Flash 16MB /0xA0000000/4096*4Kg" #define FLASH_ERASE_TIME (uint16_t)0 #define FLASH_PROGRAM_TIME (uint16_t)0 @@ -44,6 +42,7 @@ /* Private variables --------------------------------------------------------- */ /* Private function prototypes ----------------------------------------------- */ char BOOTLOADER_DESC_STR[48]; +char FILE_FLASH_DESC_STR[48] = "@Ext File Flash 16MB /0xA0000000/4096*4Kg"; /* Extern function prototypes ------------------------------------------------ */ @@ -83,12 +82,11 @@ void init_Memories() { qspi_flash->init(); if (dfu_secondary_bd != nullptr) { dfu_secondary_bd->init(); - } - if(boot_empty_keys()) { - snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@Arduino boot v.%02d /0x00000000/0*4Kg", BOOTLOADER_VERSION); - } else { snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@MCUboot v.%02d /0x00000000/0*4Kg", BOOTLOADER_VERSION); - } + } else { + snprintf(BOOTLOADER_DESC_STR, sizeof(BOOTLOADER_DESC_STR), "@Arduino boot v.%02d /0x00000000/0*4Kg", BOOTLOADER_VERSION); + snprintf(FILE_FLASH_DESC_STR, sizeof(FILE_FLASH_DESC_STR), "@Ext File Flash 0MB /0x00000000/0*4Kg"); + } } Thread writeThread(osPriorityHigh);