本帖最后由 浪矢杂 于 2019-2-21 15:17 编辑

回归山顶洞人时期,简单聊一下IIC SPI UART

假如你在一个有电的山顶洞人时期,但你们若干个部落之间正懊恼如何通讯的呢,这时秀儿他来了。

IIC

先解决一些基础问题,定下了一些规则。

1.他在你们所有部落中架起了两条线,一条叫双向串行数据线(SDA),看名字就是到是用来传数据的,一条串行时钟线(SCL) ,相当你们部落的一个共同时间用来约定通讯时间让你们达到同步性。(一个I2C总线只使用两条总线线路 )

2.这两条线上的部落都有一个通讯地址(相当于现在的门牌号),在通讯前你肯定要说你和哪个部落通电话是吧。不然不就乱套了嘛。(每个连接到总线的设备都有一个独立的地址 )

3.由于你们可能多个部落同时通讯,为了防止通讯错乱,就请一个人来做仲裁 ,决定先给哪个部落用通讯线路。(多个主机同时使用总线时,会利用仲裁方式决定由哪个设备占用总线)

[size=12.0000pt]4.还有就是你们说话的速度也要约定,不然你说两分钟我才听一分钟那就不行了。(具有三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s,高速模式下可达3.4Mbit/s)

然后就来个通讯示范

图片1.png (254.69 KB, 下载次数: 3)

2019-2-21 15:03 上传

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F4A.tmp.jpg

芬儿在隔壁部落有一个恋爱对象彬儿,今晚芬儿想约彬儿去虚拟,于是。。。

他们得到了仲裁官牙儿的同意可以使用通讯线路

于是芬儿:S(起始信号,接下来就是他的表演时间了)+SLAVE ADDRESS (从机地址,彬儿部落的门牌号)+传输方向的选择位(芬选择要说还是要听)

于是彬儿:(应答ACK):好!你说吧!  [从机会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据]

于是芬儿:(传输数据(DATA) ,数据包的大小为8位):今晚。。。。。

于是彬儿:(应答ACK):哦,知道了

。说多少话都没有限制,但是芬说完一句彬一定要回应,芬才会接着说,不然对方不在听而你还在自言自语。(主机每发送完一个字节数据,都要等待从机的应答信号(ACK),主机才能继续发送数据)

最后芬儿:(停止传输信号(P)):那今晚B3-4楼等你,再见宝贝!么么哒!(当数据传输结束时,主机向从机发送一个停止传输信号(P),表示不再传输数据)

写和读(反过来通讯)都差不多 不做过多解释!到现在你应该有一个比较清晰的总体框架了。那下面我就一本正经的补全你脑子里的框架了。(程序你只要单独写好下面几个部分的程序,然后配合使用就可以完成了)

一.起始&停止信号

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F4B.tmp.jpg

图片2.png (95.55 KB, 下载次数: 3)

2019-2-21 15:08 上传

二.发送&接收单个字节(数据有效性 )

图片5.png (56.22 KB, 下载次数: 6)

2019-2-21 15:08 上传

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F4C.tmp.jpg

三.三.应答&非应答

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F5D.tmp.jpg

图片4.png (67.24 KB, 下载次数: 4)

2019-2-21 15:08 上传

到此所有IIC通讯框架完成。通讯按规定来传输即可。

SPI

由于IIC是在所有的部落中对照门牌号来找通讯部落的不方便花心的你,而且通讯只能一方说一方听,不方便心急的你,所以SPI来了。

图片6.png (59.41 KB, 下载次数: 4)

2019-2-21 15:08 上传

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F5E.tmp.jpg

这时你应该知道了吧,SPI可以让你边说边听,是不是相对于IIC来说通讯速率提高了。

而且它不用应答了。

下面就在一本正经的讲一下SPI:

图片7.png (120.67 KB, 下载次数: 2)

2019-2-21 15:08 上传

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F5F.tmp.jpg

SPI和IIC一样有起始和停止信号,数据有效性

1.起始&停止信号

有点像现在的对讲机按下说话一样。起始信号:NSS 信号线(片选线 S)由高变低,是 SPI 通讯的起始信号。停止信号:NSS 信号由低变高,是 SPI 通讯的停止信号!

2. 数据有效性:

