mirror of
https://github.com/rene-dev/stmbl.git
synced 2026-09-25 17:40:40 +08:00
Merge branch 'master' of github.com:rene-dev/stmbl
This commit is contained in:
+6
-6
@@ -137,12 +137,12 @@ void TIM8_UP_IRQHandler() {
|
||||
break;
|
||||
}
|
||||
|
||||
// if(status != HAL_OK){
|
||||
// tx_buf.header.flags.conf_addr = 1;
|
||||
// }
|
||||
// else{
|
||||
// tx_buf.header.flags.error = 0;
|
||||
// }
|
||||
if(status != HAL_OK){
|
||||
tx_buf.state = BOOTLOADER_STATE_NAK;
|
||||
}
|
||||
else{
|
||||
tx_buf.state = BOOTLOADER_STATE_OK;
|
||||
}
|
||||
|
||||
tx_buf.cmd = rx_buf.cmd;
|
||||
tx_buf.header.flags.counter = rx_buf.header.flags.counter;
|
||||
|
||||
+20
-11
@@ -74,6 +74,7 @@ struct hv_ctx_t {
|
||||
uint16_t timeout;
|
||||
uint8_t conf_addr;
|
||||
uint8_t frt_slot;
|
||||
uint8_t send_state;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
@@ -202,6 +203,7 @@ static void nrt_init(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
PIN(dac) = 1560;
|
||||
send_to_bootloader = 0;
|
||||
flash_state = SLAVE_IN_APP;
|
||||
ctx->send_state = 0;
|
||||
}
|
||||
|
||||
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
@@ -281,7 +283,7 @@ static void frt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst
|
||||
case ERASE_FLASH:
|
||||
if(ctx->from_hv.packet_from_hv.header.slave_addr == 255 && ctx->from_hv.packet_from_hv.header.len == (sizeof(packet_bootloader_t) - sizeof(stmbl_talk_header_t)) / 4) {
|
||||
// from f3 bootloader
|
||||
if(/*ctx->from_hv.packet_from_hv_bootloader.header.flags.error == 0 && */ ctx->from_hv.packet_from_hv_bootloader.cmd == BOOTLOADER_OPCODE_PAGEERASE) {
|
||||
if(ctx->from_hv.packet_from_hv_bootloader.state == BOOTLOADER_STATE_OK && ctx->from_hv.packet_from_hv_bootloader.cmd == BOOTLOADER_OPCODE_PAGEERASE) {
|
||||
ctx->timeout = 0;
|
||||
flash_state = SEND_APP;
|
||||
}
|
||||
@@ -293,12 +295,13 @@ static void frt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst
|
||||
case SEND_APP:
|
||||
if(ctx->from_hv.packet_from_hv.header.slave_addr == 255 && ctx->from_hv.packet_from_hv.header.len == (sizeof(packet_bootloader_t) - sizeof(stmbl_talk_header_t)) / 4) {
|
||||
// from f3 bootloader
|
||||
if(/*ctx->from_hv.packet_from_hv_bootloader.header.flags.error == 0 && */ ctx->from_hv.packet_from_hv_bootloader.cmd == BOOTLOADER_OPCODE_WRITE && ctx->from_hv.packet_from_hv_bootloader.addr == 0x08004000 + ctx->addr * 4 && ctx->from_hv.packet_from_hv_bootloader.value == ((uint32_t *)&(_binary_obj_hvf3_hvf3_bin_start))[ctx->addr]) {
|
||||
if(ctx->from_hv.packet_from_hv_bootloader.state == BOOTLOADER_STATE_OK && ctx->from_hv.packet_from_hv_bootloader.cmd == BOOTLOADER_OPCODE_WRITE && ctx->from_hv.packet_from_hv_bootloader.addr == 0x08004000 + ctx->addr * 4 && ctx->from_hv.packet_from_hv_bootloader.value == ((uint32_t *)&(_binary_obj_hvf3_hvf3_bin_start))[ctx->addr]) {
|
||||
ctx->timeout = 0;
|
||||
ctx->addr++;
|
||||
}
|
||||
if(ctx->addr > ((uint32_t) & (_binary_obj_hvf3_hvf3_bin_size)) / 4) {
|
||||
flash_state = CRC_CHECK;
|
||||
// flash_state = SEND_TO_APP;
|
||||
}
|
||||
} else {
|
||||
// wrong packet len or slave addr
|
||||
@@ -308,7 +311,7 @@ static void frt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst
|
||||
case CRC_CHECK:
|
||||
if(ctx->from_hv.packet_from_hv.header.slave_addr == 255 && ctx->from_hv.packet_from_hv.header.len == (sizeof(packet_bootloader_t) - sizeof(stmbl_talk_header_t)) / 4) {
|
||||
// from f3 bootloader
|
||||
if(/*ctx->from_hv.packet_from_hv_bootloader.header.flags.error == 0 && */ ctx->from_hv.packet_from_hv_bootloader.cmd == BOOTLOADER_OPCODE_CRCCHECK) {
|
||||
if(ctx->from_hv.packet_from_hv_bootloader.state == BOOTLOADER_STATE_OK && ctx->from_hv.packet_from_hv_bootloader.cmd == BOOTLOADER_OPCODE_CRCCHECK) {
|
||||
ctx->timeout = 0;
|
||||
flash_state = SEND_TO_APP;
|
||||
}
|
||||
@@ -442,7 +445,7 @@ static void frt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst
|
||||
|
||||
tx_size = sizeof(packet_bootloader_t);
|
||||
|
||||
if(ctx->timeout > 1000) {
|
||||
if(ctx->timeout > 10) {
|
||||
ctx->timeout = 0;
|
||||
flash_state = FLASH_FAILED;
|
||||
}
|
||||
@@ -455,7 +458,7 @@ static void frt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst
|
||||
|
||||
tx_size = sizeof(packet_bootloader_t);
|
||||
|
||||
if(ctx->timeout > 1000) {
|
||||
if(ctx->timeout > 2000) {
|
||||
ctx->timeout = 0;
|
||||
flash_state = FLASH_FAILED;
|
||||
}
|
||||
@@ -468,7 +471,7 @@ static void frt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst
|
||||
|
||||
tx_size = sizeof(packet_bootloader_t);
|
||||
|
||||
if(ctx->timeout > 1000) {
|
||||
if(ctx->timeout > 2000) {
|
||||
ctx->timeout = 0;
|
||||
flash_state = SLAVE_IN_APP;
|
||||
}
|
||||
@@ -481,6 +484,12 @@ static void frt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst
|
||||
break;
|
||||
}
|
||||
|
||||
if(ctx->send_state > 1){
|
||||
tx_size = 0;
|
||||
ctx->send_state = 0;
|
||||
}
|
||||
ctx->send_state++;
|
||||
|
||||
if(tx_size) {
|
||||
CRC_ResetDR();
|
||||
ctx->to_hv.packet_to_hv.header.crc = CRC_CalcBlockCRC((uint32_t *)&(ctx->to_hv.packet_to_hv.header.slave_addr), tx_size / 4 - 1);
|
||||
@@ -521,6 +530,11 @@ static void nrt_func(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
static flash_state_t last_flash_state = SLAVE_IN_APP;
|
||||
static uint32_t last_addr = 0;
|
||||
|
||||
if(ctx->addr >= last_addr + 1024) {
|
||||
printf("hv_update: status: %i%%\n", (int)(100.0 * ctx->addr * 4. / (float)((uint32_t) & (_binary_obj_hvf3_hvf3_bin_size))));
|
||||
last_addr = ctx->addr;
|
||||
}
|
||||
|
||||
if(last_flash_state != flash_state) {
|
||||
switch(flash_state) {
|
||||
case SLAVE_IN_APP:
|
||||
@@ -552,11 +566,6 @@ static void nrt_func(volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
||||
}
|
||||
last_flash_state = flash_state;
|
||||
}
|
||||
|
||||
if(ctx->addr >= last_addr + 1024) {
|
||||
printf("hv_update: status: %i%%\n", (int)(100.0 * ctx->addr * 4. / (float)((uint32_t) & (_binary_obj_hvf3_hvf3_bin_size))));
|
||||
last_addr = ctx->addr;
|
||||
}
|
||||
}
|
||||
|
||||
hal_comp_t hv_comp_struct = {
|
||||
|
||||
Reference in New Issue
Block a user