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