#include "system_flash_mem_manage.h"
|
#include "off_chip_flash.h"
|
#include "system_general_para.h"
|
#include "mbcrc1.h"
|
|
|
//flashÊý¾ÝдÈëºÍ¶ÁÈ¡¼ì²é,Ö»Ö§³Ö1024¸ö×Ö½ÚµÄдÈëÓë¶ÁÈ¡¼ì²é
|
ErrorStatus FlashWriteAndReadCheck(uint8_t * write_data,uint32_t addr,uint16_t length)
|
{
|
uint8_t buf_l[1024];
|
|
if(length >1024)
|
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);
|
}
|
|
|
//flashÊý¾Ý¶à´ÎдÈ룬дÈë´íÎóʱ¶à´ÎÖØÐ´
|
ErrorStatus FlashMultipleWriteAndReadCheck(uint8_t * write_data,uint32_t addrA,uint16_t length)
|
{
|
ErrorStatus return_flag = PASS;
|
if(FlashWriteAndReadCheck(write_data,addrA,length)==FAIL)
|
{
|
if(FlashWriteAndReadCheck(write_data,addrA,length)==FAIL)
|
{
|
return_flag = FAIL;
|
}
|
}
|
|
return return_flag;
|
}
|
|
|
//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£ºÈÕÖ¾×î´óÌõÊý
|
*return£º·µ»ØFAIL±íʾµØÖ·²»ÕýÈ·
|
*/
|
ErrorStatus FlashLogAddrCheck(uint32_t OpAddr,uint32_t StartAddr,uint16_t length,uint16_t MaxNum)
|
{
|
uint32_t count_i = 0;
|
uint32_t next_addr = StartAddr;
|
if((MaxNum ==0)||(OpAddr>=OUT_FLASH_ALL_SIZE)||(StartAddr>=OUT_FLASH_ALL_SIZE)||(length >1024))
|
return FAIL;
|
|
while(count_i<MaxNum){
|
if(OpAddr == next_addr)
|
return PASS;
|
else
|
next_addr += length;
|
|
if(++count_i > 0xFFFF){
|
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;
|
}
|