这个项目是一个测试来比较两种情况的性能。
第一个是使用两个 stm32,第二个是使用一个 stm32 通过 SSL 发送数据。
转发: STM32F411 W5500 Coremark Test over SSL
项目介绍
概述
这个项目是一个测试来比较两种情况的性能。
第一种情况是使用两个stm32,将通过spi通信从另一个stm32接收到的数据发送到PC上的OpenSSL服务器。
第二种情况是使用一台stm32,仅向PC上的OpenSSL服务器发送数据。
在这两种情况下,在同一周期内传输相同数量的数据。
测试条件
- CPU:stm32F411RE CPU
- 时钟:100MHz
- SPI:25Mbps/全双工/使用DMA
- 发送数据大小:2048
- 发送数据周期:10ms PC
- 服务器:OpenSSL v.3.1.4
- 基准测试:Coremark v1.0(迭代 10000)
硬件
<双MCU测试>
- SPI2
STM32(PB13) <--- (CLK) ---> STM32(PB13)
STM32(PB14) <--- (MISO) ---> STM32(PB14)
STM32(PB15) <--- (MOSI) ---> STM32(PB15)
- SPI1
STM32(PA5) <--- (CLK) ---> W5500
STM32(PA6) <--- (MISO) ---> W5500
STM32(PA7) <--- (MOSI) ---> W5500
<单片机测试>
- SPI1
STM32(PA5) <--- (CLK) ---> W5500
STM32(PA6) <--- (MISO) ---> W5500
STM32(PA7) <--- (MOSI) ---> W5500
软件
<结构>
- 双MCU测试
在第一种情况下,Board1 上创建了两个任务:发送任务和 coremark 任务。 send任务负责通过SPI传输数据,而coremark任务则执行Coremark工具。
Board2上,当接收到SPI数据时,触发中断,通过释放信号量来执行发送任务。
Send任务将接收到的数据通过w5500发送到openssl服务器。 为了防止发送前发生 SPI 中断,通过 GPIO 引脚向 SPI 主设备发送停止信号。 一旦到服务器的传输完成,就会发送启动信号。
- <单片机测试>
第二种情况,创建了两个任务:传输任务和核心标记任务。 传输任务用于通过W5500传输数据,核心标记任务执行核心标记工具。
<mbedTLS 配置>
MBEDTLS_AES_C | 启用支持 AES 加密算法的模块的选项。 |
MBEDTLS_BASE64_C | 启用模块执行 Base64 编码和解码的选项。 |
MBEDTLS_BIGNUM_C | 启用用于大整数运算的模块的选项。 |
MBEDTLS_CAMELLIA_C | 启用支持 Camellia 加密算法的模块的选项。 |
MBEDTLS_CERTS_C | 启用模块的选项,使用预定义的证书和密钥提供身份验证功能。 |
MBEDTLS_CIPHER_C | 启用模块处理对称和非对称加密算法的选项。 |
MBEDTLS_DEBUG_C | 启用日志记录和调试功能的选项。 |
MBEDTLS_ENTROPY_C | 启用模块的选项可确保安全随机数生成。 |
MBEDTLS_MD_C / MBEDTLS_MD5_C | 启用支持哈希函数的模块的选项。 |
MBEDTLS_OID_C | 启用模块处理对象标识符 (OID) 的选项。 |
MBEDTLS_PLATFORM_C | 启用模块的选项,允许在 mbedTLS 库中替换平台相关的函数。 |
MBEDTLS_RSA_C | 启用支持 RSA 加密和数字签名算法的模块的选项。 |
MBEDTLS_SHA256_C | 启用支持 SHA-256 哈希函数的模块的选项。 |
MBEDTLS_SHA512_C | 启用支持 SHA-512 哈希函数的模块的选项。 |
MBEDTLS_SSL_TLS_C | 启用支持 TLS/SSL 协议的模块的选项。 |
MBEDTLS_X509_USE_C | 使用 X509 证书启用模块的选项。 |
MBEDTLS_X509_CRT_PARSE_C | 启用模块解析 X509 格式证书的选项。 |
MBEDTLS_ECP_MAX_BITS | 设置椭圆曲线加密中使用的最大位数的选项。 |
MBEDTLS_ECP_WINDOW_SIZE_ENABLE | 在椭圆曲线加密中启用基于窗口的优化的选项。 |
MBEDTLS_ECP_WINDOW_SIZE | 设置椭圆曲线加密中使用的窗口大小的选项。 |
MBEDTLS_ECP_FIXED_POINT_OPTIME_ENABLE | 在椭圆曲线加密中启用基于定点的优化的选项。 |
MBEDTLS_ECP_FIXED_POINT_OPTIM | 设置椭圆曲线加密中使用的定点优化的选项。 |
MBEDTLS_ENTROPY_MAX_SOURCES_ENABLE / MBEDTLS_ENTROPY_MAX_SOURCES | 用于启用和设置随机数生成的最大熵源数量的选项。 |
MBEDTLS_SSL_MAX_CONTENT_LEN_ENABLE / MBEDTLS_SSL_MAX_CONTENT_LEN | 用于启用和设置 TLS/SSL 中最大内容长度的选项。 |
MBEDTLS_SSL_CIPHERSUITES_ENABLE / MBEDTLS_SSL_CIPHERSUITES | 用于启用和设置 TLS/SSL 密码套件的选项。 |
MBEDTLS_HAVE_ASM | 启用汇编代码优化的选项。 |
MBEDTLS_NO_UDBL_DIVISION | 用于禁用大于 64 位整数的整数除法的默认实现的选项。 |
MBEDTLS_PLATFORM_MEMORY | 指定 mbedTLS 库应使用特定于平台的内存管理函数的选项。 |
MBEDTLS_AES_ROM_TABLES | 可选择将 AES 加密中使用的表存储在 ROM 中以节省 RAM。 |
MBEDTLS_ECP_NIST_OPTIM | 用于启用 NIST 曲线优化的选项。 |
MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES / MBEDTLS_NO_PLATFORM_ENTROPY | 禁用使用默认熵源或平台提供的熵源的选项。 |
MBEDTLS_CIPHER_MODE_OFB / MBEDTLS_CIPHER_MODE_XTS | 与启用对称加密模式相关的选项。 |
MBEDTLS_ECP_DP_SECP256R1_ENABLED / MBEDTLS_ECP_DP_SECP384R1_ENABLED / MBEDTLS_ECP_DP_CURVE448_ENABLED | 启用 ECC 相关参数的选项。 |
MBEDTLS_KEY_EXCHANGE_PSK_ENABLED / MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED / MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED / MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENAVLED / MBEDTLS_KEY_EXCHANGE_RSA_ENABLED / MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED/ MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED / MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED / MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED / MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED / MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED | 启用各种密钥交换方法的选项。 |
MBEDTLS_SSL_PROTO_TLS1_2 | 使用 TLS 1.2 协议启用安全通信的选项。 |
测试结果
双MCU | 单片机 |
双 MCU 的 CoreMark 得分高出 170.17 分。
使用双 MCU 时,发送数据的时间缩短了 89.8%。
文件