APP下载

基于STM32的样品运输环境可信监测方案研究与实现

2022-12-01张学军周寅峰谷群远张自峰游增辉

电子设计工程 2022年23期
关键词:哈希区块芯片

张学军,周寅峰,谷群远,张自峰,游增辉

(1.盐城市质量技术监督综合检验检测中心电子电器检验部,江苏 盐城 224056;2.上海天俣可信物联网科技有限公司,上海 201210)

随着国家对产品安全问题的重视,市场监督领域对检验检测过程的真实性与准确性要求愈发严格。在样品的运输环节发生存储环境异常,会使样品性状发生改变,进行导致样品检验检测结果失去公正性、科学性。针对以上问题,文献[1-4]提出了基于物联网传感器技术的低功耗实时监测方案。近年来区块链在物联网领域中逐渐得到了应用[5-9],由区块链节点实现数据上链,保证了已上链数据的安全性[10-11]。

该文将STM32 单片机、物联网传感器与区块链结合,在嵌入式系统上运行SHA-256 算法,计算样品环境数据的哈希值,实现检验样品环境数据从采集至上链之间是否被篡改,有效规范了质量监督管理流程,提升了样品运输的安全性。

1 系统框架设计

系统由硬件层、通信层、服务层、应用层组成,系统框图如图1 所示。硬件层的嵌入式硬件设备采集数据,即温度、湿度与加速度。采集完毕后将数据进行哈希映射,分别将数据与哈希值上传至数据存储平台与区块链网络。通信层采用无线通信的方式实现硬件层与服务层之间的通信。服务层由区块链网络与数据存储平台组成。区块链网络提供上链接口与哈希检索接口,硬件层调用上链接口将哈希值上传至区块链,用户调用区块链检索接口查看数据的哈希值。应用层中用户通过数据存储平台获取数据,在区块链网络接口检索数据的哈希值,并判断其是否匹配,实现对数据的溯源。

图1 系统框图

2 嵌入式硬件系统设计

一般情况下,检验检测样品常温存储的温度要求低于30 ℃,冷藏存储的温度变化区间在-10~0 ℃[12]。为使硬件设备在样品保存环境中稳定工作,各器件均需适应样品存储环境,结合实际工作情况,该文系统的硬件应具备在-20~55 ℃范围内工作的能力。

2.1 数据采集模块

2.1.1 温湿度采集

样品运输过程需保持环境温度、湿度的稳定,以免引起样品腐败、霉变等问题,导致检验检测结果不准确。因此需对样品保存环境的温度、湿度进行实时监测。

SHT20 温湿度采集芯片的外壳由环氧树脂制成,该芯片采用I2C 通信方式,电压输入范围为2.1~3.6 V。温度测量范围为-40~120 ℃,测量精度为0.01。湿度测量范围为0%RH~100%RH,测量精度为0.04。该芯片适用于样品运输过程的环境,满足对样品的温湿度采集的范围要求,且成本低廉。故该文采用SHT20 芯片作为系统的温湿度传感器芯片。SHT20 传感器连接硬件系统中MCU 的IIC 总线,PB6、PB7 引脚对应IIC 总线中的SCL 与SDA。

2.1.2 加速度采集

运输车辆的碰撞或意外情况的发生,将造成车内存储环境的变化,严重可直接导致样品包装的破损、车内样品存储设备的损坏,最终造成检验检测结果的失真。为监测运输车辆的运行状态,将加速度采集纳入硬件系统。BMA400 芯片的加速度采集范围从±2g 至±16g,可反映车辆运行状态,芯片工作温度为-40~85 ℃,适用于样品运输工作环境。电压输入为2.1~3.6 V,芯片兼容SPI、I2C 两种通信方式。MCU 可发送指令控制芯片的工作模式,便于程序的研发与系统的功耗控制。故该文选择BMA400 芯片作为加速度传感采集模块的核心芯片。

该芯片存在三种工作模式,分别为睡眠模式、低功耗模式、正常模式。睡眠模式下芯片停止工作,低功耗电流为200 nA。低功耗模式下,模块处于低速运行状态,电流消耗小于1 200 nA。正常模式下,模块噪声性能与电流消耗可通过寄存器配置进行调整。该芯片兼容SPI 与I2C 两种连接方式,为使硬件电路设计更加简洁,该文选择I2C 连接方式,将BMA400 芯片连接在STM32 的I2C 总线上,该模块连接两根数据线SDA、SCL。

2.2 主控模块

