• 【CANN训练营】UART、SPI、I2C串口通信介绍笔记


    UART、SPI、I2C串口通信介绍

    UART通信

    串行通信和并行通信

    数据通信:若干个数据设备之间的信息交换称为数据通信。

    两种方式:并行通信和串行通信

    并行通信:数据的各位同时传送,每一位数据都需要一条传输线并且需要若干条控制信号线,这种方式仅适合于短距离的数据传输。

    并行传输的特点:传输速率快,接口电路简单。

    串行通信:数据中的各位分时传送,此时只需要一条数据线,外加一条公共信号地线和若干条控制信号线。因为一次只能传送一位,所以对于一个字节的数据,至少分8位才能传送完毕。

    串行通信的特点:传输线少,长距离传输成本,但是传输控制比并行要相对复杂。

    数据传输方式:单工、半双工和全双工。

    单工:A只能发信号,B只能收信号,单向传输。
    半双工:A能发信号给B,B也能发信号给A,但是两个过程不能同时进行。简单说就是对讲机。
    全双工:A在给B发信号的同时B也能给A发信号。简单说就是对讲机。

    波特率:波特率是指每秒内传送二进制数据的位数以b/s和bps(位/秒)为单位。
    1.png

    UART通信

    UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。

    起始位:先发出一个逻辑”0”的信号,表示传输字符的开始

    数据位:紧接着起始位之后。数据位的个数可以是4、5、6、78等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。

    奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性

    停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢

    空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送

    2.png

    UART通信

    UART工作原理

    • 发送数据过程:空闲状态,线路处于高电位:当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧数据发送结束。
    • 接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。
    • UART波特率发生器:波特率是衡量数据传输速率的指标,表示每秒传送数据的字符数,单位为Baud。UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提取出异步的串行数据根据给定的晶振时钟和要求的波特率,可以算出波特率分频计数值。

    SPI通信

    SPI通信介绍及特点

    SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间

    SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚同时为PCB的布局上节省空间,提供方便,

    SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:

    1. MOSI-SPI总线主机输出/从机输入(SPI Bus MasterOutput/Slave Input)
    2. MISO-SPI总线主机输入/ 从机输出(SPI Bus MasterInput/Slave Output)
    3. SCLK-时钟信号,由主设备产生。
    4. CS-从设备使能信号,由主设备控制 (Chip select)有的IC此pin脚叫SS

    SPI通信原理

    SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。注:有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI

    SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平,如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降) 数据被采样,如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。

    1697522752878.png

    根据时钟极性(CPOL)及相位(CPHA)不同可以组合成4种工作模式:SP10,SPI1,SP2,SP3

    1. SP0: CPOL=0,CPHA=0
    2. SP11: CPOL=0,CPHA=1
    3. SP12: CPOL=1,CPHA=0
    4. SP13: CPOL=1,CPHA=1

    I2C通信

    I2C通信介绍及特点

    I2C (Inter-Integrated Circuit) 总线是PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少控制方式简单,器件封装形式小,通信速率较高等优点。

    I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL
    1697522977786.png

    I2C总线通过上位拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任意器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”的关系。

    1697523080794.png

    12C总线上数据的传输速率在标准模式下可达100kbit/s在快速模式下可达400kbit/s在高速模式下可达3.4Mbit/s。

    I2C通信原理

    I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化

    1697523193231.png

    12C的起始和结束条件:
    起始条件:在SCL线是高电平时SDA线从高电平向低电平切换这个情况表示起始条件。
    停止条件:当SCL是高电平时SDA线由低电平向高电平切换表示停止条件。

    如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便,但是,没有这种接口的微控制器在每个时钟周期至少要采样 SDA两次来判别有没有发生电平切换
    1697523254722.png

    数据传输格式

    1. 字节传送与应答
      每一个字节必须保证是8位长度。数据传送时,先传送最高位 (MSB) ,每一个被传送的字节后面都必须跟随一位应答位 (即一共有9位)
      1697523300719.png
    2. I2C总线上的传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。

    在起始信号后必须传送一个从机的地址(7位),第8位是数据后的传送方向为(R/),用”0“表示主机发送数据(T),”1“表示主机接受数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不差生终止信号,马桑发出起始信号对另一从机机型寻址。

    在总线的一次数据传送过程中,可以有以下几种组合方式:
    a. 主机想从机发送数据,数据传送方向在整个过程中不变
    b. 主机在第一个字节后,立即由从机读数据
    c. 在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。

  • 相关阅读:
    iPhone垃圾清理器:AnyMP4 iOS Cleaner for mac
    Red Eye Camera开发日记之API 移植I2C 和关键接口函数
    使用helm快速安装 grafana&prometheus
    SQL中为什么不要使用1=1
    【花雕动手做】有趣好玩的音乐可视化系列项目(30)--P6 LED单元板
    电容如何能做升压?(电荷泵的工作原理及特性)
    12.6 - 每日一题 - 408
    腾讯云-对象存储服务(COS)的使用总结-JavaScript篇
    Hive简介及核心概念
    配置路由使得 物理机pc1可以ping通rhel7-2的网卡4地址
  • 原文地址:https://blog.csdn.net/yichao_ding/article/details/133883014