Issue with the XMIT process of SerialHardware (TX buffering)

Aldo_Lodos
Posts: 5
Joined: Fri Oct 30, 2020 12:41 pm

Issue with the XMIT process of SerialHardware (TX buffering)

Postby Aldo_Lodos » Mon Nov 02, 2020 12:39 pm

Hello

I have an issue with the XMIT process of SerialHardware on an ESP32 TTGO T-Display
On a 1200 bauds com I receive 10 to 15 byte messages separated by 20 to 60ms of silence
The skecth is simple : read bytes on port 1 and write them on port 2 as soon as as they arrive

Each time I receive the first byte of a new message, the writing of this byte is delayed of about 200 ms
Obviouly during this delay the RX continues to receive bytes that are buffered and when the transmit starts after the 200 ms delay, its a long set of bytes that are ransmitted on a row. My receiving device doesn't like that.
It seems there is a buffering of the TX process

To verify this I made an analysis with an oscilloscope with the Pin 2 trigger signal generated by the sketch on chanel 1 and the TX port on chanel 2
During all the time of Pin 2 HIGH , there is no data transmitted on TX. The data start to transmit as soon as the Pin 2 signel is LOW

Here is below my sketch and the result on the debug console

Any idea how to avoid this behaviour and have the byte really sent in real time after the Serial.write ?

Thanks for your help

PS It seems other people already had this problem : https://www.esp32.com/viewtopic.php?t=3751#p17141

Code: Select all

void loop() {    

  if (MySerial2.available()) {
      x = MySerial2.read();
     
      Serial.print(StringInt(millis(),6)+"  ");     // absolute time 
      Serial.print(StringInt(millis()-m,4));        // delay since the last receive
      
      Serial.print(" RECV port2: ");;
      SERIAL_PRINTHEX(x);
      Serial.print(" -> XMIT port1 "); 
      if (((millis()-m) > 20) && ((millis()-m) < 100)) { // trigger on the message begining
              Serial.print("*Trigger*");
              digitalWrite(Sync_Pin,HIGH);   // for Oscilloscope analisys (Sync)
      }
      m = millis(); 
      
      int TXBufSize = MySerial1.availableForWrite();
      mmm = millis();
      MySerial1.write(x);     
      while (MySerial1.availableForWrite() < TXBufSize) { }
      
      digitalWrite(Sync_Pin,LOW);   // for oscilloscope analysis
      
      Serial.print("** XMIT delay:");
      Serial.print(StringInt(millis() - mmm,4));
      Serial.print(" ** TXBufSize:");
      Serial.println(TXBufSize);
  } 

}

String StringInt(int val, int siz) {
  String S = String(val);
  if (S.length() >= siz) return S;
  S  = "                        "+S;
  return S.substring(S.length()-siz);
}

Code: Select all

372347     8 RECV port2: 1A -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372356     9 RECV port2: F0 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372364     8 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372372     8 RECV port2: 21 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372381     9 RECV port2: 32 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372389     8 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372397     8 RECV port2: 20 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372406     9 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372414     8 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372426    12 RECV port2: 16 -> XMIT port1 ** XMIT delay:   4 ** TXBufSize:127
372431     4 RECV port2: 0B -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372439     8 RECV port2: 01 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372447     8 RECV port2: 22 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372489    42 RECV port2: 11 -> XMIT port1 *Trigger*** XMIT delay: 192 ** TXBufSize:127   <<<<<<< Message begining
372682   193 RECV port2: 25 -> XMIT port1 ** XMIT delay:   4 ** TXBufSize:127
372686     4 RECV port2: 36 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372694     8 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372702     8 RECV port2: 20 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372711     9 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372719     8 RECV port2: 31 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372727     8 RECV port2: 16 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372736     9 RECV port2: 1F -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372744     8 RECV port2: 00 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372752     8 RECV port2: BE -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372761     9 RECV port2: F3 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372769     8 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372777     8 RECV port2: 24 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372786     9 RECV port2: 35 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372794     8 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
372802     8 RECV port2: 20 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
372832    30 RECV port2: 11 -> XMIT port1 *Trigger*** XMIT delay: 204 ** TXBufSize:127  <<<<<<< Message begining
373037   205 RECV port2: 08 -> XMIT port1 ** XMIT delay:   4 ** TXBufSize:127
373041     4 RECV port2: 16 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
373049     8 RECV port2: 1A -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
373057     8 RECV port2: F0 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
373066     9 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
373074     8 RECV port2: 21 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
373082     8 RECV port2: 32 -> XMIT port1 ** XMIT delay:   9 ** TXBufSize:127
373091     9 RECV port2: 11 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127
373099     8 RECV port2: 20 -> XMIT port1 ** XMIT delay:   8 ** TXBufSize:127 

Who is online

Users browsing this forum: Bing [Bot] and 86 guests