SPI类 – 串行外设接口¶
SPI是由主机驱动的串行协议。其物理层包括3道线:SCK、MOSI、MISO。
请参见I2C的用法示例;SPI十分类似。主要区别在于初始化SPI总线的参数:
from pyb import SPI spi = SPI(1, SPI.MASTER, baudrate=600000, polarity=1, phase=0, crc=0x7)仅需参数为模式,SPI.MASTER或SPI.SLAVE。极性可为0或1,且为空闲时钟线所在的水平。 相位可为0或1,分别在第一或第二时钟沿采样数据。无CRC时Crc可为None或一个多项式说明符。
SPI的其他方法:
data = spi.send_recv(b'1234') # send 4 bytes and receive 4 bytes 发送4字节并接收4字节 buf = bytearray(4) spi.send_recv(b'1234', buf) # send 4 bytes and receive 4 into buf 发送4字节,接收4字节到缓冲区 spi.send_recv(buf, buf) # send/recv 4 bytes from/to buf 发送/接收4字节到/从缓冲区中
构建函数¶
- class
pyb.SPI(bus, ...)¶在给定总线上创建一个SPI对象。可为1,2。无附加参数的情况下,SPI对象可创建但未进行初始化(若存在,其设置来自总线的最后一次初始化)。初始化参数参见
init。SPI总线的物理引脚为:
SPI(1)is on the X position:(NSS, SCK, MISO, MOSI) = (X5, X6, X7, X8) = (PA4, PA5, PA6, PA7)SPI(2)is on the Y position:(NSS, SCK, MISO, MOSI) = (Y5, Y6, Y7, Y8) = (PB12, PB13, PB14, PB15)此时,NSS引脚并未被SPI驱动占用,为可用状态。
方法¶
-
SPI.deinit()¶ 关闭SPI总线。
-
init(mode, baudrate=328125, *, prescaler, polarity=1, phase=0, bits=8, firstbit=SPI.MSB, ti=False, crc=None)¶ 使用给定参数初始化SPI总线:
mode须为SPI.MASTER或SPI.SLAVE.baudrate为SCK时钟频率。prescaler从APB总线频率中派生SCK所使用的的前置分频器;prescaler的使用覆盖baudrate.polarity可为0或1,为空闲时钟线所在的水平。phase可为0或1,分别在第一或第二时钟沿上采样数据。bits可为8或16,且为每个传输词的位数。firstbit可为SPI.MSB或SPI.LSB.crc在无CRC时可为None,或一个多项式说明符。
注意:SPI时钟线未必是符合要求的波特率。硬件仅支持APB总线频率除以预分频器的波特率(见pyb.freq()), 可为2、4、8、16、32、64、128和256。SPI(1)在AHB2上,SPI(2)在AHB1上。若要对SPI时钟频率进行精准控制, 则需指定
prescaler,而非baudrate。打印SPI对象将显示计算波特率和所选预分频器。
-