-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Description
Board
esp32 wrover
Device Description
psram, eth, flash etc..
Hardware Configuration
psram, eth, flash etc..
Version
latest master (checkout manually)
IDE Name
PlatformIO
Operating System
Windows 10
Flash frequency
80
PSRAM enabled
yes
Upload speed
115200
Description
I often get truncated packets on uart when accessing either the flash with LittleFS wrapper or when making an http call from client to esp32. The way I test this is that I get an interrupt from Serial1.onReceive()
with 0x00
data in it when I save something to flash or when making an http request. http server uses the IDF server implementation as well as the arduino Serial wrapper.
I expect the onReceive
function to call my cb only when the set timeout is triggered. It is UART_SYMBOL_TIMEOUT 1
in this case.
The problem is triggered every time when I write to flash. I can access menuconfig so I made sure that the UART functions and variables are in IRAM
and interrupts too.
Sketch
void Modbus::init() {
Serial1.setRxBufferSize(MAX_RX_BUFFER_SIZE);
Serial1.setTxBufferSize(MAX_MBUS_DATA_LENGTH);
Serial1.begin(MBUS_BAUD, SERIAL_8N1, MBUS_RX, MBUS_TX);
Serial1.setPins(-1, -1, -1, MBUS_RTS);
Serial1.setMode(UART_MODE_RS485_HALF_DUPLEX);
Serial1.setRxTimeout(MBUS_RX_TIMEOUT);
Serial1.onReceive(
std::bind(&Modbus::handlePacket, this),
PACKET_TRIGGER_ONLY_ON_TIMEOUT
);
Serial1.onReceiveError(
std::bind(&Modbus::handleReceiveError, this, std::placeholders::_1)
);
}
Debug Message
Debug messages coming from my API
E (39603) Modbus: CRC error in response packet: 0x00
E (39603) Modbus: Invalid packet. Can't process it.
Raw Packet: 00
E (39608) HardwareHandler: Packet error code: 1
Other Steps to Reproduce
Give repeated modbus packets to your esp, wait for them and access the flash meanwhile.
I have checked existing issues, online documentation and the Troubleshooting Guide
- I confirm I have checked existing issues, online documentation and Troubleshooting guide.