二十六、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>;
	};
};

驱动程序

应用程序

飞控平台模拟

未完待续。。。

相关推荐
海盗猫鸥1 小时前
Linux权限详解
linux·c语言
cuijiecheng20181 小时前
Linux下modbuspp库的使用
linux·运维·服务器
专注VB编程开发20年2 小时前
vb.net,c#线程池 Dim tasks As New List(Of Task) 线程多了,后面几个可能要等一二秒后再启动
java·linux·jvm
2023自学中2 小时前
Linux 内核中的 start_kernel() 函数内部:流程图与总结
linux·嵌入式硬件·uboot
序安InToo2 小时前
第3课|第一个Ada程序:Hello World深入解析
后端·操作系统·嵌入式
qq_479875432 小时前
netlink(1)
linux·服务器·网络
hzulwy3 小时前
Linux网络配置与测试
linux·运维·网络
zxnbmk3 小时前
磁盘挂载与迁移【自用复制】
linux
YQ_014 小时前
Ubuntu下安装WPS
linux·ubuntu·wps