1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-15 07:29:15 +01:00

OP-21/Flight Bootloader - some changes for the bootloader to work

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1682 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
zedamota 2010-09-18 23:11:42 +00:00 committed by zedamota
parent 1b9811aa0e
commit c9752a6a3a
4 changed files with 47 additions and 37 deletions

View File

@ -77,10 +77,11 @@ uint32_t crc_memory_calc()
void read_description(uint8_t * array)
{
uint8_t x=0;
for(uint32_t i=START_OF_USER_CODE+SIZE_OF_CODE;i<START_OF_USER_CODE+SIZE_OF_CODE+SIZE_OF_DESCRIPTION;++i)
{
*array=*FLASH_If_Read(i);
array++;
array[x]=*FLASH_If_Read(i);
++x;
}
}
void CRC_Ini()

View File

@ -49,7 +49,7 @@ static int32_t opahrs_msg_txrx (const uint8_t * tx, uint8_t * rx, uint32_t len)
#ifdef PIOS_INCLUDE_FREERTOS
vTaskDelay(20 / portTICK_RATE_MS);
#else
PIOS_DELAY_WaitmS(20);
//PIOS_DELAY_WaitmS(20);
#endif
rc = PIOS_SPI_TransferBlock(PIOS_OPAHRS_SPI, tx, rx, len, NULL);
PIOS_SPI_RC_PinSet(PIOS_OPAHRS_SPI, 1);
@ -83,7 +83,7 @@ static enum opahrs_result opahrs_msg_v0_send_req (const struct opahrs_msg_v0 * r
#ifdef PIOS_INCLUDE_FREERTOS
vTaskDelay(20 / portTICK_RATE_MS);
#else
PIOS_DELAY_WaitmS(20);
//PIOS_DELAY_WaitmS(1);
#endif
continue;
case OPAHRS_MSG_LINK_STATE_READY:
@ -97,7 +97,7 @@ static enum opahrs_result opahrs_msg_v0_send_req (const struct opahrs_msg_v0 * r
#ifdef PIOS_INCLUDE_FREERTOS
vTaskDelay(50 / portTICK_RATE_MS);
#else
PIOS_DELAY_WaitmS(50);
//PIOS_DELAY_WaitmS(1);
#endif
continue;
}
@ -131,7 +131,7 @@ static enum opahrs_result opahrs_msg_v0_recv_rsp (enum opahrs_msg_v0_tag tag, st
#ifdef PIOS_INCLUDE_FREERTOS
vTaskDelay(20 / portTICK_RATE_MS);
#else
PIOS_DELAY_WaitmS(20);
PIOS_DELAY_WaitmS(1);
#endif
continue;
case OPAHRS_MSG_LINK_STATE_INACTIVE:
@ -202,21 +202,20 @@ enum opahrs_result PIOS_OPAHRS_bl_GetSerial(struct opahrs_msg_v0 * rsp)
OPAHRS_MSG_V0_RSP_SERIAL));
}
enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp)
enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * rsp)
{
if (!req || !rsp) return OPAHRS_RESULT_FAILED;
enum opahrs_result rc;
/* Make up an attituderaw request */
opahrs_msg_v0_init_user_tx (req, OPAHRS_MSG_V0_REQ_FWUP_START);
if (!rsp) return OPAHRS_RESULT_FAILED;
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_FWUP_START,
rsp,
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
}
/* Send the message until it is received */
rc = opahrs_msg_v0_send_req (req);
if (rc != OPAHRS_RESULT_OK) {
/* Failed to send the request, bail out */
return rc;
}
return opahrs_msg_v0_recv_rsp (OPAHRS_MSG_V0_RSP_FWUP_STATUS, rsp);
enum opahrs_result PIOS_OPAHRS_bl_FwupStatus(struct opahrs_msg_v0 * rsp)
{
if (!rsp) return OPAHRS_RESULT_FAILED;
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_FWUP_STATUS,
rsp,
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
}
enum opahrs_result PIOS_OPAHRS_bl_FwupData(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp)
@ -258,7 +257,7 @@ enum opahrs_result PIOS_OPAHRS_bl_resync(void)
#ifdef PIOS_INCLUDE_FREERTOS
vTaskDelay(20 / portTICK_RATE_MS);
#else
PIOS_DELAY_WaitmS(20);
//PIOS_DELAY_WaitmS(1);
#endif
for (uint32_t i = 0; i < sizeof(req); i++) {
@ -277,7 +276,7 @@ enum opahrs_result PIOS_OPAHRS_bl_resync(void)
#ifdef PIOS_INCLUDE_FREERTOS
vTaskDelay(10 / portTICK_RATE_MS);
#else
PIOS_DELAY_WaitmS(10);
PIOS_DELAY_WaitmS(1);
#endif
}
@ -287,21 +286,24 @@ enum opahrs_result PIOS_OPAHRS_bl_resync(void)
return rc;
}
enum opahrs_result PIOS_OPAHRS_bl_reset()
enum opahrs_result PIOS_OPAHRS_bl_reset(uint32_t delay)
{
struct opahrs_msg_v0 rsp;
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_RESET,
&rsp,
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
struct opahrs_msg_v0 req;
/* Make up an attituderaw request */
opahrs_msg_v0_init_user_tx (&req, OPAHRS_MSG_V0_REQ_RESET);
req.payload.user.v.req.reset.reset_delay_in_ms=delay;
/* Send the message until it is received */
return opahrs_msg_v0_send_req (&req);
}
enum opahrs_result PIOS_OPAHRS_bl_boot()
enum opahrs_result PIOS_OPAHRS_bl_boot(uint32_t delay)
{
struct opahrs_msg_v0 rsp;
return (PIOS_OPAHRS_v0_simple_req (OPAHRS_MSG_V0_REQ_BOOT,
&rsp,
OPAHRS_MSG_V0_RSP_FWUP_STATUS));
struct opahrs_msg_v0 req;
/* Make up an attituderaw request */
opahrs_msg_v0_init_user_tx (&req, OPAHRS_MSG_V0_REQ_BOOT);
req.payload.user.v.req.boot.boot_delay_in_ms=delay;
/* Send the message until it is received */
return opahrs_msg_v0_send_req (&req);
}
#endif /* PIOS_INCLUDE_OPAHRS */

