forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-12 f03cf3ae7a36954e64fc014e6bb7afd20c5a5247
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;
}