基于 i.MX6ULL 的智能储物柜控制系统
CRS485MQTTselect 多路复用多线程Web 控制面板
该项目使用 C 语言 + RS485 + MQTT 实现单板 12 路电控锁的远程管理系统,支持远程开锁、锁状态查询、心跳检测与事件上报,配套 Web 控制面板。
- 采用分层架构(HAL → 传输 → 协议 → 核心 → 应用),将串口硬件操作、协议解析、业务逻辑分层解耦,提高可维护性与扩展性
- 设计串口帧同步状态机,解决 RS485 字节流传输中的粘包、半包与错位问题,支持坏帧丢弃与重同步
- 使用 ioctl(TIOCSRS485) 实现 RS485 半双工收发方向自动切换,避免收发冲突
- 独立接收线程基于 select 超时检测串口可读事件,完整帧按命令码分流(事件帧上抛、命令回复唤醒等待线程);发送走统一互斥入口,收发互不干扰
- 协议组帧/解帧与串口 I/O 解耦,支持脱离硬件做单元测试,便于协议复用与问题定位
- 设计 MQTT cmd/reply/event 三主题,QoS 1,支持 30 秒心跳全量上报与门状态变化实时事件
基于 SWUpdate 的 i.MX6ULL OTA 远程升级系统
SWUpdateA/B 双分区RSA 验签U-BootBuildroot
该项目使用 SWUpdate + A/B 双分区 + RSA 签名实现系统远程升级,升级只写备用分区,旧分区完整保留,新系统异常时可切回旧槽,支持升级包防篡改。
- 设计 A/B 双分区方案:SD 卡划分为 rootfsA (1GB) + rootfsB (1GB) + data (4GB) 三个分区,通过 U-Boot 环境变量 boot_slot 驱动启动槽切换
- 打通 OTA 升级闭环:编写 SWUpdate 描述文件(sw-description)与切槽脚本,实现"打包 → 下发 → 验签 → 写备用槽 → 切槽 → 重启"全流程自动化
- 实现升级包防篡改:基于 RSA 验签 + SHA-256 完整性校验,镜像或描述文件被篡改均会被拒绝安装
- 使用 Buildroot 构建系统,完成内核、根文件系统的交叉编译与 SD 卡镜像打包