28335接两个spi设备_SPI浅析

01  SPI简介

SPI,全称为Serial Peripheral interface,即串行外围设备接口。由摩托罗拉率先在产品上使用。SPI是一种高速全双工,同步(full duplex synchronous)的通信总线协议,且占用硬件端口只有4个(SO,SI, SCLK 和CSN),所以出于这种简单易用的特性,越来越多的芯片开始将该总线协议集成在了芯片中。在工作中如果涉及到底层软件编写,大概率会经常用到SPI通信。打开英飞凌官网,直接搜索一个工作中比较常用到的芯片TLE75080,对应着相应章节结合实际开发来学习。

02  协议详解

⚫ SPI采用主从模式的控制方式

SPI协议规定必须由主设备(Master)控制从设备(Slave),首先通过CS片选信号选中特定的从设备,然后通过SCK引脚给Slave设备提供时钟。Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作。理论上,主设备可以控制无限多个从设备,(实际上,从设备挂载的个数也受限于具体的硬件环境)。如图:

79222c7d5687b72f0698663893f9cbfc.png

SPI采用同步传输方式进行通信

当通信发生时,主设备会生成相应的时钟脉冲信号,在每个时钟的上升沿或者下降沿,时钟信号会驱动设备内部的移位寄存器,使得主设备的数据从移位寄存器中移出后移入从设备的移位寄存器中,同时从设备也会有数据从SO引脚移出到主设备中。这样就保证了数据的同步传输。一般来说,SPI并没有读和写的说法,本质上,数据的通信其实也是数据交换的过程。

SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不仅能在数据通信过程中充当一个 "发送者(Transmitter)" 或者 "接收者(Receiver)". 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了。

03  工作原理

⚫ 两个寄存器SSPBUF , SSPSR

SSPBUF:Synchronous Serial Port Buffer, 泛指 SPI 设备里面的内部缓冲区, 一般在物理上是以 FIFO 的形式, 保存传输过程中的临时数据;

SSPSR,:Synchronous Serial Port Register, 泛指 SPI 设备里面的移位寄存器(Shift Regitser), 它的作用是根据设置好的数据位宽(bit-width) 把数据移入或者移出 SSPBUF;

SPI 设备在进行通信的过程中, Master 设备和 Slave 设备之间会产生一个数据链路回环(Data Loop), 就像上图所画的那样, 通过 SDO 和 SDI 管脚, SSPSR 控制数据移入移出 SSPBUF, Controller 确定 SPI 总线的通信模式, SCK 传输时钟信号。

⚫ 时序说明

c09f0bc6e9e35f3e2a8846802b7b13f4.png

以TLE75080为例,从上图中可以获取的信息有:

✔ 16bits SPI

✔ 以MSB模式传输数据

✔ 数据在时钟的下降沿移入TLE75080芯片中,在时钟下降沿移出

✔ 时钟在空闲时为低电平

极性和相位

在SPI中有个很重要的参数即极性和相位,比较常见的缩写为CPOL,CPHA。就是在上一节中TLE75080交换数据的方式,数据在时钟的下降沿移入TLE75080芯片中,在时钟下降沿移出。所以极性和相位都是相对于时钟来说的。

再此需要插一段边沿(edge)的概念,在每个脉冲里,都有一个上升沿和一个下降沿,对于Leading edge来说就是第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;Trailing edge是第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;

所谓极性SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:

CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;

CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;

相位CPHA对应于数据采样是在时钟的第几个边沿,0为第一个边沿,1为第二个边沿。(1) CPHA=0,表示第一个边沿:✔ 对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;✔ 对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;(2) CPHA=1,表示第二个边沿:✔ 对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;✔ 对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

那么相位,极性配合起来,就有4中情况,如图(图片来自网络)。

dd1962cde1984f638092600cc88bfa1e.png

⚫ 再聊SSPSR

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

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

例如, 我们想要往 TLE75080 设备里面的 SSPBUF 写入 16 bits 大小的数据: 首先, 将mcu相关寄存器设置 宽度 为 16bits; 然后配置为MSB传输模式。

再在相应的寄存器中设置相位和极性。到此,主设备mcu的spi主要属性已经配置完毕。

