序列周边接口

✍ dations ◷ 2025-05-19 10:01:57 #串行总线

串行外设接口(Serial Peripheral Interface Bus,SPI),是一种用于芯片通信的同步串行通信接口规范,主要应用于单片机系统中。类似I²C。这种接口首先由摩托罗拉公司于20世纪80年代中期开发,后发展成了行业规范。它的典型应用有SD卡与液晶显示器。

SPI设备之间使用全双工模式通信,是一个主机和一个或多个从机的主从模式。主机负责初始化帧,这个数据传输帧可以用于读与写两种操作,片选(英语:Chip select)线路可以从多个从机选择一个来响应主机的请求。

有时SPI接口被称作四线式接口,这是为了与其他不同线制的数据传输接口加以区分。SPI准确来讲应为“同步串行接口”,但是它又与同步串行接口协议(SSI)是完全不同的两种协议。虽然SSI也是一个四线式同步通信协议,但是它使用差分信号,而且仅提供一个单工通信信道。于此相对地,SPI是一个单主机多从机的通信接口。

SPI总线规定了4个保留逻辑信号接口:

尽管上面的引脚名称是最常用的,但在过去,有时会使用其他引脚命名方式,因此旧的集成电路产品的SPI端口引脚名称可能有所不同。

SPI总线的通信操作可以在单个主设备与一或多个从设备之间进行。

在只有单一从设备的情况下,如果从设备允许,SS引脚可以固定为逻辑低电平。然而有一些从设备需要片选信号的下降沿来触发动作。Maxim MAX1242 ADC就是一个例子,它在高→低转换时才会开始进行模数转换。对于多个从设备,每个从设备都需要一个独立的SS信号。

大多数从属设备​​具有三态逻辑的特性,所以当器件未被选中时,它们的MISO信号变为高阻抗(逻辑断开)。没有三态输出的器件不能与其他器件共享SPI总线段,但是可以使用外接的三态逻辑缓存来解决这个问题。

为了开始通信,总线上的主设备需要使用从设备支持的频率来配置时钟,这个频率最高为几兆赫兹左右。然后主设备将某根连接到从设备SS的线上的信号置为0来选中这个从设备。如果等待时间是必要的话(例如进行模数转换),主设备必须等待满这段时间之后,才可以发出时钟周期信号。

在每个SPI时钟周期内,都会发生全双工数据传输。主设备在MOSI线上发送一个位,从设备读取它,同时从机在MISO线上发送一位数据,主机读取它。即使只有单向数据传输的目的,主从机之间的通信工作方式仍然是双工的。

传输通常会使用给定字长的两个移位寄存器,一个在主设备中,一个在从设备中,它们之间的连接方式形成了一个虚拟的环形拓朴结构。数据通常先从最高位移出。在时钟信号边沿,主机和从机均移出一位,然后在传输线上输出给对方。在下一个时钟沿,每个接收器都从传输线接受对方发出的数据位,并且从移位寄存器的最低位推入。每完成这样一个移出——推入的周期后,主机和从机就交换寄存器中的一位数据。当所有数据位都经过了这样的移出——推入过程后,主机和从机就完成了寄存器上的数据交换。如果需要交换的数据比寄存器的位数还要长的话,则需要重新加载移位寄存器并重复该过程。传输可能会持续任意数量的时钟周期。完成后,主设备会停止发送时钟信号,并通常会取消选择从设备。

传输寄存器通常包含8位。但是其他字长也很常见,例如触摸屏控制器或音频编解码器通常采用16位字长(如德州仪器的TSC2101),许多数模转换或者模数转换的设备则会采用12位字长。

所有在总线上的没有被片选线激活的从设备必须忽略输入时钟和MOSI信号,并且不得从MISO发送数据。

在独立的从设备配置中,每个从设备都有独立的芯片选择线。 强烈建议在每个独立器件上使用电源和片选线之间使用上拉电阻,以减少器件之间的串扰。 这是SPI通常被使用的方式。 由于从机的MISO引脚连接在一起,因此它们需要为三态引脚(高,低或高阻抗)。

SPI从设备有时会使用另一条信号线将中断信号发送到主设备的CPU。 例子包括来自触摸屏传感器的笔下中断,来自温度传感器的热限制警报,实时时钟芯片发出的警报, SDIO以及来自手机中声音编解码器的耳机插孔插入。 SPI标准中并不包括中断。 中断的使用既不被禁止也不被标准规定。

/* * 通过SPI协议在主设备和从设备之间交换一个字节的数据 * * Polarity and phase are assumed to be both 0, i.e.: *   - 输入数据在SCLK的上升沿捕获。 *   - 输出数据在SCLK的下降沿传播。 * * 返回接收到的一字节的数据 */uint8_t SPI_transfer_byte(uint8_t byte_out){    uint8_t byte_in = 0;    uint8_t bit;    for (bit = 0x80; bit; bit >>= 1) {        /* Shift-out a bit to the MOSI line */        write_MOSI((byte_out & bit) ? HIGH : LOW);        /* Delay for at least the peer's setup time */        delay(SPI_SCLK_LOW_TIME);        /* Pull the clock line high */        write_SCLK(HIGH);        /* Shift-in a bit from the MISO line */        if (read_MISO() == HIGH)            byte_in |= bit;        /* Delay for at least the peer's hold time */        delay(SPI_SCLK_HIGH_TIME);        /* Pull the clock line low */        write_SCLK(LOW);    }    return byte_in;}

