--bootloader
This commit is contained in:
@@ -38,7 +38,16 @@
|
||||
/** \brief NULL pointer value. */
|
||||
#define BLT_NULL ((void *)0)
|
||||
|
||||
typedef enum {
|
||||
CRC_OK = 0,
|
||||
CRC_NOT_FOUND_IN_MAIN_FLASH,
|
||||
CRC_ERROR
|
||||
}err_crc_t;
|
||||
|
||||
typedef enum {
|
||||
FLASH_AREA_MAINPROG = 0,
|
||||
FLASH_AREA_FULLPROG,
|
||||
}flash_area_enum_t;
|
||||
/****************************************************************************************
|
||||
* Type definitions
|
||||
****************************************************************************************/
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
/** \brief Configure the size of the default memory device (typically flash EEPROM). */
|
||||
#define BOOT_NVM_SIZE_KB (128)
|
||||
/** \brief Enable/disable hooks functions to override the user program checksum handling. */
|
||||
#define BOOT_NVM_CHECKSUM_HOOKS_ENABLE (0)
|
||||
#define BOOT_NVM_CHECKSUM_HOOKS_ENABLE (1)
|
||||
|
||||
|
||||
/****************************************************************************************
|
||||
|
||||
69
Boot/App/crc_calc.c
Normal file
69
Boot/App/crc_calc.c
Normal file
@@ -0,0 +1,69 @@
|
||||
//
|
||||
// Created by Professional on 22.04.2023.
|
||||
//
|
||||
|
||||
#include "crc_calc.h"
|
||||
CRC_HandleTypeDef hcrc;
|
||||
void MX_CRC_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN CRC_Init 0 */
|
||||
|
||||
/* USER CODE END CRC_Init 0 */
|
||||
|
||||
/* USER CODE BEGIN CRC_Init 1 */
|
||||
|
||||
/* USER CODE END CRC_Init 1 */
|
||||
hcrc.Instance = CRC;
|
||||
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
|
||||
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
|
||||
hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
|
||||
hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
|
||||
if (HAL_CRC_Init(&hcrc) != HAL_OK)
|
||||
{
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
/* USER CODE BEGIN CRC_Init 2 */
|
||||
|
||||
/* USER CODE END CRC_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
err_crc_t calculateROM_CRC32(flash_area_enum_t flash_area, uint32_t *val)
|
||||
{
|
||||
if (flash_area == FLASH_AREA_FULLPROG)
|
||||
{
|
||||
uint32_t len = *(uint32_t*)(LEN_ADDRESS);
|
||||
uint32_t crc32 = *(uint32_t*) (FLASH_USER_PROG_ADDRESS + len );
|
||||
if (len >= FLASH_SIZE)
|
||||
return CRC_ERROR;
|
||||
uint32_t crc_calc = ~HAL_CRC_Calculate(&hcrc, (uint32_t*)FLASH_USER_PROG_ADDRESS, len );
|
||||
__HAL_CRC_DR_RESET(&hcrc);
|
||||
*val = crc_calc;
|
||||
if (crc32 == crc_calc)
|
||||
return CRC_OK;
|
||||
else
|
||||
return CRC_ERROR;
|
||||
}
|
||||
else if (flash_area == FLASH_AREA_MAINPROG)
|
||||
{
|
||||
/* uint32_t crc32 = *(uint32_t*) CRC32_USER_PROG_AND_USER_LIB_ADDRESS;
|
||||
uint32_t crc_calc = ~HAL_CRC_Calculate(&hcrc, FLASH_USER_PROG_ADDRESS, CRC32_USER_PROG_AND_USER_LIB_ADDRESS - 0x8002000);
|
||||
__HAL_CRC_DR_RESET(&hcrc);
|
||||
if (crc32 == crc_calc)
|
||||
return CRC_OK;
|
||||
else
|
||||
return CRC_ERROR;*/
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint32_t calculateBuf_CRC32(uint32_t *buf, uint32_t len)
|
||||
{
|
||||
return HAL_CRC_Accumulate(&hcrc, buf, len);
|
||||
}
|
||||
|
||||
void reset_CrcModule(void)
|
||||
{
|
||||
__HAL_CRC_DR_RESET(&hcrc);
|
||||
}
|
||||
16
Boot/App/crc_calc.h
Normal file
16
Boot/App/crc_calc.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// Created by Mysteo on 23.04.2023.
|
||||
//
|
||||
|
||||
#ifndef ARBINA_GSM_BARRIER_CRC_CALC_H
|
||||
#define ARBINA_GSM_BARRIER_CRC_CALC_H
|
||||
|
||||
#include "stm32g0xx.h"
|
||||
#include "types.h"
|
||||
|
||||
|
||||
void MX_CRC_Init(void);
|
||||
err_crc_t calculateROM_CRC32(flash_area_enum_t flash_area, uint32_t *val);
|
||||
uint32_t calculateBuf_CRC32(uint32_t *buf, uint32_t len);
|
||||
void reset_CrcModule(void);
|
||||
#endif //ARBINA_GSM_BARRIER_CRC_CALC_H
|
||||
@@ -33,6 +33,8 @@
|
||||
#include "led.h" /* LED driver header */
|
||||
#include "stm32g0xx.h" /* STM32 CPU and HAL header */
|
||||
#include "stm32g0xx_ll_gpio.h" /* STM32 LL GPIO header */
|
||||
#include "crc_calc.h"
|
||||
#include "flash.h"
|
||||
|
||||
|
||||
/****************************************************************************************
|
||||
@@ -226,7 +228,7 @@ blt_bool NvmDoneHook(void)
|
||||
****************************************************************************************/
|
||||
blt_bool NvmVerifyChecksumHook(void)
|
||||
{
|
||||
return BLT_TRUE;
|
||||
return calculateROM_CRC32(FLASH_AREA_FULLPROG, NULL);
|
||||
} /*** end of NvmVerifyChecksum ***/
|
||||
|
||||
|
||||
@@ -240,7 +242,11 @@ blt_bool NvmVerifyChecksumHook(void)
|
||||
****************************************************************************************/
|
||||
blt_bool NvmWriteChecksumHook(void)
|
||||
{
|
||||
return BLT_TRUE;
|
||||
blt_bool result = BLT_TRUE;
|
||||
uint32_t crc = 0;
|
||||
calculateROM_CRC32(FLASH_AREA_FULLPROG, &crc);
|
||||
result = FlashWrite(FLASH_USER_PROG_ADDRESS + BOOT_FLASH_VECTOR_TABLE_CS_OFFSET + 1, sizeof (blt_addr), (blt_int8u*) &crc);
|
||||
return result;
|
||||
}
|
||||
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ extern "C" {
|
||||
/* #define HAL_ADC_MODULE_ENABLED */
|
||||
/* #define HAL_CEC_MODULE_ENABLED */
|
||||
/* #define HAL_COMP_MODULE_ENABLED */
|
||||
/* #define HAL_CRC_MODULE_ENABLED */
|
||||
#define HAL_CRC_MODULE_ENABLED
|
||||
/* #define HAL_CRYP_MODULE_ENABLED */
|
||||
/* #define HAL_DAC_MODULE_ENABLED */
|
||||
/* #define HAL_EXTI_MODULE_ENABLED */
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "crc.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* CRC init function */
|
||||
void MX_CRC_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN CRC_Init 0 */
|
||||
/* USER CODE END CRC_Init 0 */
|
||||
|
||||
/* Peripheral clock enable */
|
||||
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_CRC);
|
||||
|
||||
/* USER CODE BEGIN CRC_Init 1 */
|
||||
/* USER CODE END CRC_Init 1 */
|
||||
LL_CRC_SetInputDataReverseMode(CRC, LL_CRC_INDATA_REVERSE_NONE);
|
||||
LL_CRC_SetOutputDataReverseMode(CRC, LL_CRC_OUTDATA_REVERSE_NONE);
|
||||
LL_CRC_SetPolynomialCoef(CRC, LL_CRC_DEFAULT_CRC32_POLY);
|
||||
LL_CRC_SetPolynomialSize(CRC, LL_CRC_POLYLENGTH_32B);
|
||||
LL_CRC_SetInitialData(CRC, LL_CRC_DEFAULT_CRC_INITVALUE);
|
||||
/* USER CODE BEGIN CRC_Init 2 */
|
||||
/* USER CODE END CRC_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
/* USER CODE END 1 */
|
||||
Reference in New Issue
Block a user