SPI驱动总线架构:SPI核心层(x),SPI控制器驱动层(x),SPI设备驱动层(√) 2 Linux SPI驱动总体架构 在2.6的linux内核中,SPI的驱动架构可以分为如下三个层次:SPI 核心层、SPI控制器驱动层和SPI设备驱动层。 Linux 中SPI驱动代码位于drivers/spi目录。2.1 SPI核心层 SPI核心层是Linux的SPI核心部分,提供了核心数据结...
首先需要明确的一点是,SPI 主机控制器部分是整个 SPI 系统的核心存在,它并不属于 SPI 下的 bus、device、drvier 这一组结构,因为他并不是挂接到 bus 上的 device,更不是对应挂接在 bus 上 device 的 driver,而是相对独立的一个存在,所以 SPI 控制器部分,是连接到 platform 下的,并执行 platform 的 probe;...
在应用程序中可以通过ioctl来获取和配置SPI的相关属性,并实现SPI数据的发送和接收,SPI的ioctl宏定义在“/usr/include/linux/spi/spidev.h”,部分ioctl cmd如下所示: /* 读取 / 写入 SPI 模式(SPI_MODE_0..SPI_MODE_3)(限制为 8 位) */ #define SPI_IOC_RD_MODE _IOR(SPI_IOC_MAGIC, 1, __u8) /...
int spi_sync(struct spi_device *spi, struct spi_message *message) { return __spi_sync(spi, message, 0); } 接着调用了__spi_sync static int __spi_sync(struct spi_device *spi, struct spi_message *message, int bus_locked) { DECLARE_COMPLETION_ONSTACK(done); int status; struct spi_m...
00000056 static DECLARE_BITMAP(minors, N_SPI_MINORS); DECLARE_BITMAP是一个宏,定义如下: #define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)] 将宏展开后是这样的,unsigned long minors[1],其实就是定义一个只有一个元素的无符号长整形数组miniors。
设备信息的结构体数据如下所示:include/linux/spi.h定义这个结构体,不受具体的CPU的影响。 struct spi_board_info { char modalias[32]; //设备的名称用来和驱动进行匹配 const void *platform_data; //设备的具体信息,是个空指针,可以指向任何结构的结构体 ...
1、 linux下spi驱动技术分析 spi是“serial peripheral interface” 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,spi设备分为主设备和从设备两种,用于通信和控制的四根线分别是:cs 片选信号sck 时钟信号miso 主设备的数据输入、从设备的数据输出脚mosi 主设备的数据输出、从设备的...
一、SPI驱动框架的基本结构 在Linux内核中,SPI驱动框架的代码位于/drivers/spi目录下。该目录下的源文件主要包括以下几个: spi.c:SPI总线设备驱动程序。 spi-bitbang.c:位压缩SPI驱动程序。 spi-dw-dma.c:SPI DMA驱动程序。 spi-dw-mmio.c:SPI MMIO驱动程序。
为了在 SPI 总线驱动代码中区分每一个 SPI 控制器,需要在 Device Tree 中的 aliases 节点中为每一个 SPI 节点指定别名: aliases { soc_spi0 = &spi0; soc_spi1 = &spi1; ... }; 别名形式为字符串 “spi” 加连续编号的数字,在 SPI 总线驱动程序中可以通过 of_alias_get_id() 函数获取对应 SPI ...
1 struct spi_transfer { 2 const void *tx_buf; 3 void *rx_buf; 4 unsigned len; 5 6 dma_addr_t tx_dma; 7 dma_addr_t rx_dma; 8 9 unsigned cs_change:1; 10 u8 bits_per_word; 11 u16 delay_usecs; 12 u32 speed_hz;