微控制单元(Microcontroller Unit,MCU)是硬件系统的核心器件,是控制数据采集、数据处理与无线传输的功能中枢。STM32F103C8T6 芯片可达到最高主频72 MHz,电压范围2.0~3.6 V,64 kB Flash,20 kB SRAM;具有两个I2C 端口,三个USART 端口;具有Stanby 模式,保证系统的低功耗设计,在Stanby模式下芯片电流可降低至μA 级,带有RTC 闹钟,具有事件定时唤醒功能,该模式下RTC 闹钟唤醒则系统自动重启。该芯片在-40~80 ℃下可正常工作,适应运输中样品的保存环境,且成本低廉。该系列芯片兼容性强,应用范围较广,技术支持相对较多,采用该型号芯片可减少研发周期。考虑到系统的设计与规划,平衡MCU 的性能与成本,故该文采用STM32F103C8T6 芯片作为MCU。

硬件系统核心电路图如图2 所示,电路上主要集成了STM32F103C8T6 单片机,外部高速时钟(HSE)8 MHz 晶振、外部低速时钟(LSE)32.768 kHz 晶振,外部低速时钟主要用作系统在低功耗模式下的RTC 时钟源。

图2 硬件系统核心电路图

2.3 电源稳压模块

硬件系统的运行需要电源提供能量,电源信号的稳定性直接影响各器件的工作。电源稳压模块用于维持硬件系统输入电压的稳定,降低电源电压的异常波动,提升硬件系统的稳定性、信号完整性。稳压芯片作为电源稳压模块的核心器件,芯片的电压输入范围需包含电源提供的电压,也需兼容硬件系统上各模块、芯片的电气参数。RT8009-33G 芯片的电压输入范围为2.5~5.5 V,通过电路设计可输出3.3 V 电压,提供的最大工作电流IMAX=600 mA,该芯片是转换效率较高的DC/DC 降压芯片,转换效率为95%,且成本相对低廉。故该文采用RT8009-33G 作为硬件电源模块的芯片,电源设计如图3 所示。

图3 电源设计图

2.4 无线通信模块

有线通信方式不适用于运输过程。在无线通信方式中,蓝牙通信功耗低,但是其距离近。Lora 通信待机功耗低、通信距离远、抗干扰性强,但需要部署通信节点,成本高。WiFi 模块待机功耗低,通信距离近,可通过手机热点连接至蜂窝移动网络,无需部署节点,成本较低,也便于维护。综合考虑以上因素,该文采用嵌入式硬件集成WiFi 模块,通过WiFi 模块连接手机热点,建立与互联网的通信。

ESP8266 系列模块集成了TCP/IP 协议栈,该模块的输入电压范围为3~5 V,可在-20~85 ℃的环境下工作,适应于样品运输环境;模块成本相对低廉,应用范围广,具有低功耗模式,在低功耗模式下可定时唤醒也可外部中断唤醒,便于系统整体的功耗设计,且该模块集成AT 固件,易于操作,能够缩短设备的研发周期。故该文采用ESP8266-12F 模块作为系统中WiFi 通信模块。模块连接硬件系统中的四个引脚,分别为VCC、GND、TX、RX。其中RX、TX 分别接STM32F103C8T6 的PA2、PA3。

3 嵌入式软件设计

3.1 系统流程

系统程序流程如图4 所示,启动设备硬件,执行系统初始化。系统初始化完毕,MCU 对各数据采集模块进行轮询,得到传感器数据。数据处理模块使用SHA-256 算法将传感器数据映射出对应的哈希值。硬件层采用异步处理方式,先后将采集的数据与哈希值分别发送给数据存储平台与区块链节点。嵌入式硬件设备先建立与服务层区块链节点的通信连接,嵌入式硬件系统向区块链服务器发送哈希值,并等待服务器返回通信成功的标识。若系统收到成功标识,则硬件设备断开与服务器的连接,通信成功。如未收到成功标识,硬件设备立即结束通信,进入休眠模式。与区块链服务器通信成功后,硬件系统再发送传感器数据至数据存储平台。至此,硬件层通信结束,系统进入睡眠模式,等待定时唤醒。

图4 系统程序流程图

3.2 哈希算法

SHA 哈希算法作为哈希算法中的一个系列,又分为四种系列算法,分别为SHA-0、SHA-1、SHA-2和SHA-3[13]。其中SHA-0 与SHA-1 已被碰撞攻击破解。SHA-3 算法采用的结构与SHA-1、SHA-2 算法不同,在应用上并未取代SHA-2 系列算法[14]。在SHA-2 系列算法中,SHA-256 和SHA-512 是原始哈希函数,SHA-224 和SHA-384 分别为SHA-256 和SHA-512 的截断函数[15]。当下广泛应用于区块链中的是SHA-256 算法[16]。

