一. 简介
SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动。主机控制器驱动一般由半导体厂商写好,我们来编写SPI设备驱动代码。
前一篇文章分析了 IMX6U系列芯片的 SPI中片选信号的处理,文章如下:
接下来我们就来学习如何在
Linux
下编写
SPI
设备驱动。本实验的最终目的就是驱动
I.MX6U
ALPHA
开发板上的
ICM-20608
这个
SPI
接口的六轴传感器,可以在应用程序中读取
ICM-20608
的原始传感器数据。
这里主要学习创建SPI节点及ICM20608设备(SPI从设备)子节点。
二. ICM20608设备的硬件原理图
ICM20608设备的硬件原理图如下所示:
通过硬件原理图可以看出,ICM20608设备(SPI设备)的SPI使用的是(IMX6ULL的)SPI3接口,的四个IO对应如下:
SPI3_CS -> UART2_TXD //片选信号
SPI3_SCLK -> UART2_RXD //时钟信号
SPI3_MISO -> UART2_RTS //主收从发
SPI3_MOSI -> UART2_CTS //主发从收
三. 创建SPI节点及SPI设备子节点
这里学习支持设备树的情况下,通过设备节点信息来描述SPI设备信息,方法就是在设备树文件中创建SPI节点及SPI设备节点,IO的pinctrl节点。
1. 创建IO的pinctrl节点
打开ubuntu系统,通过 vscode软件打开 Linux内核源码(NXP官方提供。在 imx6ull-14x