29 #include "mcu_periph/sys_time_arch.h"
38 #include "libopencm3/cm3/scb.h"
44 #define PX4IO_PORT (&((PX4IO_UART).device))
47 #define FLASH_PORT (&((FLASH_UART).device))
52 #define PROTO_INSYNC 0x12
53 #define PROTO_EOC 0x20
56 #define PROTO_FAILED 0x11
57 #define PROTO_INVALID 0x13
59 #define PROTO_GET_SYNC 0x21
60 #define PROTO_GET_DEVICE 0x22
61 #define PROTO_CHIP_ERASE 0x23
62 #define PROTO_LOAD_ADDRESS 0x24
63 #define PROTO_PROG_MULTI 0x27
64 #define PROTO_GET_CRC 0x29
65 #define PROTO_BOOT 0x30
91 if (PX4IO_PORT->char_available(PX4IO_PORT->periph)) {
96 while (PX4IO_PORT->char_available(PX4IO_PORT->periph)) {
97 unsigned char b = PX4IO_PORT->get_byte(PX4IO_PORT->periph);
108 while (state < 4 && FLASH_PORT->char_available(
FLASH_PORT->periph)) {
112 if (
b ==
'p') {
state++; }
else {
return; }
115 if (
b ==
'p') {
state++; }
else {
return; }
118 if (
b ==
'r') {
state++; }
else {
return; }
121 if (
b ==
'z') {
state++; }
else {
return; }
128 if (
state != 4) {
return;}
193 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
p[0]);
194 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
p[1]);
195 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
p[2]);
196 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
p[3]);
197 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
p[4]);
198 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
p[5]);
211 while (state < 4 && PX4IO_PORT->char_available(PX4IO_PORT->periph)) {
213 unsigned char b = PX4IO_PORT->get_byte(PX4IO_PORT->periph);
238 for (
int i = 0; i < 15 && !ret ; i++) {
243 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
PROTO_EOC);
248 while (PX4IO_PORT->char_available(PX4IO_PORT->periph)) {
249 unsigned char b = PX4IO_PORT->get_byte(PX4IO_PORT->periph);
260 while (PX4IO_PORT->char_available(PX4IO_PORT->periph)) {PX4IO_PORT->get_byte(PX4IO_PORT->periph);}
279 PX4IO_PORT->put_byte(PX4IO_PORT->periph, 0,
b);