SHA-256 算法作为安全散列算法的一种,由美国国家安全局(NSA)与美国国家标准与技术研究院(NIST)于2002 年公布。其主要作用是实现任意长度(长度小于264 位)数据的输入,该算法均输出长度为256 位的消息摘要,这个过程叫数据抽样,也叫哈希映射。该算法具有单向性,算法输出结果无法逆推输入数据。输入数据不同,输出的哈希值也不相同。该算法作为实现区块链概念的技术手段,广泛应用于区块链项目中[17]。

经计算,当前SHA-256 算法在嵌入式芯片中所占的Flash 为1.441 kB,所占RAM 空间为0.718 kB。而STM32F103C8T6 芯片具有64 kB 的Flash 空间、20 kB 的SRAM 空间、MCU 的存储空间足以存储该算法,且所占存储空间比例相对较低。当前MCU 足以支持该算法的正常运行,且留有空间拓展。SHA-2系列算法输出的哈希值越长,哈希碰撞几率越低,数据的安全性越高,但需提供的算力越高。考虑当前区块链应用的算法,平衡哈希算法的安全性与所需算力,结合MCU 所能提供的存储量与算力,该文采用SHA-256 算法作为嵌入式系统中的哈希算法。

3.2.1 数据预处理

先将输入数据以长度为512 位的独立单位分割,对余下长度不足的余数进行补位,最终输出长度为512 位的n个消息块数组Mj。

3.2.2 数据扩展

以长度为32 位为单位将Mj分割为16 组数据块(Mj0,Mj1,…Mj15),通过扩展算法,得到64 组长度为32位的数据块(W0,W1…W63)

扩展算法如下:

3.2.3 哈希计算

初始8 维哈希常数(a0,b0,c0,d0,e0,f0,g0,h0)作为数组H(a,b,c,d,e,f,g,h)的初始值。通过扩展算法得到64 组数据块Wt后,将64 组常数Kt代入轮换函数中执行,轮换函数流程如图5 所示。轮换函数循环迭代64 次,最终在数组H(a,b,c,d,e,f,g,h)中输出结果。

图5 轮换函数流程图

每个Mj数据块执行一次轮换函数,共执行n次轮换函数。将Mj在H(a,b,c,d,e,f,g,h)中输出的结果,作为轮换函数计数下一个消息块Mj+1的H数组初始值,当最后一个消息块计算完毕后,最终在数组H(a,b,c,d,e,f,g,h)中输出结果,通过将其拼合,即得出哈希值。

轮换函数所需公式如下:

该文根据该算法原理,编写SHA-256 算法中的轮换函数,伪代码如下:

3.3 驱动函数

I2C 通信是MCU 与传感器的通信方式之一,连接线少,操作简单,通信速率高[18],MCU 通过地址寻址方式定位传感器,控制地址对应的传感器,I2C 总线上可并联多组传感器。该文采用I2C 通信方式扩展传感器。对多组传感器轮询,可单独运行一个传感器,其他传感器处于低功耗模式,错开传感器的运行状态,降低系统运行的峰值电流,提高系统的稳定性。

USART 通信作为MCU 与功能模块的通信方式中的一种重要方式,可设置波特率,得到一个宽广的通信速率变化范围,既用于MCU 与功能模块间的通信,也用在PC 端对硬件设备进行系统调试。MCU 通过发送该功能模块上已集成的指令对其进行控制。系统采用USART2 端口连接WiFi模块ESP8266。

RTC(Real_Time Clock)实时时钟独立于STM32系统,在Stanby 低功耗模式下独立运行。RTC 可产生闹钟事件中断唤醒STM32,使STM32 退出低功耗模式。硬件系统进入休眠模式时,需靠RTC 时钟唤醒。

RTC时钟配置函数RTC_INIT(),将RTC配置为采用外部低速时钟(LSE)信号,RTC闹钟中断设置为5 min。系统进入休眠模式,RTC 时钟开始计时,当休眠时间达到5 min,触发闹钟事件中断,系统恢复工作。

3.4 逻辑函数

系统按照模块划分功能,逻辑函数用于实现系统各模块的具体功能,并且使得系统的功能层次分明,主程序的逻辑更加简洁明了,既便于理解又便于调试。各逻辑函数及其功能如表1 所示。

表1 逻辑函数及其功能

3.4.1 数据采集函数

sht20_get()函数的功能是读取温湿度值。首先,MCU 通过I2C 总线与温湿度传感器建立I2C 通信连接,再给SHT20 发送测量命令,等待读取来自SHT20芯片反馈的温湿度数值。将读取的温度值与湿度值分别存储在变量TEMP 与变量HUMI 中。

