ARM-Linux下SPI设备的添加与驱动实现※
2012-09-25怯肇乾陈永超
怯肇乾,陈永超
(北京新大陆有限公司,北 京100044)
1 SPI总线设备驱动及其实现分析
ARM-Linux操作系统下,SPI总线操作,自上而下分为3个层次:平台依赖层、硬件抽象层和用户接口层。平台依赖层对应微处理器里集成的一个或多个SPI主机控制器,包括平台设备(Platform Device)和平台驱动程序,每种处理器平台都有自己特定的SPI控制器驱动,属于平台移植相关层,主要是按照核心层定义的接口实现具体的spi_master。硬件抽象层提供核心数据结构的定义、SPI控制器驱动和设备驱动的注册、注销管理,它面向平台依赖层屏蔽实际总线控制器的差异,定义了统一的访问策略和接口。面向用户接口层提供统一的接口,以便SPI设备驱动通过总线控制器进行数据收发,其主体框架程序是GPIO模拟SPI时序spi_bitbang.c和可进行同/异步消息传输等操作的spi.c。用户接口层即设备驱动层,为用户提供了通过SPI总线访问具体设备的接口,包括SPI设备和SPI驱动程序。ARM-Linux下SPI总线的层次结构图如图1所示。

图1 ARM-Linux下SPI总线的层次结构图
嵌入式ARM-Linux操作系统对SPI总线提供完整而成熟的硬件抽象层和通用的SPI驱动spi_driver。针对具体的ARM内核微处理器体系,如Samsung公司基于Cortex-A8的S5PV110/S5PV210、TI公司基于 Cortex-A8的AM3515/AM3715、Freescale公 司 基 于 Cortex-A8 的i.MX515/i.MX535等,半导体厂商通常提供其SPI控制器驱动的platform_driver和对应的platform_device配置,还有通用spi_driver对应的spi_device配置。platform_device配置定义SPI主机信号与从机的片选信号和中断信号。spi_device配置指定具体SPI设备对应的SPI主机号、采用的SPI通信模式与传输速度和其使用的中断等。platform_device和spi_device配置通常定义在平台匹配文件 mach_xxx.c,如 mach_smdkc110.c。
所以,在ARM-Linux中添加SPI设备,可以借用SPI通用驱动快速实现,可以为其编写特定的SPI驱动。……
