#include "Arduino.h" #include "PolledTimeout.h" polledTimeout::periodic s(250); constexpr int cpuf = 160; void setup() { setCpuFrequencyMhz(cpuf); pinMode(25,OUTPUT); digitalWrite(25,LOW); pinMode(26,OUTPUT); digitalWrite(26,LOW); pinMode(27,OUTPUT); digitalWrite(27,LOW); Serial.begin(115200); Serial1.begin(460800, SERIAL_8N1, 16, 17); } uint8_t errcnt = 0; uint32_t sample = 0; void loop() { if (s.expired() && errcnt < 10) // every 250 ms { sample++; while (Serial1.available()) // empty any remaining chars from uart/fifo/queue { uint8_t x = Serial1.read(); } Serial1.write(0xAA); digitalWrite(27,HIGH); uint8_t cbuf[1050] ={0}; int rb = Serial1.readBytes(cbuf, 1024); digitalWrite(27,LOW); if (rb != 1024) { // digitalWrite(26,LOW); errcnt++; Serial.printf("length mismatch %d sample = %d\r\n", rb, sample); // digitalWrite(26,HIGH); } for (int i=0;i<1024;i++) { if (cbuf[i]!=0x30+(i%10)) { // digitalWrite(26,HIGH); errcnt++; Serial.printf("content mismatch %d sample %d\r\n",(int)millis(), sample); for (int x=i-5;x=0) Serial.printf("cbuf error %4d %2x %2x\r\n",x, 0x30+(x%10), cbuf[x] ); } // digitalWrite(26,LOW); break; } } } }