首页 > 其他分享 >SPI总线学习笔记

SPI总线学习笔记

时间:2024-11-22 20:40:21浏览次数:1  
标签:SCK 总线 笔记 SPI Master 时钟 数据 设备

1、SPI的定义以及特点
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

1):高速、同步、全双工、非差分、总线式
2):主从机通信模式

通信简单,速率快

2、通信协议介绍
SPI具有四根通信线:
(1)SDO/MOSI – 主设备数据输出,从设备数据输入;
(2)SDI/MISO – 主设备数据输入,从设备数据输出;
(3)SCLK – 时钟信号,由主设备产生;
(4)CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高
image

SPI通信有4种不同的模式,从设备一般在出厂时就就是配置为某种模式,因此可以对我们的主设备的SPI模式进行配置,使得他们两个在同一个模式下。

通过CPOL(时钟极性,Clock Polarity)和CPHA(时钟相位,Clock Phase)来控制我们主设备的通信模式。CPOL参数规定了SCK时钟信号空闲状态的电平,CPHA规定了数据是在SCK时钟的上升沿被采样还是下降沿被采样。

模式0:CPOL= 0,CPHA=0。SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换

模式1:CPOL= 0,CPHA=1。SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换

模式2:CPOL= 1,CPHA=0。SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换

模式3:CPOL= 1,CPHA=1。SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换。
下面展现了模式0下的SPI时序图
image
Input信号在时钟上升沿采样,Output在时钟的下降沿发送数据。

2、内部实现介绍

内部实现如上图。
SSPSR 是 SPI 设备内部的移位寄存器(Shift Register). 它的主要作用是根据 SPI 时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以及 Channel-Width 所决定。

Bus-Width 的作用是指定地址总线到 Master 设备之间数据传输的单位.

例如, 我们想要往 Master 设备里面的 SSPBUF 写入 24 Byte 大小的数据: 首先, 给 Master 设备的配置寄存器设置 Bus-Width 为 Byte; 然后往 Master 设备的 Tx-Data 移位寄存器在地址总线的入口写入数据, 每次写入 1 Byte 大小的数据; 写完 1 Byte 数据之后, Master 设备里面的 Tx-Data 移位寄存器会自动把从地址总线传来的1 Byte 数据移入 SSPBUF 里; 上述动作一共需要重复执行 16 次.

Channel-Width 的作用是指定 Master 设备与 Slave 设备之间数据传输的单位. 与 Bus-Width 相似, Master 设备内部的移位寄存器会依据 Channel-Width 自动地把数据从 Master-SSPBUF 里通过 Master-SDO 管脚搬运到 Slave 设备里的 Slave-SDI 引脚, Slave-SSPSR 再把每次接收的数据移入 Slave-SSPBUF里.通常情况下, Bus-Width 总是会大于或等于 Channel-Width, 这样能保证不会出现因 Master 与 Slave 之间数据交换的频率比地址总线与 Master 之间的数据交换频率要快, 导致 SSPBUF 里面存放的数据为无效数据这样的情况.

标签:SCK,总线,笔记,SPI,Master,时钟,数据,设备
From: https://www.cnblogs.com/smylog/p/18563689

相关文章

  • Android笔记【7】
    一、前言    学习课程时,对于自己不懂的点的记录。二、内容学习(十二)结合Compose实现Handler机制处理多线程的通信。效果图:学习片段一:这段代码是使用Kotlin编写的AndroidHandler的一个示例。下面是对代码的详细介绍:valhandler=object:Handler(Looper.g......
  • Android笔记【8】
    一、前言    学习课程时,对于自己不懂的点的记录。二、内容学习(二十四)基于Compose组件的MVVM模式和MVI模式的实现1、collectAsState()在JetpackCompose中,collectAsState()是一个用于将KotlinFlow数据流转换为Compose状态的扩展函数。通过使用collectAsSt......
  • 泷羽Sec学习笔记:shell(2)永久环境变量和字符串显位
    学习笔记:shell编程(2)永久环境变量和字符串显位_哔哩哔哩_bilibili永久变量:echo$PATH 查看环境变量echo$HOME  家目录root用户我们使用的ls、dir命令能输出内容就是因为这些命令都有相对应的变量。which--als  查看ls命令的脚本路径查看echo$PATH:/usr/l......
  • css笔记: 继承关系
    这两天写css的时候发现子元素继承了父元素的css样式,不显示它自己的。经过一番搜索,得出以下几个解决方案:检查选择器优先级增加样式的特异性避免不必要的继承使用!important标记(谨慎使用)检查CSS规则的顺序明确样式规则,减少对父元素的依赖考虑使用CSS变量理解CSS的层叠规则......
  • Allegro学习笔记( 四)如何一次性添加GND过孔
    PCB周围添加地孔的好处:一是有效减少PCB边缘上电磁波的辐射和传播,减少PCB对外围设置的信号干扰,提高PCB的抗干扰能力;二是减小PCB板边的翘曲的变形。那么问题就来了,那么多过孔需要手动一个个添加,那得是多么繁琐的工作,还需要保持PCB的美观,那更是难上加难了。小编给大家介绍一种......
  • [学习笔记 #5] 哈希
    目录[学习笔记#5]哈希前言哈希表过渡:用哈希解决判定性问题不知道归到哪里去的技巧集合哈希SumHashingXorHashing序列哈希树哈希数据结构维护哈希值参考[学习笔记#5]哈希下面[]起来的是我还不确定的。前言从今年暑假到现在(2024.11.13),考了多少道哈希,我一道都没场切。前......
  • C高级学习笔记
    ……接上文shell中的语句功能性语句testtest语句可以测试三种对象:字符串整数文件属性每种测试对象都有若干测试操作符3.1.字符串测试s1=s2测试两个字符串的内容是否完全一样test"hello"="world"echo$?#1相等为真,不想等为假s1!=s2......
  • .Net-Avalonia学习笔记(十)-Material.Avalonia
     Add Material.Avalonia nugetpackagetoyourproject:dotnetaddpackageMaterial.AvaloniaEdit App.xaml file:<Application...xmlns:themes="clr-namespace:Material.Styles.Themes;assembly=Material.Styles"...><Application......
  • [笔记]PN结二极管(1)
    文章目录PN结二极管(1)1、PN结二极管基本结构与工艺PN结2、PN结耗尽区理论PN结内建电势PN结偏置势垒(耗尽层)电容单边突变结线性缓变结PN结二极管(1)1、PN结二极管基本结构与工艺PN结PN结:p型半导体与n半导体紧密接触形成的冶金结。......
  • Maven笔记
     什么是MavenMaven的概念Maven是自动化构建工具。Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。Maven这个单词的本意是:专家,内行。Maven是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作......