二十六、IIO子系统 + SPI子系统 + ICM20608

前言

这篇文章记录和学习IIO和SPI子系统,并用它们实现运动和姿态传感器ICM20608的驱动,最后编写应用接入飞控模拟平台进行检测。

ICM20608基础知识

简介

ICM20608是一款运动和姿态传感器,其内部包含3轴加速度和3轴陀螺仪传感器,还有一个温度传感器,它们都是16位的ADC,转换出来的数据都是16位的。

下图为ICM20608的姿态轴的极性:

ICM20608通信接口可选SPI或I2C。这里我们使用SPI,因为SPI为全双工传输,速率更快,时序如下:

ICM20608会将各个传感器转换出来的数据保存在它们各自的数据寄存器中,我们可以读取这些寄存器获得转换数据。ICM20608还有一个512字节的FIFO缓冲区,如果开启了FIFO,那么这些转换数据还会被放进FIFO中,以免丢失,这对需要有连续数据流的应用场景非常重要。

ICM20608有一个中断引脚,我们可以通过配置寄存器来让ICM20608在某些情况下从这个引脚输出中断信,这里我们配置数据就绪中断来通知CPU有数据产生了,以便CPU及时来读取数据。对于ICM20608而言,数据就绪是指所有启用的传感器都转换好了数据并且可以读取了,而不是只某一个传感器准备好了数据。比如如果同时启用了3轴加速度 + 3轴陀螺仪 + 温度传感,那么数据就绪是指它们的数据都转换好了。如果启用了FIFO,那么我们可以从FIFO中一次性获取这14个字节的转换数据。

FIFO有一个计数寄存器,用于记录FIFO中有多少数据,所以我们可以在FIFO中的数据积累到一定数量的时候再一次性取走,而不是每次数据就绪的时候都去读取14个字节,这样可以减小SPI传输的开销。

寄存器设置

通过前述的简介,我们主要配置ICM20608如下:

  1. 启用3轴加速度和3轴陀螺仪
  2. 启用FIFO功能
  3. 启用数据就绪中断
  4. 其它的一些必要配置,比如设置检测量程,SPI参数等

设备树

ALIENTEK IMX6ULL ALPHA开发板上,ICM20608部分的原理图如下:

其挂在ECSPI3控制器下,片选引脚连接到主控的GPIO1_IO20,中断引脚连接到主控的GPIO1_IO10。

设备树文件中,ICM20608节点描述如下:

bash 复制代码
&iomuxc {
	...
	pinctrl_icm20608: icm20608grp {
		fsl,pins = <
			MX6UL_PAD_JTAG_MOD__GPIO1_IO10 0xb0b0 /* int pin */
		>;
	};
};

&ecspi3 {
	fsl,spi-num-chipselects = <1>;
	cs-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>; /* use gpio1_io20 as chip select */
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi3>;
	status = "okay";

	icm20608@0 {
		compatible = "alientek,icm20608";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_icm20608>;
		reg = <0>;

		interrupt-parent = <&gpio1>;
		interrupts = <10 IRQ_TYPE_LEVEL_LOW>;

		/* SPI MODE3 */
		spi-cpol;
    	spi-cpha;
		spi-max-frequency = <8000000>;
	};
};

驱动程序

应用程序

飞控平台模拟

未完待续。。。

相关推荐
thinkMoreAndDoMore1 小时前
linux内核匹配I2C设备
linux·运维·服务器
小政同学7 小时前
【NFS故障】共享的文件无法执行
linux·运维·服务器
AI木马人7 小时前
3.【Prompt工程实战】如何设计一个可复用的Prompt系统?(避免每次手写提示词)
linux·服务器·人工智能·深度学习·prompt
ch3nyuyu7 小时前
Ubuntu(乌班图)基础指令
linux·运维·网络
minglie18 小时前
gcc编译器汇总
linux
白菜欣9 小时前
Linux —《开发三件套:gcc/g++、gdb、make/Makefile 全解析》
linux·运维
senijusene10 小时前
基于 imx6ull平台按键驱动开发:input子系统+中断子系统+platform总线
linux·驱动开发
莎士比亚的文学花园10 小时前
Linux驱动开发(1)——系统移植
linux·运维·服务器
PH = 710 小时前
OverlayFS联合文件系统使用示例
java·linux·服务器
AC赳赳老秦10 小时前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw