1483|2

155

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【Luckfox幸狐 RV1106 Linux 开发板测评】十五、MPU6050的内核驱动 [复制链接]

 
本帖最后由 sonicfirr 于 2024-3-2 21:12 编辑

本人【Luckfox幸狐 RV1106 Linux 开发板测评】帖子链接:

一、开箱及测试

二、SDK获取与编译镜像

三、GPIO点灯

四、通过PC机共享网络接入Internet和Ubuntu下Python点灯

五、编译Buildroot系统并测试摄像头

六、PWM控制——命令和C方式

七、PWM控制——Python和设备树方式

八、ADC和UART测试

九、Python控制I2C驱动OLED

十、C程序控制I2C驱动OLED

十一、SPI驱动LCD

十二、实现FrameBuffer设备及LVGL应用

十三、五向开关作为LVGL输入设备

十四、LVGL显示DHT11的温湿度 

 

本篇测评主要参考一篇博文:i2c子系统-----mpu6050(https://blog.csdn.net/qq_69255338/article/details/124005637),同时参考了Luckfox Wiki之温湿度传感器DHT11篇中的Makefile写法。

1、MPU6050的设备树节点

应该说是本次Luckfox幸狐RV1106板的测评活动促使自己开始真正了解Linux内核,前面测评I2C时也开始关注Linux源码的Document目录,所以在实验MPU6050时,首先想到从文档中搜索看看是否包含相关驱动。

 

 

图15-1 搜索mpu6050相关文档

 

在<Luckfox SDK>/sysdrv/source/kernel/Documentation目录下,执行命令:find -name *mpu6050*,找到了MPU6050的说明文档:./devicetree/bindings/iio/imu/inv_mpu6050.txt。

说明文档中给出了MPU6050在设备树文件中的节点描述的示例代码,如下截图所示,代码定义属性所代表的意义如下:

compatible = "invensense,mpu6050";:这个属性表示这个节点描述的硬件与"invensense,mpu6050"兼容。这通常用于驱动程序匹配,确保正确的驱动程序加载来支持这个硬件。

reg = <0x68>;:这个属性定义了MPU6050传感器的基地址,通常是它在I2C或SPI总线上的地址。

interrupt-parent = <&gpio1>;:这个属性指定了中断控制器的父节点,即MPU6050传感器将使用的GPIO(通用输入/输出)控制器。

interrupts = <18 IRQ_TYPE_EDGE_RISING>;:这个属性定义了MPU6050传感器使用的中断号(在这里是18)和中断类型(这里是边缘上升类型)。

mount-matrix:这是一个3x3的矩阵,用于描述MPU6050传感器在系统中的物理方向或安装方向。这个矩阵可以用于将传感器测量的方向转换到系统或设备的本地坐标系。

第一行和第二行定义了x轴和y轴的方向转换。

第三行定义了z轴的方向转换。

 

图15-2 mpu6050说明文档示例代码截图

 

本次实验只做MPU6050在Luckfox Pro Max下的驱动验证,所以不考虑接入传感器的IRQ信号(这个是MPU6050的中断输出信号,实际中可以在MPU6050中设置阈值,如果监测数据超限则产生唤醒电平,用以唤醒休眠中的处理器),也不考虑坐标转换了。所以最终的设备树文件rv1106g-luckfox-pico-pro-max.dts,在&i2c3节点内添加mpu6050节点:

&i2c3 {
	status = "okay";
	pinctrl-0 = <&i2c3m1_xfer>;
	clock-frequency = <100000>;
	// 下述为本例添加部分
	mpu6050@68 { /*i2c client信息*/
		compatible = "invensense,mpu6050";
		reg = <0x68>;
	};
};

2、MPU6050的驱动和测试程序

修改设备树后,依然是重新构建系统内核,并重新烧录开发板。当然,还需要编写MPU6050的驱动。

这里在虚拟机上创建一个目录,其中包含文件如下:

mpu6050.h —— 相关头文件,包含自定义联合体类型用以存放传感器读数;

mpu6050_drv.c —— 内核驱动源文件;

mpu6050_test.c —— 驱动测试程序源文件;

Makefile —— 针对两个源文件的编译命令等。

 

除了Makefile之外,其它文件的源码都是照搬参考文档1“i2c子系统-----mpu6050”,这里也就不再贴出来了,只是Makefile针对Luckfox SDK的情况做了改动,具体如下:

ARCH=arm
CROSS_COMPILE=~/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-
export ARCH CROSS_COMPILE
CC=$(CROSS_COMPILE)gcc
KERN_DIR = ~/luckfox-pico/sysdrv/source/kernel
PWD ?= $(shell pwd)
name=mpu6050

all:
  make -C $(KERN_DIR) M=$(PWD) modules
  $(CROSS_COMPILE)gcc $(name)_test.c -o $(name)
  echo $(PWD)

clean:
  rm -f *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order *.cmd

obj-m += $(name)_drv.o

make后,项目目录中包含内核驱动模块mpu6050_drv.ko和测试程序mpu6050,将这两个文件拷贝到本地,再adb push到开发板。

 

 

图15-3 mpu6050驱动项目目录

 

接着,进入开发板控制台,首先是安装内核模块,然后chmod赋予测试程序执行权限。最后,运行测试程序查看执行结果。

 

 

图15-4 mpu6050驱动模块安装(开发板上)

 

 

图15-5 mpu6050测试程序

 

最新回复

看了大佬出产了这么多的作品,肯定用心参与评测了。  详情 回复 发表于 2024-3-7 07:12
点赞 关注
 
 

回复
举报

7048

帖子

11

TA的资源

版主

沙发
 
看了大佬出产了这么多的作品,肯定用心参与评测了。

点评

谢谢赞赏,个人就觉得既然做了,就认真点吧。  详情 回复 发表于 2024-3-7 09:34
 
 
 

回复

155

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
lugl4313820 发表于 2024-3-7 07:12 看了大佬出产了这么多的作品,肯定用心参与评测了。

谢谢赞赏,个人就觉得既然做了,就认真点吧。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表