ZHCAAF8A January 2020 – June 2021
在本设计中,HDC2010 传感器的多字节读取功能用于减少 I2C 通信时间;表 3-2 中介绍了单字节模式和多字节模式的区别。多字节模式只需要一个带有连续 ACK 请求的读命令即可读出从地址 0x00 开始的 4 个字节。这有助于减小代码大小,缩短 I2C 通信活动时间和降低整体系统功耗。
主器件 | 启动 | 从器件 地址(W) | 地址 | 启动 | 从器件 地址 (R) | NACK | 停止 | ||||
从器件 | ACK | ACK | ACK | 数据 |
主器件 | 启动 | 从器件 地址 (W) | 地址 | 启动 | 从器件 地址 (R) | ACK | ACK | NACK | 停止 | ||||||
从器件 | ACK | ACK | ACK | 数据 | 数据 |
在图 3-3 中,Saleae LogicPro16 分析仪的上图显示的是多字节读取,其中只读出一个写寄存器地址命令和 4 个字节(湿度和温度值),总时长为 0.1738ms。下图为要读出的每个字节值使用单独的写寄存器地址命令,总共持续 0.409ms。
采集到的传感器数据写入用户可配置的数据缓冲区,2 个字节的温度值和 2 个字节的湿度值一个接一个地被存储。当所需的缓冲区长度被数据填满时,例如,20 分钟后 80 字节,每分钟读取 1 次,通知 Arm Cortex-M4F MCU 获取数据缓冲区并将其传输。这显著减少了协议开销,前导码和 SYNC 只有相同的 8 个字节,但现在一次有 80 个字节的有效载荷。
80 字节的数据缓冲区大小是任意选择的,只是为了进行测试而选择了一个合理的大小。系统设计人员可能会增加缓冲区大小以利用 SCE 内的最大可用 ULL SRAM,其数量接近 3K 字节,请参阅所提供的 CC1352P + HDC2010 传感器控制器引擎项目的资源分配情况。
如果每分钟读取一次 HDC2010 器件,则缓冲区需要存储 4 个字节 × 60 分钟 = 1 小时内 240 个数据字节。通过添加 4 个字节的前导码、4 个字节的 SYNC 字和 2 个字节的连续数据包编号,数据包总长度之和为 250 个字节。包括 wM-Bus 和低功耗蓝牙 (BLE) 在内的多种无线协议使用的数据包长度达 256 字节。
图 3-5 所示为 SCE 通过 I2C 总线与 HDC2010 传感器进行交互的情况,其中显示了通道 0(或 3.3V)上到 I2C 上拉的正脉冲和通道 2 上 HDC2010 器件的通电脉冲(低电平有效)。从断电开始,配置 HDC2010 寄存器,读出传感器数据的总时间仅为 3.36ms。
请注意,如果 HDC2010 传感器不是每次都断电而是在两次测量之间保持待机状态,则所有后续数据读数都会更短。这两种解决方案均经过测试,最终固件在两次测量之间使 HDC2010 传感器保持待机模式。由于采用多字节读取模式,这会导致传感器数据读取速度非常快,时长仅为 198µs,如图 3-6 所示。