From 842bb64195f958b050867c50db66fc0aa413dafb Mon Sep 17 00:00:00 2001 From: QuakeGod <quakegod@sina.com> Date: 星期六, 27 七月 2024 10:42:56 +0800 Subject: [PATCH] KBus upgrade --- CCT6_BootLoader/Src/main.c | 60 +++++++++++++++++++++++++++++++++++------------------------- 1 files changed, 35 insertions(+), 25 deletions(-) diff --git a/CCT6_BootLoader/Src/main.c b/CCT6_BootLoader/Src/main.c index e79484e..60f77e3 100644 --- a/CCT6_BootLoader/Src/main.c +++ b/CCT6_BootLoader/Src/main.c @@ -46,6 +46,7 @@ #include "Functions.h" #include "string.h" #include "BSP.h" +#include "stm32f0xx_ll_flash.h" /* USER CODE END Includes */ @@ -141,8 +142,8 @@ } #define ApplicationAddress 0x08001000 //搴旂敤绋嬪簭棣栧湴鍧�瀹氫箟 -#define NewAppInfoBlockAddress 0x08020000 // 瀛樺偍鐨勬柊搴旂敤绋嬪簭淇℃伅鍧楃殑鍦板潃 -#define NewAppAddress 0x08021000 // 瀛樺偍鐨勬柊搴旂敤绋嬪簭鐨勫湴鍧� +#define NEW_APP_INFOBLOCK_ADDR 0x08020000 // 瀛樺偍鐨勬柊搴旂敤绋嬪簭淇℃伅鍧楃殑鍦板潃 +#define NEW_APP_ADDR 0x08021000 // 瀛樺偍鐨勬柊搴旂敤绋嬪簭鐨勫湴鍧� //#define FLASH_PAGESIZE (0x00000400) //Page Size = 1K @@ -187,38 +188,35 @@ int EraseFlashMem(void * pAddrFlash, unsigned int Pages) { - HAL_StatusTypeDef res; - res = HAL_FLASH_Unlock(); - uint32_t ErrNo; - FLASH_EraseInitTypeDef erase1; - erase1.NbPages=Pages; - erase1.PageAddress=(unsigned int)pAddrFlash; - erase1.TypeErase=FLASH_TYPEERASE_PAGES; - res = HAL_FLASHEx_Erase(&erase1,&ErrNo); - res = HAL_FLASH_Lock(); + ErrorStatus res; + res = LL_Flash_Unlock(); +// uint32_t ErrNo; + res = LL_Flash_PageErase(pAddrFlash,Pages); + LL_FLASH_Lock(FLASH); return res; } int EraseAndWriteToFlashMem(void * pBuf, void * pAddrFlash, unsigned int nByteSize) { - HAL_StatusTypeDef res; - res = HAL_FLASH_Unlock(); - uint32_t ErrNo; - FLASH_EraseInitTypeDef erase1; - erase1.NbPages= (nByteSize-1) / FLASH_PAGE_SIZE + 1; - erase1.PageAddress=(unsigned int)pAddrFlash; - erase1.TypeErase=FLASH_TYPEERASE_PAGES; - res = HAL_FLASHEx_Erase(&erase1,&ErrNo); - - + ErrorStatus res; + res = LL_Flash_Unlock(); +// __disable_irq(); + int NbPages = (nByteSize-1) / FLASH_PAGE_SIZE + 1; +// FLASH_EraseInitTypeDef erase1; +// erase1.NbPages=(nByteSize-1) / FLASH_PAGE_SIZE + 1;; +// erase1.PageAddress=(unsigned int)pAddrFlash; +// erase1.TypeErase=FLASH_TYPEERASE_PAGES; + res = LL_Flash_PageErase(pAddrFlash,NbPages); for (int i=0;i<(nByteSize+1)/2;i++) { - res = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, (uint32_t)pAddrFlash + i*2, ((uint16_t *)pBuf)[i]); - if ((i&0x7ff) == 0) {ToggleRunLed(); ToggleErrLed();} + unsigned short value = ((uint8_t *)pBuf)[i*2] + (((uint8_t *)pBuf)[i*2 +1] << 8); + res = LL_FLASH_Program(ProgaraType_DATA16, (uint32_t)pAddrFlash + i*2, value); + if (res == ERROR) break; } - res = HAL_FLASH_Lock(); +// __enable_irq(); + LL_FLASH_Lock(FLASH); return res; } @@ -269,12 +267,24 @@ SetErrLed(0); //Turn Off Err Led // check for app update ///* + int FlashSize = *(unsigned short *)FLASHSIZE_BASE; + int NewAppAddress ; + int NewAppInfoBlockAddress ; + if (FlashSize == 64) { + NewAppInfoBlockAddress = 0x08008000; + NewAppAddress = 0x08009000U; + }else if (FlashSize == 256) { + NewAppInfoBlockAddress = 0x08020000; + NewAppAddress = 0x08021000U; + } + pNewAppInfoBlock ptheNewAppInfoBlock = (pNewAppInfoBlock) NewAppInfoBlockAddress; if (ptheNewAppInfoBlock->Sign == 0x55AA) { //check length and CRC; int length = ptheNewAppInfoBlock->Length; - int nCRC = crc16table((uint8_t *)NewAppAddress,length); + int nCRC; // = crc16table((uint8_t *)NewAppAddress,length); + nCRC = crc16bitbybit((uint8_t *)NewAppAddress,length); if (nCRC == ptheNewAppInfoBlock->nCRC) { // copy program -- Gitblit v1.9.1