先根据上图模式来说,一个时钟周期传输一位数据,根据上面的图得MOSI 及 MISO 的数据在 SCK 的上升沿期间变化输出,在SCK 的下降沿时被采样。即在 SCK 的下降沿时刻, MOSI 及 MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0” ,然后在其他时刻都没有效了,不管你说多少次想她她都听不到。还有SPI每次传输得数据可以是8位或16位,但是IIC就不行,因为IIC规定了8位后要应答一声,但SPI不需要。

3. 通讯模式:我也不知道是啥必要让发明他的人这么无聊。做这么多模式。

①根据SCK在通讯前的电平状态分为CPOL=0(SCK低电平)CPOL=1(SCK低电平)

②根据对MOSI或MISO采样时刻是SCK的奇数还是偶数边沿,分为CPHA=0 (奇数边沿”采样 ),CPHA=1(“偶数边沿”采样)上面讲的是CPHA=1的模式。

图片9.png (63.22 KB, 下载次数: 3)

2019-2-21 15:10 上传

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F60.tmp.jpg

各种语言代码的实现就根据电平的变化规则来写,难度不大了。

UART(串口异步通讯)

两个村落之间的单独通讯都有了,但是你们开始想做一个来大家开会用的,首领说所有村落都能听到,于是有了串口异步通讯这种方案,一般只使用3条线:TX:(首领和所有部落说话的通道),RX(首领听某个部落发言的通道),GND(你们之间的某种很必要的规定),然后这里需要注意的是首领的TX要和其余部落的RX接上,RX接其余部落的TX,不必要纠结这个线的接法与前面的SPI为啥不一样,总之嘛你们都是嘴对着对方耳朵的,这里只是无聊换了个叫法罢了。

图片8.png (75.73 KB, 下载次数: 4)

2019-2-21 15:08 上传

file:///C:\Users\mayn\AppData\Local\Temp\ksohtml\wps4F70.tmp.jpg

由于是开大会嘛,大家就没有必要对门牌号了,接上线的大家都听到的,所以串口通讯不需要地址。说话的格式是:开始信号+话的内容+检验位(检验首领的话有没有传错避免三人成虎)+停止信号  这个就简单多了!

现在你们又有了新的对话的规则;

波特率: (官方话:波特率是衡量数据传送速率的指标=每秒钟通过信道传输的码元数)有点前面两种通讯的SCK一样,用来约定你说话的速度,前面IIC和SPI都是大家有一个共同时钟来做约定,比如一秒说一个字,现在不用拉时钟线了但是你说话的速度得有规定(码元的长度),不然下面就没办法听懂你说啥了(信号解码)。

主体数据内容:现在这个说话有一个不足啊就是你说话每一句有字数限制了(有效

数据的长度常被约定为 5、 6、 7 或 8 位长)

数据校验:就是检验你说的话有没有在传得过程中出错(校验方法有奇校验、偶校验,0校验,1校验以及无校验 )举个例子:“我爷我爸去你家玩+校验位”如果是奇校验得话就要求刚才说话的内容和检验位的“我”(通讯中数“1”)为奇数,所以检验为“我”,“我”才达到奇数 ,偶检验反之。1校验(检验位一直都是“1”)。0校验反之。无校验,没啥可说的。

GND:串口通讯常用有两种标准“RS-232标准”与“TTL 标准”(只是表示“0”“1”的电压不同)因此两个通讯设备之间的地电位可能不一样,这会影响收发双方的电平信号,以两个串口设备之间必须要使用地线连接,即共地来做约定。

UART与USART:前者就是异步串口通讯,后者就是同/异步串口通讯,简单区分就是否需要通讯同步通讯时钟信号来区分。

好了就先聊这三个通讯方式了,我们以开车来讲解一下通讯分类

1.按数据传送的方式,通讯可分为串行通讯与并行通讯以高速路小说一下:并行通讯就是很多个车道,车可以并排行驶,串行通讯就是单通道高速收费站每次只能有序的过一辆车。通讯速率快慢可想而知。

2.根据数据通讯的方向,通讯又分为全双工、半双工及单工通讯。小说一下:全双工相当于双向车道,半双工相当于乡间小道那样,可以来往但是只通一架车。单工相当单向车道。IIC是半双工,而SPI,UART与USART是全双工。

3.根据通讯的数据同步方式,又分为同步和异步两种  简单区分就是按是否需要通讯同步通讯时钟信号来区分。就像IIC,SPI都是同步,UART是异步,但是他的老相好USART是同步。

最后再来两句:以上3种通讯方式各有优缺点,但是最基本的原理都一样毕竟它们的世界只有0和1,只是自己的规则不同罢了。

