1、什么是SPI通讯协议?

SPI(串行外设接口)是一种高速的,全双工,同步的通讯总线,并且在芯片的管脚上只占用四根线。


2、工作方式是什么?

其以主从方式工作,这种模式通常一个主设备对应一个或者多个从设备。双向传输需要4根线,单向传输为3根线。这四根线分别为SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。当为单向传输时,其可以不需要SDI。

  • SDO     – 主设备数据输出,从设备数据输入 对应MOSI master output slave input
  • SDI      – 主设备数据输入,从设备数据输出  对应MISO master input slave output
  • SCLK   – 时钟信号,由主设备产生
  • CS        – 从设备选择,由主设备控制,用来选择从设别。功能是主设备可以与特定从设备通信,避免数据线上的冲突。

 


3、通讯速率是多少?

SPI并没有规定最高速度,通讯速率完全是由通信双方的能力所决定。在实际使用情况中,需要根据通讯双方的数据手册和实际情况来调整通讯速率。


4、Raspberry Pi Pico的SPI主要参数

RP2040有两个相同的SPI控制器,都是基于ARM Primecell同步串口(SSP)(PL022)

1、支持主从模式

  • 支持摩托罗拉SPI接口
  • 支持德州仪器同步串行接口(SSI)
  • 支持美国国家半导体Microwire接口

 2、8单位深度收发先进先出存储器(8 deep TX and RX FIFOs)

3、中断生成器可服务于先进先出存储器或者错误标识

4、可使用DMA驱动

5、可编程时钟

6、可编程数据大小(4-16bit)


1、machien.SPI(id,baudrate=  500000, polarity = 0, phase = 0, bits = 8, firstbit = 0, sck = None, mosi = None, miso = None)

#id   :使用的SPI通道,可为0或者1

#baudrate  :SPI通讯速率,也就是SCK引脚上的频率

#polarity  :  时钟极性(为1或者0),若为0则总线空闲时SCK输出低电平,反之则输出高电平

#phase  :时钟相位(为1或者0),若为0则在第一个时钟边缘捕获数据,反之则在第二个时钟边缘捕获数据

#bits  :每次传输的数据位数

#firstbit  :先传输高位还是低位

#sck  /  nosi  /miso   :均为SPI使用的引脚,应为Pin  对象


2、SPI.init()

#init  :用于重新启动SPI

3、SPI.denit()


#denit  :用于关闭SPI

4、SPI.read(nbytes ,write = 0x00)

#read  函数,用于读取从设备数据并返回

#nbytes  :读取字节数

#write  :读取数据时,MOSI输出数据

5、SPI。readinto(buf ,write = 0x00)

#readinto  函数,用于读取从设备数据并存入指定字符数组中

#buf  :字符数组,用于存放接收数据

#write  : 字符数组,MOSI输出数据

6、SPI.write(buf)

#写入 buf 中包含的字节。返回None

#buf  :字符数组,用于存放传输数据

7、SPI.write_readinto(write_buf,rad_buf)

#write_readinto  函数,用于同时发送和接收数据

#write_buf  :字符数据,用于存放传输数据

#read_buf  :字符数组,用于存放接收数据

传输和接收数据的字符数组的长度要求一致