Synchronous Serial Port 协议详解

打印 上一主题 下一主题

主题 982|帖子 982|积分 2956

1、简介

Synchronous Serial Port (SSP) ,基于下图文档的设计标准

1.1、包罗3种数据帧格式:



  • a Motorola SPI-compatible interface(以下简称SPI)
  • a Texas Instruments synchronous serial interface(简写SSI,以下简称SSP格式)
  • a National Semiconductor Microwire interface(以下简称Microwire)
1.2、共同点:



  • 都用4根线,CS、TXD、RXD、CLK
  • 都有master和slave模式
1.3、差异点:



  • SSP的CS由一个时钟周期的高电平脉冲表现开始,SPI和Microwire的CS是拉低有效,SSP的章节会详细展开
  • SPI比SSP和Microwire更为灵活,相位、极性可配,SPI的章节会详细展开
  • Microwire必要设置方向,告知发送照旧吸取;SSP和SPI,写数据寄存器就是发送,读数据寄存器就是吸取;SPI的章节会详细展开
2、SPI(Motorola SPI-compatible interface)



  • SPI是一种同步的全双工通信协议,TXD和RXD可以同时工作。
  • 时钟由主机产生。
  • 支持一个master对多个slave,CS拉低控制哪个slave被选中。
  • 支持各种bit宽度的帧格式,一帧一般小于即是32bit。
  • 有多种工作模式,只发、只收、同时收发等。
  • 时钟极性和相位可设置,极性决定空闲时CLK的电平高低,相位决定第几个时钟沿采样数据
2.1、毗连线



  • CS:片选线,也叫SS,拉低后开始传输,拉高后结束传输,支持发多帧数据时CS一直拉低,支持每帧以CS拉低开始CS拉高结束
  • CLK:时钟由master提供,支持的频率很宽泛
  • TXD:发送脚,又名MOSI,master输出脚接slave输入脚。TXD接对测设备RXD。
  • RXD:吸取脚,又名叫MISO,master输入脚接slave输出脚。RXD接对测设备TXD。
对接方式如下图:

2.2、传输模式

(1)、只发不收



  • 只用到TXD,CS和CLK这3根线,顾名思义,只发送数据,不吸取数据
  • 控制LCD屏幕,会用到只发不收模式,LCD屏只吸取控制命令数据。
  • 例如下图,发送1帧数据,0x15BF的数据宽度为13bit
  • 注意:数据一般是先发送高位,有些控制器巨细端可配

(2)、同时收发



  • 4根线都会用到,发送数据的同时也在吸取数据
  • 控制FLASH、EEPROM,会用到此模式。FLASH吸取到命令后延时一段时间,才会返回真实的数据,所以master必要发几帧无效的数据,等候slave返回真实值。
  • 例如下图,读FLASH设备ID,发送1帧命令+4帧dummy,吸取5帧数据,数据宽度为8bit
  • 发送数据为:0xAB、0xFF、0xFF、0xFF、0xFF(命令:0xAB)
  • 吸取的数据为:0xFF、0xFF、0xFF、0xFF、0x17(FLASH ID:0x17)

(3)、只收不发



  • 只用到RXD,CS和CLK这3根线,只吸取数据,不发送数据
  • 比如作为slave模式时,只吸取master发来的数据
  • 波形和只发不收模式雷同,master的TXD接到slave的RXD
2.3、CS的多种实现方式

(1)、用GPIO模式CS脚



  • 有些SPI控制器规定,在TXFIFO发空后,CS会被拉高,CLK时钟也会停止。对于FLASH这种器件,必要先发送死令,再吸取数据的需求就不能满足,不可能TXD一直在发送dummy byte,尤其是读大量数据时。那么CS就可以复用成GPIO功能,或用别的一个GPIO代替。
  • 必要CS拉低时,GPIO输出低
  • 必要CS拉高时,GPIO输出高
  • 这必要熟读FLASH手册,且软件操作相对复杂
  • 例如ST的示例代码,就是用GPIO模仿CS,可以得到同时收发模式的波形:
  1. u32 SPI_FLASH_ReadDeviceID(void)
  2. {
  3.   u32 Temp = 0;
  4.   /* GPIO 输出低,Select the FLASH: Chip Select low */
  5.   SPI_FLASH_CS_LOW();
  6.   /* Send "RDID " instruction */
  7.   SPI_FLASH_SendByte(W25X_DeviceID);
  8.   SPI_FLASH_SendByte(Dummy_Byte);
  9.   SPI_FLASH_SendByte(Dummy_Byte);
  10.   SPI_FLASH_SendByte(Dummy_Byte);
  11.   
  12.   /* Read a byte from the FLASH */
  13.   Temp = SPI_FLASH_SendByte(Dummy_Byte);
  14.   /* GPIO 输出高,Deselect the FLASH: Chip Select high */
  15.   SPI_FLASH_CS_HIGH();
  16.   return Temp;
  17. }
