В общем попробовал я использовать micros(), но что то не пойму что происходит.
Код:
bool uartFlowCtrl = false;
unsigned long startTimeFlow = 0;
// ПРОГРАММИРОВАНИЕ MCU С КОНТРОЛЕМ ПОТОКА
void handlerUARTProg() {
if (micros() >= (startTimeFlow + 46080000 / 115200)) {
if (mcuHex.available()) {
if (Serial.available()) {
curChar = (char)Serial.read(); // Читаем очередной байт из UART
switch (curChar) { // Сравниваем
case BOOT_MCU_START: // ">"
case BOOT_MCU_XON: // xOn
uartFlowCtrl = true; // Разрешаем передачу по UART
break;
case BOOT_MCU_XOFF: // xOff
uartFlowCtrl = false; // Запрещаем передачу по UART
break;
case BOOT_MCU_END: // "<"
updateMCUEnd(); // Завершаем прошивку MCU
break;
}
}
}
if (uartFlowCtrl) {
Serial.write(mcuHex.read()); // Передаем очередной байт из файла в UART
startTimeFlow = micros();
}
}
}
Не шьется и в ответе я не вижу управляющих символов вообще, скорость UART 115200, загрузчик отвечает практически мгновенно (написан на асме).
Напомню в 2-х словах:
- передача осуществляется посимвольно и стартует по приходу символа ">"
- далее должны отслеживаться символы xOn, xOff:
- -xOff приходит после заполнения буфера MCU и с этого момента начинается запись Flash MCU, передача по UART останавливается
- -xOn приходит после успешной записи Flash MCU и передача по UART возобновляется
- символ "<" приходит после завершения программирования MCU