spi通讯不需要地线吗_IIC与SPI及UART通讯原理讲解相关推荐

  1. SPI存储器c语言51程序,AVR单片机SPI通讯实例程序 (C语言源代码)

    AVR单片机SPI通讯实例程序 (C语言源代码) 来源:-- 作者:-- 浏览:213 时间:2016-08-10 14:18 标签: 摘要: AVR单片机SPI通讯实例程序 (C语言源代码) 一个S ...

  2. Esp8266 进阶之路25【高级篇】深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  3. FPGA实现UART通讯(FSM+移位寄存器实现 含校验位)

    一.UART通讯协议原理与时序 串口(UART)协议的发送和接收时序.物理层接口下面两篇博客讲的很详细. y​​​​​​​​​​​​​​串口(UART)的FPGA实现(含源码工程)_孤独的单刀的博客- ...

  4. SPI协议概括、SPI总线工作的四种方式和SPI接口时序

    SPI协议概括: SPI总线是一种4线总线,因其硬件功能很强,所以与SPI有关的软件就相当简单,使中央处理器(Central Processing Unit,CPU)有更多的时间处理其他事务.正是因为 ...

  5. Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化

    我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...

  6. java spi机制_Java是如何实现自己的SPI机制的? JDK源码(一)

    注:该源码分析对应JDK版本为1.8 1 引言 这是[源码笔记]的JDK源码解读的第一篇文章,本篇我们来探究Java的SPI机制的相关源码. 2 什么是SPI机制 那么,什么是SPI机制呢? SPI是 ...

  7. 单片机modbus rtu通讯_【原创】永宏PLC系列RS485通讯方式

    实现的功能,及应用的场合 本项目为弯管机设备改造工程,在不破坏设备原有的功能的情况下通过只更换设备原来的永宏PLC,使弯管机能够与埃斯顿机器人进行信号交互,通过机器人对弯管机进行上料.下料动作,即节约 ...

  8. TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出

    一.TLE5012B 简介 TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量. 它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原 ...

  9. java spi机制_Java 双亲委派机制的破坏—SPI机制

    作者:程序猿微录 出自:TinyRecord 原文:tinyice.cn/articles/123 Java 双亲委派机制的破坏-SPI机制 在Java的类加载机制中,默认的就是双亲委派机制,这种委派 ...

最新文章

  1. Git 基本工作流程
  2. python socket服务器多线程_Python多线程socket服务器端
  3. 前端学习(3120):react-hello-react的setstate的一个说明
  4. python做的大型游戏_Python实现数据量较大的生命游戏
  5. C#输出带有换行符的字符串
  6. 关于为什么说OLTP必须要求变量绑定而OLAP不应该绑定变量的原因
  7. 加工食品和饮料防腐剂行业调研报告 - 市场现状分析与发展前景预测
  8. Python核心编程--学习笔记--8--条件与循环
  9. 敏捷开发用户故事系列之九:用户故事早期估算
  10. SourceTree 密码填写正确但是拉取显示密码错误解决
  11. linux如何跳到命令行开端,Linux快捷键大全
  12. 大写加下划线转换驼峰规则
  13. Java中判断一句英文中有多少个以p开头的单词
  14. android studio 雷电模拟器
  15. 移动OA,为企业提供更高效的办公模式
  16. LDO和DCDC电路的概述和区别
  17. 淘宝小程序 表单组件checkbox的默认样式修改
  18. 诺丁汉大学高级计算机科学,诺丁汉大学高级计算机科学研究生语言及申请要求-费用-课程设置...
  19. 认识Android(常用布局,控件,四大组件,动画,自定义控件及异常消息处理机制)
  20. WuThreat身份安全云-TVD每日漏洞情报-2023-02-27

热门文章

  1. 示例:使用 Flv.js 和 Reflv 播放视频
  2. 破译奇梦谜底——解梦笔记
  3. 计算机学院学院简介PPT,山东大学计算机学院.ppt
  4. 【剧情】あかね色に染まる坂(染成茜色的坂道) 中文剧情简介
  5. java简拼_javascript实现根据汉字获取简拼
  6. hrbust mengxiang000000 题册
  7. 22春天津大学《国际经济法学》在线作业一
  8. 怕远程办公不安全?大企业同款神器,网络加速、防护、上网管理
  9. weixin sdk java 开源_weixin4j(微信公众开发平台SDK)
  10. 应该从JAVA转行到大数据吗?