学习笔记3 串行通讯详解(SCI、SPI、I2C)

前言

  在调试通信的这段时间里,自己接触到了很多有关通信的专有名词,SCI,SPI,I2C,UART,CAN,RS232,RS485等等。自己在项目中利用TMS320F280049芯片对SCI,I2C,CAN进行了通讯调试,包括底层配置,应用函数编写及通讯测试,最后都成功的实现了通讯。但是回过头来却发现对一些概念理解的不够透彻。因此又查了很多资料来理解其中的概念,并将网上查到的资料及个人的理解整理了一下,文章作为自己学习过程的记录,如有问题欢迎指出,谢谢!

1. 常见的几种串行通讯及其分类

  在学习dsp的过程中,经常能看到下面几种通信方式SCI,SPI,I2C,那么它们之间有什么关系及区别呢?首先它们都是串行通讯,串行通信又可以分为很多种。
按照同步异步可分为两大类:同步通讯和异步通讯。
  (1)同步通讯:发送器和接收器通常使用同一时钟源来同步,方法是在发送器发送数据的同时包含时钟信号,接收器利用该时钟信号进行接收。I2C和SPI就属于同步通讯。
  (2)异步通讯:收发双方的时钟不是同一个时钟,是由双方各自的时钟实现数据的发送和接收,但要求双方使用同一标称频率(允许有一定偏差),SCI就属于异步通讯。
  按照传输方式可以分为三类:单工、半双工和全双工。
  (1)单工是指设备A只能发送,而设备B只能接收。
  (2)半双工是指设备A 和B都能接收和发送,但是同一时间只能接收或者发送。
  (3)全双工是指在任意时刻,设备A 和设备B都能同时接收或者发送。
  SCI既可以工作在半双工,又可以工作在全双工;SPI一般工作在全双工;I2C工作在半双工。

2. SCI通信

2.1 SCI通讯中的一些基本概念

  SCI:搜索百度百科SCI通讯只给出几行介绍:SCI(Serial Communication Interface)意为“串行通信接口”,是相对于并行通信的,是串行通信技术的一种总称,最早由Motorola公司提出的。它是一种通用异步通信接口UART,与MCS‐51的异步通信功能基本相同。SCI模块用于串行通讯,如RS422、RS485、RS232,在SCI中,通信协议体现在SCI的数据格式上。那么什么是UART?什么是RS232/RS485?
  (1)UART概念:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
  (2)RS-232及RS-485是两种常用的串行通信接口标准。

2.2 UART与RS232/RS485的区别

  详细的UART与RS232/RS485的区别可参照以下链接,作者已经介绍的非常详细,在此感谢该作者的辛勤劳动为了防止有些人看不到,将部分内容粘贴出来。
  链接: https://blog.csdn.net/u013178472/article/details/81226780.
  串口通信可以用公交来类比,公交运行可以简单分成两个部分:
  (1)车站:车站决定了车上装什么(人),怎么发送(班次)等。
  (2)公路:当汽车跑在路上,就要遵守公路交通的规则,过桥有过桥的规则,高速有高速的规则,和车站没有关系了。
  回到串口通讯,其实,UART就相当于车站,而RS232/RS485则对应于公路的规则。
  UART,是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,它本身并不是协议。那么它要完成什么功能呢?它的最基本功能,是串行数据和并行数据之间的转换。我们知道,计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即,同时取得/写入8个bit。而串行通信,需要把这个Byte“打碎”,按照时间顺序来收发以实现串行。例如:
  内存中的数据是: 1 1 1 0 0 1 0 1
  串行发送的实际效果是(按时间排序):
  1
  0
  1
  0
  0
  1
  1
  1
  接收则是上述过程的逆过程。
  这就是UART做的最基本工作,进一步的,它还要控制“发车的班次”,比如确认一个Byte的这8个bit是什么时候开始的,又是什么时候结束的,两个班次之间至少要隔多长时间的缓冲,等等。这一部分,也具有协议的特征,但是相对于道路上的协议,更具有一般性,或曰,是与车在什么道路上开,相对独立的。
  那么道路上的规定是什么样的呢?
  RS232/RS485,是两种不同的电气协议,也就是说,是对电气特性以及物理特性的规定,作用于数据的传输通路上,它并不内含对数据的处理方式。比如,最显著的特征是:RS232使用3-15v有效电平,而UART,因为对电气特性并没有规定,所以直接使用CPU使用的电平,就是所谓的TTL电平(可能在0~3.3V之间)。更具体的,电气的特性也决定了线路的连接方式,比如RS232,规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的;而RS485, 使用差分电平表示数据,因此,必须用两根线才能达到传输数据的基本要求,要实现全双工,必需用4根线。但是,无论使用RS232还是RS485,它们与UART是相对独立的,但是由于电气特性的差别,必须要有专用的器件和UART接驳,才能完成数据在线路和UART之间的正常流动。
  RS232甚至规定了接口的具体样式,图为DB9接口
  总结:从某种意义上,可以说,线路上存在的仅仅是电流,RS232/RS485规定了这些电流在什么样的线路上流动和流动的样式;在UART那里,电流才被解释和组装成数据,并变成CPU可直接读写的形式。

