RV1109平台调试VL53L3CX ToF传感器全记录
1. 项目背景
最近在RV1109平台上需要集成ST公司的VL53L3CX飞行时间(ToF)传感器,用于精确距离测量。VL53L3CX是STMicroelectronics推出的新一代多区域测距传感器,具有更高的精度和更远的测量范围。本文将完整记录从驱动移植到应用测试的全过程。
2. 准备工作
2.1 驱动下载
首先需要从ST官方网站获取VL53L3CX的Linux驱动程序:
- 官方驱动页面:https://www.st.com/zh/embedded-software/stsw-img021.html
- 下载完成后解压得到vl53Lx驱动目录
2.2 驱动文件放置
将解压后的驱动文件放置到RV1109 SDK的合适位置:
cp -r vl53Lx/ kernel/drivers/input/vl53Lx
确保目录结构完整,包含以下关键文件:
vl53lx_module.c (主驱动文件)
vl53lx_i2c_platform.c (I2C平台相关代码)
inc/ (包含所有必要的头文件)
3. 驱动移植
3.1 修改Kconfig添加配置选项
在kernel/drivers/input/Kconfig中添加驱动配置选项:
config STMVL53LX
tristate "STM VL53L3CX Proximity support"
depends on I2C=y
help
Say Y here if you want to use STMicroelectronics's vl53L3CX TOF AF sensor
through I2C interface.
To compile this driver as a module, choose M here: the
module will be called stmvl53lx.
3.2 修改Makefile添加编译规则
在kernel/drivers/input/Makefile末尾添加:
obj-$(CONFIG_STMVL53LX) += vl53Lx/
3.3 配置内核选项
修改kernel/arch/arm/configs/rv1126_defconfig,添加模块编译选项:
CONFIG_STMVL53LX=m
4. 设备树配置
根据硬件原理图,VL53L3CX连接在I2C4总线上,地址为0x29。修改设备树文件kernel/arch/arm/boot/dts/rv1109-38-v10-spi-nand.dts:
&i2c4 {
status = "okay";
clock-frequency = <400000>;
pinctrl-0 = <&i2c4m1_xfer>;
stmvl53lx: stmvl53lx@29 {
compatible = "st,stmvl53lx";
reg = <0x29>;
xsdn-gpio = <&gpio1 RK_PA5 GPIO_ACTIVE_LOW>;
pwren-gpio = <&gpio1 RK_PA6 GPIO_ACTIVE_LOW>;
intr-gpio = <&gpio1 RK_PA7 GPIO_ACTIVE_LOW>;
boot-reg = <0x29>;
};
};
关键点说明:
pinctrl-0设置为i2c4m1_xfer,对应硬件引脚复用模式
三个GPIO分别对应传感器的复位(XSDN)、电源使能(PWREN)和中断(INTR)引脚
I2C地址设置为0x29
5. 测试应用程序集成
5.1 准备测试程序
将驱动包中的测试程序vl53lx_test拷贝到external/vl53lx_test/
5.2 添加Buildroot配置
创建buildroot/package/rockchip/vl53lx_test/Config.in:
config BR2_PACKAGE_VL53LX_TEST
bool "vl53lx test"
创建buildroot/package/rockchip/vl53lx_test/vl53lx_test.mk:
#############################################################
#
# vl53lx_test
#
#############################################################
ifeq ($(BR2_PACKAGE_VL53LX_TEST), y)
VL53LX_TEST_VERSION:=1.0.0
VL53LX_TEST_SITE=$(TOPDIR)/../external/vl53lx_test
VL53LX_TEST_SITE_METHOD=local
define VL53LX_TEST_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) CXX=$(TARGET_CXX) -C $(@D)
endef
define VL53LX_TEST_CLEAN_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) clean
endef
define VL53LX_TEST_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
endef
define VL53LX_TEST_UNINSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) uninstall
endef
$(eval $(generic-package))
endif
5.3 启用测试程序
修改buildroot/configs/rockchip_rv1126_rv1109_spi_nand_defconfig:
BR2_PACKAGE_VL53LX_TEST=y
6. 编译与测试
6.1 编译内核模块
make kernel-rebuild
6.2 编译Buildroot
make
6.3 烧写固件
将生成的固件烧写到RV1109开发板。
6.4 测试步骤
加载内核模块:`insmod /lib/modules/$(uname -r)/stmvl53lx.ko`
检查设备节点:`ls /dev/vl53l*`
运行测试程序:`vl53lx_test`
7. 常见问题解决
7.1 I2C通信失败
现象:dmesg显示I2C通信错误
解决方法:
确认设备树中I2C配置正确
使用i2c-tools检查设备是否可见:`i2cdetect -y 4`
检查电源和复位信号时序
7.2 测量数据不稳定
现象:测量值波动较大
解决方法:
确保传感器前方没有干扰物
调整测量模式和环境光补偿参数
检查电源稳定性,必要时增加滤波电容
8. 总结
通过以上步骤,我们成功在RV1109平台上集成了VL53L3CX ToF传感器。关键点包括:
正确配置设备树的I2C和GPIO
确保驱动与内核版本兼容
合理处理传感器的电源和复位时序
VL53L3CX在RV1109上的应用为我们的项目提供了精确的距离测量能力。