feat(canfd): 添加CANFD自检功能和桥接模式支持
- 添加完整的CANFD初始化流程,包括硬复位机制解决CAN1卡死问题 - 实现CANFD自检功能,包含物理总线测试和内部回环测试 - 支持CAN0到CAN1/CAN2的透传桥接模式 - 添加详细的初始化诊断信息输出 - 修复CAN滤波器配置和GPIO映射问题 - 增强错误处理和状态监控功能 perf(system): 优化系统时钟配置提高性能 - 将AHB时钟从SYSCLK/4调整为SYSCLK/2 (60MHz) - 优化PLL预分频配置参数 - 更新相关时序注释以反映实际频率变化 docs(esc): 更新EXMC总线时序配置注释 - 添加LAN9252 HBI时序要求详细说明 - 注明当前ESC未启用状态下的占位符说明 - 提供实际计算得出的HCLK延迟要求
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#ifndef DEVICE_CANFD_H
|
||||
#ifndef DEVICE_CANFD_H
|
||||
#define DEVICE_CANFD_H
|
||||
|
||||
#include <stdint.h>
|
||||
@@ -28,6 +28,7 @@ public:
|
||||
enum class Mode : uint8_t {
|
||||
kModeAllPass = 0U, /**< 全部接收模式:禁用硬件 ID/掩码匹配,所有 11/29 位帧都进入 FIFO0。 */
|
||||
kModeFilterId = 1U, /**< 过滤模式:按 CONFIG_CAN_RX_FILTER_ID/MASK 做标准帧掩码匹配。 */
|
||||
kModeBridge0To12 = 2U, /**< CAN0 桥接模式:硬件过滤等同 AllPass,CAN0 收到的每一帧按原帧格式自动转发到 CAN1 与 CAN2。 */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -66,6 +67,9 @@ public:
|
||||
uint8_t last_rx_brs; /**< 该通道最近一帧 BRS 标志。 */
|
||||
uint8_t last_rx_esi; /**< 该通道最近一帧 ESI 标志。 */
|
||||
uint8_t last_rx_data[CANFD_FEEDBACK_LAST_DATA_MAX];
|
||||
uint8_t tec; /**< 最近一次采样时硬件发送错误计数器 (0~255)。 */
|
||||
uint8_t rec; /**< 最近一次采样时硬件接收错误计数器 (0~255)。 */
|
||||
uint8_t bus_state; /**< 总线状态位图:bit0=init_mode, bit1=sleep, bit2=error_passive, bit3=bus_off, bit4=error_warning。 */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -182,8 +186,8 @@ private:
|
||||
* @param[in] mode 目标接收过滤模式。
|
||||
*/
|
||||
static void configureRxFilter(uint32_t canPeriph, uint8_t filterNumber, Mode mode);
|
||||
static void initNominalTiming(uint32_t canPeriph);
|
||||
static void initFdMode(uint32_t canPeriph);
|
||||
static bool initNominalTiming(uint32_t canPeriph);
|
||||
static bool initFdMode(uint32_t canPeriph);
|
||||
static void buildStatusFrame(const StatusPayload *status);
|
||||
static bool enqueueTxFrame(uint8_t channelIndex, const StatusPayload *status);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user