Merge branch 'feat/twaifd_support_tx_priority_time_trigger' into 'master'

feat(driver_twai): fd hardware support tx priority

Closes IDF-13157

See merge request espressif/esp-idf!48595
This commit is contained in:
Wan Lei
2026-06-16 19:45:04 +08:00
29 changed files with 987 additions and 97 deletions

View File

@@ -134,6 +134,7 @@ TWAI 报文有多种类型,由报头指定。一个典型的数据帧报文主
- :cpp:member:`twai_frame_t::header::fdf` 报文为 FD 格式,支持最大数据长度 64 字节。
- :cpp:member:`twai_frame_t::header::brs` 发送报文时在数据段使用独立的波特率。
- :cpp:member:`twai_frame_t::header::esi` 对于收到的报文,指示发送节点的错误状态。
- :cpp:member:`twai_frame_t::tx_queue_priority` 本地发送队列优先级,详情请参阅 `发送队列优先级`_
接收报文
--------
@@ -214,6 +215,13 @@ TWAI 驱动支持在中断服务程序 (ISR) 中发送报文。这对于需要
.. note::
在 ISR 中调用 :cpp:func:`twai_node_transmit` 时,``timeout`` 参数将被忽略,函数不会阻塞。如果发送队列已满,函数将立即返回错误。应用程序需要自行处理队列已满的情况。同样,``twai_frame_t`` 及其 ``buffer`` 指向的内存必须在 **该传输** 完成之前保持有效。通过 :cpp:member:`twai_tx_done_event_data_t::done_tx_frame` 指针可得知该次完成的报文。
发送队列优先级
--------------
TWAI 驱动支持通过 :cpp:member:`twai_frame_t::tx_queue_priority` 设置本地发送队列优先级。当驱动发送队列中有多个待发送报文时,``tx_queue_priority`` 值更高的报文会优先出队开始发送。优先级相同的报文保持入队顺序发送。
该优先级只影响驱动的本地发送队列,不会被发送到 TWAI 总线上,也不会替代 TWAI 总线仲裁。若控制器有多个硬件发送缓存(例如 esp32c5 的 4 个硬件发送缓存),已经缓存的报文也不会被新入队的高优先级报文抢占。报文到达总线后,仲裁仍由帧 ID 决定ID 越小,总线优先级越高。控制器已经开始发送的报文不会被新入队的高优先级报文抢占。
位时序自定义
-------------