Browse Source

Fota数据读取和写入部分bug修复 V2.3.0.35

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
46e108bb04
1 changed files with 19 additions and 9 deletions
  1. 19 9
      src/Fota.c

+ 19 - 9
src/Fota.c

@@ -68,11 +68,16 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                 Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len+1);
                 if(Fota_S.Fota_CRC == *(DataPtr+Fota_S.Fota_Recv_Data_Len+42)||Data_Read_Buffer!=PNULL)
                 {
+                    UINT8 Fota_Recv_Data_Len_4 = 0;
                     if(Fota_S.Fota_Recv_Data_Len%4!=0)
                     {
-                    Fota_S.Fota_Recv_Data_Len = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
+                        Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
                     }
-                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+                    else
+                    {
+                        Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len;
+                    }
+                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4);
                     memset(Data_Read_Buffer,0x00,Fota_S.Fota_Recv_Data_Len);
                     BSP_QSPI_Read_Safe(Data_Read_Buffer,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
                     Data_Read_Crc = Fota_crc_chk(Data_Read_Buffer,Fota_S.Fota_Recv_Data_Len);
@@ -91,7 +96,7 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                     else
                     {
                         Fota_Answer[3] = 0x02;
-                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4);
                     }
                 }
                 else//数据校验失败
@@ -186,19 +191,24 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                 Fota_S.Fota_All_Data_Len = *(DataPtr+33)<<24|*(DataPtr+34)<<16|*(DataPtr+35)<<8|*(DataPtr+36);
                 Fota_S.Fota_Current_Addres = *(DataPtr+37)<<24|*(DataPtr+38)<<16|*(DataPtr+39)<<8|*(DataPtr+40);
                 Fota_S.Fota_Recv_Data_Len = *(DataPtr+41);
-                memset(Fota_S.Fota_Recv_Data,0x00,100);
+                memset(Fota_S.Fota_Recv_Data,0xFF,100);
                 memcpy(Fota_S.Fota_Recv_Data,(DataPtr+42),*(DataPtr+41));
                 Fota_S.Fota_CRC = Fota_crc_chk(Fota_S.Fota_Recv_Data,Fota_S.Fota_Recv_Data_Len);
                 Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len);
                 if(Fota_S.Fota_CRC == *(DataPtr+Fota_S.Fota_Recv_Data_Len+42)||Data_Read_Buffer!=PNULL)
                 {
+                    UINT8 Fota_Recv_Data_Len_4 = 0;
                     if(Fota_S.Fota_Recv_Data_Len%4!=0)
                     {
-                    Fota_S.Fota_Recv_Data_Len = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
+                        Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
                     }
-                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
-                    
-                    BSP_QSPI_Read_Safe(Data_Read_Buffer,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+                    else
+                    {
+                        Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len;
+                    }
+                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4);
+                    memset(Data_Read_Buffer,0x00,Fota_S.Fota_Recv_Data_Len);
+                    BSP_QSPI_Read_Safe(Data_Read_Buffer,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len);
                     Data_Read_Crc = Fota_crc_chk(Data_Read_Buffer,Fota_S.Fota_Recv_Data_Len);
                     #ifdef USING_PRINTF1
                         printf("\n\n\n");
@@ -216,7 +226,7 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                     else
                     {
                         Fota_Answer[3] = 0x02;
-                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len_4);
                     }
                 }
                 else//数据校验失败