资讯详情

STM32 + i.MX6ULL CAN 诊断与 OTA(01):旧 CAN 项目基线审计,先别急着打 tag

📅 2026/11/1 2:00:19 | 华诺云谱 👁 阅读
STM32 + i.MX6ULL CAN 诊断与 OTA(01):旧 CAN 项目基线审计,先别急着打 tag
STM32 i.MX6ULL CAN 诊断与 OTA01旧 CAN 项目基线审计系列目录从“CAN 能通”到“可诊断、可升级”新仓库stm32-imx6ull-can-diag-ota旧仓库CAN-我本来想直接给旧工程打一个a-baselinetag然后开始写 ISO-TP。打开仓库后我发现baseline 还不完整。这篇记录三件事旧 CAN 仓库里到底有什么哪些能复用哪些必须重写为什么我现在不打 tag以及要补哪几块。TL;DRCAN初始化/滤波思路可复用can_test的主循环是“发一次、收一次”不是周期协议必须重写。DHT11 / PIR / 光照 / SocketCAN源码还没上传审计只完成了一部分。AHT20A 项目不用留给 B 项目做 i.MX6ULL 的 IIO 驱动。结论先补源码再打a-baselinetag 不能指向一个只有文档的 scaffold。1. 审计对象项目内容旧仓库CAN-5ea7a5965c25a33a32fcf9edc2a267e260065a16新仓库stm32-imx6ull-can-diag-otamainSTM32STM32F407VGT6-DiscLinux 板i.MX6ULL mini EMMC总线CAN 500 kbps双节点工具STM32CubeIDE、candump、iproute2、Git目标冻结一个“可复现”的 baseline再进 ISO-TP/UDS2. 旧仓库里实际有什么旧仓库 README 写得很清楚本工作区包含两个基于 STM32 HAL 的 CAN 通信示例工程适合用于学习和验证 STM32F4 系列 MCU 的 CAN 收发功能。目录里只有can_loopback_silence/CAN 静默回环示例can_test/CAN 发送/接收示例。没有 DHT11、PIR、SocketCAN 的源码也没有 AHT20。2.1can_test的主循环关键代码大概是这样TxMessage.StdId0x321;TxMessage.DLC8;/* 填充 8 字节数据 */HAL_Delay(1000);CAN_Send_Msg(TxMessage);HAL_Delay(1000);CAN_Receive_Msg(RxMessage);while(1){}这段代码能证明“CAN 外设能初始化、能发一帧、能收一帧”但它不是网关没有周期发送没有超时/重传没有错误帧/bus-off 处理没有协议解析没有队列/缓冲没有状态机。所以can_test只能当bring-up 参考不能当项目主程序。2.2 仓库里还有大量构建产物旧仓库里能看到.metadata/STM32CubeIDE 工作区缓存Debug/.o、.d、.su、.cyclo等构建产物多个Drivers/、启动文件、链接脚本。这些不需要全部搬进新仓库。导入时只保留Core/Inc/ Core/Src/ Core/Startup/ *.ioc *.ld README.md LICENSE其余构建缓存不要提交。3. 逐模块审计模块来源现状决定下一步CANCAN-5ea7a59can_test能初始化/单次收发复用初始化/滤波思路重写周期主循环、错误统计、bus-off 恢复DHT11待补本地工程/其他仓库能读源码未上传复用导入源码校验和/超时采样 ≥2sPIR待补本地工程/其他仓库能触发源码未上传复用导入源码消抖/事件计数光照待补本地工程/其他仓库ADC 能读源码未上传复用导入源码越界判断SocketCAN待补本地工程/板端能收发源码未上传重构拆成网关can_rx加过滤/错误帧AHT20无A 项目不用移出 A 的 baseline留给 B 项目做 IIO 驱动A 项目的温湿度用 DHT11AHT20 不在 A 的 baseline 里留给 B 项目做 i.MX6ULL 的 IIO 驱动。两者不要混。DHT11 是单总线不是 I2C主机拉低至少 18 ms再释放读 40 bit湿度 16 温度 16 校验 8校验和 前 4 字节相加取低 8 位采样间隔建议 ≥ 2 s0x301可以 500 ms 发送缓存值。4. 为什么现在不打a-baseline一个 tag 应该指向“别人 clone 下来就能复现”的代码。现在新仓库里只有文档骨架没有 DHT11/PIR/SocketCAN 源码没有 CAN 的 baseline 工程git tag为空docs/baseline-audit.md还是模板。如果现在打 tag读者点进去只能看到 README不是 baseline。所以先补代码# 1. 导入源码只保留 Core/Inc、Core/Src、.ioc、.ldgitaddfirmware/ gateway/gitcommit-mchore: import working CAN baseline# 2. 填完 docs/baseline-audit.mdgitadddocs/baseline-audit.mdgitcommit-mdocs: complete baseline audit# 3. 确认能跑再打 taggittag-aa-baseline-mbaseline: CAN DHT11 PIR SocketCAN workinggitpush origin maingitpush origin a-baseline不是不冻结是冻结条件没满足。5. 这次审计发现的 5 个问题#现象证据影响处理1CAN 主循环只发一次can_test/main.c的CAN_Send_Msg只调用一次不能做周期采集/网关重写为定时任务 队列2没有版本号串口只打印初始化信息无法确认板子上跑的是哪版加FW_VERSION串口/诊断都能读3没有错误帧统计can_test没处理CAN_IT_ERROR丢帧无法定位加错误计数、bus-off 回调4构建产物进仓库.metadata/、Debug/clone 很大、难读新仓库只保留源码/工程文件5模块源码分散/未上传DHT11/PIR/SocketCAN 不在CAN-baseline 不可复现导入新仓库补来源表6. 下一步第 1 步补 baseline导入 CAN/DHT11/PIR/光照/SocketCAN 源码填docs/baseline-audit.md的来源表打a-baselinetag更新 README 的“已有什么/没有什么”。第 2 步baseline 加固加错误帧统计 bus-off 恢复加FW_VERSIONDHT11 加校验和/超时/重试连续跑 10 分钟错误帧为 0。第 3 步ISO-TP先 SF再 FF/CF/FC4 KB 多帧传输 0 错误N_Cr 超时能重传然后才写 02。02 先不发等 ISO-TP 4 KB 真的跑通再写“SF/FF/CF/FC、BlockSize/STmin、N_Cr 超时”的实战记录。7. 仓库 / 系列新仓库https://github.com/longlin05/stm32-imx6ull-can-diag-ota旧仓库https://github.com/longlin05/CAN-旧仓库 commit5ea7a5965c25a33a32fcf9edc2a267e260065a16系列目录https://blog.csdn.net/longlin101/article/details/169562720下一篇ISO-TP 多帧等 4 KB 跑通再发标签STM32CANi.MX6ULL嵌入式LinuxOTA
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