一、SPI硬件接口
1、SPI简介
SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。常规只占用四根线,节约了芯片管脚,PCB的布局省空间。现在越来越多的芯片集成了这种通信协议,常见的有EEPROM、FLASH、AD转换器等。
2、硬件结构
SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave。如下图:(注:图片为引用)
信号定义如下:
SCK : Serial Clock 串行时钟
MOSI : Master Output, Slave Input 主发从收信号
MISO : Master Input, Slave Output 主收从发信号
SS/CS : Slave Select 片选信号
3、SPI工作模式
通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式。
CPOL,即Clock Polarity,决定时钟空闲时的电平为高或低。对于SPI数据传输格式没有显著影响。
1 = 时钟低电平时有效,空闲时为高
0 = 时钟高电平时有效,空闲时为低
CPHA,即Clock Phase,定义SPI数据传输的两种基本模式。
1 = 数据采样发生在时钟(SCK)偶数(2,4,6,...,16)边沿(包括上下边沿)
0 = 数据采样发生在时钟(SCK)奇数(1,3,5,...,15)边沿(包括上下边沿)
具体参考下面四个图:
CPOL=0,CPHA=0
CPOL=1,CPHA=0
CPOL=0,CPHA=1
CPOL=1,CPHA=1
二、树莓派4B SPI接口
1、树莓派4 SPI 接口 如图
树莓派4 GPIO
如图所示目前树莓派4支持1个物理SPI接口,有2个CS片选信号,支持2个SPI设备。
SPI Pin
2、树莓派4 SPI支持以下频率:
SPI支持频率列表
3、开启树莓派4 SPI支持
1)sudo raspi-config
2)在 interface option中选择 SPI,然后退出,reboot
3)启动后执行 sudo modprobe spi-bcm2708 加载驱动
4)在/dev目录下可以看到 spidev0.0 spidev0.1两个描述符
三、能动手就别等
1、安装Spidev
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-dev python3-dev
cd ~git clone https://github.com/doceme/py-spidev.gitcd py-spidev
make
sudo make install