然后往 mcu 设备的 Tx-Data 移位寄存器在地址总线的入口写入数据, 每次写入 16bits 大小的数据(使用 writeb 函数); 写完之后, mcu设备里面的 Tx-Data 移位寄存器会自动把从地址总线传来的16bits数据移入 SSPBUF 里。

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 里面存放的数据为无效数据这样的情况。

04  调试结果

以TLE75080为例,SPI通信是由ss(cs)、sck、sdi、sdo构成,总线上挂载了2片TLE75080,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。根据上文手册中的spi属性配置如图:

9c21a40c6bf8de6374854683c5513209.png65ce8f65c9b6260ce001f2af7c29abae.png

从上图可以看出,从设备只有在片选选中的时候,才会对移入移位寄存器的数据进行处理并同时返回给主设备相应数据。这样就可以实现两个芯片交替通信。

然后放大后,可以看到数据是在下降沿的时候进行采样,时钟会在空闲时置低。极性相位一目了然。

961514c0b6dee592eedb68fd6b08f789.png

至此SPI的主要原理就暂告一段路了。

编辑:Zhang Jinwei

部分图片来自网络

往期文章:

CMake简介

走进IP

Linux下Socket通信

聊聊汽车诊断刷新那点事

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

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

相关文章

java mongo 获取所有数据库_Spring Batch —从XML读取并写入Mongo

Java面试必备之JVMGC教程这几天闲着在优锐课的java学习必备中学习了,在本文中,了解如何使用Spring Batch通过StaxEventItemReader使用ItemReader读取XML文件并将其数据写入NoSQL。在本文中,我们将向展示如何使用Spring Batch使用StaxEventIte…

001多表查询.交叉链接cross JOIN.自然链接natural JOIN.using链接.on链接

-- 需求:查询每一个员工信息,并且显示每一个员工所在的部门名称 -- mysql中多表查询有四种,交叉链接cross JOIN,自然链接natural JOIN,using链接,on链接 -- 交叉链接cross JOIN SELECT * FROM emp; --6…

华菱重卡仪表指示说明_新一代创虎重卡登场!LNG车型将配玉柴燃气发动机

2020年10月23日,现代商用车新一代创虎重卡正式发布,此次新车不仅外观与韩国本土同步,更是首次搭载了国产玉柴动力,推出了LNG版车型。具体情况我们先抢先看看吧!外观升级 与韩国本土同步我们可以看到,相比此…

mysql002多表查询.on链接分为三种情况,左链接,右链接,全链接

-- on链接(最实用),分为三种情况,左链接,右链接,全链接 -- 左外链接,左表全部显示,如果匹配不到右表的内容使用null代替。 SELECT * FROM emp e LEFT JOIN dept d ON e.DEPTNOd.DE…

x轴z轴代表的方向图片_游戏中到底是Z轴朝上还是Y轴朝上?

本文转自我的公众号——游戏开发那些事在谈到游戏世界中的坐标轴时,我们经常会看到这样的争论。“游戏中Y轴是向上的好么?这你都不知道?”“不对,空间直角坐标系不就是Z轴向上的么?”“拜托,请搞清楚坐标系…

补发《超级迷宫》站立会议三

那天我给自己的任务是实现控件的控制,但结果明显很不理想,我仅仅加载了两个控件(即两个小人),一个是玩家,另一个是守关者,玩家控制基本实现,通过方向键进行控制;但守关者…

mysql003三表查询.三表查询.自链接查询

-- 多表查询 三表查询 -- 查询员工的编号,姓名,薪水,部门编号,部门名称,薪水等级 -- 可以先两表查询,在修改成三表查询 -- 第一行查询的内容,第二,三行查询需要的表, -- 和条件…

hook xposed 自定义类_【开始学习React Hook(1)】Hook之useState

react hook是react推出的一种特殊函数。这些函数可以让你在不创建react class的情况下依然可以使用react的一些特性(诸如目前react的钩子函数拥有的所有特性)。最常用的hook有useState, useEffect, 日常开发使用这两个就足够了。如果再懂点useReduer, us…

