Bootloader fonctionnel
This commit is contained in:
parent
b48426afc4
commit
d9c2cfdc19
@ -11,6 +11,7 @@
|
|||||||
#include "NetworkProtocol.h"
|
#include "NetworkProtocol.h"
|
||||||
#include "Syslog.h"
|
#include "Syslog.h"
|
||||||
#include "checksum.h"
|
#include "checksum.h"
|
||||||
|
#include "FlashMapping.h"
|
||||||
|
|
||||||
|
|
||||||
#define BOOTLOADER_FLASH_ERASE_POLL_TIMEOUT 25//100 //ms
|
#define BOOTLOADER_FLASH_ERASE_POLL_TIMEOUT 25//100 //ms
|
||||||
@ -91,7 +92,7 @@ void BootloaderExecuteCmd(char Cmd,bool CRCValid)
|
|||||||
}
|
}
|
||||||
case BOOTLOADER_SEND_DATA_CHUNK_REQUEST:
|
case BOOTLOADER_SEND_DATA_CHUNK_REQUEST:
|
||||||
{
|
{
|
||||||
// printf("BOOTLOADER_SEND_DATA_CHUNK_REQUEST\n");
|
// printf("BOOTLOADER_SEND_DATA_CHUNK_REQUEST\n");
|
||||||
BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_NEW_DATA_CHUNK_CMD);
|
BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_NEW_DATA_CHUNK_CMD);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -210,11 +211,21 @@ void BootloaderInterfaceStateMachine(int Event, int Param)
|
|||||||
}
|
}
|
||||||
case BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD:
|
case BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD:
|
||||||
{
|
{
|
||||||
if(FirmwareUploaded == 1)
|
if(BootloaderCheckFlashBootloaderData() == RET_OK)
|
||||||
{
|
{
|
||||||
//TODO: Do that!
|
|
||||||
BootloaderProtocolSendACK(BOOTLOADER_EXECUTE_UPGRADE_RESPONSE);
|
BootloaderProtocolSendACK(BOOTLOADER_EXECUTE_UPGRADE_RESPONSE);
|
||||||
printf("Bootloader will now upgrade and reboot!!\n");
|
printf("Bootloader will now upgrade and reboot!!\n");
|
||||||
|
|
||||||
|
char Flags[2];
|
||||||
|
Flags[BOOTLOADER_FLAGS_ACTION_FLAG_INDEX] = BOOTLOADER_ACTION_FLASH_FIRMWARE_VALUE;
|
||||||
|
Flags[BOOTLOADER_FLAGS_ACTION_VALIDATOR_INDEX] = BOOTLOADER_FLASH_FIRMWARE_VALIDATOR;
|
||||||
|
SPIFlashWriteBuffer(Flags,2,FLASH_BTLDR_FLAGS_ADDRESS);
|
||||||
|
|
||||||
|
Sleep(100);
|
||||||
|
TurnOFFWiFi();
|
||||||
|
Sleep(100);
|
||||||
|
SoftReset();
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -235,6 +246,29 @@ void BootloaderInterfaceStateMachine(int Event, int Param)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BOOTLOADER_SM_GET_FIRMWARE_DATA_CMD:
|
||||||
|
{
|
||||||
|
char Response[21];
|
||||||
|
memset(Response,0xFF,sizeof(Response));
|
||||||
|
|
||||||
|
if(BootloaderCheckFlashBootloaderData() != RET_OK)
|
||||||
|
{
|
||||||
|
Response[0] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response[0] = 1;
|
||||||
|
BootloaderIntToBytes(&Response[1],mStoredBootloaderInfo.Firmwareflags);
|
||||||
|
BootloaderIntToBytes(&Response[1],mStoredBootloaderInfo.NbRecords);
|
||||||
|
BootloaderIntToBytes(&Response[1],mStoredBootloaderInfo.FirmwareSize);
|
||||||
|
BootloaderIntToBytes(&Response[1],mStoredBootloaderInfo.Versioncode);
|
||||||
|
BootloaderIntToBytes(&Response[1],mStoredBootloaderInfo.DataCRC32);
|
||||||
|
}
|
||||||
|
|
||||||
|
BootloaderProtocolSendStoredFirmwareInfoResponse(Response,sizeof(Response));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
//SEND NACK
|
//SEND NACK
|
||||||
@ -373,22 +407,22 @@ void BootloaderInterfaceStateMachine(int Event, int Param)
|
|||||||
unsigned int DataChunkSize = 0;
|
unsigned int DataChunkSize = 0;
|
||||||
DataChunkSize = 0;
|
DataChunkSize = 0;
|
||||||
|
|
||||||
// DataChunkIndex = BootloaderBuffer[0];
|
// DataChunkIndex = BootloaderBuffer[0];
|
||||||
// DataChunkIndex <<= 8;
|
// DataChunkIndex <<= 8;
|
||||||
// DataChunkIndex += BootloaderBuffer[1];
|
// DataChunkIndex += BootloaderBuffer[1];
|
||||||
// DataChunkIndex <<= 8;
|
// DataChunkIndex <<= 8;
|
||||||
// DataChunkIndex += BootloaderBuffer[2];
|
// DataChunkIndex += BootloaderBuffer[2];
|
||||||
// DataChunkIndex <<= 8;
|
// DataChunkIndex <<= 8;
|
||||||
// DataChunkIndex += BootloaderBuffer[3];
|
// DataChunkIndex += BootloaderBuffer[3];
|
||||||
DataChunkIndex = BootloaderBytesToInt(&BootloaderBuffer[0]);
|
DataChunkIndex = BootloaderBytesToInt(&BootloaderBuffer[0]);
|
||||||
|
|
||||||
// DataChunkSize = BootloaderBuffer[4];
|
// DataChunkSize = BootloaderBuffer[4];
|
||||||
// DataChunkSize <<= 8;
|
// DataChunkSize <<= 8;
|
||||||
// DataChunkSize += BootloaderBuffer[5];
|
// DataChunkSize += BootloaderBuffer[5];
|
||||||
// DataChunkSize <<= 8;
|
// DataChunkSize <<= 8;
|
||||||
// DataChunkSize += BootloaderBuffer[6];
|
// DataChunkSize += BootloaderBuffer[6];
|
||||||
// DataChunkSize <<= 8;
|
// DataChunkSize <<= 8;
|
||||||
// DataChunkSize += BootloaderBuffer[7];
|
// DataChunkSize += BootloaderBuffer[7];
|
||||||
DataChunkSize = BootloaderBytesToInt(&BootloaderBuffer[4]);
|
DataChunkSize = BootloaderBytesToInt(&BootloaderBuffer[4]);
|
||||||
|
|
||||||
|
|
||||||
@ -436,7 +470,7 @@ void BootloaderInterfaceStateMachine(int Event, int Param)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Firmware integrity check failed. Going back to STANDBY state.\n");
|
printf("Firmware integrity check failed. Going back to STANDBY state.\n");
|
||||||
// BootloaderProtocolSendNACK(BOOTLOADER_UPLOAD_FINISHED_RESPONSE);
|
// BootloaderProtocolSendNACK(BOOTLOADER_UPLOAD_FINISHED_RESPONSE);
|
||||||
BootloaderProtocolSendFirmwareUploadResult(BOOTLOADER_UPLOAD_FAILED_FLASH_VERIFICATION_ERROR);
|
BootloaderProtocolSendFirmwareUploadResult(BOOTLOADER_UPLOAD_FAILED_FLASH_VERIFICATION_ERROR);
|
||||||
BootloaderResetStateMachine();
|
BootloaderResetStateMachine();
|
||||||
FirmwareUploaded = 0;
|
FirmwareUploaded = 0;
|
||||||
@ -569,8 +603,8 @@ void BootloaderActivateBootloader()
|
|||||||
void BootloaderDeactivateBootloader()
|
void BootloaderDeactivateBootloader()
|
||||||
{
|
{
|
||||||
BootloaderResetStateMachine();
|
BootloaderResetStateMachine();
|
||||||
// CloseBootloaderServer();
|
// CloseBootloaderServer();
|
||||||
// BootloaderIterfaceStateMachine(BOOTLOADER_SM_ABORT_CMD,0);
|
// BootloaderIterfaceStateMachine(BOOTLOADER_SM_ABORT_CMD,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int BootloaderFlashEraseStateMachine(int event)
|
int BootloaderFlashEraseStateMachine(int event)
|
||||||
@ -671,11 +705,11 @@ int BootloaderFlashWriteStateMachine(int event)
|
|||||||
if(event == BOOTLOADER_FLASH_WRITE_SM_TICK_EVENT)
|
if(event == BOOTLOADER_FLASH_WRITE_SM_TICK_EVENT)
|
||||||
{
|
{
|
||||||
//TODO: timeout
|
//TODO: timeout
|
||||||
// return BOOTLOADER_FLASH_WRITE_ERROR_RES;
|
// return BOOTLOADER_FLASH_WRITE_ERROR_RES;
|
||||||
}
|
}
|
||||||
else if(event == BOOTLOADER_FLASH_WRITE_SM_NEW_BUFFER_EVENT)
|
else if(event == BOOTLOADER_FLASH_WRITE_SM_NEW_BUFFER_EVENT)
|
||||||
{
|
{
|
||||||
// printf("Starting writing data to Flash\nFlash Address : Data\n");
|
// printf("Starting writing data to Flash\nFlash Address : Data\n");
|
||||||
BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_BUFFER_STATE;
|
BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_BUFFER_STATE;
|
||||||
BootloaderFirmwareChunkWriteCount = 0;
|
BootloaderFirmwareChunkWriteCount = 0;
|
||||||
return BOOTLOADER_FLASH_WRITING_RES;
|
return BOOTLOADER_FLASH_WRITING_RES;
|
||||||
@ -723,8 +757,8 @@ int BootloaderFlashWriteStateMachine(int event)
|
|||||||
BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_WAIT_FOR_BYTE_DONE;
|
BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_WAIT_FOR_BYTE_DONE;
|
||||||
return BOOTLOADER_FLASH_WRITING_RES;
|
return BOOTLOADER_FLASH_WRITING_RES;
|
||||||
|
|
||||||
// BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE;
|
// BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE;
|
||||||
// return BOOTLOADER_FLASH_WRITE_FINISHED_RES;
|
// return BOOTLOADER_FLASH_WRITE_FINISHED_RES;
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -735,15 +769,15 @@ int BootloaderFlashWriteStateMachine(int event)
|
|||||||
{
|
{
|
||||||
BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE;
|
BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE;
|
||||||
return BOOTLOADER_FLASH_WRITE_FINISHED_RES;
|
return BOOTLOADER_FLASH_WRITE_FINISHED_RES;
|
||||||
// if(SyslogIsBufferEmpty() == RET_OK)
|
// if(SyslogIsBufferEmpty() == RET_OK)
|
||||||
// {
|
// {
|
||||||
// BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE;
|
// BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE;
|
||||||
// return BOOTLOADER_FLASH_WRITE_FINISHED_RES;
|
// return BOOTLOADER_FLASH_WRITE_FINISHED_RES;
|
||||||
// }
|
// }
|
||||||
// else
|
// else
|
||||||
// {
|
// {
|
||||||
// return BOOTLOADER_FLASH_WRITING_RES;
|
// return BOOTLOADER_FLASH_WRITING_RES;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -791,18 +825,23 @@ int BootloaderCheckFlashBootloaderData()
|
|||||||
VersionCode = BootloaderBytesToInt(&FlashData[16]);
|
VersionCode = BootloaderBytesToInt(&FlashData[16]);
|
||||||
CRC32 = BootloaderBytesToInt(&FlashData[20]);
|
CRC32 = BootloaderBytesToInt(&FlashData[20]);
|
||||||
|
|
||||||
|
mStoredBootloaderInfo.Firmwareflags = FirmwareFlags;
|
||||||
|
mStoredBootloaderInfo.NbRecords = NbRecords;
|
||||||
|
mStoredBootloaderInfo.FirmwareSize = FirmwareSize;
|
||||||
|
mStoredBootloaderInfo.Versioncode = VersionCode;
|
||||||
|
mStoredBootloaderInfo.DataCRC32 = CRC32;
|
||||||
|
|
||||||
printf("File Header: Code:[0x%x] - Flags:[0x%x] - Nb Records:[%d] - Firmware Size:[%d] - Version:[0x%x] - CRC32:[0x%x]\n",FileHeaderCode,FirmwareFlags,NbRecords,FirmwareSize,VersionCode,CRC32);
|
//printf("File Header: Code:[0x%x] - Flags:[0x%x] - Nb Records:[%d] - Firmware Size:[%d] - Version:[0x%x] - CRC32:[0x%x]\n",FileHeaderCode,FirmwareFlags,NbRecords,FirmwareSize,VersionCode,CRC32);
|
||||||
|
|
||||||
|
|
||||||
if(FileHeaderCode != BOOTLOADER_FILE_HEADER_CODE)
|
if(FileHeaderCode != BOOTLOADER_FILE_HEADER_CODE)
|
||||||
{
|
{
|
||||||
printf("Invalid file header code, aborting\n");
|
// printf("Invalid file header code, aborting\n");
|
||||||
return RET_ERROR;
|
return RET_ERROR;
|
||||||
}
|
}
|
||||||
if(NbRecords == 0)
|
if(NbRecords == 0)
|
||||||
{
|
{
|
||||||
printf("No records in file (NbRecords = 0), aborting\n");
|
// printf("No records in file (NbRecords = 0), aborting\n");
|
||||||
return RET_ERROR;
|
return RET_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -824,27 +863,27 @@ int BootloaderCheckFlashBootloaderData()
|
|||||||
|
|
||||||
if(RecHeader != BOOTLOADER_RECORD_HEADER_CODE)
|
if(RecHeader != BOOTLOADER_RECORD_HEADER_CODE)
|
||||||
{
|
{
|
||||||
printf("Error in record #%d. Invalid header code : [0x%x]\n",CurRecord,RecHeader);
|
// printf("Error in record #%d. Invalid header code : [0x%x]\n",CurRecord,RecHeader);
|
||||||
return RET_ERROR;
|
return RET_ERROR;
|
||||||
}
|
}
|
||||||
if(RecSize == 0)
|
if(RecSize == 0)
|
||||||
{
|
{
|
||||||
printf("Error in record #%d. Invalid record size (RecordSize = 0) \n");
|
// printf("Error in record #%d. Invalid record size (RecordSize = 0) \n");
|
||||||
return RET_ERROR;
|
return RET_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// printf("Record #%d OK! Header:[0x%x] - Size:[%d] - Start Address:[0x%x]\n",CurRecord,RecHeader,RecSize,RecStartAddress);
|
// printf("Record #%d OK! Header:[0x%x] - Size:[%d] - Start Address:[0x%x]\n",CurRecord,RecHeader,RecSize,RecStartAddress);
|
||||||
// while(SyslogIsBufferEmpty() == RET_ERROR)
|
// while(SyslogIsBufferEmpty() == RET_ERROR)
|
||||||
// {
|
// {
|
||||||
// SyslogTick();
|
// SyslogTick();
|
||||||
// TickWiFi();
|
// TickWiFi();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
CurRecord++;
|
CurRecord++;
|
||||||
if(CurRecord == NbRecords)
|
if(CurRecord == NbRecords)
|
||||||
{
|
{
|
||||||
// Done = true;
|
// Done = true;
|
||||||
printf("All records checked OK! Computing CRC...\n");
|
// printf("All records checked OK! Computing CRC...\n");
|
||||||
Done = true;
|
Done = true;
|
||||||
break;
|
break;
|
||||||
//return RET_OK;
|
//return RET_OK;
|
||||||
@ -868,14 +907,14 @@ int BootloaderCheckFlashBootloaderData()
|
|||||||
|
|
||||||
if(ComputedCRC32 == CRC32)
|
if(ComputedCRC32 == CRC32)
|
||||||
{
|
{
|
||||||
printf("CRC32 matches. Computed:[0x%x] - Expected:[0x%x]\n",ComputedCRC32,CRC32);
|
// printf("CRC32 matches. Computed:[0x%x] - Expected:[0x%x]\n",ComputedCRC32,CRC32);
|
||||||
printf("Flash check success. Firmware is valid\n");
|
// printf("Flash check success. Firmware is valid\n");
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("CRC32 mismatch. Computed:[0x%x] - Expected:[0x%x]\n",ComputedCRC32,CRC32);
|
// printf("CRC32 mismatch. Computed:[0x%x] - Expected:[0x%x]\n",ComputedCRC32,CRC32);
|
||||||
printf("Flash check failed.\n");
|
// printf("Flash check failed.\n");
|
||||||
return RET_ERROR;
|
return RET_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -917,3 +956,23 @@ int BootloaderBytesToInt(unsigned char *Bytes)
|
|||||||
|
|
||||||
return Output;
|
return Output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BootloaderIntToBytes(unsigned char *Buf, unsigned int Input)
|
||||||
|
{
|
||||||
|
if(Buf == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Buf[3] = (unsigned char)(Input & 0xFF);
|
||||||
|
Input >>= 8;
|
||||||
|
Buf[2] = (unsigned char)(Input & 0xFF);
|
||||||
|
Input >>= 8;
|
||||||
|
Buf[1] = (unsigned char)(Input & 0xFF);
|
||||||
|
Input >>= 8;
|
||||||
|
Buf[0] = (unsigned char)(Input & 0xFF);
|
||||||
|
Input >>= 8;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
}
|
||||||
@ -12,6 +12,47 @@
|
|||||||
|
|
||||||
#define BOOTLOADER_FILE_HEADER_CODE (int)0xBAADBEEF
|
#define BOOTLOADER_FILE_HEADER_CODE (int)0xBAADBEEF
|
||||||
#define BOOTLOADER_RECORD_HEADER_CODE (int)0xDEADBEEF
|
#define BOOTLOADER_RECORD_HEADER_CODE (int)0xDEADBEEF
|
||||||
|
#define BOOTLOADER_FLASH_FIRMWARE_VALIDATOR 0xA8
|
||||||
|
#define BOOTLOADER_ENTER_UPLOAD_MODE_VALIDATOR 0x5A
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char BootloaderAction;
|
||||||
|
unsigned char BootloaderActionValidator;
|
||||||
|
|
||||||
|
}stBootloaderFlags_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int Firmwareflags;
|
||||||
|
unsigned int NbRecords;
|
||||||
|
unsigned int FirmwareSize;
|
||||||
|
unsigned int Versioncode;
|
||||||
|
unsigned int DataCRC32;
|
||||||
|
}stStoredBootloaderInfo;
|
||||||
|
|
||||||
|
extern stBootloaderFlags_t mBootloaderFlags;
|
||||||
|
stStoredBootloaderInfo mStoredBootloaderInfo;
|
||||||
|
|
||||||
|
enum eBootloaderFlagsIndex
|
||||||
|
{
|
||||||
|
BOOTLOADER_FLAGS_ACTION_FLAG_INDEX = 0,
|
||||||
|
BOOTLOADER_FLAGS_ACTION_VALIDATOR_INDEX,
|
||||||
|
|
||||||
|
|
||||||
|
BOOTLOADER_FLAGS_MAX_INDEX = 12
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eBootloaderActionFlagValues
|
||||||
|
{
|
||||||
|
BOOTLOADER_ACTION_JUMP_TO_APP_VALUE = 0,
|
||||||
|
BOOTLOADER_ACTION_FLASH_FIRMWARE_VALUE = 1,
|
||||||
|
BOOTLOADER_ACTION_ENTER_UPDATE_MODE_VALUE = 2,
|
||||||
|
|
||||||
|
BOOTLOADER_ACTION_MAX_VALUE
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
enum eBootloaderStates
|
enum eBootloaderStates
|
||||||
{
|
{
|
||||||
@ -105,7 +146,8 @@ enum eBootloaderStateMachineCmds
|
|||||||
BOOTLOADER_SM_UPLOAD_FINISHED_CMD,
|
BOOTLOADER_SM_UPLOAD_FINISHED_CMD,
|
||||||
BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD,
|
BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD,
|
||||||
BOOTLOADER_SM_INVALID_CRC_CMD,
|
BOOTLOADER_SM_INVALID_CRC_CMD,
|
||||||
BOOTLOADER_SM_CHECK_FLASH_CMD
|
BOOTLOADER_SM_CHECK_FLASH_CMD,
|
||||||
|
BOOTLOADER_SM_GET_FIRMWARE_DATA_CMD
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -132,7 +174,7 @@ int BootloaderCheckFlashBootloaderData();
|
|||||||
int BootloaderPrintFlashData();
|
int BootloaderPrintFlashData();
|
||||||
|
|
||||||
int BootloaderBytesToInt(unsigned char *Bytes);
|
int BootloaderBytesToInt(unsigned char *Bytes);
|
||||||
|
int BootloaderIntToBytes(unsigned char *Buf, unsigned int Input);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -301,10 +301,10 @@ void BootloaderProtocolSendFrame(unsigned char Cmd, int Size)
|
|||||||
nibble = (char)(CRC &0x000000FF);
|
nibble = (char)(CRC &0x000000FF);
|
||||||
*CRCPtr++ = nibble;
|
*CRCPtr++ = nibble;
|
||||||
|
|
||||||
// *CRCPtr++ = 0xBA;
|
// *CRCPtr++ = 0xBA;
|
||||||
// *CRCPtr++ = 0xAD;
|
// *CRCPtr++ = 0xAD;
|
||||||
// *CRCPtr++ = 0xCA;
|
// *CRCPtr++ = 0xCA;
|
||||||
// *CRCPtr++ = 0xFE;
|
// *CRCPtr++ = 0xFE;
|
||||||
|
|
||||||
SendBootloaderData(&BootloaderBuffer[0],Size + PROTOCOL_INFO_DATA_SIZE);
|
SendBootloaderData(&BootloaderBuffer[0],Size + PROTOCOL_INFO_DATA_SIZE);
|
||||||
}
|
}
|
||||||
@ -410,3 +410,17 @@ void BootloaderProtocolSendFlashCheckResult(char Result)
|
|||||||
|
|
||||||
BootloaderProtocolSendFrame(BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_RESPONSE,1);
|
BootloaderProtocolSendFrame(BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_RESPONSE,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BootloaderProtocolSendStoredFirmwareInfoResponse(unsigned char* FirmwareData, int size)
|
||||||
|
{
|
||||||
|
char* DataPtr = BootloaderProtocolGetDataBufferPtr();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for(i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
*DataPtr++ = *FirmwareData++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BootloaderProtocolSendFrame(BOOTLOADER_GET_STORED_FIRMWARE_INFO_RESPONSE,size);
|
||||||
|
}
|
||||||
@ -118,5 +118,6 @@ void BootloaderProtocolSendDataChunkResult(char ErrorCode, int ChunkValue);
|
|||||||
void BootloaderProtocolSendBootloaderState(char State);
|
void BootloaderProtocolSendBootloaderState(char State);
|
||||||
void BootloaderProtocolSendFirmwareUploadResult(char Result);
|
void BootloaderProtocolSendFirmwareUploadResult(char Result);
|
||||||
void BootloaderProtocolSendFlashCheckResult(char Result);
|
void BootloaderProtocolSendFlashCheckResult(char Result);
|
||||||
|
void BootloaderProtocolSendStoredFirmwareInfoResponse(unsigned char* FirmwareData, int size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -20,6 +20,8 @@
|
|||||||
|
|
||||||
#define FLASH_BTLDR_FIRMWARE_START_ADDRESS 0x180000
|
#define FLASH_BTLDR_FIRMWARE_START_ADDRESS 0x180000
|
||||||
#define FLASH_BTLDR_FIRMWARE_LAST_64K_SECTOR_ADD 0x1F0000
|
#define FLASH_BTLDR_FIRMWARE_LAST_64K_SECTOR_ADD 0x1F0000
|
||||||
|
#define FLASH_BTLDR_FLAGS_ADDRESS 0x000000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define FLASH_BTLDR_HEADER_SIZE 24
|
#define FLASH_BTLDR_HEADER_SIZE 24
|
||||||
|
|||||||
@ -323,6 +323,8 @@ enum BOOTLOADER_CMDS
|
|||||||
BOOTLOADER_SEND_FLASH_DATA_CHUNK_RESPONSE,
|
BOOTLOADER_SEND_FLASH_DATA_CHUNK_RESPONSE,
|
||||||
BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_REQUEST,
|
BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_REQUEST,
|
||||||
BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_RESPONSE,
|
BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_RESPONSE,
|
||||||
|
BOOTLOADER_GET_STORED_FIRMWARE_INFO_REQUEST,
|
||||||
|
BOOTLOADER_GET_STORED_FIRMWARE_INFO_RESPONSE,
|
||||||
|
|
||||||
MAX_BOOTLOADER_CMD
|
MAX_BOOTLOADER_CMD
|
||||||
};
|
};
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
#Tue Sep 07 10:50:35 EDT 2021
|
#Mon Sep 20 15:45:16 EDT 2021
|
||||||
default.languagetoolchain.version=2.41
|
default.languagetoolchain.version=2.41
|
||||||
ChaletDuino_775F512H_.languagetoolchain.version=1.33
|
ChaletDuino_775F512H_.languagetoolchain.version=1.33
|
||||||
default.Pack.dfplocation=C\:\\Users\\JF\\.mchp_packs\\Microchip\\PIC32MX_DFP\\1.2.228
|
default.Pack.dfplocation=C\:\\Users\\JF\\.mchp_packs\\Microchip\\PIC32MX_DFP\\1.2.228
|
||||||
@ -7,7 +7,7 @@ conf.ids=default,ChaletDuino_775F512H_,ChaletDuinoV2_795F512H_
|
|||||||
default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v2.41\\bin
|
default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v2.41\\bin
|
||||||
ChaletDuino_775F512H_.Pack.dfplocation=C\:\\Program Files (x86)\\Microchip\\MPLABX\\v5.40\\packs\\Microchip\\PIC32MX_DFP\\1.3.231
|
ChaletDuino_775F512H_.Pack.dfplocation=C\:\\Program Files (x86)\\Microchip\\MPLABX\\v5.40\\packs\\Microchip\\PIC32MX_DFP\\1.3.231
|
||||||
ChaletDuinoV2_795F512H_.Pack.dfplocation=C\:\\Program Files (x86)\\Microchip\\MPLABX\\v5.40\\packs\\Microchip\\PIC32MX_DFP\\1.3.231
|
ChaletDuinoV2_795F512H_.Pack.dfplocation=C\:\\Program Files (x86)\\Microchip\\MPLABX\\v5.40\\packs\\Microchip\\PIC32MX_DFP\\1.3.231
|
||||||
configurations-xml=770efc8c94a6281a3a2c647b3673efaf
|
configurations-xml=cd1eb0091a6192efa5b728f7adc16270
|
||||||
default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=a5745c99cb5a5032f17cfaf0ff720282
|
default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=a5745c99cb5a5032f17cfaf0ff720282
|
||||||
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=9db8f8a224aa17d0023ea7f468f871dc
|
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=9db8f8a224aa17d0023ea7f468f871dc
|
||||||
ChaletDuino_775F512H_.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin
|
ChaletDuino_775F512H_.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin
|
||||||
|
|||||||
@ -114,8 +114,8 @@
|
|||||||
<logicalFolder name="LinkerScript"
|
<logicalFolder name="LinkerScript"
|
||||||
displayName="Linker Files"
|
displayName="Linker Files"
|
||||||
projectFiles="true">
|
projectFiles="true">
|
||||||
<itemPath>elf32pic32mx.x</itemPath>
|
|
||||||
<itemPath>procdefs.ld</itemPath>
|
<itemPath>procdefs.ld</itemPath>
|
||||||
|
<itemPath>elf32pic32mx.x</itemPath>
|
||||||
</logicalFolder>
|
</logicalFolder>
|
||||||
<logicalFolder name="SourceFiles"
|
<logicalFolder name="SourceFiles"
|
||||||
displayName="Source Files"
|
displayName="Source Files"
|
||||||
@ -962,38 +962,6 @@
|
|||||||
<C32Global>
|
<C32Global>
|
||||||
</C32Global>
|
</C32Global>
|
||||||
</item>
|
</item>
|
||||||
<item path="elf32pic32mx.x" ex="true" overriding="false">
|
|
||||||
<C32>
|
|
||||||
</C32>
|
|
||||||
<C32-AR>
|
|
||||||
</C32-AR>
|
|
||||||
<C32-AS>
|
|
||||||
</C32-AS>
|
|
||||||
<C32-CO>
|
|
||||||
</C32-CO>
|
|
||||||
<C32-LD>
|
|
||||||
</C32-LD>
|
|
||||||
<C32CPP>
|
|
||||||
</C32CPP>
|
|
||||||
<C32Global>
|
|
||||||
</C32Global>
|
|
||||||
</item>
|
|
||||||
<item path="procdefs.ld" ex="true" overriding="false">
|
|
||||||
<C32>
|
|
||||||
</C32>
|
|
||||||
<C32-AR>
|
|
||||||
</C32-AR>
|
|
||||||
<C32-AS>
|
|
||||||
</C32-AS>
|
|
||||||
<C32-CO>
|
|
||||||
</C32-CO>
|
|
||||||
<C32-LD>
|
|
||||||
</C32-LD>
|
|
||||||
<C32CPP>
|
|
||||||
</C32CPP>
|
|
||||||
<C32Global>
|
|
||||||
</C32Global>
|
|
||||||
</item>
|
|
||||||
</conf>
|
</conf>
|
||||||
<conf name="ChaletDuinoV2_795F512H_" type="2">
|
<conf name="ChaletDuinoV2_795F512H_" type="2">
|
||||||
<toolsSet>
|
<toolsSet>
|
||||||
@ -1476,37 +1444,7 @@
|
|||||||
<C32Global>
|
<C32Global>
|
||||||
</C32Global>
|
</C32Global>
|
||||||
</item>
|
</item>
|
||||||
<item path="elf32pic32mx.x" ex="false" overriding="false">
|
<item path="procdefs.ld" ex="true" overriding="false">
|
||||||
<C32>
|
|
||||||
</C32>
|
|
||||||
<C32-AR>
|
|
||||||
</C32-AR>
|
|
||||||
<C32-AS>
|
|
||||||
</C32-AS>
|
|
||||||
<C32-CO>
|
|
||||||
</C32-CO>
|
|
||||||
<C32-LD>
|
|
||||||
</C32-LD>
|
|
||||||
<C32CPP>
|
|
||||||
</C32CPP>
|
|
||||||
<C32Global>
|
|
||||||
</C32Global>
|
|
||||||
</item>
|
|
||||||
<item path="procdefs.ld" ex="false" overriding="false">
|
|
||||||
<C32>
|
|
||||||
</C32>
|
|
||||||
<C32-AR>
|
|
||||||
</C32-AR>
|
|
||||||
<C32-AS>
|
|
||||||
</C32-AS>
|
|
||||||
<C32-CO>
|
|
||||||
</C32-CO>
|
|
||||||
<C32-LD>
|
|
||||||
</C32-LD>
|
|
||||||
<C32CPP>
|
|
||||||
</C32CPP>
|
|
||||||
<C32Global>
|
|
||||||
</C32Global>
|
|
||||||
</item>
|
</item>
|
||||||
</conf>
|
</conf>
|
||||||
</confs>
|
</confs>
|
||||||
|
|||||||
@ -13,7 +13,7 @@ OPTIONAL("libmchp_peripheral_32MX795F512H.a")
|
|||||||
* For interrupt vector handling
|
* For interrupt vector handling
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
PROVIDE(_vector_spacing = 0x00000001);
|
PROVIDE(_vector_spacing = 0x00000001);
|
||||||
_ebase_address = 0x9D002000; /*0x9FC01000;*/
|
_ebase_address = 0x9D004000; /*0x9FC01000;*/
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Memory Address Equates
|
* Memory Address Equates
|
||||||
@ -49,9 +49,14 @@ MEMORY
|
|||||||
/*kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x970*/
|
/*kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x970*/
|
||||||
/*kexception_mem : ORIGIN = 0x9FC01000, LENGTH = 0x1000*/
|
/*kexception_mem : ORIGIN = 0x9FC01000, LENGTH = 0x1000*/
|
||||||
|
|
||||||
kseg0_program_mem (rx) : ORIGIN = 0x9D003800, LENGTH = 0x7C7FF /*App code. MAX address = 9D07FFFF */
|
/* kseg0_program_mem (rx) : ORIGIN = 0x9D003800, LENGTH = 0x7C7FF*/ /*App code. MAX address = 9D07FFFF */
|
||||||
kseg0_boot_mem : ORIGIN = 0x9D003000, LENGTH = 0x7F0 /* startup code */
|
/* kseg0_boot_mem : ORIGIN = 0x9D003000, LENGTH = 0x7F0*/ /* startup code */
|
||||||
exception_mem : ORIGIN = 0x9D002000, LENGTH = 0x1000
|
/* exception_mem : ORIGIN = 0x9D002000, LENGTH = 0x1000*/
|
||||||
|
|
||||||
|
kseg0_program_mem (rx) : ORIGIN = 0x9D005800, LENGTH = 0x7A7FF /*App code. MAX address = 9D07FFFF */
|
||||||
|
kseg0_boot_mem : ORIGIN = 0x9D005000, LENGTH = 0x7F0 /* startup code */
|
||||||
|
exception_mem : ORIGIN = 0x9D004000, LENGTH = 0x1000
|
||||||
|
|
||||||
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x490
|
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x490
|
||||||
debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0
|
debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0
|
||||||
config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4
|
config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user