复制代码
(2)、SPI自带的CS功能



  • 缺点TXFIFO发空后CS就拉高了
  • 连续发送多个数据之后(在TXFIFO阈值内),再查询TXFIFO满状态,保证一直有数据可发
  • 通常这种方式只实用于同时收发模式,发送的同时也把数据收了。
  • 不肯定能保持一直拉低的效果,必要抓波形确认。
  • 下图是CS每帧都拉高的情况:



  • 大概使用DMA,事先把全部数据都准备好,一次性发完,就可以保证CS一直拉低。

2.4、SPI的相位和极性



  • CPOL,clock polarity,极性,决定空闲时CLK电平高低
  • CPHA,clock phase,相位,决定第几个时钟沿采样数据,有2种相位情况
    (1)、第1个时钟沿采样,第2个时钟沿数据正在改变
    (2)、第1个时钟沿数据正在改变,第2个时钟沿采样
  • 至于第1个时钟沿是上升沿照旧降落沿,由时钟极性决定
  • 采样数据时,数据线上的电平值是稳定的,高电平表现1,低电平表现0
  • 发送数据时,数据正在发生改变,由0变1,或1变0
(1)、CLK空闲时为高电平,第1个时钟沿采样数据



  • 下图的CS空闲时为高电平
  • 第1个时钟沿(上升沿)采样数据,第2个时钟沿(降落沿)数据正在改变
  • 后续数据都是按上升沿采样,降落沿数据改变

(2)、CLK空闲时为低电平,第1个时钟沿采样数据



  • 第1个沿为上升沿,第2个沿为降落沿

(3)、CLK空闲时为高电平,第2个时钟沿采样数据

和(1)雷同,只是变成了第2个时钟沿采样数据
(4)、CLK空闲时为低电平,第2个时钟沿采样数据

和(2)雷同,只是变成了第2个时钟沿采样数据
3、SSP(Texas Instruments synchronous serial interface)



  • 特性和SPI雷同
  • 相位和极性是固定的不可选
  • 最显著的差异点是,SSP的片选信号为脉冲信号,高有效。一个时钟周期的高电平表现传输开始,接下来CS会拉低,接着发送数据。
  • 下图可以直观的相识SSP的传输原理



  • 实在有点特别,逻辑分析仪没有解析的方法,不过也不复杂
  • CS先发一个周期高电平,发送完一帧数据,CS再发一个周期高电平,再发下一帧数据
  • 下图表现帧结束的波形,CS保持低电平状态:

4、Microwire(National Semiconductor Microwire interface)



  • 相对于SSI和SSP来说,Microwire只是半双工协议,不能同时收发
  • 波形和SPI雷同
  • TXD发送期间,RXD无效
  • RXD吸取期间,TXD无效
  • 从功能上来说和用SPI控制FLASH一样,必要先发命令,再发数据或吸取数据
  • 发完命令再吸取数据,会有一个dummy bit的等候时间才采样RXD数据



  • 和SPI的同时收发模式对比,Microwire先发送控制命令0xAB,再吸取4个字节,也能读到FLASH ID
  • Microwire因为会延后1个dummy bit才采样RXD数据的原因,数据做如下说明:
  1. 波形上显示读到的数据为: 0xFF、0xFF、0xFF、0x17
  2. 实际FIFO读到的数据为: 0xFF、0xFF、0xFE、0x2E
  3. FIFO的数据需要往右移动1位才是FLASH ID值:0x2E >> 1 = 0x17
复制代码


  • 支持Microwire协议的设备,吸取到命令后,默认延后1个dummy bit才返回数据。但FLASH一般不会,用Microwire控制flash,必要对FIFO数据做移位操作。
5、slave模式说明



  • 上述章节描述的都是master模式下的功能,slave模式和master雷同,但也有必要注意的地方
  • slave支持只收、同时收发等模式
  • 因为CLK由master提供,必要2端共同传输。slave吸取到数据之后,才会往外发送数据,所以会有1~2个dummy byte的延迟,master才会收到数据。详细延迟多少,可以抓波形确认。
  • 例如SSP帧格式,2个控制器master、slave都设置为同时收发模式,下图为2端交互的波形



  • 上图可以看到,master在发完0xFF之后,slave才开始发送第1个数据0x00,是为了完成同步,所以多发了一个0xFF,那么为了末了不丢数据,也要多吸取一个字节
  • 例如收发256个字节:
  1. master向slave发送0x00 ~ 0xFF,依次加1
  2. slave向master发送0xFF ~ 0x00,依次减1
复制代码


  • 假如不做同步,只收发256个字节,master吸取slave发来的数据时,会出现前2个字节都为0,末了还有2个字节充公完的情况:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表