mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
OP-21/Bootloader - Maximize flash space available for user code. Bring back delay on HID send (board->pc) it still hangs when blasted with data. AHRS is now Readable.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2263 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
5748fe0e90
commit
14ef24a3de
@ -161,9 +161,7 @@ void process_spi_request(void) {
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_VERSIONS);
|
||||
user_tx_v0.payload.user.v.rsp.versions.bl_version = BOOTLOADER_VERSION;
|
||||
user_tx_v0.payload.user.v.rsp.versions.hw_version = HW_VERSION;
|
||||
user_tx_v0.payload.user.v.rsp.versions.fw_version = Fw_crc;
|
||||
read_description(
|
||||
(uint8_t *) &(user_tx_v0.payload.user.v.rsp.versions.description));
|
||||
user_tx_v0.payload.user.v.rsp.versions.fw_crc = Fw_crc;
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_MEM_MAP:
|
||||
@ -213,6 +211,15 @@ void process_spi_request(void) {
|
||||
user_tx_v0.payload.user.v.rsp.fwup_status.status = boot_status;
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_FWDN_DATA:
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_FWDN_DATA);
|
||||
uint32_t adr=user_rx_v0.payload.user.v.req.fwdn_data.adress;
|
||||
for(uint8_t x=0;x<4;++x)
|
||||
{
|
||||
user_tx_v0.payload.user.v.rsp.fw_dn.data[x]=*FLASH_If_Read(adr+x);
|
||||
}
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_FWUP_START:
|
||||
FLASH_Unlock();
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_FWUP_STATUS);
|
||||
|
@ -55,6 +55,7 @@ uint32_t baseOfAdressType(uint8_t type);
|
||||
uint8_t isBiggerThanAvailable(uint8_t type, uint32_t size);
|
||||
void OPDfuIni(uint8_t discover);
|
||||
void DataDownload(DownloadAction);
|
||||
bool flash_read(uint8_t * buffer, uint32_t adr, DFUProgType type);
|
||||
#endif /* __OP_DFU_H */
|
||||
|
||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
||||
|
@ -66,7 +66,6 @@ uint8_t Data2;
|
||||
uint8_t Data3;
|
||||
uint8_t offset = 0;
|
||||
uint32_t aux;
|
||||
uint8_t spi_dev_desc[200] = { 0 };
|
||||
//Download vars
|
||||
uint32_t downSizeOfLastPacket = 0;
|
||||
uint32_t downPacketTotal = 0;
|
||||
@ -102,6 +101,11 @@ void DataDownload(DownloadAction action) {
|
||||
for (uint8_t x = 0; x < packetSize; ++x) {
|
||||
partoffset = (downPacketCurrent * 14 * 4) + (x * 4);
|
||||
offset = baseOfAdressType(downType) + partoffset;
|
||||
if(!flash_read(SendBuffer+(6+x*4),offset,currentProgrammingDestination))
|
||||
{
|
||||
DeviceState = Last_operation_failed;
|
||||
}
|
||||
/*
|
||||
switch (currentProgrammingDestination) {
|
||||
case Remote_flash_via_spi:
|
||||
if (downType == Descript) {
|
||||
@ -122,7 +126,7 @@ void DataDownload(DownloadAction action) {
|
||||
SendBuffer[9 + (x * 4)] = *FLASH_If_Read(offset + 3);
|
||||
break;
|
||||
}
|
||||
|
||||
*/
|
||||
}
|
||||
//PIOS USB_SIL_Write(EP1_IN, (uint8_t*) SendBuffer, 64);
|
||||
downPacketCurrent = downPacketCurrent + 1;
|
||||
@ -495,13 +499,8 @@ void OPDfuIni(uint8_t discover) {
|
||||
if (PIOS_OPAHRS_bl_GetVersions(&rsp) == OPAHRS_RESULT_OK) {
|
||||
dev.programmingType = Remote_flash_via_spi;
|
||||
dev.BL_Version = rsp.payload.user.v.rsp.versions.bl_version;
|
||||
dev.FW_Crc = rsp.payload.user.v.rsp.versions.fw_version;
|
||||
dev.FW_Crc = rsp.payload.user.v.rsp.versions.fw_crc;
|
||||
dev.devID = rsp.payload.user.v.rsp.versions.hw_version;
|
||||
for (int x = 0; x < 200; ++x) {
|
||||
spi_dev_desc[x]
|
||||
= (uint8_t) rsp.payload.user.v.rsp.versions.description[x];
|
||||
|
||||
}
|
||||
if (PIOS_OPAHRS_bl_GetMemMap(&rsp) == OPAHRS_RESULT_OK) {
|
||||
dev.readWriteFlags
|
||||
= rsp.payload.user.v.rsp.mem_map.rw_flags;
|
||||
@ -558,7 +557,7 @@ uint32_t CalcFirmCRC() {
|
||||
PIOS_DELAY_WaitmS(1000);
|
||||
PIOS_OPAHRS_bl_resync();
|
||||
if (PIOS_OPAHRS_bl_GetVersions(&rsp) == OPAHRS_RESULT_OK) {
|
||||
return rsp.payload.user.v.rsp.versions.fw_version;
|
||||
return rsp.payload.user.v.rsp.versions.fw_crc;
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,8 +573,36 @@ void sendData(uint8_t * buf,uint16_t size)
|
||||
{
|
||||
if (ProgPort == Usb) {
|
||||
|
||||
PIOS_COM_SendBuffer(PIOS_COM_TELEM_USB, buf, size);//FIX+1
|
||||
PIOS_COM_SendBuffer(PIOS_COM_TELEM_USB, buf, size);
|
||||
if(DeviceState == downloading)
|
||||
PIOS_DELAY_WaitmS(10);
|
||||
|
||||
} else if (ProgPort == Serial) {
|
||||
ssp_SendData(&ssp_port, buf, size);
|
||||
}
|
||||
}
|
||||
|
||||
bool flash_read(uint8_t * buffer, uint32_t adr, DFUProgType type) {
|
||||
struct opahrs_msg_v0 rsp;
|
||||
struct opahrs_msg_v0 req;
|
||||
switch (type) {
|
||||
case Remote_flash_via_spi:
|
||||
req.payload.user.v.req.fwdn_data.adress = adr;
|
||||
if (PIOS_OPAHRS_bl_FwDlData(&req, &rsp) == OPAHRS_RESULT_OK) {
|
||||
for (uint8_t x = 0; x < 4; ++x) {
|
||||
buffer[x] = rsp.payload.user.v.rsp.fw_dn.data[x];
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
break;
|
||||
case Self_flash:
|
||||
for (uint8_t x = 0; x < 4; ++x) {
|
||||
buffer[x] = *FLASH_If_Read(adr + x);
|
||||
}
|
||||
return TRUE;
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ TIM8 | | | |
|
||||
#elif STM32F10X_MD
|
||||
#define HW_TYPE 1 //0=high_density 1=medium_density;
|
||||
#endif
|
||||
#define BOARD_READABLE FALSE
|
||||
#define BOARD_READABLE TRUE
|
||||
#define BOARD_WRITABLA TRUE
|
||||
#define MAX_DEL_RETRYS 3
|
||||
|
||||
|
@ -74,8 +74,9 @@ TIM8 | Servo 5 | Servo 6 | Servo 7 | Servo 8
|
||||
#define BOOTLOADER_VERSION 0
|
||||
#define MEM_SIZE 524288 //512K
|
||||
#define SIZE_OF_DESCRIPTION (uint8_t) 100
|
||||
#define START_OF_USER_CODE (uint32_t)0x08005000//REMEMBER SET ALSO IN link_stm32f10x_HD_BL.ld
|
||||
#define SIZE_OF_CODE (uint32_t) (MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION)
|
||||
#define START_OF_USER_CODE (uint32_t)0x08007800//FF00
|
||||
|
||||
#ifdef STM32F10X_HD
|
||||
#define HW_TYPE 0 //0=high_density 1=medium_density;
|
||||
#elif STM32F10X_MD
|
||||
|
@ -230,6 +230,24 @@ enum opahrs_result PIOS_OPAHRS_bl_FwupData(struct opahrs_msg_v0 *req, struct opa
|
||||
return opahrs_msg_v0_recv_rsp(OPAHRS_MSG_V0_RSP_FWUP_STATUS, rsp);
|
||||
}
|
||||
|
||||
enum opahrs_result PIOS_OPAHRS_bl_FwDlData(struct opahrs_msg_v0 *req, struct opahrs_msg_v0 *rsp)
|
||||
{
|
||||
if (!req || !rsp)
|
||||
return OPAHRS_RESULT_FAILED;
|
||||
|
||||
/* Make up an attituderaw request */
|
||||
opahrs_msg_v0_init_user_tx(req, OPAHRS_MSG_V0_REQ_FWDN_DATA);
|
||||
enum opahrs_result rc;
|
||||
/* 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_FWDN_DATA, rsp);
|
||||
}
|
||||
|
||||
enum opahrs_result PIOS_OPAHRS_bl_FwupVerify(struct opahrs_msg_v0 *rsp)
|
||||
{
|
||||
if (!rsp)
|
||||
|
@ -28,7 +28,7 @@
|
||||
MEMORY
|
||||
{
|
||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
|
||||
FLASH (rx) : ORIGIN = 0x08007800, LENGTH = 482K
|
||||
FLASH (rx) : ORIGIN = 0x08005000, LENGTH = 492K
|
||||
FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
|
||||
EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0
|
||||
EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
|
||||
|
@ -54,6 +54,7 @@ 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(uint32_t delay);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_boot(uint32_t delay);
|
||||
extern enum opahrs_result PIOS_OPAHRS_bl_FwDlData(struct opahrs_msg_v0 *req, struct opahrs_msg_v0 *rsp);
|
||||
/*
|
||||
* Protocol V1 messages used by application
|
||||
*/
|
||||
|
@ -93,6 +93,10 @@ struct opahrs_msg_v0_req_fwup_data {
|
||||
uint8_t size;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_req_fwdn_data {
|
||||
uint32_t adress;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_req_mem_map {
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
@ -106,17 +110,21 @@ union opahrs_msg_v0_req {
|
||||
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_fwdn_data fwdn_data;
|
||||
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;
|
||||
struct opahrs_msg_v0_req_fwup_verify fwup_verify;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_rsp_fwdn_data {
|
||||
uint8_t data[4];
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_rsp_versions {
|
||||
uint8_t hw_version;
|
||||
uint16_t bl_version;
|
||||
uint32_t fw_version;
|
||||
uint8_t description[100];
|
||||
uint32_t fw_crc;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct opahrs_msg_v0_rsp_serial {
|
||||
@ -142,6 +150,7 @@ union opahrs_msg_v0_rsp {
|
||||
struct opahrs_msg_v0_rsp_serial serial;
|
||||
struct opahrs_msg_v0_rsp_fwup_status fwup_status;
|
||||
struct opahrs_msg_v0_rsp_mem_map mem_map;
|
||||
struct opahrs_msg_v0_rsp_fwdn_data fw_dn;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
enum opahrs_msg_v0_tag {
|
||||
@ -150,7 +159,7 @@ enum opahrs_msg_v0_tag {
|
||||
OPAHRS_MSG_V0_REQ_RESET,
|
||||
OPAHRS_MSG_V0_REQ_BOOT,
|
||||
OPAHRS_MSG_V0_REQ_SERIAL,
|
||||
|
||||
OPAHRS_MSG_V0_REQ_FWDN_DATA,
|
||||
OPAHRS_MSG_V0_REQ_MEM_MAP,
|
||||
|
||||
OPAHRS_MSG_V0_REQ_FWUP_START,
|
||||
@ -161,7 +170,7 @@ enum opahrs_msg_v0_tag {
|
||||
OPAHRS_MSG_V0_RSP_VERSIONS,
|
||||
OPAHRS_MSG_V0_RSP_SERIAL,
|
||||
OPAHRS_MSG_V0_RSP_FWUP_STATUS,
|
||||
|
||||
OPAHRS_MSG_V0_RSP_FWDN_DATA,
|
||||
OPAHRS_MSG_V0_RSP_MEM_MAP,
|
||||
};
|
||||
|
||||
@ -263,7 +272,7 @@ union opahrs_msg_v1_req {
|
||||
struct opahrs_msg_v1_rsp_versions {
|
||||
uint8_t hw_version;
|
||||
uint16_t bl_version;
|
||||
uint32_t fw_version;
|
||||
uint32_t fw_crc;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct opahrs_msg_v1_rsp_serial {
|
||||
|
@ -249,7 +249,7 @@ bool OP_DFU::UploadData(qint32 const & numberOfBytes, QByteArray & data)
|
||||
// }
|
||||
// qDebug()<<" Data0="<<(int)data[0]<<" Data0="<<(int)data[1]<<" Data0="<<(int)data[2]<<" Data0="<<(int)data[3]<<" buf6="<<(int)buf[6]<<" buf7="<<(int)buf[7]<<" buf8="<<(int)buf[8]<<" buf9="<<(int)buf[9];
|
||||
//delay::msleep(send_delay);
|
||||
if(int ret=StatusRequest()!=OP_DFU::uploading) return false;
|
||||
// if(int ret=StatusRequest()!=OP_DFU::uploading) return false;
|
||||
int result = sendData(buf, BUF_LEN);
|
||||
// qDebug()<<"sent:"<<result;
|
||||
if(result<1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user