mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-18 08:54:15 +01:00
OP-21/Flight Bootloader - Various fixes.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1678 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
35c36da060
commit
97b44ffb04
@ -56,6 +56,12 @@ int main() {
|
||||
uint8_t GO_dfu = false;
|
||||
/* Brings up System using CMSIS functions, enables the LEDs. */
|
||||
PIOS_SYS_Init();
|
||||
/* Enable Prefetch Buffer */
|
||||
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
|
||||
|
||||
/* Flash 2 wait state */
|
||||
FLASH_SetLatency(FLASH_Latency_2);
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
|
||||
/* Delay system */
|
||||
PIOS_DELAY_Init();
|
||||
for (uint32_t t = 0; t < 20000000; ++t) {
|
||||
@ -66,6 +72,7 @@ int main() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
GO_dfu=TRUE;
|
||||
GO_dfu = GO_dfu;// OR with app boot request
|
||||
if (GO_dfu == FALSE) {
|
||||
jump_to_app();
|
||||
@ -119,12 +126,14 @@ void process_spi_request(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
switch (user_rx_v0.payload.user.t) {
|
||||
|
||||
case OPAHRS_MSG_V0_REQ_FWUP_VERIFY:
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_FWUP_STATUS);
|
||||
Fw_crc = crc_memory_calc();
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
//boot_status=idle;
|
||||
user_tx_v0.payload.user.v.rsp.fwup_status.status = boot_status;
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_RESET:
|
||||
@ -132,7 +141,7 @@ void process_spi_request(void) {
|
||||
PIOS_SYS_Reset();
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_VERSIONS:
|
||||
PIOS_LED_Toggle(LED1);
|
||||
//PIOS_LED_Toggle(LED1);
|
||||
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;
|
||||
@ -162,8 +171,14 @@ void process_spi_request(void) {
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
//PIOS_LED_Toggle(LED1);
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_FWUP_STATUS:
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_FWUP_STATUS);
|
||||
user_tx_v0.payload.user.v.rsp.fwup_status.status=boot_status;
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
PIOS_LED_Toggle(LED1);
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_FWUP_DATA:
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_REQ_FWUP_DATA);
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_FWUP_STATUS);
|
||||
if (!(user_rx_v0.payload.user.v.req.fwup_data.adress
|
||||
< START_OF_USER_CODE)) {
|
||||
if (FLASH_ProgramWord(
|
||||
@ -180,16 +195,20 @@ void process_spi_request(void) {
|
||||
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);
|
||||
user_tx_v0.payload.user.v.rsp.fwup_status.status = boot_status;
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
PIOS_LED_On(LED1);
|
||||
if (FLASH_Start() == TRUE) {
|
||||
boot_status = started;
|
||||
PIOS_LED_Off(LED1);
|
||||
} else {
|
||||
boot_status = start_failed;
|
||||
break;
|
||||
}
|
||||
|
||||
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_BOOT:
|
||||
PIOS_DELAY_WaitmS(user_rx_v0.payload.user.v.req.boot.boot_delay_in_ms);
|
||||
@ -203,6 +222,7 @@ void process_spi_request(void) {
|
||||
/* Finished processing the received message, requeue it */
|
||||
lfsm_user_set_rx_v0(&user_rx_v0);
|
||||
lfsm_user_done();
|
||||
return;
|
||||
}
|
||||
void jump_to_app() {
|
||||
if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
#include <pios_spi_priv.h>
|
||||
|
||||
|
||||
/* OP Interface
|
||||
*
|
||||
* NOTE: Leave this declared as const data so that it ends up in the
|
||||
|
@ -93,6 +93,7 @@ PIOS = ../../PiOS
|
||||
PIOSINC = $(PIOS)/inc
|
||||
PIOSSTM32F10X = $(PIOS)/STM32F10x
|
||||
PIOSCOMMON = $(PIOS)/Common
|
||||
PIOSBOARDS = $(PIOS)/Boards
|
||||
APPLIBDIR = $(PIOSSTM32F10X)/Libraries
|
||||
STMLIBDIR = $(APPLIBDIR)
|
||||
STMSPDDIR = $(STMLIBDIR)/STM32F10x_StdPeriph_Driver
|
||||
@ -137,7 +138,7 @@ SRC += $(PIOSSTM32F10X)/pios_spi.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_debug.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_gpio.c
|
||||
#SRC += $(PIOSSTM32F10X)/pios_exti.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_wdg.c
|
||||
#SRC += $(PIOSSTM32F10X)/pios_wdg.c
|
||||
|
||||
|
||||
# PIOS USB related files (seperated to make code maintenance more easy)
|
||||
@ -151,7 +152,7 @@ SRC += $(PIOSSTM32F10X)/pios_usb_hid_pwr.c
|
||||
## PIOS Hardware (Common)
|
||||
#SRC += $(PIOSCOMMON)/pios_sdcard.c
|
||||
SRC += $(PIOSCOMMON)/pios_com.c
|
||||
SRC += $(PIOSCOMMON)/pios_bmp085.c
|
||||
#SRC += $(PIOSCOMMON)/pios_bmp085.c
|
||||
SRC += $(PIOSCOMMON)/pios_opahrs_v0.c
|
||||
SRC += $(PIOSCOMMON)/pios_bl_helper.c
|
||||
|
||||
@ -160,23 +161,21 @@ SRC += $(PIOSCOMMON)/printf-stdarg.c
|
||||
|
||||
## Libraries for flight calculations
|
||||
SRC += $(FLIGHTLIB)/buffer.c
|
||||
#SRC += $(FLIGHTLIB)/WorldMagModel.c
|
||||
#SRC += $(FLIGHTLIB)/CoordinateConversions.c
|
||||
|
||||
## CMSIS for STM32
|
||||
SRC += $(CMSISDIR)/core_cm3.c
|
||||
SRC += $(CMSISDIR)/system_stm32f10x.c
|
||||
|
||||
## Used parts of the STM-Library
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_adc.c
|
||||
#SRC += $(STMSPDSRCDIR)/stm32f10x_adc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_bkp.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_crc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_dac.c
|
||||
#SRC += $(STMSPDSRCDIR)/stm32f10x_dac.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_dma.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_exti.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_flash.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_gpio.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_i2c.c
|
||||
#SRC += $(STMSPDSRCDIR)/stm32f10x_i2c.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_pwr.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rcc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rtc.c
|
||||
@ -195,27 +194,6 @@ SRC += $(STMUSBSRCDIR)/usb_mem.c
|
||||
SRC += $(STMUSBSRCDIR)/usb_regs.c
|
||||
SRC += $(STMUSBSRCDIR)/usb_sil.c
|
||||
|
||||
## RTOS
|
||||
#SRC += $(RTOSSRCDIR)/list.c
|
||||
#SRC += $(RTOSSRCDIR)/queue.c
|
||||
#SRC += $(RTOSSRCDIR)/tasks.c
|
||||
|
||||
## RTOS Portable
|
||||
#SRC += $(RTOSSRCDIR)/portable/GCC/ARM_CM3/port.c
|
||||
#SRC += $(RTOSSRCDIR)/portable/MemMang/heap_2.c
|
||||
|
||||
## Dosfs file system
|
||||
#SRC += $(DOSFSDIR)/dosfs.c
|
||||
#SRC += $(DOSFSDIR)/dfs_sdcard.c
|
||||
|
||||
## Mass Storage Device
|
||||
#SRC += $(MSDDIR)/msd.c
|
||||
#SRC += $(MSDDIR)/msd_bot.c
|
||||
#SRC += $(MSDDIR)/msd_desc.c
|
||||
#SRC += $(MSDDIR)/msd_memory.c
|
||||
#SRC += $(MSDDIR)/msd_scsi.c
|
||||
#SRC += $(MSDDIR)/msd_scsi_data.c
|
||||
|
||||
# List C source files here which must be compiled in ARM-Mode (no -mthumb).
|
||||
# use file-extension c for "c-only"-files
|
||||
## just for testing, timer.c could be compiled in thumb-mode too
|
||||
@ -255,6 +233,7 @@ EXTRAINCDIRS += $(PIOSINC)
|
||||
EXTRAINCDIRS += $(FLIGHTLIBINC)
|
||||
EXTRAINCDIRS += $(PIOSSTM32F10X)
|
||||
EXTRAINCDIRS += $(PIOSCOMMON)
|
||||
EXTRAINCDIRS += $(PIOSBOARDS)
|
||||
EXTRAINCDIRS += $(STMSPDINCDIR)
|
||||
EXTRAINCDIRS += $(STMUSBINCDIR)
|
||||
EXTRAINCDIRS += $(CMSISDIR)
|
||||
@ -403,9 +382,9 @@ OOCD_CL=-d0
|
||||
# interface and board/target settings (using the OOCD target-library here)
|
||||
UNAME := $(shell uname)
|
||||
ifeq ($(UNAME), Darwin)
|
||||
OOCD_CL+=-f ../Project/OpenOCD/floss-jtag.openpilot.osx.cfg -f ../Project/OpenOCD/stm32.cfg
|
||||
OOCD_CL+=-f ../../Project/OpenOCD/floss-jtag.openpilot.osx.cfg -f ../../Project/OpenOCD/stm32.cfg
|
||||
else
|
||||
OOCD_CL+=-f ../Project/OpenOCD/floss-jtag.openpilot.cfg -f ../Project/OpenOCD/stm32.cfg
|
||||
OOCD_CL+=-f ../../Project/OpenOCD/floss-jtag.openpilot.cfg -f ../../Project/OpenOCD/stm32.cfg
|
||||
endif
|
||||
# initialize
|
||||
OOCD_CL+=-c init
|
||||
|
@ -30,8 +30,8 @@ typedef enum {
|
||||
Last_operation_failed, //8
|
||||
uploadingStarting, //9
|
||||
outsideDevCapabilities, //10
|
||||
CRC_Fail,
|
||||
failed_jump,
|
||||
CRC_Fail,//11
|
||||
failed_jump,//12
|
||||
} DFUStates;
|
||||
/**************************************************/
|
||||
/* OP_DFU commands */
|
||||
|
@ -53,7 +53,7 @@
|
||||
#define PIOS_INCLUDE_OPAHRS
|
||||
#define PIOS_INCLUDE_COM
|
||||
//#define PIOS_INCLUDE_SDCARD
|
||||
#define PIOS_INCLUDE_SETTINGS
|
||||
//#define PIOS_INCLUDE_SETTINGS
|
||||
//#define PIOS_INCLUDE_FREERTOS
|
||||
#define PIOS_INCLUDE_GPIO
|
||||
//#define PIOS_INCLUDE_EXTI
|
||||
|
@ -60,10 +60,10 @@ uint32_t sweep_steps2 = 100; // * 5 mS -> 500 mS
|
||||
/* Extern variables ----------------------------------------------------------*/
|
||||
DFUStates DeviceState;
|
||||
uint8_t JumpToApp = FALSE;
|
||||
uint8_t GO_dfu = false;
|
||||
uint8_t USB_connected = false;
|
||||
uint8_t User_DFU_request = false;
|
||||
uint8_t Receive_Buffer[64];
|
||||
uint8_t GO_dfu = FALSE;
|
||||
uint8_t USB_connected = FALSE;
|
||||
uint8_t User_DFU_request = FALSE;
|
||||
static uint8_t mReceive_Buffer[64];
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
uint32_t LedPWM(uint32_t pwm_period, uint32_t pwm_sweep_steps, uint32_t count);
|
||||
uint8_t processRX();
|
||||
@ -81,7 +81,7 @@ int main() {
|
||||
if (BSL_HOLD_STATE == 0)
|
||||
USB_connected = TRUE;
|
||||
|
||||
GO_dfu = USB_connected | User_DFU_request;
|
||||
GO_dfu = USB_connected || User_DFU_request;
|
||||
if (GO_dfu == TRUE) {
|
||||
PIOS_Board_Init();
|
||||
PIOS_OPAHRS_Init();
|
||||
@ -89,14 +89,14 @@ int main() {
|
||||
STOPWATCH_Init(100);
|
||||
USB_connected = TRUE;
|
||||
PIOS_SPI_RC_PinSet(PIOS_OPAHRS_SPI, 0);
|
||||
OPDfuIni(false);
|
||||
//OPDfuIni(false);
|
||||
|
||||
} else
|
||||
JumpToApp = TRUE;
|
||||
|
||||
STOPWATCH_Reset();
|
||||
|
||||
while (TRUE) {
|
||||
|
||||
if (JumpToApp == TRUE)
|
||||
jump_to_app();
|
||||
//pwm_period = 50; // *100 uS -> 5 mS
|
||||
@ -193,17 +193,13 @@ uint32_t LedPWM(uint32_t pwm_period, uint32_t pwm_sweep_steps, uint32_t count) {
|
||||
}
|
||||
|
||||
uint8_t processRX() {
|
||||
uint32_t n = 0;
|
||||
|
||||
n = PIOS_COM_ReceiveBufferUsed(PIOS_COM_TELEM_USB);
|
||||
if (n != 0) {
|
||||
n = (n > 63) ? 63 : n;
|
||||
|
||||
for (int32_t x = 0; x < n; ++x) {
|
||||
Receive_Buffer[x] = PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB);
|
||||
while(PIOS_COM_ReceiveBufferUsed(PIOS_COM_TELEM_USB)>=63)
|
||||
{
|
||||
for (int32_t x = 0; x < 63; ++x) {
|
||||
mReceive_Buffer[x] = PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB);
|
||||
}
|
||||
processComand(Receive_Buffer);
|
||||
return TRUE;
|
||||
//PIOS_IRQ_Enable();
|
||||
processComand(mReceive_Buffer);
|
||||
}
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ uint8_t Data2;
|
||||
uint8_t Data3;
|
||||
uint8_t offset = 0;
|
||||
uint32_t aux;
|
||||
uint8_t spi_dev_desc[200];
|
||||
uint8_t spi_dev_desc[200]={0};
|
||||
//Download vars
|
||||
uint32_t downSizeOfLastPacket = 0;
|
||||
uint32_t downPacketTotal = 0;
|
||||
@ -81,6 +81,7 @@ void DataDownload(DownloadAction action) {
|
||||
|
||||
uint8_t packetSize;
|
||||
uint32_t offset;
|
||||
uint32_t partoffset;
|
||||
SendBuffer[0] = 0x01;
|
||||
SendBuffer[1] = Download;
|
||||
SendBuffer[2] = downPacketCurrent >> 24;
|
||||
@ -93,23 +94,23 @@ void DataDownload(DownloadAction action) {
|
||||
packetSize = 14;
|
||||
}
|
||||
for (uint8_t x = 0; x < packetSize; ++x) {
|
||||
offset = baseOfAdressType(downType) + (downPacketCurrent * 14 * 4)
|
||||
+ (x * 4);
|
||||
partoffset = (downPacketCurrent * 14 * 4) + (x * 4);
|
||||
offset = baseOfAdressType(downType) + partoffset;
|
||||
switch (currentProgrammingDestination) {
|
||||
case Self_flash:
|
||||
SendBuffer[6 + (x * 4)] = spi_dev_desc[offset];
|
||||
SendBuffer[7 + (x * 4)] = spi_dev_desc[offset + 1];
|
||||
SendBuffer[8 + (x * 4)] = spi_dev_desc[offset + 2];
|
||||
SendBuffer[9 + (x * 4)] = spi_dev_desc[offset + 3];
|
||||
break;
|
||||
case Remote_flash_via_spi:
|
||||
if (downType == Descript) {
|
||||
SendBuffer[6 + (x * 4)] = *FLASH_If_Read(offset);
|
||||
SendBuffer[7 + (x * 4)] = *FLASH_If_Read(offset + 1);
|
||||
SendBuffer[8 + (x * 4)] = *FLASH_If_Read(offset + 2);
|
||||
SendBuffer[9 + (x * 4)] = *FLASH_If_Read(offset + 3);
|
||||
break;
|
||||
SendBuffer[6 + (x * 4)] = spi_dev_desc[(uint8_t)partoffset];
|
||||
SendBuffer[7 + (x * 4)] = spi_dev_desc[(uint8_t)partoffset + 1];
|
||||
SendBuffer[8 + (x * 4)] = spi_dev_desc[(uint8_t)partoffset + 2];
|
||||
SendBuffer[9 + (x * 4)] = spi_dev_desc[(uint8_t)partoffset + 3];
|
||||
}
|
||||
break;
|
||||
case Self_flash:
|
||||
SendBuffer[6 + (x * 4)] = *FLASH_If_Read(offset);
|
||||
SendBuffer[7 + (x * 4)] = *FLASH_If_Read(offset + 1);
|
||||
SendBuffer[8 + (x * 4)] = *FLASH_If_Read(offset + 2);
|
||||
SendBuffer[9 + (x * 4)] = *FLASH_If_Read(offset + 3);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
@ -125,24 +126,25 @@ void DataDownload(DownloadAction action) {
|
||||
}
|
||||
}
|
||||
|
||||
void processComand(uint8_t *Receive_Buffer) {
|
||||
void processComand(uint8_t *xReceive_Buffer) {
|
||||
|
||||
Command = Receive_Buffer[COMMAND];
|
||||
Command = xReceive_Buffer[COMMAND];
|
||||
EchoReqFlag = (Command >> 7);
|
||||
EchoAnsFlag = (Command >> 6) & 0x01;
|
||||
StartFlag = (Command >> 5) & 0x01;
|
||||
Count = Receive_Buffer[COUNT] << 24;
|
||||
Count += Receive_Buffer[COUNT + 1] << 16;
|
||||
Count += Receive_Buffer[COUNT + 2] << 8;
|
||||
Count += Receive_Buffer[COUNT + 3];
|
||||
Data = Receive_Buffer[DATA] << 24;
|
||||
Data += Receive_Buffer[DATA + 1] << 16;
|
||||
Data += Receive_Buffer[DATA + 2] << 8;
|
||||
Data += Receive_Buffer[DATA + 3];
|
||||
Data0 = Receive_Buffer[DATA];
|
||||
Data1 = Receive_Buffer[DATA + 1];
|
||||
Data2 = Receive_Buffer[DATA + 2];
|
||||
Data3 = Receive_Buffer[DATA + 3];
|
||||
Count = xReceive_Buffer[COUNT] << 24;
|
||||
Count += xReceive_Buffer[COUNT + 1] << 16;
|
||||
Count += xReceive_Buffer[COUNT + 2] << 8;
|
||||
Count += xReceive_Buffer[COUNT + 3];
|
||||
|
||||
Data = xReceive_Buffer[DATA] << 24;
|
||||
Data += xReceive_Buffer[DATA + 1] << 16;
|
||||
Data += xReceive_Buffer[DATA + 2] << 8;
|
||||
Data += xReceive_Buffer[DATA + 3];
|
||||
Data0 = xReceive_Buffer[DATA];
|
||||
Data1 = xReceive_Buffer[DATA + 1];
|
||||
Data2 = xReceive_Buffer[DATA + 2];
|
||||
Data3 = xReceive_Buffer[DATA + 3];
|
||||
Command = Command & 0b00011111;
|
||||
|
||||
if (EchoReqFlag == 1) {
|
||||
@ -152,7 +154,7 @@ void processComand(uint8_t *Receive_Buffer) {
|
||||
case EnterDFU:
|
||||
if (((DeviceState == BLidle) && (Data0 < numberOfDevices))
|
||||
|| (DeviceState == DFUidle)) {
|
||||
if(Data0>0)
|
||||
if (Data0 > 0)
|
||||
OPDfuIni(TRUE);
|
||||
DeviceState = DFUidle;
|
||||
currentProgrammingDestination = devicesTable[Data0].programmingType;
|
||||
@ -166,7 +168,7 @@ void processComand(uint8_t *Receive_Buffer) {
|
||||
result = FLASH_Ini();
|
||||
break;
|
||||
case Remote_flash_via_spi:
|
||||
//TODO result=SPI_FLASH();
|
||||
result = TRUE;
|
||||
break;
|
||||
default:
|
||||
DeviceState = Last_operation_failed;
|
||||
@ -176,9 +178,6 @@ void processComand(uint8_t *Receive_Buffer) {
|
||||
DeviceState = Last_operation_failed;
|
||||
Aditionals = (uint32_t) Command;
|
||||
}
|
||||
} else {
|
||||
DeviceState = outsideDevCapabilities;
|
||||
Aditionals = (uint32_t) Command;
|
||||
}
|
||||
break;
|
||||
case Upload:
|
||||
@ -189,8 +188,8 @@ void processComand(uint8_t *Receive_Buffer) {
|
||||
Next_Packet = 1;
|
||||
Expected_CRC = Data2 << 24;
|
||||
Expected_CRC += Data3 << 16;
|
||||
Expected_CRC += Receive_Buffer[DATA + 4] << 8;
|
||||
Expected_CRC += Receive_Buffer[DATA + 5];
|
||||
Expected_CRC += xReceive_Buffer[DATA + 4] << 8;
|
||||
Expected_CRC += xReceive_Buffer[DATA + 5];
|
||||
SizeOfLastPacket = Data1;
|
||||
|
||||
if (isBiggerThanAvailable(TransferType, (SizeOfTransfer - 1)
|
||||
@ -206,15 +205,23 @@ void processComand(uint8_t *Receive_Buffer) {
|
||||
result = FLASH_Start();
|
||||
break;
|
||||
case Remote_flash_via_spi:
|
||||
if (PIOS_OPAHRS_bl_FwupVerify(&rsp)
|
||||
== OPAHRS_RESULT_OK) {
|
||||
if (rsp.payload.user.v.rsp.fwup_status.status
|
||||
== started) {
|
||||
result = TRUE;
|
||||
} else
|
||||
result = FALSE;
|
||||
} else
|
||||
result = FALSE;
|
||||
PIOS_OPAHRS_bl_FwupStart(&rsp);
|
||||
result = FALSE;
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
PIOS_DELAY_WaitmS(1000);
|
||||
PIOS_OPAHRS_bl_resync();
|
||||
if (PIOS_OPAHRS_bl_FwupStatus(&rsp)
|
||||
== OPAHRS_RESULT_OK) {
|
||||
if (rsp.payload.user.v.rsp.fwup_status.status
|
||||
== started) {
|
||||
result = TRUE;
|
||||
break;
|
||||
} else {
|
||||
result = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@ -241,15 +248,15 @@ void processComand(uint8_t *Receive_Buffer) {
|
||||
}
|
||||
for (uint8_t x = 0; x < numberOfWords; ++x) {
|
||||
offset = 4 * x;
|
||||
Data = Receive_Buffer[DATA + offset] << 24;
|
||||
Data += Receive_Buffer[DATA + 1 + offset] << 16;
|
||||
Data += Receive_Buffer[DATA + 2 + offset] << 8;
|
||||
Data += Receive_Buffer[DATA + 3 + offset];
|
||||
Data = xReceive_Buffer[DATA + offset] << 24;
|
||||
Data += xReceive_Buffer[DATA + 1 + offset] << 16;
|
||||
Data += xReceive_Buffer[DATA + 2 + offset] << 8;
|
||||
Data += xReceive_Buffer[DATA + 3 + offset];
|
||||
aux = baseOfAdressType(TransferType) + (uint32_t)(Count
|
||||
* 14 * 4 + x * 4);
|
||||
uint8_t result = 0;
|
||||
struct opahrs_msg_v0 rsp;
|
||||
struct opahrs_msg_v0 req;
|
||||
struct opahrs_msg_v0 req;
|
||||
switch (currentProgrammingDestination) {
|
||||
case Self_flash:
|
||||
for (int retry = 0; retry < MAX_WRI_RETRYS; ++retry) {
|
||||
@ -372,9 +379,10 @@ void processComand(uint8_t *Receive_Buffer) {
|
||||
DeviceState = outsideDevCapabilities;
|
||||
Aditionals = (uint32_t) Command;
|
||||
|
||||
} else
|
||||
} else {
|
||||
downPacketCurrent = 0;
|
||||
DeviceState = downloading;
|
||||
DeviceState = downloading;
|
||||
}
|
||||
} else {
|
||||
DeviceState = Last_operation_failed;
|
||||
Aditionals = (uint32_t) Command;
|
||||
@ -441,7 +449,7 @@ void OPDfuIni(uint8_t discover) {
|
||||
dev.FW_Crc = 0;
|
||||
break;
|
||||
}
|
||||
PIOS_DELAY_WaitmS(500);
|
||||
PIOS_DELAY_WaitmS(50);
|
||||
}
|
||||
if (found_spi_device == TRUE) {
|
||||
struct opahrs_msg_v0 rsp;
|
||||
@ -450,9 +458,11 @@ void OPDfuIni(uint8_t discover) {
|
||||
dev.BL_Version = rsp.payload.user.v.rsp.versions.bl_version;
|
||||
dev.FW_Crc = rsp.payload.user.v.rsp.versions.fw_version;
|
||||
dev.devID = rsp.payload.user.v.rsp.versions.hw_version;
|
||||
memcpy(spi_dev_desc,
|
||||
rsp.payload.user.v.rsp.versions.description,
|
||||
sizeof(rsp.payload.user.v.rsp.versions.description));
|
||||
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;
|
||||
@ -503,11 +513,15 @@ uint32_t CalcFirmCRC() {
|
||||
return crc_memory_calc();
|
||||
break;
|
||||
case Remote_flash_via_spi:
|
||||
if (PIOS_OPAHRS_bl_FwupVerify(&rsp) == OPAHRS_RESULT_OK) {
|
||||
PIOS_OPAHRS_bl_FwupVerify(&rsp);
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
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 0;
|
||||
break;
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user