cbb
f3d7fc0c30
feat(canfd): 添加收发器静默模式支持和SPI命令接口
...
添加了CAN FD收发器静默模式功能,允许通过硬件引脚控制发送使能:
- 新增setTxSilent/isTxSilent接口控制TCAN1057收发器Silent模式
- 静默时驱动器关断但接收机继续工作,支持只听不发场景
- 添加SPI命令0xC8用于ESP32远程控制静默模式切换
- 在总线状态位图中增加bit5表示静默状态
- 新增canBusyWaitUs函数用于ISR安全的微秒延时
fix(esc_lan9252): 改进warm jump后LAN9252探测逻辑
修复warm jump导致的LAN9252初始化问题:
- 识别warm jump后芯片非POR状态(idx0!=0x1234)的情况
- 自动补发硬件复位对齐到POR状态后再进行正常探测
- 改进调试信息输出,区分POR状态和warm jump残值情况
- 修正失败路径的复位标志初始化逻辑
refactor(spi): 整理SPI命令文件结构
调整SPI命令相关文件的组织结构:
- 移动诊断相关文件到更合适的位置
- 重新整理SPI命令处理文件的分组
2026-10-10 02:25:56 +08:00
cbb
5fd986299c
feat(comm): 1.6.51 CAN 空通道自动静默 + PDO 诊断 + OTA 布局共用头
...
变更点:
1. CAN-FD(device/CANFD.cpp、sys/config.h)
- 发送统一 FD+BRS(DLC≤8 不再回退经典 CAN);OTA 期仍按通道压制 BRS
- 空通道自动识别:连续 5 个 1Hz 窗口无有效帧且有错误 → 静默上报;有帧即恢复
- 三路 CAN 默认全开;RX parse budget 48→64
2. EtherCAT 桥 / PDO
- 段1 增 txtxid/rx00ff;版本应答 0x00FF 粘滞发布,避免被 CONFIG 冲掉
- STATUS 禁止写入 xrx 快照;processSeq 新鲜度救援
3. OTA / 配置
- sys/config.h include 仓库内 shared/ota_layout.h(与 BOOT 共用,不再依赖仓外路径)
- ota_boot_request 对齐配置页 word 布局
4. docs/audit_ecat_spi_wifi_ota_compatibility.md:ECAT/SPI/WiFi/OTA 兼容性审计
5. .gitignore:忽略 .trae/、docs/traework-import、评审过程稿
2026-09-20 22:58:09 +08:00
cbb
7d9d9c70a1
feat(app): 1.6.39 —— 1.6.29 起未上板业务改动入库,启动链与已提交基线对齐
...
主体为工作区累积的业务改动(CAN/PDO/桥/SSC/task_manager 等,详目见
config.h 版本注释链),新增 CoE 0x100A 真版本上报与 0x2502 APP→BOOT
总线交接。启动链(startup/SystemInit/initial/systick/hardfault)与
HEAD 逐字节一致;1.6.35~38 的跳转诊断实验(3M 化/BKP 面包屑/
haltWithWatchdog)未提交、已整体回退,补丁存 _revert_backup_20260916/。
真机实测(配对 BOOT 1.1.0.18):刷写 warm jump 与 reset cold jump 均可。
2026-09-16 00:48:34 +08:00
cbb
959e2aef6e
feat(comm): 1.6.14~1.6.20 —— CAN-FD 数据段 5M、批量区改定长覆盖窗口(输入 PDO 496→600)、drop 口径修复、差分写仪表
...
1.6.14 CAN-FD 数据段 2Mbps→5Mbps:CONFIG_CAN_DATA_PRESCALER 9→3、BS1 3→4TQ
(90MHz/(3×6TQ),采样点 80%→83.3%),仲裁段仍 1M。TDC filter/offset 维持 4 不做
等比缩放(TDCMOD=CALC_AND_OFFSET 下硬件已自动测回路延时;放到 12 会让本节点回采
错开约 6 个数据位,自发热帧被判错误帧)。配套电机 APP/BOOT data_prescaler=2。
1.6.15 段4 批量接收由"环形队列 + 变长紧排排空"改为 5×44B 定长覆盖窗口,输入 PDO
496→600(75×64bit),段5 诊断区 484→584。动机两条:现场 4000 帧/s 超旧容量 3 帧/拍
恒丢 1 帧;更关键是排空赤字把队列长期压在饱和态,而 1.6.9~1.6.13 追的错标/拼接竞态
正是饱和态喂出来的(判满用的 tail 滞后→生产者写进消费者刚读过的槽)。定长消灭
tail/判满/pending,边界越界写在结构上不可能再犯。每槽带 u32 seqlock:buildInput 在
PDI_Isr(preempt=0) 抢占主循环写侧,无它则主站会拿到"新 ID + 旧数据"拼出的假帧。
out+in=984 ≤ 1024 硬上限,DPRAM 留 120B。语义变更:批量区从"不丢的事件流"变"最近
N 帧窗口",去重与丢帧判据移交主站按 seq 归一。三端同步 size.h/bridge/dc_app/
gen_eeprom/DCU_ESI.xml,必须重烧固件 + 烧 EEPROM + 断电冷启动,只烧一边 SAFEOP 报
AL 0x001A/0x0011。
1.6.16 段1/段3 快照 drop 计数口径修复(纯判据,PDO 布局逐字节不动):旧判据
s_rxValid 置位后永不清零 ⇒ 开机首帧后每帧都算丢弃,drop ≡ rx−1,是零灵敏度假仪表
且把网页状态栏刷成 ERR。新增 s_rxPublished,判据改 s_rxValid && !s_rxPublished。
1.6.17~19 [DIFF-STATS] 差分写取证仪表,零行为变更,只加 0x2000 sub13..23(11 个只读
UINT32) ⇒ 不动 PDO 长度/映射,无需重生成 SII。实测:每拍 27.4% 字节真变化(164B)、
run 峰值 12~13、段2 占变化量 ~53%、段4 ~25%。
1.6.19 推翻 1.6.18 的自我诊断:比对开销虚报不是 -Oz 把 memcpy 编成调用(手拼移位
反而 21.3µs→41µs),真根因是 alignas(4) 到 const uint8_t* 形参处丢失,优化器无法
证明 4 字节对齐。__builtin_assume_aligned + memcpy 后循环体缩成 ldr/ldr/cmp/bne、
bl 归零。教训:测量工具自身的开销会直接变成结论。
1.6.20 基线对照版(当前提交状态 CONFIG_ECAT_DIFF_STATS=0):同工况(电机在线无指令)
实测 load 49.1% vs 仪表开的 51.6% ⇒ 仪表自身成本 2.4 个点,差分改造收益 = 0。
按实测变化量推算 A1(段粒度条件写) 只值约 1 点(段2/段4 每拍都变,必然整块重写),
仅 A2(8B 块粒度 + run 上限退化为整写) 有空间 —— 推算值,未做 A/B 实测不作为结论。
2026-09-09 03:04:53 +08:00
cbb
0cd3d9bed2
fix(comm): 回退LAN9252批量读写优化并修复多个CAN-EtherCAT桥竞态问题
...
回退1.6.0引入的LAN9252 PRAM批量读写优化,因其AVAIL_CNT计数器对短读存在语义问题,
导致邮箱短读和探针传输时出现FIFO陈旧数据损坏问题。
同时修复EtherCAT-CAN桥中的多个竞态条件:
- 修复消费者在fillRxBatch中直接访问共享ring buffer导致的数据混淆问题
- 修复生产者-消费者间tail指针发布时机不当造成的槽位覆盖竞态
- 修复WIN窗口基址更新位置错误导致电机状态窗口被锁定的问题
- 修复buildInput中断上下文与主循环间的数据竞争和内存撕裂问题
- 添加STATUS帧过滤机制减少批量区压力并解决队列饱和问题
此外还增加了多个诊断计数器用于监控撕裂、溢出和拼接错误,并调整了
输入PDO段布局和大小参数以支持新的48字节STATUS格式。
这些修改解决了上位机观察到的帧标签错误、电机状态丢失和数据拼接问题。
2026-09-08 00:52:35 +08:00
cbb
70daa4b0c6
feat(DCU_APP): 添加CPU负载监控和EtherCAT诊断功能
...
- 在DCU_APP项目中添加cpu_load.h和cpu_load.cpp模块用于CPU负载率监测
- 修改csolution配置将构建目标从Debug切换为Release
- 在EtherCAT PDO协议栈中新增段5诊断区(632-639字节),包含负载率和序列号
- 在所有关键中断服务程序中添加CpuLoad::isrEnter()/isrExit()钩子用于准确统计中断占用
- 增强EtherCAT同步中断处理,改进AL事件掩码守护机制,修复OP状态下PDI中断门控问题
- 解决SSC源码中指针地址对齐警告和打包成员访问警告问题
- 在主循环中集成CPU负载率采样tick()调用,实现1秒滚动窗口统计
BREAKING CHANGE: 构建配置从Debug改为Release,EtherCAT协议栈增加新的诊断数据区
2026-09-05 20:07:22 +08:00
cbb
44d407390b
fix(esc_lan9252): 修复LAN9252 HBI访问模型和IRQ输出使能问题
...
- 修正HBI访问模型:将ESC核心CSR(0x0000-0x0FFF)改为通过ECAT_CSR_CMD/DATA
间接端口访问,解决此前直接寻址导致核心寄存器恒读0/写丢弃的问题
- 新增csrRead/csrWrite/pramRead/pramWrite接口,正确实现LAN9252访问端口操作
- 添加PDI就绪检测:等待DL_STATUS bit0置位确认EEPROM加载完成和EtherCAT核心使能
- 实现IRQ引脚输出使能:配置IRQ_CFG和INT_EN寄存器,使EtherCAT事件能到达PB1,
解决PDI_Isr未触发导致SAFEOP->OP无限挂起的问题
- 为ESC_EXMC硬件诊断添加CONFIG_ESC_EXMC_DIAG门控,默认关闭避免影响正常运行
- 修正system_gd32e50x.c中HXTAL故障诊断的寄存器偏移和位设置错
2026-09-02 02:38:35 +08:00
cbb
cfe7725b26
feat(ethercat): LAN9252 bring-up完成,EEPROM烧录改主站侧并增强DC/AL可观测性
...
- 新增ESC硬件复位序列(1.5.25):PB10驱动LAN9252 RST#,拉低30ms+释放后300ms轮询HBI就绪,
满足tpurstd/trstia时序;此前RST#仅靠R44上拉自然释放
- 修正EXMC 16-bit地址左移(1.5.27):HBI DATA偏移0x20000/0x30000→0x40000/0x60000;
ADDSET 2→4 HCLK;片选更名NE1→NE0(LQFP100仅Region0)
- 按LAN9252手册/AN1907修正EEPROM镜像(1.5.28):word1高字节0x00→0xCC(SYNC0/1 Map+Output,
否则SYNC0留LATCH态DC过程数据死)、word2=5000(脉宽50µs)、尾部补真实0xFF;
gen_eeprom.py按ETG.1000.6重写;DCU_ESI.xml PDI 0x05→0x8D、RxPdo/TxPdo互换改4×64bit对齐
- 删除GD32侧EEPROM烧录路径(1.5.29):移除EscEeprom/esc_eeprom、eeprom_image.h及主循环
烧录块,ESI镜像改由主站ecat_flash_eeprom.py经ESC 0x0500刷写(162字全校验通过);
HBI互斥补屏蔽EXTI2(SYNC1),防Sync1_Isr两步事务打断主循环HBI访问致错址
- DC SYNC0通路可观测(1.5.30/31):EthercatSync新增sync0/sync1/escirq三个volatile计数器,
task_runner 5s按增量打印速率;SSC OD新增只读0x2000 SYNC Diag,主站SDO轮询网页显示
- AL通路诊断(1.5.32):ECAT_Main/SetALStatus打印主站AL请求与写回状态+错误码,
task_runner新增5s [ECAT][HB]心跳(仅同步ISR激活时);dc_app.c导出EcatDbg_ReadAlDiag
- 删除死代码EthercatSlave::periodicIsr三缓冲PDO桥,PDO交换由SSC完成(4×64bit=32B);
EthercatSlave::init()恢复调用并以isBusReady()(BYTE_TEST)门控
- CANFD修复同通道突发只发3帧:transmitFrame新增allow_abort区分突发/软件队列路径,
邮箱满落入软件TX队列(深度13)由TX完成中断drainTxQueueIsr回灌;BRS重新启用(0→1)
- motor_state新增CONFIG帧缓存(0x00000101, DLC 24)记录目标值回报,条目44B→76B、每页5→3
- SPI 0xA2诊断扩展action 20~24(ECAT_NRST拉低/拉高/浮空/回读);新增ESP32 EN自检打印
- 版本号更新至1.5.32
2026-09-01 03:07:48 +08:00
cbb
46ef19d882
feat(build): 优化构建配置并引入日志分级系统
...
- 将优化级别从balanced调整为size,减少Flash占用
- 添加hardfault.cpp文件以增强故障诊断能力
- 关闭RTTI和异常处理以移除libcppabi运行时(节省约2.5KB Flash)
- 添加链接器参数输出未引用段与总量报告用于Flash尺寸分析
refactor(logging): 统一日志输出并实现编译时日志分级
- 将printf调用替换为模块化的日志宏(ECAT_LOGI、CAN_LOGI等)
- 实现CONFIG_*_LOG_ENABLE编译开关控制各模块INFO级日志
- 错误和关键事件使用LOG_ERR恒定保留,其他日志可编译时裁剪
- 保持原有日志内容不变,但支持链接器自动回收未使用的格式字符串
2026-07-27 01:49:18 +08:00
cbb
edebde4a02
feat(canfd): 添加TX错误事件驱动的快速重发机制
...
添加TX错误事件标志和相关API以支持ARD模式下单发帧丢失的快速检测和重发,
实现停等式OTA在丢帧后的立即重发,避免等待ACK超时的延迟。
- 新增s_txErrorEvent数组跟踪各通道TX错误事件
- 添加readChannelErrorReg()读取CAN_ERR寄存器原始值
- 添加consumeTxError()消费TX错误事件并返回状态
- 在TX中断中检测MTE位设置错误事件标志
fix(motor-ota): 优化OTA重发策略和错误处理
调整OTA重发参数和逻辑,提升传输可靠性和响应速度。
- 将ACK超时重发间隔从500ms调整为100ms,提高响应速度
- 增加每包补发上限从2次到4次,保持总容错时间窗
- 实现TX错误驱动的快速重发,丢帧后立即按间隔补发
- 增加错误统计信息输出,包含重发和快速重发计数
- 提高仲裁段再同步跳跃宽度从1TQ到2TQ,增强总线容错能力
2026-07-27 00:02:14 +08:00
cbb
079c6442d4
feat(sys): 添加AES加密和电机OTA中继功能模块
...
添加了AES128加密算法实现和电机OTA中继相关文件,包括:
- ./sys/aes128.h 和 ./sys/aes128.cpp - AES128加密算法头文件和实现
- ./sys/motor_ota_relay.h 和 ./sys/motor_ota_relay.cpp - 电机OTA中继功能
- 更新了项目配置文件包含这些新模块
2026-07-26 20:39:59 +08:00
cbb
fedd39b902
feat(canfd): 添加CANFD硬件自检功能并优化初始化时序
...
- 新增s_channelHwOk数组跟踪各通道硬件初始化状态
- 修改CANFD初始化流程,在GPIO上电后延时200ms再进入Normal模式
- 实现selfTestL0()轻量自检函数,检查硬件初始化、退出init模式、收发器状态等
- 更新CANFD初始化逻辑,只有自检通过才标记为成功
refactor(spi): 调整SPI DMA和EXTI配置顺序避免通信失步
- 将armSpiDmasForNextCs()调用移至configureExti()之前
- 添加注释说明DMA预装和EXTI开启的时序要求
- 避免OTA跳转后ESP32立即发送HELLO导致的SPI从机失步问题
fix(app_spi): 修复HELLO_ACK响应中credit初始化问题
- 在HELLO_ACK构建前将g_localCredit设置为1
- 与requestEsp32Read()保持一致避免TX占用时credit=0的问题
- 防止主机因remoteCredit=0而拒绝发送PING帧
refactor(initial): 重构应用初始化流程添加模块状态跟踪
- 引入ModuleBit枚举和掩码机制跟踪各模块初始化状态
- 实现mark()和report()方法统一管理模块启动结果
- 按NVIC→SysTick→ESP32_EN→USART0→AppSpi→ADC→CANFD→OTA→TaskManager→Scheduler→EtherCAT→Watchdog顺序启动
- 将CANFD模块成功条件改为selfTestL0()通过才标记成功
2026-07-17 02:03:00 +08:00
cbb
52d7f9be76
feat(device_exmc): 添加GD32E508 EXMC外设支持用于LAN9252通信
...
添加EXMC 16-bit并行总线驱动实现,用于LAN9252 ESC通信。
在cproject.yml中添加device_exmc组和相关源文件,包括
gd32e50x_exmc.c/h文件,并更新头文件搜索路径。
由于GigaDevice DFP未将EXMC注册为CMSIS组件,需要本地编入
RTE/Device目录下的EXMC源文件以支持LAN9252并行总线功能。
fix(canfd): 优化CANFD驱动中的条件编译和DLC处理逻辑
将CANFD相关的配置项从硬编码改为使用sys/config.h中的配置。
添加对DLC=0情况的支持(表示无数据负载的远程帧),
修正了数据长度检查逻辑,确保DLC为0时不需要提供数据指针。
同时重构了调试代码的条件编译,使用CONFIG_CAN_STARTUP_DIAG_VERBOSE
等配置开关控制调试输出函数的编译。
refactor(ethercat): 统一配置项管理,移除硬编码常量
将EtherCAT相关配置项从硬编码改为统一的sys/config.h配置,
提升代码可维护性。
docs(spi): 更新SPI命令响应缓冲区大小说明
更新CAN桥接和ID快照命令的响应payload大小计算说明,
统一使用AppSpiCommand::kTxBufSize - V2_OVERHEAD作为上限。
2026-07-16 23:00:52 +08:00
cbb
76da7a3dd6
Refactor and clean up codebase
...
- Removed unused constants and type aliases in app_spi_command_defs.h and temp_sensor.h.
- Simplified ISpiCommandHandler destructor to default.
- Eliminated redundant methods and comments in temp_sensor and usart0 files.
- Consolidated writeU32Le function to app_spi_command_defs.h for reuse.
- Updated comments for clarity and accuracy in task_manager.h and task_runner.cpp.
- Removed hardfault.h as it contained no declarations.
- Cleaned up CANFD and watchdog implementations by removing dead code and unnecessary comments.
- Updated version numbers in config.h to reflect recent changes.
- Enhanced error handling and diagnostics in hardfault handling.
2026-07-15 02:49:37 +08:00
cbb
a52d94687b
refactor(SPI): 实现全双工DMA传输以提升通信可靠性
...
- 配置DMA0_CH1用于SPI0_RX接收,替代原有的RBNE中断逐字节处理
- 添加startSpiRxDma、stopSpiDmas、drainSpiRxHw等DMA控制函数
- 在CS空闲期预装下一笔DMA传输,避免EXTI CS下降沿相对于SCK偏晚导致收0字节
- 与BOOT工程SpiOta的DMA配置对齐,确保通信稳定性
refactor(SPI): 优化CS边沿处理逻辑和命令解析时机
- 移除原有的EXTI5_9_IRQHandler用于SPI Ready引脚处理
- 将命令处理从异步任务调度改为在CS释放中断中同步完成
- 重构onCsAssert和onCsRelease逻辑,简化DMA启停流程
- 删除TASK_SPI_CMD_PROCESS任务类型,减少不必要的任务调度
feat(CANFD): 修改transmitFrame返回类型为枚举值以提供详细错误信息
- 将CanFd::transmitFrame返回类型从bool改为CanTxResult枚举
- 新增CanTxResult枚举定义,包含kOk、kErrBusOff、kErrTecHigh、kErrMailbox、kErrInvalid
- 更新SPI桥接命令处理中对transmitFrame返回值的处理逻辑
- 枚举值设计与SPI错误响应码对齐,便于直接透传错误信息
refactor(SPI): 实现全双工DMA传输以提升通信可靠性
- 配置DMA0_CH1用于SPI0_RX接收,替代原有的RBNE中断逐字节处理
- 添加startSpiRxDma、stopSpiDmas、drainSpiRxHw等DMA控制函数
- 在CS空闲期预装下一笔DMA传输,避免EXTI CS下降沿相对于SCK偏晚导致收0字节
- 与BOOT工程SpiOta的DMA配置对齐,确保通信稳定性
refactor(SPI): 优化CS边沿处理逻辑和命令解析时机
- 移除原有的EXTI5_9_IRQHandler用于SPI Ready引脚处理
- 将命令处理从异步任务调度改为在CS释放中断中同步完成
- 重构onCsAssert和onCsRelease逻辑,简化DMA启停流程
- 删除TASK_SPI_CMD_PROCESS任务类型,减少不必要的任务调度
feat(OTA): 添加BOOT版本号读取功能并优化版本信息获取
- 在ota_boot_request模块中添加readBootVersion函数
- 从OTA配置页Flash读取BOOT版本号信息
- 在SPI PING命令响应中使用新的版本读取接口
- 统一版本号获取方式,避免裸指针访问Flash地址
refactor(task): 调整诊断打印任务调度周期为5秒间隔
- 新增div_diag_print调度分频计数器用于诊断打印
- 将诊断打印任务从心跳任务中分离,独立控制执行周期
- 修改诊断打印函数注释,明确其由5秒节拍触发
- 优化任务调度逻辑,提高系统运行效率
2026-07-15 00:34:56 +08:00
cbb
10989939e9
feat(canfd): 修复CAN发送问题。实现CANFD发送完成中断处理和通道健康检查
...
- 添加CANFD发送完成中断处理函数,确保只有MTFNERR置位时才计数发送成功
- 新增通道健康检查功能,防止病态通道被持续重发的测试帧反复推回BUS_OFF
- 重构CANFD配置结构体,添加TX中断配置项并修正GPIO映射设置
- 移除原有的软件发送队列机制,改为直接硬件发送模式
- 更新项目配置文件中的CANFD源文件路径命名
fix(canfd): 修复CANFD发送计数和错误处理逻辑
- 修正发送计数只在硬件MTFNERR确认后增加,而非请求进入邮箱时
- 改进错误日志输出,添加详细的错误类型和通道状态信息
- 优化总线恢复机制,通过收发器静默-唤醒协助硬件自动恢复
- 添加条件编译开关控制启动时自检和回环测试功能
2026-07-11 17:52:05 +08:00
cbb
3691cf2aba
refactor(spi): 优化CAN反馈推送的节流机制
...
将CAN反馈推送改为1Hz节流,由taskHeartbeat每秒调用
canFeedbackStartRound激活新轮次,避免与CANFD刷新频率不匹配。
添加s_roundActive标志控制推送节奏,确保每轮完成后等待下一秒
再开始新的推送循环。
---
feat(spi): 实现SPI就绪状态检测和链路状态机
新增SpiLinkState类管理SPI链路状态,通过EXTI6检测PB6引脚
的上升沿来判断ESP32是否完成上一帧处理。
配置SPI Ready引脚的外部中断,实现可靠的ESP32完成信号检测,
避免在ESP32未就绪时过早发起新的SPI通信。
修复SPI接收溢出处理,改为丢弃溢出字节而非重置整个接收缓冲区,
提高SPI通信稳定性。
2026-07-09 02:47:22 +08:00
cbb
b78e36ff37
feat(canfd): 添加通道使能控制和SPI握手信号支持
...
- 添加通道使能开关配置,通过sys/config.h中的CONFIG_CAN_CHx_ENABLE控制各通道
- 实现isChannelEnabled()方法用于查询通道使能状态
- 修正CAN1引脚映射配置,将RX/TX引脚对调并禁用重映射
- 修正错误计数器读取逻辑,REC字段从bit24开始提取而非bit8
- 修正busOff状态判断,使用CAN_ERR_BOERR标志位
- 调整滤波器配置时机,移到所有hardReset完成后防止共享寄存器被清零
- 在发送时增加总线健康检查,避免高错误计数时继续发送导致bus off
- 添加SPI Ready握手信号(PB6)控制,改善主从机通信同步
fix(spi): 实现SPI命令处理中的READY信号握手协议
- 添加SPI Ready信号控制,PB6输出指示从机就绪状态
- CS下降沿立即拉低READY信号防主机抢跑
- 命令处理完成且无待处理命令时拉高READY信号
- 忽略无效事务后恢复READY信号避免超时
- 在繁忙期间保持READY信号低电平通知主机等待
2026-07-06 19:13:56 +08:00
cbb
6aa21a1f9d
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延迟要求
2026-07-02 02:02:41 +08:00
cbb
b171767023
feat(ethercat): 添加EtherCAT从站功能支持并优化同步机制
...
- 添加CAN反馈和ID快照SPI命令文件
- 移除EXMC组件依赖,精简项目配置
- 添加RAM函数段链接脚本,优化Flash等待周期抖动
- 实现EscExmcBus类,提供16位并行总线访问LAN9252
- 实现EscLan9252驱动,支持寄存器和PDI内存访问
- 实现EthercatSlave类,采用三缓冲机制进行PDO数据交换
- 实现EthercatSync同步管理,支持SYNC0/SYNC1中断和定时器模式
- 添加ISR执行时间统计和诊断功能
- 分离周期路径和事件路径通知机制,避免RMW竞态
2026-06-29 01:51:02 +08:00
cbb
1612e326ee
feat(cproject): 重构项目文件结构并添加EtherCAT通信支持
...
- 将设备相关文件重新组织为device/spi和comm分组
- 添加EtherCAT从站通信模块(esc_exmc_bus、esc_lan9252、ethercat_slave等)
- 添加EXMC外设组件支持
- 统一文件命名规范为小写
refactor(canfd): 优化CANFD模块中断安全性和配置方式
- 替换自定义临界区函数为RT_CRITICAL_SAVE/RESTORE宏
- 使用配置常量CONFIG_IRQ_PREEMPT_CAN替代硬编码值
- 简化邮箱满时的处理逻辑,移除不必要的SysTick等待
- 移除废弃的中断保存头文件引用
refactor(timer): 更新定时器配置以使用配置常量
- 修复头文件包含路径大小写问题
- 使用CONFIG_NVIC_PRIORITY_GROUP配置项替代硬编码值
2026-06-26 00:57:59 +08:00
cbb
86c0ec730b
feat(canfd): 添加CANFD发送邮箱占用处理机制
...
当CAN控制器因总线无ACK导致邮箱卡死时,实现两段式恢复策略:
1) 短自旋轮询邮箱状态,大多数场景下可避免触发abort而不丢帧
2) 若仍全部PENDING则只中止第一个占用邮箱,限制最坏丢帧数量为1帧
添加了tx_abort_count诊断计数器用于监控该情况,并引入SysTick延时功能
refactor(spi-cmd): 优化SPI命令日志输出格式
将CAN发送相关日志改为统一的格式化函数输出,增加数据字段十六进制显示功能,
并扩大日志缓冲区大小从128到256字节以支持更详细的日志信息
chore(spi-command): 添加SPI帧类型分类和非刷写帧日志记录
新增isFlashRelatedFrame函数区分刷写相关帧类型,在处理命令时对非刷写帧进行日志记录
perf(diagnostic): 在诊断打印中添加发送中止计数统计
更新诊断信息打印格式,增加tx_abort计数项,便于监控CAN发送异常情况
2026-06-25 01:11:31 +08:00
cbb
01382a3fc1
feat(canfd): 添加直接发送CANFD帧功能用于SPI桥接场景
...
- 新增 CanFd::transmitFrame() 方法,支持绕过软件队列直接调用
硬件发送CANFD扩展帧
- 实现参数验证,包括通道索引、数据指针和DLC长度检查
- 集成GD32E508特定的FD标志和波特率切换设置
- 更新诊断统计信息,记录发送计数、最后ID、通道和负载长度
feat(spi-command): 添加SPI到CAN总线桥接发送命令类型
- 引入 kTypeCanSend (0xC0) 命令类型用于SPI-CAN桥接
- 实现CAN_SEND命令处理逻辑,解析载荷中的通道、ID和数据
- 支持3个CAN通道(0/1/2),验证通道有效性防止越界访问
- 添加详细的错误处理和日志记录机制
refactor(config): 更新SPI命令ACK确认码和构建版本号
- 将CONFIG_SPI_APP_OTA_BOOT_ACK_OK从0xA5U改为0xB5U以避免冲突
- 提升APP_FW_VERSION_BUILD从1到2以反映新功能集成
2026-06-13 17:07:25 +08:00
cbb
f63114f5fd
feat(canfd): 切换 CANFD 接收为中断驱动和环形缓冲机制
...
- 将 CANFD 接收机制由轮询改为 FIFO0 的中断事件驱动处理
- 实现循环取空硬件 FIFO0,提高接收效率和响应速度
- 引入环形缓冲区缓存接收帧,支持多路通道多帧队列管理
- 置位解析任务标志位,实现接收数据的异步解析
- 增加接收中断统计,包括 FIFO 满和溢出计数
- 重构临界区代码,使用自定义函数保护中断状态
- 修改接收过滤器配置,支持按掩码匹配标准帧进入 FIFO0
- 使能 CAN FIFO0 多种中断标志,包括非空、满和溢出中断
2026-05-30 00:24:31 +08:00
cbb
078ea06317
refactor(device): 移除备份配置文件并完善ADC模块注释
...
移除不再需要的 .cproject.yml.bak_dma 和 README.md 备份文件,
同时为 ADC.cpp 添加完整的 Doxygen 风格函数注释,提升代码可读性。
2026-05-10 21:27:51 +08:00
cbb
4b8b47bc9b
feat: 添加GD32E508 DCU应用工程的初始结构
...
- 新增完整的CMSIS解决方案配置,包含AC6/GCC/IAR/CLANG编译器支持
- 添加项目配置文件,定义了设备层、系统层、应用层的模块结构
- 配置ARM::CMSIS和GigaDevice::GD32E50x_DFP软件包依赖
- 创建多层代码架构:应用入口(main)、系统层(sys)、设备层(device)
- 实现任务管理系统,包含任务调度器和任务执行器分离设计
- 集成ADC、CANFD、定时器、串口、温度采样等核心功能模块
- 添加详细的README文档说明项目结构和代码组织方式
- 配置AC6链接脚本和运行时环境文件
- 设置Git忽略规则以排除编译产物和临时文件
2026-05-10 17:28:14 +08:00