- 环境:
树莓派4B+
示波器 - 准备工作:
(1) GPIO引脚定义图如下所示:
(2) 使用远程桌面连接树莓派,如下图:
(3) 使用示波器的Ch1 Ch2分别连接SCLK(23)、MOSI(19),示波器的GND引脚为25.
(4) 在mu环境中安装对应工具包spidev,安装方法使用命令“pip install spidev”,如下所示:
安装完成后,在Python中通过import可以使用。
3.SPIDEV的函数介绍如下:
(1)open(bus, device)
连接到指定的spi设备,可打开的设备 /dev/spidev.
在树莓派上使能spi之后,会在/dev目录下看到/dev/spi0.0和/dev/spi0.1
如下图
(2)readbytes(n)
从SPI设备中读取n个字节
(3)writebytes(list of values)
向SPI设备中写入数据
(4)writebytes2(list of values)
功能和writebytes是相似的,如果values过长,超过/sys/module/spidev/parameters/bufsiz定义的字节,原始的values则会被分割为多块,并且分多次发送。并且这里的values也能接受byte array,不一定要要转化为list也可使用。在进行图像传输的时候这里会方便很多。
(5)xfer(list of values[, speed_hz, delay_usec, bits_per_word])
执行一次spi传输,并且在此期间,两个block的clk之间cs管脚会被释放并且重新激活。中间的delay以us为单位。
这是什么意思呢,用逻辑分析仪抓一下就知道了,这里执行了两次传输,中间cs被释放拉高。当金星传输的时候,cs再次被拉低。
(6)xfer2(list of values[, speed_hz, delay_usec, bits_per_word])
执行一次SPI传输,但是片选始终被拉低在两次传输之间。
(7)xfer3(list of values[, speed_hz, delay_usec, bits_per_word])
功能和xfer2相似,但是在list的长度大于/sys/module/spidev/parameters/bufsiz时会被分割成许多块,然后多次发送。
(8)close()
断开和spi设备的连接
4.spi属性
(1) bits_per_word
(2) cshigh
(3) loop
(4) no_cs
(5) lsb_first
(6) max_speed_hz
(7) mode
spi的四种工作模式 Mode 0 CPOL=0, CPHA=0 —>对应到这里 0b00 Mode 1 CPOL=0, CPHA=1 —>对应到这里 0b01 Mode 2 CPOL=1, CPHA=0 —>对应到这里 0b10 Mode 3 CPOL=1, CPHA=1 —>对应到这里 0b11
(8) threewire
三线的SPI
(9) SPI通信速率:
5.Python代码如下:
import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0)
print(spi.mode)
spi.max_speed_hz =7629
def write_pot(input):
msb = input >> 8
lsb = input & 0xFF
print([msb, lsb])
# spi.xfer([msb, lsb])
spi.xfer([msb,lsb,msb,lsb,msb,lsb])
while 1 :
write_pot(65535)
time.sleep(1)
6.Python代码如下: