Непонятная работа Arduino Nano с COM в Linux

Доброе время суток.
Имеем Arduini Nano со скетчем:

void setup() {
  
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
 }


void loop() {
  int8_t i;
  
  if (Serial.available()) {
     val = Serial.read();
   if (val == '1') {
    for (i=0; i<5 ; i++) {
    digitalWrite(LED_BUILTIN, HIGH);   
  delay(500);                       
  digitalWrite(LED_BUILTIN, LOW);   
  delay(500);
    }
} 

Это упрощенная, для дебага, версия скетча эмулирующего пульт ДУ, просто вместо отправки пакетов на ИК светодиод он моргает встроенным. В исходном виде код работает аналогично, пульт эмулируется.

Если для отправки команд использовать программы picocom, minicom, монитор порта ардуино и любые другие терминалы всё работает. Но если просто плюнуть в порт командой:

echo "1" > /dev/ttyUSB0

Ничего не произойдет. Ардуинка его получает, начинает исполнять, но исполнение срывается. Команда начинает работать только в том случае если открыть на блокирующее чтение фал COM-порта ардуинки, любой командой способной это делать cat, grep и т.д.

cat > /dev/ttyUSB0

При этом на осциллограмме всегда одни и те же данные, щупы подключены непосредственно к выводам UART.

Первый байт это отправленная единица (что значат 4 старших бита я не знаю, они всегда одинаковые в младших передаётся число или буква), второй: “обратный слэш”, он подставляется автоматически.
Т.е. данные до процессора доходят всегда и всегда одинаковые, каких то изменений мне отловить не удалось. Но в одном случае код срабатывает, а в другом срывается. С повторяемостью 100% на 2-х разных платках Nano и разных ПК.

Кто-нибудь имеет представление, чем обусловлено такое поведение?

Под спойлером видео представление правильной и не правильной работы, для лучшего понимания.

Видео работы

Непонятная работа Arduino Nano с COM в Linux - YouTube

Не так. Первый байт - это 49, ascii код символа “1” в десятичной системе. Второй - это 10, код символа LF (line feed).

За уточнение благодарю.