View File

@ -46,13 +46,14 @@ extern void PIOS_OPAHRS_Init(void);
extern enum opahrs_result PIOS_OPAHRS_bl_GetVersions(struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_GetSerial(struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_FwupStart(struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_FwupStatus(struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_FwupData(struct opahrs_msg_v0 * req, struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_FwupVerify(struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_resync(void);
extern enum opahrs_result PIOS_OPAHRS_bl_GetMemMap(struct opahrs_msg_v0 * rsp);
extern enum opahrs_result PIOS_OPAHRS_bl_reset();
extern enum opahrs_result PIOS_OPAHRS_bl_boot();
extern enum opahrs_result PIOS_OPAHRS_bl_reset(uint32_t delay);
extern enum opahrs_result PIOS_OPAHRS_bl_boot(uint32_t delay);
/*
* Protocol V1 messages used by application
*/

View File

@ -84,9 +84,13 @@ struct opahrs_msg_v0_req_serial {
struct opahrs_msg_v0_req_fwup_start {
} __attribute__((__packed__));
struct opahrs_msg_v0_req_fwup_status {
} __attribute__((__packed__));
struct opahrs_msg_v0_req_fwup_data {
uint32_t adress;
uint32_t data;
uint32_t data[14];
uint8_t size;
} __attribute__((__packed__));
struct opahrs_msg_v0_req_mem_map {
@ -102,6 +106,7 @@ union opahrs_msg_v0_req {
struct opahrs_msg_v0_req_reset reset;
struct opahrs_msg_v0_req_boot boot;
struct opahrs_msg_v0_req_serial serial;
struct opahrs_msg_v0_req_fwup_status status_req;
struct opahrs_msg_v0_req_mem_map mem_map;
struct opahrs_msg_v0_req_fwup_start fwup_start;
struct opahrs_msg_v0_req_fwup_data fwup_data;
@ -112,7 +117,7 @@ struct opahrs_msg_v0_rsp_versions {
uint8_t hw_version;
uint16_t bl_version;
uint32_t fw_version;
uint8_t description[100];
uint8_t description[100];
} __attribute__((__packed__));
struct opahrs_msg_v0_rsp_serial {
@ -152,6 +157,7 @@ enum opahrs_msg_v0_tag {
OPAHRS_MSG_V0_REQ_FWUP_START,
OPAHRS_MSG_V0_REQ_FWUP_DATA,
OPAHRS_MSG_V0_REQ_FWUP_VERIFY,
OPAHRS_MSG_V0_REQ_FWUP_STATUS,
OPAHRS_MSG_V0_RSP_VERSIONS,
OPAHRS_MSG_V0_RSP_SERIAL,