这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【mcxw71学习使用zephyr开发】4、在ZephyrRTOS上移植NXPF

共1条 1/1 1 跳转至

【mcxw71学习使用zephyr开发】4、在ZephyrRTOS上移植NXPFXLS8964AF加速度传感器(基于FRDM-MCXW71)

高工
2025-12-09 18:25:18     打赏

目标平台: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

image.png

8、烧录

使用LinkFlash

image.png

【验证】

image.png

【总结】

新版本的zephyr对FXLS8964AF原生支持,我们只需要验证与开发板相连的I2C通道以及DTS,就可以轻松的驱动。


附源码:

my_FXLS8964AF.zip





关键词: mcxw71     zephyrb     FXLS8964AF    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]