diff --git a/components/freemodbus/port/port.h b/components/freemodbus/port/port.h index 2115db2082..7c29d14cf2 100644 --- a/components/freemodbus/port/port.h +++ b/components/freemodbus/port/port.h @@ -65,10 +65,10 @@ #define MB_SERIAL_BUF_SIZE (CONFIG_FMB_SERIAL_BUF_SIZE) // common definitions for serial port implementations -#define MB_SERIAL_TX_TOUT_MS (100) -#define MB_SERIAL_TX_TOUT_TICKS (pdMS_TO_TICKS(MB_SERIAL_TX_TOUT_MS)) // timeout for transmission -#define MB_SERIAL_RX_TOUT_MS (1) -#define MB_SERIAL_RX_TOUT_TICKS (pdMS_TO_TICKS(MB_SERIAL_RX_TOUT_MS)) // timeout for receive +#define MB_SERIAL_TX_TOUT_MS (2200) // maximum time for transmission of longest allowed frame buffer +#define MB_SERIAL_TX_TOUT_TICKS pdMS_TO_TICKS(MB_SERIAL_TX_TOUT_MS) // timeout for transmission +#define MB_SERIAL_RX_TOUT_MS (1) +#define MB_SERIAL_RX_TOUT_TICKS pdMS_TO_TICKS(MB_SERIAL_RX_TOUT_MS) // timeout for receive #define MB_SERIAL_RESP_LEN_MIN (4) diff --git a/components/freemodbus/port/portserial.c b/components/freemodbus/port/portserial.c index d3f1455313..ccbb4bd284 100644 --- a/components/freemodbus/port/portserial.c +++ b/components/freemodbus/port/portserial.c @@ -120,7 +120,7 @@ BOOL xMBPortSerialTxPoll(void) } ESP_LOGD(TAG, "MB_TX_buffer send: (%d) bytes\n", (uint16_t)usCount); // Waits while UART sending the packet - esp_err_t xTxStatus = uart_wait_tx_idle_polling(ucUartNumber); + esp_err_t xTxStatus = uart_wait_tx_done(ucUartNumber, MB_SERIAL_TX_TOUT_TICKS); vMBPortSerialEnable(TRUE, FALSE); MB_PORT_CHECK((xTxStatus == ESP_OK), FALSE, "mb serial sent buffer failure."); return TRUE; diff --git a/components/freemodbus/port/portserial_m.c b/components/freemodbus/port/portserial_m.c index 8bcd0f012a..00021117e5 100644 --- a/components/freemodbus/port/portserial_m.c +++ b/components/freemodbus/port/portserial_m.c @@ -122,7 +122,7 @@ BOOL xMBMasterPortSerialTxPoll(void) } ESP_LOGD(TAG, "MB_TX_buffer sent: (%d) bytes.", (uint16_t)(usCount - 1)); // Waits while UART sending the packet - esp_err_t xTxStatus = uart_wait_tx_idle_polling(ucUartNumber); + esp_err_t xTxStatus = uart_wait_tx_done(ucUartNumber, MB_SERIAL_TX_TOUT_TICKS); vMBMasterPortSerialEnable(TRUE, FALSE); MB_PORT_CHECK((xTxStatus == ESP_OK), FALSE, "mb serial sent buffer failure."); return TRUE;