Browse Source

add write magic func

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 years ago
parent
commit
53d757e1bf

+ 34 - 0
Application/bsp/fmc_flash.c

@@ -67,6 +67,40 @@ uint32_t fmc_iap_image_addr(void){
 	return _image_addr();
 }
 
+void fmc_iap_write_magic(uint32_t magic)
+{
+	uint32_t address = _maigc_addr();
+	uint32_t length, checksum, value;
+
+	value = REG32(address + 8);
+	if (magic == value) {
+		return;
+	}
+
+	length = REG32(address);
+	checksum = REG32(address + 4);
+
+	fmc_unlock();
+
+	if (value != 0xFFFFFFFF) {
+		fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+		fmc_page_erase(address);
+
+		fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+		fmc_word_program(address, length);
+
+		fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+		fmc_word_program(address + 4, checksum);
+	}
+
+	if (magic != 0xFFFFFFFF) {
+		fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
+		fmc_word_program(address + 8, magic);
+	}
+
+	fmc_lock();
+}
+
 void fmc_write_magic(uint32_t length, uint32_t checksum, uint32_t magic){
 	uint32_t address = _maigc_addr();
 	uint32_t buff[4];

+ 1 - 0
Application/bsp/fmc_flash.h

@@ -14,6 +14,7 @@ void fmc_write_image(uint8_t *data, int len);
 void fmc_read_image(uint8_t *data, int len);
 void fmc_start_read_image(void);
 uint32_t fmc_iap_image_addr(void);
+void fmc_iap_write_magic(uint32_t magic);
 
 #endif /* _FMC_FLASH_H__ */
 

+ 1 - 1
Application/libs/logger.c

@@ -19,7 +19,7 @@ void set_log_level(int mod, int l){
 }
 
 static void log_out(char *fmt, va_list args){
-	vprintf(fmt, args);
+	// vprintf(fmt, args);
 }
 
 void log_debug(int mod, char *fmt, ...){

+ 1 - 1
Application/libs/shark_task.c

@@ -118,7 +118,7 @@ void shark_task_run(void)
 {
 	shark_task_t *head = &shark_task_head;
 
-	fmc_write_magic(0xFFFFFFFF, 0xFFFFFFFF, SHARK_IAP_MAGIC_SUCCESS);
+	fmc_iap_write_magic(SHARK_IAP_MAGIC_SUCCESS);
 
 	/* setup systick timer for 1000Hz interrupts */
 	SysTick_Config(SystemCoreClock / 1000);