SPI总线
SPI 是串行外设接口(Serial Peripheral Interface)的缩写。 是 Motorola 公司推出的一种同步串行接口技术,是一种 高速的,全双工,同步的通信总线。 SPI优点 支持全双工通信 通信简单 数据传输速率快
1):高速、同步、全双工、非差分、总线式
2):主从机通信模式 缺点 没有指定的流控制,没有应答机制确认是否接收到数据, 所以跟IIC总线协议比较在数据的可靠性上有一定的缺陷。
SPI时序解析
CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,
也就是 SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送
是在下降沿。
CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,
也就是 SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送
是在上升沿。
CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,
也就是 SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送
是在上升沿。
CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,
也就是 SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送
是在下降沿。
数码管显示数值实例
#include <linux/init.h>
#include <linux/module.h>
#include<linux/spi/spi.h>
int m74hc595_probe(struct spi_device *spi)
{
char buf[]={0x2,0x6d};
printk("%s:%d\n",__FILE__,__LINE__);
spi_write(spi,buf,sizeof(buf));
return 0;
}
int m74hc595_remove(struct spi_device *spi)
{
printk("%s:%d\n",__FILE__,__LINE__);
return 0;
}
//设备树匹配表
struct of_device_id of_table[]={
{.compatible="hqyj,m74hc595"},
{},
};
MODULE_DEVICE_TABLE(of,of_table);
//定义SPI对象并且初始化
struct spi_driver m74hc595 ={
.probe=m74hc595_probe,
.remove=m74hc595_remove,
.driver={
.name="m74hc595",
.of_match_table=of_table,
},
};
module_spi_driver(m74hc595);
MODULE_LICENSE("GPL");