diff --git a/examples/Brain/program_esp32_cdc/program_esp32_cdc.ino b/examples/Brain/program_esp32_cdc/program_esp32_cdc.ino index c58f094..0d2093a 100644 --- a/examples/Brain/program_esp32_cdc/program_esp32_cdc.ino +++ b/examples/Brain/program_esp32_cdc/program_esp32_cdc.ino @@ -171,6 +171,8 @@ void loop1() { if ( SerialHost && SerialHost.connected() ) { SerialHost.flush(); } + + yield(); } //--------------------------------------------------------------------+ diff --git a/examples/Brain/program_esp32_uart/program_esp32_uart.ino b/examples/Brain/program_esp32_uart/program_esp32_uart.ino index 79dbf49..6301726 100644 --- a/examples/Brain/program_esp32_uart/program_esp32_uart.ino +++ b/examples/Brain/program_esp32_uart/program_esp32_uart.ino @@ -127,7 +127,7 @@ void setup1() { // core1's loop: process usb host task on core1 void loop1() { Brain.USBHost.task(); - // Serial.flush(); + yield(); } //--------------------------------------------------------------------+ diff --git a/src/ESP32BootROM.cpp b/src/ESP32BootROM.cpp index e9b7d86..b840017 100644 --- a/src/ESP32BootROM.cpp +++ b/src/ESP32BootROM.cpp @@ -306,7 +306,6 @@ int ESP32BootROMClass::beginFlash(uint32_t offset, uint32_t size, command(ESP_FLASH_BEGIN, data, len); _flashSequenceNumber = 0; - _chunkSize = chunkSize; return (response(ESP_FLASH_BEGIN, 120000) == 0); } @@ -409,7 +408,6 @@ bool ESP32BootROMClass::beginMem(uint32_t offset, uint32_t size, command(ESP_MEM_BEGIN, data, len); _flashSequenceNumber = 0; - _chunkSize = chunkSize; return (response(ESP_MEM_BEGIN, 120000) == 0); } @@ -551,10 +549,10 @@ void ESP32BootROMClass::command(uint8_t opcode, const void *data, uint16_t len, // read until we found SLIP (0xC0) byte bool ESP32BootROMClass::readSLIP(uint32_t timeout_ms) { uint8_t slip = 0; - uint32_t start_ms = millis(); - uint32_t end_ms = start_ms + timeout_ms; - while ((slip != 0xc0) && (end_ms - millis())) { + uint32_t end_ms = millis() + timeout_ms; + while ((slip != 0xc0) && (millis() < end_ms)) { readBytes(&slip, 1, end_ms - millis()); + yield(); } return slip == 0xc0; } @@ -564,15 +562,15 @@ uint16_t ESP32BootROMClass::readBytes(void *buf, uint16_t length, uint32_t timeout_ms) { uint8_t *buf8 = (uint8_t *)buf; uint16_t count = 0; - uint32_t start = millis(); + uint32_t end_ms = millis() + timeout_ms; - while ((count < length) && ((millis() - start) < timeout_ms)) { + while ((count < length) && (millis() < end_ms)) { if (_serial->available()) { uint8_t ch = (uint8_t)_serial->read(); // escape if (ch == 0xdb) { - while (!_serial->available() && ((millis() - start) < timeout_ms)) { + while (!_serial->available() && (millis() < end_ms)) { yield(); } uint8_t ch2 = (uint8_t)_serial->read(); @@ -615,15 +613,16 @@ int ESP32BootROMClass::response(uint8_t opcode, uint32_t timeout_ms, void *body, uint8_t const status_len = (_stub_running ? 2 : 4); #if 1 - uint32_t start = millis(); - uint32_t end_ms = start + timeout_ms; + uint32_t end_ms = millis() + timeout_ms; if (!readSLIP(timeout_ms)) { + Serial.printf("line %d\r\n", __LINE__); return -1; } // read fixed response first if (8 != readBytes(&fixed_resp, 8, end_ms - millis())) { + Serial.printf("line %d\r\n", __LINE__); return -1; // probably timeout } @@ -633,6 +632,7 @@ int ESP32BootROMClass::response(uint8_t opcode, uint32_t timeout_ms, void *body, if (payload_len) { if (payload_len != readBytes(data, payload_len, end_ms - millis())) { + Serial.printf("line %d\r\n", __LINE__); return -1; // probably timeout } } @@ -647,10 +647,12 @@ int ESP32BootROMClass::response(uint8_t opcode, uint32_t timeout_ms, void *body, // read status if (status_len != readBytes(status, status_len, end_ms - millis())) { + Serial.printf("line %d\r\n", __LINE__); return -1; // probably timeout } if (!readSLIP(end_ms - millis())) { + Serial.printf("line %d\r\n", __LINE__); return -1; } diff --git a/src/ESP32BootROM.h b/src/ESP32BootROM.h index 8f7fea5..33ef14f 100644 --- a/src/ESP32BootROM.h +++ b/src/ESP32BootROM.h @@ -73,5 +73,4 @@ private: bool _stub_running; uint32_t _flashSequenceNumber; - uint32_t _chunkSize; };