目标平台:NXP FRDM-MCXW71 开发板
Zephyr 版本:v4.3.99 (main 分支)
传感器型号:FXLS8964AF(I²C 地址 0x19)
通信接口:LPI2C1(PTB4/PTB5
【工程创建】
1、创建一个文件夹,命令为my_FXLS8964F。
2、在该文夹内加入src文件夹,文件夹下创建main.c
3、文件夹内添加CMakeLists.txt与prj.conf
添加好后结构如下:
lugl@lugl:~/zephyrproject/app/my_FXLS8964AF$ tree . ├── CMakeLists.txt ├── prj.conf └── src └── main.c 1 directory, 3 files
4、由于Zephyr 主干已内置兼容驱动:
lugl@lugl:~/zephyrproject/app/my_FXLS8964AF$ ls $ZEPHYR_BASE/drivers/sensor/nxp/fxls8974/ CMakeLists.txt Kconfig fxls8974.c fxls8974.h fxls8974_trigger.c
5、编写prj.conf
# 启用串口控制台 CONFIG_SERIAL=y CONFIG_UART_CONSOLE=y # 启用 I2C(LPI2C1) CONFIG_I2C=y CONFIG_I2C_MCUX_LPI2C=y # 启用传感器子系统 CONFIG_SENSOR=y # 启用 FXLS8974 驱动(兼容 FXLS8964AF) CONFIG_FXLS8974=y # 切换到 Newlib C 库(必须!) CONFIG_NEWLIB_LIBC=y # 启用 Newlib 的浮点 printf 支持 CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y # 可选:日志 CONFIG_LOG=y CONFIG_LOG_DEFAULT_LEVEL=3
5、配置设备树(DTS)
在板级 DTS 文件中( boards/nxp/frdm_mcxw71/frdm_mcxw71.dts)添加传感器节点,由于官方已经集成好了,所以不需要添加,但是要确认一下:
&lpi2c1 {
status = "okay";
pinctrl-0 = <&pinmux_lpi2c1>;
pinctrl-names = "default";
accelerometer: accelerometer@19 {
status = "okay";
compatible = "nxp,fxls8974";
reg = <0x19>;
};
};6、编写应用代码(main.c)
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/sensor.h>
#include <stdio.h> // 必须包含以使用 printf
#define ACCEL_NODE DT_NODELABEL(accelerometer)
#if !DT_NODE_EXISTS(ACCEL_NODE)
#error "Accelerometer node not found in devicetree"
#endif
int main(void)
{
const struct device *dev = DEVICE_DT_GET(ACCEL_NODE);
struct sensor_value accel[3];
if (!device_is_ready(dev)) {
printf("Accelerometer not ready\n");
return -1;
}
printf("Found %s\n", dev->name);
while (1) {
if (sensor_sample_fetch(dev) < 0 ||
sensor_channel_get(dev, SENSOR_CHAN_ACCEL_XYZ, accel) < 0) {
printf("Sensor read error\n");
k_msleep(1000);
continue;
}
double x = sensor_value_to_double(&accel[0]);
double y = sensor_value_to_double(&accel[1]);
double z = sensor_value_to_double(&accel[2]);
printf("Accel [m/s²]: X=%.3f, Y=%.3f, Z=%.3f\n", x, y, z);
printf("Accel [g] : X=%.3f, Y=%.3f, Z=%.3f\n",
x / 9.80665, y / 9.80665, z / 9.80665);
printf("------------------------\n");
k_msleep(500);
}
return 0;
}7、构建
west build -b frdm_mcxw71

8、烧录
使用LinkFlash

【验证】

【总结】
新版本的zephyr对FXLS8964AF原生支持,我们只需要验证与开发板相连的I2C通道以及DTS,就可以轻松的驱动。
附源码:
我要赚赏金
