Synchronous Serial Port 协议详解

news2024/12/17 15:30:28

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,可以得到同时收发模式的波形:
u32 SPI_FLASH_ReadDeviceID(void)
{
  u32 Temp = 0;

  /* GPIO 输出低,Select the FLASH: Chip Select low */
  SPI_FLASH_CS_LOW();

  /* Send "RDID " instruction */
  SPI_FLASH_SendByte(W25X_DeviceID);
  SPI_FLASH_SendByte(Dummy_Byte);
  SPI_FLASH_SendByte(Dummy_Byte);
  SPI_FLASH_SendByte(Dummy_Byte);
  
  /* Read a byte from the FLASH */
  Temp = SPI_FLASH_SendByte(Dummy_Byte);

  /* GPIO 输出高,Deselect the FLASH: Chip Select high */
  SPI_FLASH_CS_HIGH();

  return Temp;
}
(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数据的原因,数据做如下说明:
波形上显示读到的数据为: 0xFF0xFF0xFF0x17
实际FIFO读到的数据为: 0xFF0xFF0xFE0x2E
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个字节:

master向slave发送0x00 ~ 0xFF,依次加1
slave向master发送0xFF ~ 0x00,依次减1
  • 假如不做同步,只收发256个字节,master接收slave发来的数据时,会出现前2个字节都为0,最后还有2个字节没收完的情况:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端OpenAPI根据后端Swagger自动生成前端接口报错

测试之后发现是因为Map<Long,List<CommentVO>>的返回值类型的锅&#xff0c;改成Page<List<CommentVO>>即可解决。 前端使用的umiMAX的openapi&#xff0c;报错如下&#xff1a; originalRef: BaseResponseboolean\n "401&q…

在线预约陪诊小程序

一、前言 随着社会老龄化加剧以及人们健康意识的提高&#xff0c;就医过程中的陪伴需求日益增长。许多患者在面对复杂的医院环境、繁琐的就医流程时&#xff0c;需要有人协助挂号、候诊、取药等&#xff0c;而家属可能因工作繁忙无法全程陪同。同时&#xff0c;异地就医的患者更…

信号滤波分析-低通分析(Matlab)

Matlab低通滤波 信号滤波分析-低通分析&#xff08;Matlab&#xff09; 【标价是仅源码的价格】 【有课程设计答辩PPT和设计文档报告】 需要或感兴趣可以随时联系博主哦&#xff0c;常在线秒回&#xff01; 低通滤波分析方案的设计包括&#xff1a; 1.信号生成原理 2.低通滤波…

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之复合运算符

&#xff08;一&#xff09;、复合运算符 在C中&#xff0c;可以通过“赋值语句”来修改变量的值。赋值语句的格式&#xff1a; 变量名 值或者表达式&#xff1b;其中""称为"赋值运算符"。 除此之外&#xff0c;在赋值运算符当中&#xff0c;C有复合赋…

半导体器件与物理篇5 1~4章课后习题

热平衡时的能带和载流子浓度 例 一硅晶掺入每立方厘米10^{16}个砷原子&#xff0c;求室温下(300K)的载流子浓度与费米能级。 需要用到的公式包括1.本征载流子浓度公式 2.从导带底算起的本征费米能级 2.从本征费米能级算起的费米能级 载流子输运现象 例1:计算在300K下&#x…

Qt-Advanced-Docking-System配置及使用、心得

Qt-Advanced-Docking-System 1. Qt-Advanced-Docking-System描述2. 功能特点2.1. 灵活的停靠方式2.2. 嵌套停靠2.3. 自定义布局保存与恢复2.4. 外观和行为定制 3. 与Qt原生停靠系统的比较4. 使用场景4.1. 集成开发环境&#xff08;IDE&#xff09;4.2. 图形设计软件4.3. 数据分…

Vue中纯前端实现导出简单Excel表格的功能

Vue 前端Excel导出 Vue中纯前端导出简单Excel表格的方法(使用vue-json-excel插件) 前言 在许多的后台系统中少不了导出Excel表格的功能&#xff0c;在项目中纯前端使用vue-json-excel插件来实现简单Excel表格的导出功能。 使用方法 1、安装依赖 npm install vue-json-exc…

【系统分析师】-收官整理-已考过

1、考试历程 之前从未参加过软考 2023年11月系统架构师【未通过】 2024年05月系统架构师【已通过】 2024年11月系统分析师【已通过】 鉴于架构师与分析师在基础知识上比较相似&#xff0c;在看到架构考试通过后&#xff0c;就准备往系分方面。 2、考题分析 今年下半年系分考试…

暂停window11自动更新

window11 的自动更新功能&#xff0c;一方面在后台占用资源&#xff0c;容易导致电脑卡顿&#xff1b;另一方面&#xff0c;“更新并关机” 和 “更新并重启” 的设置令人极其反感。很多补丁兼容性很差&#xff0c;更新后极易引发电脑蓝屏、闪屏等意想不到的 bug。 1.winR打开运…

opengauss架构图

资料来源&#xff1a;04轻松上手openGauss之openGauss对象管理&#xff08;上&#xff09;_哔哩哔哩_bilibili 资料来源&#xff1a;04轻松上手openGauss之openGauss对象管理&#xff08;上&#xff09;_哔哩哔哩_bilibili

2024,大模型杀进“决赛圈”

Henry Chesbrough在著作《通过技术创新盈利势在必行》中&#xff0c;曾提出过一个创新的“漏斗模型”。开放式创新一开始鼓励百花齐放&#xff0c;但最终只有10%的技术能够通过这个漏斗&#xff0c;成功抵达目标市场target market&#xff0c;进入到商业化与产业化的下一个阶段…

C++重点和练习-----多态

rpg.cpp: #include <iostream>using namespace std;/*模拟一个游戏场景有一个英雄&#xff1a;初始所有属性为1atk,def,apd,hp游戏当中有以下3种武器长剑Sword&#xff1a; 装备该武器获得 1atx&#xff0c;1def短剑Blade&#xff1a; 装备该武器获得 1atk&#xff0c;1…

细说STM32F407单片机SPI基础知识

目录 一、 SPI接口和通信协议 1、 SPI硬件接口 &#xff08;1&#xff09;MOSI(Master Output Slave Input) &#xff08;2&#xff09;MISO(Master Input Slave Output) &#xff08;3&#xff09;SCK 2、SPI传输协议 &#xff08;1&#xff09;CPHA0时的数据传输时序 …

种草电商系统APP功能需求开发案例

种草电商系统‌是一种结合了社区互动和电商交易的平台&#xff0c;能看到其他小伙伴分享的各种真实购物心得、超美商品图片和超实用视频&#xff0c;让我们去发现好物。可以随心关注感兴趣的人&#xff0c;跟他们畅聊购物体验&#xff0c;点赞、评论、转发那些心动的分享。其主…

EnumMap:让Java Map更高效的技巧

前言 摘要 内容 什么是EnumMap 如何使用EnumMap EnumMap的实现原理 EnumMap的例子 测试用例 小结 前言 在Java中&#xff0c;枚举类型是一种非常有用的数据类型&#xff0c;它可以用于定义一组固定的常量。枚举类型在很多场景中都有广泛的应用&#xff0c;例如状态码、…

测试工程师八股文05|功能测试、业务测试

一、基础概念 1、软件测试分类 1️⃣按照软件产生的阶段划分 单元测试&#xff1a;针对程序源代码进行测试【开发自测】集成测试&#xff1a;针对模块之间功能交互进行测试系统测试&#xff1a;对整个系统&#xff08;功能、非功能&#xff09;进行全面测试验收测试&#xff…

中国计算机学会计算机视觉专委会携手合合信息举办企业交流活动,为AI安全治理打开“新思路”

近期&#xff0c;《咬文嚼字》杂志发布了2024年度十大流行语&#xff0c;“智能向善”位列其中&#xff0c;过去一年时间里&#xff0c;深度伪造、AI诈骗等话题屡次登上热搜&#xff0c;AI技术“野蛮生长”引发公众担忧。今年9月&#xff0c;全国网络安全标准化技术委员会发布了…

《计算机视觉:瓶颈之辩与未来之路》

一、计算机视觉的崛起 计算机视觉是使用计算机模仿人类视觉系统的科学&#xff0c;让计算机拥有类似人类提取、处理、理解和分析图像以及图像序列的能力。它是一个多学科交叉的领域&#xff0c;与机器视觉、图像处理、人工智能、机器学习等领域密切相关。 计算机视觉行业可分为…

Airborne使用教程

1.安装环境 前提条件&#xff1a;系统已安装Ruby 打开终端输入如下命令 gem install airborne 或者在Gemfile添加 gem airborne 然后运行bundle install 2.编写脚本 在项目中新建api_tests_spec.rb文件 以GET接口"https://www.thunderclient.com/welcome"为…

Hadoop其一,介绍本地模式,伪分布模式和全分布搭建

目录 一、Hadoop介绍 二、HDFS的本地模式 三、伪分布模式 四、Hdfs中的shell命令 五、全分布搭建 六、使用Java代码操作HDFS 1、环境准备 2、单元测试&#xff08;Junit&#xff09;​编辑 一、Hadoop介绍 Hadoop 分为三部分 &#xff1a; Common、HDFS 、Yarn、MapRe…