| | |
| | | #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; |
| | | } |