ESP32-P4 PARLIO TX: edata is always 0x00 in parlio_tx_done_cb during continuous buffer transmission
Posted: Wed May 27, 2026 7:31 pm
Hi everyone,
I am working with the ESP32-P4 and using the PARLIO (Parallel IO) peripheral for transmission. I am trying to transmit multiple buffers consecutively, but I am running into an issue with the callback event data.
I have registered the following TX done callback:
C
static bool IRAM_ATTR parlio_tx_done_cb(parlio_tx_unit_handle_t tx_unit, const parlio_tx_done_event_data_t *edata, void *user_ctx)
{
// Inside this callback, edata appears to be 0 / empty
// Example: checking edata properties here yields 0x00
return false;
}
The Problem:
Whenever this callback is triggered, the edata parameter (or its contents) always evaluates to 0. I expected edata to contain information about the transaction that just finished (such as the buffer address or length).
Observations:
Interestingly, when I monitor the buffer switching (e.g., keeping track of the previous and present buffer addresses in a loop or through a buffer switch logic), the addresses are correct and the switch happens successfully. The hardware seems to be processing the buffers properly, but the event data passed to the parlio_tx_done_cb is completely empty/zero.
There is no members in parlio_tx_done_event_data_t, while parlio_tx_buffer_switched_event_data_t has teo members , is this something missed ?
Environment:
Target: ESP32-P4
ESP-IDF Version: 6.01
My Questions:
Is it expected behavior for edata to be 0x00 / empty during multiple or continuous buffer transmissions with PARLIO on the ESP32-P4?
Is there a specific configuration I need to enable to populate edata correctly?
Could this be an issue with the underlying DMA descriptor handling in the current ESP-IDF version for the P4?
Any guidance or workarounds would be greatly appreciated. Thank you!
I am working with the ESP32-P4 and using the PARLIO (Parallel IO) peripheral for transmission. I am trying to transmit multiple buffers consecutively, but I am running into an issue with the callback event data.
I have registered the following TX done callback:
C
static bool IRAM_ATTR parlio_tx_done_cb(parlio_tx_unit_handle_t tx_unit, const parlio_tx_done_event_data_t *edata, void *user_ctx)
{
// Inside this callback, edata appears to be 0 / empty
// Example: checking edata properties here yields 0x00
return false;
}
The Problem:
Whenever this callback is triggered, the edata parameter (or its contents) always evaluates to 0. I expected edata to contain information about the transaction that just finished (such as the buffer address or length).
Observations:
Interestingly, when I monitor the buffer switching (e.g., keeping track of the previous and present buffer addresses in a loop or through a buffer switch logic), the addresses are correct and the switch happens successfully. The hardware seems to be processing the buffers properly, but the event data passed to the parlio_tx_done_cb is completely empty/zero.
There is no members in parlio_tx_done_event_data_t, while parlio_tx_buffer_switched_event_data_t has teo members , is this something missed ?
Environment:
Target: ESP32-P4
ESP-IDF Version: 6.01
My Questions:
Is it expected behavior for edata to be 0x00 / empty during multiple or continuous buffer transmissions with PARLIO on the ESP32-P4?
Is there a specific configuration I need to enable to populate edata correctly?
Could this be an issue with the underlying DMA descriptor handling in the current ESP-IDF version for the P4?
Any guidance or workarounds would be greatly appreciated. Thank you!