ESP32-P4 V3.2版本芯片,并口发送数据问题

new_os
Posts: 5
Joined: Sat Nov 04, 2023 9:52 am

ESP32-P4 V3.2版本芯片,并口发送数据问题

Postby new_os » Tue Jul 14, 2026 6:06 am

ESP32-P4 v3.2芯片,ESP-IDF 6.0.1版本,通过parlio口和外设高速通信,设置为16bit宽度,传输4096个字节数据,dma_burst_size=64。实际测试每次传输64字节就会停顿14us,停顿时间比数据传输数据还长,严重影响传输效率,个人感觉是DMA是按突发长度进行数据传输,但是中间停留时间太长了,10Mhz时钟的时候,一个突发传输才3us,但是中间等待时间14us,这种情况下无法满足数据传输要求,怎么设置能让数据在一个DMA传输帧中间不间断传输

new_os
Posts: 5
Joined: Sat Nov 04, 2023 9:52 am

Re: ESP32-P4 V3.2版本芯片,并口发送数据问题

Postby new_os » Tue Jul 14, 2026 6:35 am

以下是初始化函数和发送函数
static const parlio_tx_unit_config_t s_parlio_tx_config = {
.clk_src = PARLIO_CLK_SRC_DEFAULT,
.clk_in_gpio_num = -1,
.output_clk_freq_hz = 10 * 1000 * 1000,
.data_width = 16,
.data_gpio_nums = {
GPIO_NUM_23,
GPIO_NUM_22,
GPIO_NUM_21,
GPIO_NUM_20,
GPIO_NUM_13,
GPIO_NUM_12,
GPIO_NUM_11,
GPIO_NUM_10,
GPIO_NUM_9,
GPIO_NUM_33,
GPIO_NUM_54,
GPIO_NUM_53,
GPIO_NUM_48,
GPIO_NUM_47,
GPIO_NUM_46,
GPIO_NUM_45,
},
.clk_out_gpio_num = GPIO_NUM_6,
.valid_gpio_num = GPIO_NUM_38,
.trans_queue_depth = 1025,
.max_transfer_size = 9216,
.dma_burst_size = 64,
.shift_edge = PARLIO_SHIFT_EDGE_NEG,
.bit_pack_order = PARLIO_BIT_PACK_ORDER_LSB,
.flags = {
.clk_gate_en = true,
.allow_pd = false,
.invert_valid_out = false,
},
};

发送函数
static esp_err_t IRAM_ATTR normal_mode_transmit(void)
{
uint32_t byte_width = s_ledscan_params.config.width * 4;
uint32_t data_buf = (uint32_t)s_ledscan_params.buf[s_ledscan_params.cur_buf_idx];
data_buf += s_ledscan_params.abcde * byte_width;
size_t payload_bits = byte_width * 8;

parlio_transmit_config_t tx_config = {
.idle_value = 0,
.bitscrambler_program = (s_ledscan_params.config.data_polarity == 1) ? bitscrambler_program_invert : NULL,
.flags = {
.queue_nonblocking = false,
.loop_transmission = false,
},
};
return parlio_tx_unit_transmit(parlio_tx_unit, (void *)data_buf, payload_bits, &tx_config);
}

Who is online

Users browsing this forum: No registered users and 1 guest