本帖最后由 codingtuzi 于 2024-2-4 06:10 编辑
一、项目名称
车辆操控日志记录仪
二、项目概述
CAN总线在当下汽车控制系统中占据主要地位。汽车主对各个模块ECU的控制命令的发送均基于CAN总线。因此,对汽车CAN总线的监控就可以基本了解到当前汽车的运行状态,操作控制指令等。 本次项目将采用ST公司STM32H563芯片,其为Cortex-M33内核,主频250MHz,内置Trust Zone安全管理器,支持安全可信执行环境(TEE)软件,兼容TF-M PSA API,并且提供了交钥匙安全服务,如加密、安全密钥和数据存储以及认证等。搭载了FDCAN外设接口2个,多路LIN总线。在存储方面支持SDMMC高速外设接口,便于与TF卡读写操作,用于保存监听的数据。 三、项目实现方案
本以采用基于Cortex-M33内核的STM32H563,激活其安全区域功能。本次项目也依托安全TruustZone来实现私有数据加密保护,访问与保存。 3.1 系统框图
3.2 系统硬件外设
在外设规划上面,我们将依系统功能作如下设置: 对于CAN外设1,将其设置为Security,即其可以监听加密通讯(协议未公开)的CAN总线数据。对其数据的解析,使用加密的算法亦在安全区内完成,让数据仅在安全区域内流转,以防止非法篡改。与安全区域外设对应,非安全区域的CAN外设2则用来监听或操作直接暴露或公开数据的系统组件。 汽车系统CAN总线中,必然有部分车辆状态信息以广播的形式对外发布,比如车速,胎压,发动机转速等,用以与第三方厂商合作开发的配件使用。这些数据不适宜在安全区域运行,也没有必要在安全区域运行,因此将其放置于非安全区域。 对于SDMMC外设,其主要负责TF卡数据的读写操作。TF卡体积小,隐蔽性强,对其如果保留在安全区域则较难脱密与保护密钥。针对此问题的workaround办法,我采取在对数据进行本地加密,将本地加密后的数据再同步到非安全区域,即使TF卡被非法获取,对于加密数据其无密钥亦无法解密,而对于公共数据,公开数据则无需加密,TF卡转存也充分体现了其便利性。 I2C外设,在本项目中用于读写EEPROM,主要保存设备配置信息。与汽车系统无关,划分到非安全区域降低系统安全耦合性。 RNG外设,在对数据进行保存时,需要将安全区数据进行加密,并附带上设备的电子指纹,启动RNG后,对数据的暴力破解将成为“不可能完成”的任务。 LED灯,作为状态指示灯,在安全区与非安全区各设置了两颗,用于指示包括CAN通讯,加密工作状态等状态。我在本次设计中使用了Timer的PWM波输出,让状态指示灯可以实现呼吸灯效果。 3.3 软件设计 软件设计采用bare-metal,并没有使用RTOS,主要考虑到处理任务较少,工作集中等因素。 对CAN通讯采用中断的方式触发与响应,待接收完成后,对数据进行处理。之后,如果符合数据保存的过滤条件后,则对数据进行写入SD卡操作。 3.4 上电过程- 读取片外EEPROM的设备参数信息。
- 初始化SDMMC外设
- 读取SD卡配置信息,用于格式化输出文件
- 初始化CAN外设,加载CAN ID Filter规则
- 等待CAN中断触发
3.5 核心处理流程- CAN FD1 接收缓冲区半满后,对缓冲区数据进行解密
- 使用设备电子指纹,对缓冲区数据进行加密
- 将加密数据转存在非安全区写入缓存
- 非安全区写入缓存半满后,将数据刷入SD卡
3.6 PCB制图 3.7 软件代码 |