嵌入式系统的SPI的驱动的编写

内核编译和嵌入式产品的设计与开发
回复
小白用户
帖子: 1
注册时间: 2013-01-05 9:36
系统: win7

嵌入式系统的SPI的驱动的编写

#1

帖子 小白用户 » 2013-01-05 11:05

刚开始学嵌入式,本人用的是AT9261芯片的ARM开发板,芯片有两路SPI接口,SPI-0和SPI-1。其中SPI-1挂了3个外设,两路DAC,一路AD。我想弄明白几点,请大家帮忙指点一下:
1、是否需要写三个针对不同外设的驱动模块,虽然是同一个SPI-1接口
2、下面内容的“.mode =SPI_MODE_0, //CPOL=0, CPHA=0 此处选择具体数据传输模式”其中“.mode”具体是什么
3、针对2,其实我想知道驱动中如何选定SPI-0或SPI-1(这个请大神叙述详细点,谢谢)
4、三个设备都是接SPI-1接口,是不是操作函数里(read等)用mutex_lock互锁就行

下面是网上查到的内容:
http://www.cnblogs.com/liugf05/archive/ ... 00457.html
2.3 SPI设备驱动层
SPI设备驱动层为用户接口层,其为用户提供了通过SPI总线访问具体设备的接口。
SPI设备驱动层可以用两个模块来描述,struct spi_driver和struct spi_device。
相关的数据结构如下:
struct spi_driver {
int (*probe)(struct spi_device *spi);
int (*remove)(struct spi_device *spi);
void (*shutdown)(struct spi_device *spi);
int (*suspend)(struct spi_device *spi, pm_message_t mesg);
int (*resume)(struct spi_device *spi);
struct device_driver driver;
};

Driver是为device服务的,spi_driver注册时会扫描SPI bus上的设备,进行驱动和设备的绑定,probe函数用于驱动和设备匹配时被调用。

struct spi_device {
struct device dev;
struct spi_master *master;
u32 max_speed_hz;
u8 chip_select;
u8 mode;
u8 bits_per_word;
int irq;
void *controller_state;
void *controller_data;
char modalias[32];
};

.modalias = "m25p10",
.mode =SPI_MODE_0, //CPOL=0, CPHA=0 此处选择具体数据传输模式
.max_speed_hz = 10000000, //最大的spi时钟频率
/* Connected to SPI-0 as 1st Slave */
.bus_num = 0, //设备连接在spi控制器0上
.chip_select = 0, //片选线号,在S5PC100的控制器驱动中没有使用它作为片选的依据,而是选择了下文controller_data里的方法。
.controller_data = &smdk_spi0_csi[0],
通常来说spi_device对应着SPI总线上某个特定的slave。并且spi_device封装了一个spi_master结构体。spi_device结构体包含了私有的特定的slave设备特性,包括它最大的频率,片选那个,输入输出模式等等
michael9169
帖子: 1
注册时间: 2013-01-26 20:01
系统: lubuntu

Re: 嵌入式系统的SPI的驱动的编写

#2

帖子 michael9169 » 2013-01-26 20:11

1、是否需要写三个针对不同外设的驱动模块,虽然是同一个SPI-1接口
是的,不同的设备需要不同的驱动

2、下面内容的“.mode =SPI_MODE_0, //CPOL=0, CPHA=0 此处选择具体数据传输模式”其中“.mode”具体是什么
spi mode,一共四种,用来定义是上升沿还是下降沿锁存数据/空闲时是低电平还是高电平

3、针对2,其实我想知道驱动中如何选定SPI-0或SPI-1(这个请大神叙述详细点,谢谢)
u8 chip_select; 即是片选口,当然,要spi controller驱动支持

4、三个设备都是接SPI-1接口,是不是操作函数里(read等)用mutex_lock互锁就行
这是spi controller驱动需要做的,spi device驱动不用管
回复