用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
Synchronous Serial Port 协议详解
Synchronous Serial Port 协议详解
来自云龙湖轮廓分明的月亮
论坛元老
|
2024-12-17 08:57:52
|
显示全部楼层
|
阅读模式
楼主
主题
1561
|
帖子
1561
|
积分
4693
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数据的原因,数据做如下说明:
波形上显示读到的数据为: 0xFF、0xFF、0xFF、0x17
实际FIFO读到的数据为: 0xFF、0xFF、0xFE、0x2E
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个字节充公完的情况:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
来自云龙湖轮廓分明的月亮
论坛元老
这个人很懒什么都没写!
楼主热帖
C#实现HTTP访问类HttpHelper
容器化 | 在 S3 实现定时备份 ...
【黄啊码】MySQL入门—5、数据库小技巧 ...
工作流引擎在vivo营销自动化中的应用实 ...
Kubernetes-理解对象
MySQL索引的理解学习,面试不问索引原理 ...
【低代码】低代码平台协同&敏捷场景下 ...
揭秘“AI换脸”诈骗背后,黑灰产使用的 ...
【OpenHarmony】VSCode下移植 LiteOS-M ...
RabbitMQ真实生产故障问题还原与分析 ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表