mysql004子查询.相关子查询.不相关子查询

子查询:相关子查询,不相关子查询 -- 不相关子查询 -- 一条SQL语句含有多个select,先执行子查询,在执行外部查询。子查询可以独立运行,成为不相关子查询。 -- 需求1:查询所有比姓名为“CLARK”工资高的员工的信息。 …

文件无刷新上传(swfUpload与uploadify)

文件无刷新上传并获取保存到服务器端的路径 遇到上传文件的问题,结合之前用到过的swfUpload,又找了一个无刷新上传文件的jquery插件uploadify,写篇博客记录一下分别介绍这两个插件的实现方法 swfUpload 导入swfUpload的开发包 添加js引用&am…

ediplus 复制编辑一列_vi编辑器的使用详解

一个编辑器具备的功能一个编辑器(例如Windows中的记事本)具备的功能:打开文件、新建文件、保存文件光标移动文本编辑(多行间|多列间)复制、粘贴、删除查找和替换vi编辑器的环境设置为了更方便的使用vi编辑器,我们需要先对vi编辑器进行一些配置。打开虚拟…

myjdbc链接数据库.增删改查

-- 创建user表 CREATE TABLE user( uid int PRIMARY KEY auto_increment, uname VARCHAR(55), pwd VARCHAR(55), realName VARCHAR(55) ) SELECT * FROM user; Jdbc增删改查 package myjdbc; import java.sql.Connection; import java.sql.DriverManager; import java.…

K-means算法和矢量量化

语音信号的数字处理课程作业——矢量量化。这里采用了K-means算法,即假设量化种类是已知的,当然也可以采用LBG算法等,不过K-means比较简单。矢量是二维的,可以在平面上清楚的表示出来。 1. 算法描述 本次实验选择了K-means算法对数…

jdbc.properties文件

drivercom.mysql.cj.jdbc.Driver (//主机:端口号、数据库名)urljdbc:mysql://localhost:3306/mydb?useSSLfalse&useUnicodetrue&characterEncodingutf8&serverTimezoneAsia/Shanghaiusername(链接的用户)passwd(密码)

ifix如何设画面大小_如何让你的视频又小又清晰?视频编码输出软件来了

如何让视频保持清晰同时又让其体积尽可能的小?这是很多小伙伴们都很头疼的问题而且很多时候我们需要会在微信或者朋友圈等社交平台上传我们的作品但它们对视频大小有着比较严格的控制所以蜜蜂菌就为大家带来了视频压缩神器小丸工具箱帮助你轻松压缩出又小又清晰的视…

智能集群理论优化控制_探索群体智能的奥妙——ROB-MAS多智能体协作

人类对未知领域总是充满好奇和敬畏。因为好奇,所以不断探索,因为敬畏,所以小心谨慎。谈到人工智能,已经不仅仅是停留在智能手机、家用电器这个层次,要知道,人工智能的作用,不仅仅是为了方便生活…

mybatis.xml文件

mybatis.xml <?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>&l…

note同步不及时 one_朱海舟回应锤子便签同步不及时:工程师已经解决

集微网消息(文/数码控)&#xff0c;有不少网友反映自己用的锤子便签没法及时同步数据&#xff0c;对此锤子科技产品经理朱海舟回应称工程师已经把该问题解决&#xff0c;用户只需更新APP即可。至于部分安卓用户无法同步锤子便签数据的问题&#xff0c;也很好解决&#xff0c;只…

NEC学习 ---- 模块 - 带点文字链接列表

带点文字链接列表, 实现的效果是, 调整字体大小, 点的位置不会跟着变动. HTML如下: <div class"container"><div class"m-list2"><ul><li><i class"dot"></i><a href"#">带点文字链接列表…

单时隙灵敏度有什么影响_英国大学设计出低价开源单分子显微镜

低价单分子显微镜英国谢菲尔德大学的一个科学家和学生团队设计并建造了一台专业单分子显微镜&#xff0c;他们向外界分享了建造方法&#xff0c;以帮助世界各地的许多实验室使用这种设备。这台名为smfBox的显微镜能够进行单分子测量&#xff0c;让科学家一次只看一个分子&#…