cbb
|
644c8fb8a8
|
feat(ecat): 完善LAN9252硬件初始化与诊断功能
完善readReg32函数中高低字节读取顺序,确保按先低后高的固定顺序,
避免C++中运算符求值顺序未指定导致的不确定性问题。
在ESC硬件复位后增加50ms延时,等待内部PLL锁定与EEPROM启动,
对齐APP侧实现保持一致性。
增强EXMC初始化过程中的硬件连通性检测,添加互补图案回环测试
和短路排查机制,增加轮询机制确保BYTE_TEST寄存器读取成功。
新增诊断模式宏DIAG_HOLD_PE7_HIGH,用于上电时持续拉高PE7引脚
进行硬件诊断测试,便于万用表实测直流电平验证电路连接。
|
2026-10-13 00:48:14 +08:00 |
|
cbb
|
77354fd2a8
|
feat(boot): 1.1.0.22 CoE 跳回 APP + 连续崩溃门 + warm jump 根治
变更点:
1. CoE 0x2503「GD32 jump to app」
- 主站写 1 → requestJumpToApp:向量/CRC 校验后置 CHECK/AVAL/EN,process() 在 SDO 响应后跳
- 与 APP 0x2502 对称;crash_gate 只禁自动跳,人工跳仍允许
2. 连续 FWDGT 崩溃门(配置页 word9)
- 复位 crash_count+1;达 OTA_LAYOUT_CRASH_STAY_MAX(3) 后关闭全部自动跳 APP
- APP 喂狗稳定后再清 0(不在 init 立刻清)
3. warm jump 卡死
- bootEcatDeinit 去掉 LAN9252 writeReg32(INT_EN/IRQ_CFG):HBI 不返回会锁死 AHB
- 跳转前有界等 USART TC,避免 handoff 半截 + APP 乱码
4. EtherCAT 邮箱空闲限速 5ms;delayMs 改 WFI,BOOT 驻留不空转烧 CPU
5. ota_layout.h vendored 进仓库(GD32E50X_BOOT/shared/),include 改 ../shared/
6. .gitignore:firmware_keep/、评审 HTML、IDE 过程目录
|
2026-09-20 22:58:14 +08:00 |
|
cbb
|
3d1fcfc6fb
|
fix(boot): 1.1.0.18 短路跳转前 LAN9252 硬复位,根治 warm jump 起不来
现象:刷完 warm jump 进不去 APP,按 reset 走 cold jump 同一镜像正常起
=> 差异只剩 s_escBusUp 为真时 bootEcatDeinit 真干的活。只短路
escResetForJump() 一发(boot_ecat_hw.cpp:507,其余与 1.1.0.14 逐指令
相同),真机实测 warm/cold 均可跳。
注:1.1.0.15~17(关中断跳转/BKP 面包屑/EXTI15 清理)未提交、已整体
回退到 46adcb7,补丁存 G:/Robot_v2/DCU/_revert_backup_20260916/;
版本号取 18 不复用 15/16/17(三版都真上过板,[J6] 读数须唯一可辨)。
|
2026-09-16 00:48:05 +08:00 |
|
cbb
|
46adcb790c
|
feat(boot): BOOT 常驻原生 EtherCAT 刷 APP,跳转前按 HBI 使用情况补发 ESC 复位
把 BOOT 侧已上板跑通的 SSC/HBI 移植层一次性入库(comm/ecat + gd32e50x_exmc),
并修掉「刷完首启 APP 报 EXMC 总线未就绪、断电重上即好」这条实测链:
- v1.1.0.13:jumpToApplication 前补一发 LAN9252 RST#。BOOT 侧 HBI 全是索引两步事务,
bootEcatDeinit 末尾的 writeReg32 把 HBI_IDX_0 留在 0x0054,而 APP 起板探针判
IDX_0==0x1234(DS 9.5.4.2 复位默认值),带着残值跳进去就直接报总线未就绪。
- v1.1.0.14:那一发不能无条件下发。path=jump_latest_now(上电 3ms 直跳、这轮 ESC 从没
起过)也在电源刚稳的窗口里拉了 RST#,释放点距上电仅约 15ms,板上表现为每次上电都停
在 BOOT 里(串口停在 [J5-HEX];microlib + putChar 逐字符阻塞等 TBE,故日志停在半截
= CPU 真停在那儿,不是尾巴没刷出来)。现由 s_escBusUp 门控(bootEcatBringup 里
exmcInit 成功才置位);脉宽从 delay_1us(按 4cycle/迭代标定,实测 30ms 只走出 8ms)
换成 DWT CYCCNT 真 30ms + 释放后 2ms;跳转前打 [J6] boot v<ver> handoff。
delay_1ms 在这里不可用:本函数跑在 __disable_irq() 之后,SysTick 中断不递减就是永久
死等,而 BOOT 没开 IWDG —— 那会变成刷完直接静默变砖。
v1.1.0.12 的两条一并入库:10s OTA 窗口的活性判据并上 ecatSessionActive(防半截灌写被
当合法 APP 跳进去、HardFault→复位→留守 10s 形成活锁);0x100A 上报真版本串
(DEVICE_SW_VERSION_LEN 0x3→0x10,acSoftwareversion 显式给 LEN+1 防越界读)。
板上实测:v1.1.0.14 上电直跳恢复正常,APP v1.6.34 起板,自检 ethercat 不再降级。
|
2026-09-15 00:19:33 +08:00 |
|
cbb
|
45690f6134
|
fix(SpiOta): 修复ISR响应缓存逻辑,只缓存ACK/ERROR拒绝WAIT
此前isrProcessFrame()无条件将当前s_txBuf缓存到s_lastRespBuf,
导致OTA数据包在ISR入队时立即返回的WAIT被写入重发缓存,覆盖
了sender()内只缓存ACK的语义。当ESP32超时重发时,DUP-SEQ分支
回放的仍是过期WAIT,造成50ms等待→重发链被拉长的问题。
现在按v2头TYPE字节过滤,只将ACK/ERROR放入重发缓存,WAIT由
sender()途径主循环写ACK时再统一更新缓存。
feat(main): 添加ESP32_EN引脚初始化和调试信息输出
添加PC9引脚初始化代码,确保BOOT阶段ESP32能正常启动。
同时增加调试打印信息,便于检查ESP32_EN状态和D3V3电源域
就绪情况。
perf(boot): 优化主循环节拍控制策略
回滚之前"有工作时不休眠"的尝试,恢复为固定1ms节拍。
因为条件化延迟会让ESP32在armSpiDmasForNextCs()的
spi_dma_disable/enable窗口中抓取CS,读到错帧导致通信异常。
fix(OTA): 恢复20us超时步进以保证SPI通信稳定性
回滚之前"本轮干活就不delay"的尝试,恢复为统一20us步进。
因为实测发现条件化延迟会让ESP32在DMA开关窗口中抓取CS,
导致READ错帧和saw_wait=0问题。
chore(config): 更新固件版本号至v1.1.0.5
feat(UART): 将调试串口波特率提升至3Mbps
提升Bootloader系统的调试串口通信速率,从11520提升至
3000000,加快日志输出和调试效率。
|
2026-09-01 02:48:04 +08:00 |
|
cbb
|
1ec8aa3b5b
|
fix(ota): 修复SPI OTA重传机制和跳转应用逻辑
- 主循环发送ACK时同步更新重发缓存,解决ISR先写WAIT后主循环发ACK不更新
缓存的问题,避免重发时返回过期WAIT导致ESP32永远接收WAIT而中止传输
- 在stay_in_ota状态结束跳转应用前增加CHECK/AVAL标志门控,防止在
OTA中途取消时verifyAppCrc的FLASH_EMPTY兜底逻辑误判通过,跳入半成品
固件导致GD32永久失联
|
2026-08-02 17:36:26 +08:00 |
|
cbb
|
f9ae1be120
|
feat(ota): 完善OTA会话管理机制并优化AES实现
完善OTA会话状态管理,增加clearOtaSessionQueues函数统一处理会话清理,
确保CANCEL/超时/错误情况下完全复位状态、缓冲区和信用额度。
修复bootloader在stay_in_ota模式下的死循环问题,添加活动状态监控,
当OTA会话结束后自动跳转回APP,避免设备永久停留在bootloader。
统一AES模块的数据类型定义,从u8改为标准uint8_t,提升代码兼容性。
更新AES实现中的变量声明,使用一致的uint8_t类型避免潜在类型转换问题。
|
2026-07-30 11:57:51 +08:00 |
|
cbb
|
005072b1df
|
feat(ota): 添加SPI OTA传输模式下的CAN帧处理保护机制
当SPI OTA会话进行时,禁止CAN抢夺回包出口,防止ACK发送到错误通道。
同时在SPI OTA期间丢弃CAN OTA帧,避免ota_bind_can抢占SPI回包出口。
BREAKING CHANGE: 修改了CAN传输器的通信检查逻辑,优先处理SPI OTA。
|
2026-07-20 03:12:08 +08:00 |
|
cbb
|
62eab6fcdf
|
feat(SpiOta): 引入配置化常量并优化SPI OTA实现
- 将硬编码的超时时间和缓冲区大小替换为配置文件中的常量
- 重构响应缓存对齐方式,使用SpiOta::kTxBufSize进行长度对齐
- 重新调整初始化顺序:先预装DMA再开启CS中断,避免首笔CS竞争问题
- 优化CS释放逻辑注释,明确说明ESP32数据准备状态的处理机制
- 在应用跳转前增加80ms延时,避免与主机HELLO时钟重叠影响SPI初始化
- 在配置头文件中统一定义SPI相关参数,提高代码可维护性
- 更新SPI握手信号语义说明,明确v2协议的数据就绪状态机制
|
2026-07-17 02:06:12 +08:00 |
|
cbb
|
3377a2e58a
|
refactor(device): 移除未使用的CAN DMA初始化函数和SPI中断处理
移除了CAN模块中未启用的DMA初始化相关代码,包括can_dma_init函数
和相关的调用。同时移除了SPI OTA模块中已废弃的中断处理函数和C风格
兼容包装函数,这些功能已被DMA方式替代。
BREAKING CHANGE: 移除了can_dma_init函数和spi_ota_irq_handler等C风格API。
|
2026-07-15 01:56:38 +08:00 |
|
cbb
|
c5d8c9798a
|
feat(boot): 重构SPI OTA响应提交机制并修复CRC写入问题
- 将queueTxFrame重命名为submitResponse以更准确反映功能
- 移除已废弃的SPI ready EXTI配置和相关处理函数
- 删除未使用的feedRxBytes和copyTxFrame接口函数
- 修复CRC地址页擦除问题,确保OTA完成后能正确写入和验证CRC
- 更新BOOT固件版本号从1.0.1.2到1.0.2.1
|
2026-07-15 00:35:08 +08:00 |
|
cbb
|
1223be9ca9
|
fix(boot): 修复SPI OTA协议中的ACK丢失死锁和缓冲区管理问题
- 修复ACK丢失导致的死锁问题:修改onCsRelease()逻辑,只有在ESP32发送
有效v2请求帧时才清除s_txPending,避免dummy poll误清待发ACK
- 优化缓冲区管理和信用机制:实现增量式flash缓冲区排空(drainFlashBufferOne),
避免一次性排空阻塞主循环;CREDIT计算同时考虑ISR DATA队列待处理数量
- 添加重复序列处理增强:当DATA仍在主循环排队时优先回复ACK(type=0x80),
避免ESP32长时间接收WAIT导致连接中断
- 修复缓冲区满时的数据包丢失:在handleLinkMessage中同步排空已写入槽位,
腾出空间后继续处理当前包,防止永久DUP-SEQ错误
- 优化主循环处理顺序:先处理ISR DATA队列并及时回复ACK,再进行flash写入,
减少ESP32超时重发导致的断续问题
- 增加FLASH写入错误检查:验证fmc_word_program返回状态,写入失败时及时
返回避免数据损坏
|
2026-07-14 12:10:25 +08:00 |
|
cbb
|
c644c29a4b
|
feat(GD32E50X_BOOT): 集成SPIv2命令,并添加头文件路径配置
- 添加spi_link_v2.cpp到项目中,分组为spi_link
- 新增G:/Robot_v2/DCU/spi_link目录到编译器包含路径
- 优化项目结构以支持SPI通信功能
|
2026-07-13 03:10:55 +08:00 |
|
cbb
|
dfc12611ed
|
feat(SpiOta): 添加SPI链路状态机避免帧丢失
- 引入SpiLinkState类管理SPI通信节奏控制状态机
- 实现链路状态控制,确保ESP32完成读取前不发起新的按铃请求
- 配置EXTI6中断监控PB6(SPIready)上升沿信号
- 在requestEsp32Read中检查canRingNow()状态防止帧冲突
- 添加onSpiReadyExti中断处理函数更新链路状态
|
2026-07-09 02:46:56 +08:00 |
|
cbb
|
59c2bf5527
|
feat(SpiOta): 实现SPI OTA同步协议和主动按铃机制
- 添加SPI OTA同步协议,使用新的帧格式包含信用控制和CRC32校验
- 实现BOOT主动按铃功能,通过SPI Ready线通知ESP32读取数据
- 添加按铃超时保护机制,防止死锁情况发生
- 优化SPI中断处理,统一在CS释放时处理帧避免RX溢出错误
- 修改GPIO配置为开漏输出模式,实现硬件握手信号
- 添加同步帧解析功能,支持帧头偏移扫描和完整性校验
- 实现信用控制机制,当flash缓冲区满时阻止ESP32继续发送数据
- 修复BOOT命令响应逻辑,确保一致性处理裸字节和帧式命令
- 将OTA完成验证移到主循环处理,避免SPI ready线阻塞过久
- 添加详细的调试日志输出便于问题排查
refactor(SpiOta): 重构SPI OTA协议栈
- 使用CRC32替代CRC8进行帧校验,提高数据完整性
- 重命名帧相关常量以匹配新的同步协议格式
- 移除旧的帧处理方法,采用新的同步帧解析流程
- 添加大小端转换辅助函数用于数据编码解码
- 优化内存布局减少RAM使用
- 统一错误处理流程,添加帧校验失败日志记录
|
2026-07-08 02:51:57 +08:00 |
|
cbb
|
52e59876cf
|
feat(SpiOta): 添加SPI OTA协议硬件握手功能
- 添加对BOOT实际支持的OTA协议帧(REQ/DATA/CANCEL)的过滤,
对不支持的帧类型(如CAN bridge命令)返回ERROR响应,避免误处理
- 实现SPI Ready硬件握手功能,复用PB6引脚作为SPI Ready信号输出,
CS下降沿拉低表示从机忙碌,响应完成后拉高表示就绪
- 新增setSpiReady接口用于控制SPI Ready引脚状态,
确保与DCU_APP行为一致,适配ESP32的硬件握手时序
- 修复因未知帧类型被误认为CANCEL而导致OTA状态机被频繁重置的问题
```
|
2026-07-06 19:13:36 +08:00 |
|
cbb
|
0b086d4b86
|
refactor(spi): 优化SPI OTA模块代码结构
- 移除未使用的调试相关变量和函数,包括s_isrLogPending、s_isrLogBuf等
- 简化注释内容,保留核心功能说明
- 优化CS信号处理逻辑,提高代码可读性
- 修正帧处理中的竞态条件问题,提前设置响应标志避免重复处理
feat(boot): 添加BOOT固件版本号管理功能
- 在main.cpp中添加版本号写入逻辑,将BOOT版本号存储到OTA配置页
- 更新OTA配置页结构,从6个word扩展到8个word,增加版本号存储空间
- 实现版本变更检测机制,仅在版本更新时重写配置页
- 优化SpiOta模块的日志系统,移除多余的调试日志和缓冲区管理代码
|
2026-06-03 03:13:30 +08:00 |
|
cbb
|
061bcabc37
|
feat(boot): 添加OTA状态检查避免心跳打印干扰
当OTA激活时,停止心跳打印以减少日志干扰并避免潜在的
并发问题。
fix(ota): 修正boot跳转汇编代码移除错误寄存器操作
移除psplim和msplim寄存器设置,这些寄存器在目标架构中不
需要配置,避免潜在的硬件兼容性问题。
feat(ota): 添加FLASH操作调试日志输出
在FLASH编程、擦除等关键操作时添加调试日志,便于跟踪
固件升级过程中的具体行为。
perf(ota): 优化OTA完成后的外设关闭和跳转流程
重构跳转逻辑,直接使用内联汇编替代naked函数,提高跳转
的确定性和可靠性。
fix(ota): 添加重复包过滤机制避免数据重复处理
实现包序号验证和去重逻辑,防止ESP32超时重传导致的数据
重复写入问题。
fix(ota): 修复FINISHED状态下重传包的处理逻辑
当OTA完成后收到重复数据包时,返回WAIT状态让ESP32重新
发送FINISH命令,而不是重置整个状态机。
feat(ota): 改进应用程序校验逻辑支持调试器烧录
修改CRC校验逻辑,当Flash中未写入CRC值时视为校验通过,
允许通过调试器直接烧录的应用程序正常启动。
|
2026-06-02 22:13:30 +08:00 |
|
cbb
|
c801701783
|
fix(OTA): 移除BOM标记并优化OTA处理逻辑
移除了OTA.cpp文件中的BOM标记,删除了调试打印代码,修复了
缓冲区溢出检查逻辑,并简化了结束确认帧的发送方式。
- 移除文件开头的BOM标记
- 删除DEBUG_PRINT相关的调试输出代码
- 修正缓冲区大小检查条件,使用expected_size替代硬编码值
- 将结束确认改为使用结构化ACK消息发送
|
2026-06-01 21:27:03 +08:00 |
|
cbb
|
4a39028f74
|
feat(bootloader): 添加CRC32完整性校验和SPI OTA优化
添加了硬件CRC32完整性校验机制,在固件更新后计算并验证CRC32,
确保应用区固件完整性;同时优化SPI OTA的数据处理流程,
引入环形缓冲机制解决帧重复处理问题,并增加传输日志记录。
BREAKING CHANGE: 固件布局调整,应用区末尾预留4字节存储CRC32值
|
2026-05-31 01:45:37 +08:00 |
|
cbb
|
b39a78e3fc
|
fix(bootloader): OTA可用版本,修复跳转主应用前的中断关闭及外设清理顺序
- 把关闭中断操作提前到写 Flash 标记前,避免中断嵌套导致栈溢出
- 完整清空 NVIC 中断使能和挂起标志
- 关闭 DMA 通道及相关外设(CAN0、SPI0、EXTI15)并打印调试信息
- 关闭 SysTick 定时器,避免影响主应用运行
- 取消了不必要的时钟切换,简化收尾逻辑,避免引入额外变量
- 通过裸汇编函数安全切换 MSP,并跳转至主应用入口
- 增加十六进制堆栈大小定义调整,将堆栈大小由0x200增大至0x400
|
2026-05-30 20:03:03 +08:00 |
|
cbb
|
ea7a885de4
|
fix(spi-ota): SPI刷写初版已可完整进行刷写流程
- 在SPI OTA ISR处理函数入口立即设置已响应标志,防止帧被重复处理,避免状态机错误推进
- 修正DMA启动前预填SPI发送缓冲区,覆盖旧字节,解决MISO线输出旧ACK字节导致序号错位问题
- 改为SPI从机内部NSS固定低电平,防止因EXTI延迟丢失首字节,提升帧接收稳定性
- 优化CS下降沿处理流程,确保DMA停止后重新配置并启动,避免数据丢失和标志位误触发
- CS上升沿停止DMA但保持内部NSS低电平,提高下一次事务的接收连续性
- SPI中断处理加入对上次事务提前检测和补充分支,增强系统鲁棒性
- 降低调试打印频率,减少ISR日志开销
- 修复看门狗复位检测代码,阻止BOOT跳转至卡死的APP,进入等待OTA修复模式
- 在工程配置文件中添加bin格式输出支持
|
2026-05-30 00:35:56 +08:00 |
|
cbb
|
8590d327e6
|
feat(ota): 优化握手请求处理及OTA会话状态管理
- 新增 OTA 会话激活状态标志 s_otaSessionActive 及其访问接口
- 在设置传输发送器时激活 OTA 会话状态
- OTAHandler 初始化时显式重置状态机,防止旧状态残留
- 严格区分握手请求 payload,避免 SPI OTA 握手误判状态
- 允许更多 OTA 状态接收握手请求,提升协议容错性
- 非空闲状态拒绝新握手请求并发送等待响应
|
2026-05-28 23:39:52 +08:00 |
|
cbb
|
9d4572da13
|
fix(spi-ota): 修复SPI OTA从机接收和状态机处理逻辑
- 调整pollAllLinks执行顺序,先轮询SPI再轮询CAN,减少CAN阻塞对SPI的影响
- SPI内部NSS固定拉低,避免因NSS延迟导致首字节丢失问题
- onCsAssert中全面停止和重启DMA,确保DMA传输第一拍正确发出
- 修正CS断开时DMA停止逻辑,保持内部NSS常低,提升SPI从机响应稳定性
- 增加多缓冲ISR日志区,提升关键事件调试信息完整性
- 完善SPI中断流程,支持缺失EXTI中断时补做CS断言,优化首字节数据处理
- 实现tryProcessCompleteFrame函数,实现RBNE中断内即时帧检测和处理
- OTA模块增加getState和resetToIdle接口,支持BOOT命令重置OTA状态机
- 开启DEBUG_PRINT,启用调试打印输出,便于运行时状态监控和问题排查
|
2026-05-28 21:52:07 +08:00 |
|
cbb
|
d1beb3b615
|
feat(device): SPI OTA模块改用DMA发送替代TBE中断
SPI OTA模块从PendSV延迟响应模式改为DMA发送模式,主要改进包括:
- 添加DMA支持,使用DMA0_CH2自动发送SPI0数据,消除字节错位问题
- EXTI ISR直接完成帧校验+处理+响应准备,不再依赖PendSV
- 移除PendSV相关代码和中断处理函数
- CS释放后直接处理帧数据,响应帧写入s_txBuf由DMA自动发送
- 更新注释文档说明新的工作流程和DMA通道映射关系
|
2026-05-26 02:44:25 +08:00 |
|
cbb
|
747fc56886
|
feat(boot): 添加SPI OTA功能并更新配置
- 添加SpiOta.h和SpiOta.cpp文件以实现SPI OTA功能
- 在项目配置中添加SPI_I2S外设组件支持
- 设置外部晶振值为8MHz (HXTAL_VALUE=8000000U)
- 调整ROM0大小从512KB减小到2KB以适应引导程序需求
- 移除评估板相关文件和看门狗驱动文件以优化存储空间
|
2026-05-25 01:33:00 +08:00 |
|
cbb
|
77fc3f44b0
|
initial:从GD32C103移植(未测试)
|
2026-05-06 01:17:42 +08:00 |
|