feat(VL53L4CD): 支持透过玻璃串扰补偿、串口校准命令与校准数据Flash存储

This commit is contained in:
2026-09-07 00:29:41 +08:00
parent ef37553b18
commit ec412b1ffd
13 changed files with 966 additions and 48 deletions
+30
View File
@@ -140,6 +140,22 @@ bool vl53l4cd_set_range_timing(uint8_t timing_budget_ms, uint32_t inter_measurem
*/
bool vl53l4cd_set_offset(int16_t offset_mm);
/**
* @brief 写入串扰(玻璃反射)补偿值,透过玻璃测距时使用
* @details 写 XTALK_PLANE_OFFSET_KCPS (0x0016) 并将 X/Y 梯度寄存器清零,
* 寄存器值为 xtalk_kcps * 512
* @param[in] xtalk_kcps: 串扰补偿值,单位 kcps,范围 0..127
* @retval true: 成功; false: 参数无效或写入失败
*/
bool vl53l4cd_set_xtalk(uint16_t xtalk_kcps);
/**
* @brief 读取当前生效的串扰补偿值
* @param[out] xtalk_kcps: 返回串扰值,单位 kcps
* @retval true: 成功; false: 失败
*/
bool vl53l4cd_get_xtalk(uint16_t *xtalk_kcps);
/**
* @brief 读取当前生效的距离偏移量
* @param[out] offset_mm: 返回偏移量,单位 mm
@@ -157,6 +173,20 @@ bool vl53l4cd_get_offset(int16_t *offset_mm);
bool vl53l4cd_calibrate_offset(uint16_t target_distance_mm, uint16_t num_samples,
int16_t *measured_offset_mm);
/**
* @brief 执行一次串扰校准(透过玻璃安装时使用)
* @details 参照 ST ULD vl53l4cd_calibration.c 的 CalibrateXtalk 流程,定点数实现:
* 先清零串扰补偿,热机 10 帧,然后采样有效测距帧,
* xtalk = (1 - 平均距离/目标距离) * 平均信号/平均SPAD数,上限 127 kcps。
* 校准期间传感器被独占,主循环上报会暂停。
* @param[in] target_distance_mm: 玻璃后方目标的实际距离,单位 mm,范围 10..5000
* @param[in] num_samples: 采样次数,范围 5..255,ST 建议至少 10
* @param[out] measured_xtalk_kcps: 计算得到的串扰值,单位 kcps
* @retval true: 校准并写入成功; false: 失败(含有效样本不足或串扰超限)
*/
bool vl53l4cd_calibrate_xtalk(uint16_t target_distance_mm, uint16_t num_samples,
uint16_t *measured_xtalk_kcps);
/**
* @brief 读一个 8 位寄存器
* @param[in] reg: 16 位寄存器地址