ITPub博客

首页 > IT职业 > IT生活 > 全志R16_SPI总线驱动的使用文档

全志R16_SPI总线驱动的使用文档

IT生活 作者:SZX511 时间:2019-08-15 09:36:19 0 删除 编辑

介绍Linux 内核中SPI 子系统的接口及使用方法,为SPI设备驱动的开发提供参考。适用于基于Linux 3.4内核的全志R16硬件平台。

2. 2. 模块介绍
2.1.  模块功能介绍
Linux 中 SPI 体系结构图 2.1 所示,图中用分割线分成了三个层次:
1. 用户空间,包括所有使用 SPI 设备的应用程序;
2. 内核,也就是驱动部分;
3. 硬件,指实际物理设备,包括了 SPI 控制器和 SPI 外设。

其中,Linux 内核中的 SPI 驱动程序仅支持主设备,逻辑上又可以分为 3 个部分:
1. SPI 核心(SPI Core):实现对 SPI 总线驱动及 SPI 设备驱动的管理;
2. SPI 总线驱动(SPI Master Driver):针对不同类型的 SPI 控制器,实现对 SPI 总线访问的具体方法;
3. SPI 设备驱动(SPI Device Driver):针对特定的 SPI 设备,实现具体的功能,包括 read,write 以及 ioctl 等对用户层操作的接口。

SPI总线驱动主要实现了适用于特定SPI控制器的总线读写方法,并注册到Linux内核的SPI架构,SPI外设就可以通过SPI架构完成设备和总线的适配。但是总线驱动本身并不会进行任何的通讯,它只是提供通讯的实现,等待设备驱动来调用其函数。

SPI Core的管理正好屏蔽了SPI总线驱动的差异,使得SPI设备驱动可以忽略各种总线控制器的不同,不用考虑其如何与硬件设备通讯的细节。

2.2. 相关术语介绍
Sunxi 指Allwinner 的一系列 SOC 硬件平台
SPI:Serial Peripheral Interface,同步串行外设接口
SPI Master:SPI 主设备
SPI Device:指 SPI 外部设备

2.3. 模块配置介绍
2.3.1 sys_config.fex sys_config.fex 配置说明
在不同的 Sunxi 硬件平台中,SPI 控制器的数目也不同,但对于每一个 SPI 控制器来说,
在 sys_config.fex 中配置参数相似,如下:
[spi0]
spi_used = 1
spi_cs_bitmap = 1
spi_cs0 = port:PC27<3><1><default><default>
spi_sclk = port:PC02<3><default><default><default>
spi_mosi = port:PC00<3><default><default><default>
spi_miso = port:PC01<3><default><default><default>

其中:
1. spi_used 置为 1 表示使能,0 表示不使能;
2. spi_cs_bitmap,由于 SPI 控制器支持多个 CS,这一个参数表示 CS 的掩码;
3. spi_cs0、spi_sclk、spi_mosi 和 spi_miso 用于配置相应的 GPIO。
对于 SPI 设备,还需要通过以下参数配置 SPI board info,这些信息会通过 SPI 子系统的接口 spi_register_board_info()在 SPI 总线驱动初始化前就注册到内核中。

[spi_devices]
spi_dev_num = 1
[spi_board0]
modalias = "m25p32"
max_speed_hz = 33000000
bus_num = 0
chip_select = 0
mode = 0

其中:
1. spi_dev_num 表示 SPI 设备的数目,决定了下面有几个[spi_boardx];
2. modalias,SPI 设备的名字,在做总线适配时会用到;
3. max_speed_hz,最大传输速度,单位是 Hz;
4. bus_num,SPI 控制器的序号,从 0 开始编号;
5. chip_select,理论上可以选 0,1,2,3,取决于硬件的 CS 连线
6. mode,即 spi_board_info 结构中的 mode 成员,其定义同 spi_device 中的 mode

#define SPI_CPHA 0x01 /* clock phase */

#define SPI_CPOL 0x02 /* clock polarity */

#define SPI_MODE_0 (0|0) /* (original MicroWire) */

#define SPI_MODE_1 (0|SPI_CPHA)

#define SPI_MODE_2 (SPI_CPOL|0)

#define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)

#define SPI_CS_HIGH 0x04 /* chipselect active high? */

#define SPI_LSB_FIRST 0x08 /* per-word bits-on-wire */

#define SPI_3WIRE 0x10 /* SI/SO signals shared */

#define SPI_LOOP 0x20 /* loopback mode */

#define SPI_NO_CS 0x40 /* 1 dev/bus, no chipselect */

#define SPI_READY 0x80 /* slave pulls low to pause */


来源:http://bbs.16rd.com/thread-479253-1-1.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31529038/viewspace-2653738/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
AR产品,VR产品定制,全息投影,裸眼3D,体感互动,投影互动,真人大屏互动,unity定制等

注册时间:2018-03-29

  • 博文量
    291
  • 访问量
    695235