I2C SPI UART TCP/UDP AD/DA PWM大总结
- 1. I2C总线描述
- 1.1 基础协议内容
- 1.1.1 通信时序
- 1.1.2 一般通讯时序
- 1.1.3 Burst模式
- 2. SPI总线
- 2.1 基础协议内容
- 3. UART
- 4. TCP/UDP
- 5. AD/DA
- 5.1 AD的原理
- 5.2 DA的原理
- 6. PWM
1. I2C总线描述
-
I2C的特点:半双工,同步通讯,多主多从
半双工:意味着数据可以双向传输,但是一个时间段内,只能一个设备写N个设备读,不能两个设备一起写数据
同步通讯:意味着有时钟线SCL来进行同步
多主多从:连接到I2C总线上,运行若干个主机,若干从机,其中从机以地址来区分
1.1 基础协议内容
- 初始状态:
2
SCL和SDA会接入上拉电阻,主要作用是防止其他信号干扰和增加驱动能力。
注意此时,SDA和SCL都是高电平,一般情况下,SCL为高电平的时候,视为采集信号的期间,SDA应该保持其状态,如果SDA不保持其状态那就是起始信号或者终止信号了。
- 起始信号和终止信号
根据初始状态的定义,也很容易得出起始信号和终止信号
- 数据传输
前文说过,一般情况应该是高电平采集,此时数据的摆放时间应该是:
SCL为低的时候放置数据
而SCL为高的时候,不应该让SDA变化,以便主机/从机采集信号
- 应答信号
主要是让接收端告诉发送端,接收端是否收到了数据(总不能主机一直沉迷于自我吧,万一受到外部环境的影响,发送端发出去了,但是接收端没有收到呢)。此时接收端会告诉发送端自己是不是收到了数据。
做法:每传输一个字节,后面跟随一个应答位。通过将 SDA 线拉低,来允许接收端回应发送端。ACK 为 一个低电平信号,当时钟信号为高时, SDA 保持低电平则表明接收端已成功接收到发送端的数据。
1.1.1 通信时序
1.1.2 一般通讯时序
也很好理解,因为要区分从机,所以要发送从机地址+告诉从机自己是读还是写+从机回答一下+开始数据传输
1.1.3 Burst模式
burst模式其实就是连续模式,连续写或者读,主要提高一下传输效率,不需要每次都发送从机地址
2. SPI总线
这里不一一细说,主要说一下 SPI和I2C的对比。
- SPI的特点
全双工:有两个数据线,可以一个时间内实现既可以读也可以写
SS信号线判断选择哪个从机:没有跟I2C一样有地址的概念,其区分不同从机主要通过SS信号线去选择
主从架构:一般是一个主机,若干从机(SS信号线的存在)
2.1 基础协议内容
跟I2C没有太大差异,注意下面几个:
- 有两根数据线–MOSI MISO,可以实现全双工
- 有NSS数据线,用于区分从机,一般有多少个从机就有多少个NSS信号线,想要选择某个从机,就拉低对应连接到从机的信号线就行了
- SPI是边缘采集,I2C是高低电平采集
- SPI是没有应答信号的,一般从设备会使用额外的状态寄存器或标志位来指示操作成功或错误条件
- I2C的clk空闲为高,SPI可以配置为高或者低(时钟极性CPOL = 0为低, = 1为高)
注意我图中是上升沿采集,实际上也可以下降沿采集,想改下降沿采集,就改变一下时钟相位(CPHA)。
结合时钟相位和时钟极性,就可以有四种配置:
3. UART
UART就比较特殊点了,它是异步通信(无CLK进行同步,有CLK的就是USART),全双工,有两根数据线,一根是RX一根是TX。
由于没有CLK线同步信号,需要依靠时间的概念去定义起始还是终止信号。具体是:
- 起始信号:数据传输线通常保持高电压电平。若要开始数据传输,发送UART 会将传输线从高电平拉到低电平并保持1 个时钟周期。
- 终止信号:为了表示数据包结束,发送 UART 将数据传输线从低电压驱动到高电压并保持1 到 2 位时间。
数据传输根据波特率计算时间去发送就行了(所以UART对时间的概念很强,波特率必须要双方一致),为了检测数据是否正确被介绍,也有一个奇偶检验位。
协议图示如下:
4. TCP/UDP
这块的知识还是很大的,就说点日常开发能经常遇到的,详细如下图:
- TCP和UDP最大区别:TCP有连接,是可靠的,UDP无连接,不可靠,但是效率高。
- TCP通讯需要双方建立连接,才把数据发送过去,而UDP则不需要,输入IP地址和端口,就可以发送。
在开发中,尤其是需要注意,需要更改子网掩码,一般在win系统上使用自定义的IP地址和子网:
子网掩码:为了区分主机号和网络号提出的概念(因为一个主机可能携带N个网口),在上图中,IP地址&子网掩码 = 主机地址,IP地址&~子网掩码 = 网络地址。一定要确保到电脑和板子的主机地址是一致的,不然数据就不能正常发送到对端。
子网掩码一般有A、B、C类,A类8位主机地址,B类16位,C类24位(对应子网掩码就是255.0.0.0、255.255.0.0、255.255.255.0)
在开发中,需要提前知道设备那边的子网是什么,或者改变设备的子网跟主机子网相同。
5. AD/DA
I2C SPI UART这块是属于数字信号之间的通讯,如果是模拟信号的采集或者输出就是需要依赖AD和DA了。
数字信号一般是0/1,而模拟信号则是例如电压 电流这种信号,其实不可以用0/1表示,因为数字和模拟信号通讯需要借助AD/DA
AD:模拟信号转数字信号,例如测量电压
DA:数字信号转模拟信号,例如音频文件播放
实际工作中,SOC内部会带有AD/DA的片内外设,根据芯片手册配置使用便可,本文说一下AD/DA的原理。
5.1 AD的原理
以计数法为例,原理如下:
V1是待测的电压,V0是比较器的输出电压,两者会进入比较器,直到结果V0大于V1(注意是大于,不是等于,这里会引入精度的概念),此时的计数值是D0~D7,可以表示此时的电压数值的水平。
因此AD有两个重要的概念,
- 分辨率:对应上图的D0D7,如果再细分D0D17,那么测量结果就会更准确。也就是对微小的变化响应能力比较好。
- 精度:由于AD的工作原理,不能100%表示当前的测量电压,肯定会有误差,这个误差大小就是精度了。
5.2 DA的原理
以T型电阻网络为例,原理如下:
Vref电压输入,在软件设定了4bit的数值后,作用于S0~S4,就可以改变输出的电压了。
6. PWM
概念:利用微处理器的数字输出来对模拟电路进行控制的一种技术。
简单来讲,数字输出虽然只能表示0/1,但是只要控制0和1的比例就可以实现模拟电路,假如数字输出1的电压是5V,数字0V。那么当处理器输出的是全0则外部测量的电压是0V,输出全1则外部测量电压是5V,如果0/1各一半则是输出2.5V,如此只要控制0/1的比例就可以控制电压的输出了。这个比例有个专业的名词:占空比。如下图可以形象表示占空比的作用:
因此PWM的本质是在一定的频率下,通过不同的占空比 即可得到不同的输出模拟电压。
占空比的概念
:是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)
表示方式:20%
有时候我们也经常用PWM来做DA,一般外加一个放大器,来增强PWM的输出。