2.3 SCI的数据格式

  SCI数据格式具体包括:
  (1)1位起始位
  (2)1-8位数据位
  (3)1个奇偶校验位
  (4)1位或2位停止位
  (5)区分数据和地址的附加位(仅在地址为模式存在)

2.4 SCI通信的优缺点

  其优缺点可以参考我的上一篇文章,因为SCI的优缺点也就是RS-232,RS485,RS-422的优缺点:
链接: https://blog.csdn.net/freedom_qqcom/article/details/116793440.

3. SPI通讯介绍

3.1 SPI的基本概念

  SPI是一种高速、高效率的串行接口技术。通常由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据的交换。
  SPI的通信原理很简单,它以主从方式工作,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。
  (1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;
  (2)MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入;
  (3)SCLK – Serial Clock,时钟信号,由主设备产生;
  (4)CS – Chip Select,从设备使能信号,由主设备控制。
  连接方式如图所示:
在这里插入图片描述
  SPI 是一个环形总线结构,其时序其实比较简单,主要是在时钟脉冲SCK 的控制下,两个双向移位寄存器SPIDAT 进行数据交换。假设主机MI 和从机Sl 进行通信,主机的8位寄存器SPIDAT1内的数据是10101010 ,而从机的8 位寄存器SPIDAT2内的数据是01010101 ,在时钟脉冲上升沿时发送数据,在下降沿时接收数据,最高位的数据先发送,主机和从机之间进行全双工通信,也就是说两个SPI 接口同时发送和接收数据,如图所示。
在这里插入图片描述

3.2 SPI的优缺点

  SPI接口具有如下优点:
  (1)支持全双工操作;
  (2) 操作简单;
  (3)数据传输速率较高。
  缺点:
  (1)占用主机较多的口线(每个从机都需要一根片选线);
  (2)只支持单个主机,即一主多从。

4. I2C通讯介绍

4.1 I2C通讯的基本概念

  I2C总线是由飞利浦公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息,即SDA(串行数据线)和SCL(串行时钟线),它们都是双向I/O线,接口电路为开漏输出,需通过上拉电阻接电源VCC,当总线空闲时,两根线都是高电平。其连接图如图所示,时钟可以由任意设备产生,但通常由MCU产生。
在这里插入图片描述

4.2 I2C详细解读

  很多资料已经对I2C通讯做了详细介绍,为了节省时间,就不做过多介绍了,大家可以参考以下文章,文章的作者都做了很多工作,在此提出感谢:
  链接: https://www.sohu.com/a/218079322_463982

  链接: http://www.elecfans.com/d/1291913.html
  个人认为I2C理论不难理解,重要的是实际调试,对于嵌入式开发的人可以参考《手把手教你学DSP——基于TMS320F28335》关于I2C原理的介绍及官网手册关于寄存器配置的介绍,官网数据手册链接如下,本人用的是280049,因此推荐链接是这个,若你所使用的芯片型号与此不同(不管是DSP还是ARM)请自行查找官网数据手册。
  链接: TI的TMS320F28004x数据手册

  • 48
    点赞
  • 277
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁呀!咋滴了!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值