你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 1963|回复: 6

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

[复制链接]

61

主题

1071

回帖

17

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2016-10-11 14:38:25 | 显示全部楼层 |阅读模式
SPI总线协议2016-09-30 Summerain [url=]小白学嵌入式[/url]
【概述】
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在后。
微信截图_20161011143807.png
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有以上优点,然而在图像传输中却很少用到,原因主要是其抗干扰能力差
微信截图_20161010090612.png


<
回复

使用道具 举报

0

主题

159

回帖

0

蝴蝶豆

高级会员

最后登录
2017-3-9
发表于 2016-10-16 19:06:01 | 显示全部楼层
不错的教程
回复 支持 反对

使用道具 举报

6

主题

446

回帖

0

蝴蝶豆

金牌会员

最后登录
2017-5-24
发表于 2016-10-20 11:50:49 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

1

主题

455

回帖

2

蝴蝶豆

金牌会员

最后登录
2019-5-7
发表于 2017-3-17 13:22:12 | 显示全部楼层
谢谢分享。
回复 支持 反对

使用道具 举报

0

主题

13

回帖

0

蝴蝶豆

中级会员

最后登录
2019-1-14
发表于 2017-4-27 14:06:47 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

0

主题

13

回帖

0

蝴蝶豆

中级会员

最后登录
2019-1-14
发表于 2017-4-27 14:07:29 | 显示全部楼层
三线的也能全双工吗?
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
2018-1-15
发表于 2017-6-16 09:05:54 | 显示全部楼层
第一张图片里 主机ss片选 是置高电平吗 ?

这样会不会有问题啊
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版