anywill 发表于 2016-10-11 14:38:25

转发:ARM®mbed OS入门开发(五 A0)SPI总线协议

SPI总线协议2016-09-30 Summerain 小白学嵌入式
【概述】SPI(Serial Peripheral Interface)总线是主要应用于嵌入式系统内部通信的串行同步传输总线协议。通常为四线制的SPI总线支持全双工通信。SPI总线定义两个及以上设备间的数据传输,提供时钟的设备为主设备(Master),接收时钟的设备为从设备(Slave)。SPI协议特点包括主从模式、全双工通信、片选功能、模式错误标识及CPU中断、缓冲数据寄存器和可配置时钟相位极性等。SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。
【优点和缺点】 优点
[*]支持全双工通信
[*]Push-Pull驱动性能相比Open Drain信号完整性更好,支持高速应用(100MHz以上)
[*]协议支持字长不限于8bits,可根据应用特点灵活选择消息字长
[*]硬件连接简单

[*]只需要四根信号线(部分应用可以缩减到三根)
[*]相比I2C节省上拉电阻
[*]相比I2C不需要仲裁机制
[*]从设备使用主设备时钟,节约时钟要求
[*]从设备无需地址寻址
[*]无需收发器
缺点
[*]相比I2C两根线,SPI四根线更多
[*]没有寻址机制,只能靠设备片选(chip select)选择不同从设备
[*]没有数据流控制(但主设备可以通过延缓时钟边缘降低传输速度)
[*]没有从设备接收数据ACK应答机制,主设备对于发送成功与否不得而知
[*]只支持单主控
[*]没有定义数据校验机制
[*]相比于RS232和CAN,SPI传输距离短
[*]不支持热插拔

【信号定义】SPI协议定义四根信号线,分别为:
[*]SCK : Serial Clock 串行时钟
[*]MOSI : Master Output, Slave Input 主发从收信号
[*]MISO : Master Input, Slave Output 主收从发信号
[*]SS : Slave Select 片选信号
其中MISO方向为从设备到主设备,其余三个信号均为主设备到从设备。
【电路连接】片选信号SS通常低电平有效。SPI数据传输原理是基于主从设备内部移位寄存器的数据交换。在主设备SCK的控制下,待传数据由各自设备的数据寄存器(Data Register)传输到移位寄存器(Shift Register),再通过MOSI和MISO信号线完成主从设备间的数据交换。两个移位寄存器中的内容被交换。外设的写操作和读操作是同步完成的。按位传输,高位MSB在前,低位LSB在后。SPI主从模式传输示意图

单个主设备和单个从设备的SPI连接比较简单,以上图的表示的就是这种拓扑结构。对于单个主设备同时控制多个不同从设备,可以通过多个片选信号(SS)或菊花链方式(Daisy Chain Configuration)。
【传输模式】CPOL,即时钟极性Clock Polarity,决定时钟空闲时的电平为高或低。对于SPI数据传输格式没有显著影响。CPHA,即时钟相位Clock Phase,定义SPI数据传输的两种基本模式:CPHA = 0
[*]在片选后数据立即出现在MOSI/MISO管脚,数据锁存于第一个时钟边沿
[*]片选SS先于SCK半个时钟有效
[*]在SCK的第二个时钟边沿,上一个时钟边沿锁存的数据写入移位寄存器
[*]以此类推,数据在奇数边沿锁存(采样数据),在偶数边沿写入移位寄存器(输出数据,同时改变I/O管脚数据)
[*]经过16个时钟边沿后,串行传输的数据全部写入(并行的)移位寄存器,完成主从设备的数据交换
CPHA = 1
[*]有些设备要求数据输出在SCK第一个时钟边沿之后,数据锁存于第二个时钟边沿
[*]片选SS先于SCK半个时钟有效
[*]在SCK的第三个时钟边沿,上个时钟边沿锁存的数据写入移位寄存器(MSB或LSB)
[*]以此类推,数据在偶数边沿锁存,在奇数边沿写入移位寄存器
[*]经过16个时钟边沿后,串行传输的数据全部写入(并行的)移位寄存器,完成主从设备的数据交换
Notes:1. 主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。所以为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位。2. 在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。一般来说,从设备都会支持模式00和11(CPOL | CPHA),具体应用时应查看设备SPI的传输模式说明。3. 如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节(Dummy Byte)来引发从机的传输。当主机发送一个连续的数据流时,有些外设能够进行多字节传输。多数具有SPI接口的存储芯片就以这种方式工作。在这种传输方式下,从机的片选端必须在整个传输过程中保持低电平。此时,一次传输可能会涉及到成千上万字节的信息,而不必在每个字节的数据发送的前后都去检测其起始位和结束位,这正是同步传输方式优于异步传输方式的原因所在。虽然SPI有以上优点,然而在图像传输中却很少用到,原因主要是其抗干扰能力差

xyx365 发表于 2016-10-16 19:06:01

不错的教程

ynwscfsfi 发表于 2016-10-20 11:50:49

感谢分享

samhong 发表于 2017-3-17 13:22:12

谢谢分享。

idfulin 发表于 2017-4-27 14:06:47

学习了

idfulin 发表于 2017-4-27 14:07:29

三线的也能全双工吗?

魔双月壁 发表于 2017-6-16 09:05:54

第一张图片里 主机ss片选 是置高电平吗 ?

这样会不会有问题啊
页: [1]
查看完整版本: 转发:ARM®mbed OS入门开发(五 A0)SPI总线协议