优点和缺点

优点

  • SPI协议默认是全双工通信。
  • 推挽式驱动器 (与开路漏极相反)可提供良好的信号完整性和高速度
  • 比I²C或SMBus更高的吞吐量 。 不限于任何最大时钟速度,可实现高速运行
  • 完整的传输位协议灵活性
    • 不限于8位字
    • 消息大小,内容和目的的任意选择
  • 非常简单的硬件接口
  • 由于电路较少(包括上拉电阻),因此通常比I²C或SMBus的功耗要低,
  • 没有仲裁或相关的失败模式
  • 从设备直接使用主时钟,不需要精密振荡器
  • 从站不需要唯一的地址 - 不像I²C或GPIB或SCSI
  • 不需要收发器
  • IC封装只使用四个引脚,而电路板布局或连接器则少于并行接口
  • 每个器件至多有一个独特的总线信号(芯片选择);其他信号均可以共享
  • 信号是单向的,允许简单的电偶分离
  • 简单的软件实现

缺点

  • 即使是三线式SPI,也需要比I²C更多的IC封装引脚
  • 没有带内寻址; 共享总线上需要带外片选信号
  • 从机没有硬件流量控制 (但主机可以延迟下一个时钟边沿以降低传输速率)
  • 没有硬件从设备确认(主机可能无法传输并且不知道这一点)
  • 通常只支持一个主设备(取决于设备的硬件实现)
  • 没有定义错误检查协议
  • 没有正式的标准,验证一致性是不可能的
  • 与RS-232 , RS-485或CAN总线相比,它只能处理短距离内的数据传输。 (距离可以通过使用收发器如RS-422进行扩展)
  • 有许多现有的变体,使得很难找到支持这些变体的主机适配器等开发工具
  • SPI不支持热交换 (动态添加节点)。
  • 中断必须通过带外信号来实现,或者通过使用类似于USB 1.1和2.0的定期轮询来伪造
  • 一些变体,如双路SPI , 四路SPI和三线SPI是半双工的。

参见

  • I²C
  • 网络总线列表

外部链接

  • Introduction to Serial Peripheral Interface article on embedded.com
  • Serial buses information page
  • SPI Introduction with helpful diagrams
  • Serial Flash Lots of good information on SPI part manufacturers and models.
  • SPI - PICmicro Serial Peripheral Interface Microchip (company) tutorial on SPI.


相关

  • 南斯拉夫内战1991–1992:  克罗地亚1991–1992: 塞尔维亚克拉伊纳共和国 南斯拉夫人民军1992–1994:  克罗地亚1992–1994:1992–1994: 南联盟 塞族共和国 塞尔维亚克拉伊纳共和国 南
  • 橡皮筋橡皮筋,简称橡筋,是一种用橡胶与乳胶作成的短圈,一般用来把东西绑在一起。于1845年英国一家橡胶工厂的老板史蒂芬·派瑞(Stephen Perry),发明了橡皮筋。是一种环形的物体,可以将许
  • 困惑的浪漫《困惑的浪漫》(德语:Nekromantik)是一部于1987年出品的西德恐怖电影。奸尸以及一些大胆的情节令它非常受争议,更在好些国家被禁止放映。影片从一个晚上某女人在马路边的草地上
  • 多多马多多马(斯瓦希里语:Dodoma)是坦桑尼亚中部城市,位于达累斯萨拉姆以西486公里、东非共同体理事会所在地阿鲁沙以南441公里,也是坦桑尼亚首都和多多马区首府。面积2,669平方公里,建
  • 北大年府北大年府(泰语:จังหวัดปัตตานี,皇家转写:Changwat Pattani,泰语发音:),泰国一级行政区划之一,位于泰国南部的东海岸。北大年之名来源于马来语“Patani”,意思是“这个海
  • 江浙等处行中书省江浙等处行中书省(江浙行中书省),为直属元朝中央政府的一级行政区,简称江浙或江浙省,在当时民间多简称为江浙省、江浙行省。至元十三年(1276年)元军攻占南宋都城临安府(在今杭州市),俘
  • 罗马 (2018年电影)《罗马》(西班牙语:)是一部2018年墨西哥及美国合拍的黑白剧情片,由阿方索·卡隆执导、监制、编剧、摄影和剪辑,改编自他的童年经历。该片最先于2018年8月30日在第75届威尼斯电影
  • 后贝加尔斯克站坐标:49°38′21.7″N 117°19′54.4″E / 49.639361°N 117.331778°E / 49.639361; 117.331778后贝加尔斯克站,又译外贝加尔斯克站、后贝加尔站(俄语:Забайкальск,
  • 弗谢沃洛德·瓦西里耶维奇·沙罗诺夫弗谢沃洛德·瓦西里耶维奇·沙罗诺夫(俄语:Все́волод Васи́льевич Шаро́нов;1901年2月25日(儒略历3月10日,圣彼得堡)-1964年11月27日(列宁格勒)),是一位苏
  • 马耳他总理马耳他总理(Prime Minister of Malta) (马耳他语:Prim Ministru ta' Malta)是马耳他的政府首脑。由马耳他议会选举产生。1921年马耳他自治政府成立,其首脑称为首席部长(Head of