forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-07 fa6053f85287163f6e2d5dba690bec05cbc95f4a
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¸ö×Ö½ÚµÄдÈëÓë¶ÁÈ¡¼ì²é
@@ -37,6 +37,39 @@
}
//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_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);
   }
   return return_flag;
}
/*flashÈÕÖ¾²Ù×÷µØÖ·ÅжÏ,ÌõÊýÈç¹ûÌ«¶à£¬¿ÉÄÜÑ­»·±È½Ï±È½Ï·Ñʱ¼ä£¬ÐèÒª²âÊÔ!!!!!!!!!
*input£ºOpAddr:²Ù×÷µØÖ·£»  StartAddr£ºÆðʼµØÖ·    length£ºµ¥ÌõÈÕÖ¾³¤¶È         MaxNum£ºÈÕÖ¾×î´óÌõÊý
@@ -50,7 +83,6 @@
      return FAIL;
   
   while(count_i<MaxNum){
      if(OpAddr == next_addr)
         return PASS;
      else
@@ -60,8 +92,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;
}