From f03cf3ae7a36954e64fc014e6bb7afd20c5a5247 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Wed, 12 Jun 2024 17:22:08 +0800
Subject: [PATCH] 增加IAP功能,准备测试上位机升级
---
Function/STORAGE/system_flash_mem_manage.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 53 insertions(+), 4 deletions(-)
diff --git a/Function/STORAGE/system_flash_mem_manage.c b/Function/STORAGE/system_flash_mem_manage.c
index 79e14eb..eae51fc 100644
--- a/Function/STORAGE/system_flash_mem_manage.c
+++ b/Function/STORAGE/system_flash_mem_manage.c
@@ -1,7 +1,7 @@
#include "system_flash_mem_manage.h"
#include "off_chip_flash.h"
#include "system_general_para.h"
-
+#include "mbcrc1.h"
//flash����д��Ͷ�ȡ���,ֻ֧��1024���ֽڵ�д�����ȡ���
@@ -13,9 +13,12 @@
return FAIL;
+
+ OUT_FLASH_CTRL_ENABLE;
Out_Flash_MultipleWrite(write_data,addr,length);
Out_Flash_MultipleRead(buf_l,addr,length);
+ OUT_FLASH_CTRL_DISABLE;
return ucharcmp(write_data,buf_l,length);
}
@@ -37,6 +40,41 @@
}
+//flash���ݶ�ȡ����У��CRC
+ErrorStatus FlashMultipleReadAndCrcCheck(uint8_t * read_data,uint32_t addrA,uint16_t length)
+{
+ ErrorStatus return_flag = PASS;
+ uint8_t buf_l[1024];
+ uint16_t crc_modbus = 0;
+
+ if(length >1024)
+ return FAIL;
+ OUT_FLASH_CTRL_ENABLE;
+ Out_Flash_MultipleRead(buf_l,addrA,length);
+ crc_modbus = buf_l[0] + ((uint16_t)buf_l[1]<<8);
+ if(crc_modbus != usMBCRC16(0xFFFF,&buf_l[2], length - sizeof(crc_modbus) )){
+ Out_Flash_MultipleRead(buf_l,addrA,length);
+ crc_modbus = buf_l[0] + ((uint16_t)buf_l[1]<<8);
+ if(crc_modbus != usMBCRC16(0xFFFF,&buf_l[2], length - sizeof(crc_modbus) )){
+ return_flag = FAIL;
+ }else{
+ arrayA_2_arrayB(buf_l,read_data,length,LITTLE_ENDIAN);
+ }
+ }else
+ {
+ arrayA_2_arrayB(buf_l,read_data,length,LITTLE_ENDIAN);
+ }
+
+ OUT_FLASH_CTRL_DISABLE;
+
+ return return_flag;
+}
+
+
+
+
+
+
/*flash��־������ַ�ж�,�������̫�࣬����ѭ���ȽϱȽϷ�ʱ�䣬��Ҫ����!!!!!!!!!
*input��OpAddr:������ַ�� StartAddr����ʼ��ַ length��������־���� MaxNum����־�������
@@ -50,7 +88,6 @@
return FAIL;
while(count_i<MaxNum){
-
if(OpAddr == next_addr)
return PASS;
else
@@ -60,8 +97,20 @@
break;
}
}
-
return FAIL;
}
-
+/*flash��־��ȡ��һ����ַ�����ж���һ����ַ�Ƿ��������
+*input��OpAddr:������ַ�� StartAddr����ʼ��ַ length��������־���� EndAddr��������ַ
+*return����һ����ַ
+*/
+uint32_t FlashLogPreviousAddrGet(uint32_t OpAddr,uint32_t StartAddr,uint16_t length,uint32_t EndAddr)
+{
+ uint32_t previous_addr = StartAddr;
+ if(OpAddr == StartAddr){
+ previous_addr = EndAddr;
+ }else{
+ previous_addr = OpAddr - length;
+ }
+ return previous_addr;
+}
--
Gitblit v1.9.3