gcc_get()函数的功能为读取加速度值,以记录车辆的运行状态。首先,MCU 通过I2C 总线建立与BMA400 芯片的通信连接,再向BMA400 发送读取模块ID 号的指令,MCU 等待返回,如芯片返回值正确,则芯片启动成功。该芯片启动成功后自动进入睡眠模式,此时芯片不能读取加速度数据。MCU 发送指令让该芯片进入正常模式,读取加速度值,等读取完毕,MCU 再发送指令使模块进入睡眠模式。

3.4.2 数据处理函数

sha256_count()函数是根据SHA-256 算法原理编写的,其功能是将输入数据哈希映射出对应的哈希值,输出类型为字符串。

HASH_POST_config()函数将哈希值按照HTTP协议POST 请求方式组成HTTP 请求消息,即POST报文。报文内容包含区块链节点的联盟链密钥,联盟链密钥给予了硬件设备调用上链接口的权限,无密钥,则不能将哈希值上传至联盟链。

DATA_POST_config()函数的功能是将传感器数据生成HTTP 协议的POST 请求报文。该报文与上传区块链节点的POST 报文虽原理相同,但在内容上有较大差异,故写成两个函数。

3.4.3 无线通信函数

upload_HASH()函数的功能是将由HASH_POST_config()函数生成的POST 请求报文上传至区块链节点。首先建立硬件设备与区块链节点的通信,然后向区块链节点服务器上传报文。发送报文后,硬件设备等待服务器返回成功标识,如返回成功,则硬件设备断开与区块链节点的通信,该函数流程结束,系统程序继续向下执行,将该哈希值对应的传感器数据上传至数据存储平台;如返回失败,则哈希值未上传至区块链,该样品环境数据无法在区块链上溯源,即为无效数据,故系统不上传该传感器数据,直接结束程序,硬件设备进入休眠状态。

upload_DATA()函数的功能是将由传感器数据生成的POST 请求报文上传至数据存储平台,数据上传后,硬件设备进入休眠模式,等候下一次唤醒。

4 实验结果

搭建网络环境,将程序编译后,使用仿真下载器烧录进STM32 芯片。启动硬件系统,硬件设备将样品运输环境监测数据上传至数据存储平台后,在该平台的网页获取上传的环境数据。测得硬件系统处于工作状态的平均电流为43.1 mA,休眠模式下平均电流为112.3 μA。系统每6 min 采集一次环境数据,环境数据由5 维参数组成,temp 表示温度,humi 表示湿度,acc_x,y,z三组数据分别表示三维加速度。

为校验上传的环境数据是否被篡改,选取平台中的一组数据进行校验。将该组数据在第三方平台提供的SHA-256 算法中进行运算,得出对应的哈希值,如图6 所示。再调用区块链网络的检索接口检索该哈希值,检索结果表明该数据的哈希值已在区块链上,结果如图7 所示。根据SHA-256 算法特性,原数据一经篡改,对应的哈希值就大不相同,故不能在区块链上检索出相应结果。该组环境数据对应的哈希值能够在区块链上检索出结果,证明环境数据本身未被篡改,同理检验其他组环境数据也未被篡改。实验表明,可通过硬件上的SHA-256 算法在嵌入式系统上映射数据的哈希值,结合区块链技术验证环境数据在上链之前是否被篡改。

图6 环境数据计算哈希值

图7 上链哈希值检索结果

5 结束语

该文将SHA-256 算法写入嵌入式硬件系统中,在嵌入式系统上实现SHA-256 算法对环境数据的哈希映射。环境数据采集完毕,系统即刻生成对应的哈希值,而后将数据及其对应的哈希值分别上传至数据存储平台与区块链网络,最终用户通过哈希值校验数据。通过嵌入式硬件设备上生成的哈希值校验数据,提升了所采用环境数据的可信度,使得环境数据的检测与溯源从服务层延伸至硬件层。从而采用的样品监测数据更加可靠,样品检验检测结果准确性与可信度更高。由于上传至区块链的是哈希值,而非完整的环境数据,故降低了区块链需提供的数据存储量。为适应更多的应用场景,可嵌入具有能够准确控制时序的操作系统,使得系统对时间的控制更加准确。

猜你喜欢

哈希区块芯片
芯片会议
基于特征选择的局部敏感哈希位选择算法
人体微芯片
哈希值处理 功能全面更易用
关于射频前端芯片研发与管理模式的思考
文件哈希值处理一条龙
《红楼梦》的数字化述评——兼及区块链的启示
区块链助跑财资管理
一场区块链引发的全民狂欢
区块链助力企业创新