SPI 协议学习

SPI 协议学习spi硬件协议学习

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. SPI硬件知识

1.1 硬件连线

请添加图片描述

引脚含义如下:

引脚 含义
DO(MOSI) Master Output, Slave Input,
SPI主控用来发出数据,SPI从设备用来接收数据
DI(MISO) Master Input, Slave Output,
SPI主控用来发出数据,SPI从设备用来接收数据
SCK Serial Clock,时钟
CS Chip Select,芯片选择引脚

1.2 SPI控制器内部结构

这个图等我们看完后面的SPI协议,再回过头来讲解:

请添加图片描述

2. SPI协议

2.1 传输示例

假设现在主控芯片要传输一个0x56数据给SPI Flash,时序如下:
请添加图片描述

首先CS0先拉低选中SPI Flash,0x56的二进制就是0b0101 0110,因此在每个SCK时钟周期,DO输出对应的电平。
SPI Flash会在每个时钟周期的上升沿读取D0上的电平。

2.2 SPI模式

在SPI协议中,有两个值来确定SPI的模式。
CPOL:表示SPICLK的初始电平,0为电平,1为高电平
CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿

CPOL CPHA 模式 含义
0 0 0 SPICLK初始电平为低电平,在第一个时钟沿采样数据
0 1 1 SPICLK初始电平为低电平,在第二个时钟沿采样数据
1 0 2 SPICLK初始电平为高电平,在第一个时钟沿采样数据
1 1 3 SPICLK初始电平为高电平,在第二个时钟沿采样数据
我们常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。

极性选什么?格式选什么?通常去参考外接的模块的芯片手册。比如对于OLED,查看它的芯片手册时序部分:
请添加图片描述

SCLK的初始电平我们并不需要关心,只要保证在上升沿采样数据就行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183355.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《Dreamweaver CS6 完全自学教程》笔记 第一章:网页制作基础知识

    《Dreamweaver CS6 完全自学教程》笔记 第一章:网页制作基础知识第一章:网页制作基础知识1.1Web概述Web也就是www,是WorldWideWeb的缩写,也叫做万维网,是目前最流行、最方便的Internet信息服务。1.1.1Web服务的工作原理WWW服务采用客户端/服务器工作模式,客户端和服务器之间采用超文本传输协议HTTP为通信协议。信息资源,包括文本、声音、图像和视频都以页面的形式组织、存储、显示。网页是一个文档,由HTML超文本标记语言来实现。页面间采用超文本链接的方式链接成一个整体。网页存放在WW

    2022年8月30日
    1
  • python3获取Elasticsearch数据库数据

    python3获取Elasticsearch数据库数据python3获取Elasticsearch数据库数据采用scoll滚动搜索,scoll搜索会在第一次搜索的时候保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,这个期间数据变更,用户是看不到的,每次发送scoll请求,需要指定一个scoll参数,指定一个时间窗口,每次搜索请求只要在这个时间窗口内完成就可以了。1.python利用scroll_id游标遍历查询es,获取错误日志路…

    2022年5月10日
    67
  • 身份管理系统与解决方案[通俗易懂]

    身份管理系统与解决方案[通俗易懂]身份管理的进化式发展身份管理的需求来自于不同部门安全服务解决方案框架身份管理解决方案整体架构典型企业安全身份管理逻辑架构新员工入职帐号创建员工入职服务–基于策略身份供应实现统一认证

    2022年8月4日
    3
  • Thread的join方法[通俗易懂]

    Thread的join方法[通俗易懂]Thread中的join方法主要的作用是让jion的线程加入当前线程,等加入的线程执行完之后才会执行当前线程。接下来看个例子:publicclassTestJoin{publicstaticvoidmain(String[]args)throwsInterruptedException{Threadt1=newThread(()->{try{Thr

    2022年6月3日
    25
  • Javascript:谈谈JS的全局变量跟局部变量

    Javascript:谈谈JS的全局变量跟局部变量今天公司一个实习小妹子问我两段JS代码的区别:vara=”Hello”;functiontest(){vara;alert(a);a=”World”;alert(a);}vara=”Hello”;functiontest(){alert(a);a=

    2022年6月14日
    76
  • Django Django_django获取post数据

    Django Django_django获取post数据前言我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作。其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager

    2022年7月30日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号