单片机常用数据接口和总线和协议 一)SPI接口 1)概述
SPI接口的全称是Serial Peripheral Interface",意为串行外围接口;
SPI为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps 2)角色
SPI连接设设备分主机和从机两种角色:
主机(Master) | 时钟信号由主机提供,通信的时机和过程有主机完全控制 |
从机(Slaver) | 冲击被动的根据主机的时钟作出相应; |
SPI一般需要4个引脚参与通信:
MOSI | 主器件数据输出,从器件数据输入(主出从入) |
MISO | 主器件数据输入,从器件数据输出(主入从出) |
SCLK | 时钟信号,由主器件产生 |
NSS | 从器件使能信号,由主器件控制,低电平有效,有的IC会标注为CS(Chip select)(片选); |
主机将CS拉低,主机提供时钟信号,主机和从机随着时钟的节奏传输和接收数据;
数据,传输的数据为8位,高位在前,低位在后; 5)工作模式
SPI有四种工作模式,各个工作模式的不同在于SCLK不同, 具体工作由CPOL,CPHA决定
CPOL: (Clock Polarity),时钟极性
当CPOL为0时,时钟空闲idle时候(初始)的电平是低电平(n);
当CPOL为1时,时钟空闲idle时候(初始)的电平是高电平(u);
CPHA:(Clock Phase),时钟相位
当CPHA为0时,时钟周期的前一边缘(时钟波形的左边缘)采集数据;
当CPHA为1时,时钟周期的后一边缘(时钟波形的右边缘)采集数据;
CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:
模式名 | 参数 | 描述 | 图形* |
Mode0 | CPOL=0,CPHA=0 | 时钟初始为低电平,上升沿采集数据 | (1n) |
Mode1 | CPOL=0,CPHA=1 | 时钟初始为低电平,下降沿采集数据 | (n1) |
Mode2 | CPOL=1,CPHA=0 | 时钟初始为高电平,下降沿采集数据 | (1u) |
Mode3 | CPOL=1,CPHA=1 | 时钟初始为高电平,上升沿采集数据 | (u1) |
*上表(n) (u)要当成图形来看,反应时钟脉冲的形状,1是采样位置6)实践
有时候搞不清模式,或则懒得费那脑筋,就轮着每种模式试一遍吧,总有一个是对的;
二)I2C总线 1)概述
I2C(Inter-Integrated Circuit)总线,又叫IIC,读作"I-squared-C"或"I方C"; 总线支持连接多个主机和从机; 2)术语
术语 | 描述 |
发送器 | 发送数据到总线的器件 |
接收器 | 从总线接收数据的器件 |
主机 | 初始化发送,产生时钟信号和终止发送的器件 |
从机 | 被主机寻址的器件 |
多主机 | 同时有多于一个主机尝试控制总线,但不破坏报文 |
仲裁 | 是一个在多个主机尝试控制总线,但只允许一个控制总线并使报文不被破坏的过程; |
同步 | 两个或多个器件同步时钟信号的过程 |
SDA | 通过串行数据线,接上拉电阻 |
SCL | 串行时钟线,接上拉电阻 |
a)每个字节8位,高位在前,低位在后; 每个字节后跟一个响应位
b)初始状态:SDA高,SCL高;
c)SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件;
d)传输数据位时,SDA线必须在SCL的高电平周期保持稳定,SDA的高或低电平状态只I2C位传输数据有效性有在SCL线的时钟信号是低电平时才能改变;
e)在响应的时钟脉冲期间发送器释放SDA 线(高),在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平;
f)SCL线是高电平时,SDA线由低电平向高电平切换,这个情况表示停止条件。 5)寻址
第一个发送的字节是地址
a)7位寻址:高位在前,低位在后,高7位表示地址,低1位表示方向,0读,1写;
b)10位寻址:
10位寻址和7 位寻址兼容,而且可以结合使用。
10位寻址采用了保留的1111XXX 作为起始条件(S),或重复起始条件(Sr )后的第一个字节的头7 位。
10位寻址不会影响已有的7位寻址,有7位和10位地址的器件可以连接I2C总线10位地址格式到相同的I2C总线。它们都能用于标准模式(F/S)和高速模式(Hs)系统。
保留地址位1111XXX 有8 个组合,但是只有4 个组合11110XX 用于10 位寻址,剩下的4个组合11111XX 保留给后续增强的I2C 总线。
10位从机地址是由在起始条件(S)或重复起始条件(Sr )后的头两个字节组成。
第一个字节的头7位是11110XX 的组合,其中最后两位(XX) 是10 位地址的两个最高位(MSB)。
第一个字节的第8位(最低位)是R/W 位,决定了传输的方向,0读,1写。
如果R/W 位是“0 ”,则第二个字节是10位从机地址剩下的8位;如果R/W位是“1” 则下一个字节是从机发送给主机的数据。
三)UART接口 1)概述
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,串口; 2)引脚
TX | 发数据,对应对方的RX |
RX | 收数据,对应对方的TX |
起始位 | 低,表示开始传输; |
数据位 | 可以是4、5、6、7、8bit,低位在前,一般是8bit,表示一个字符 |
奇偶校验位 | 可选 |
停止位 | 它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平,用于表示数据结束和时钟同步 |
空闲位 | 处于高电平 |
传输速率(bps);
常用波特率:
1200,2400,4800,9600,14400,19200,28800,38400,57600,76800,115200,230400,250000,460800,921600,1M
四)I2S协议 1)概述
I2S(InterIC Sound Bus)是飞利浦公司针对数字音频设备之间的音频数据传输而制定的一种总线标准,采用沿独立的导线传输时钟与数据信号的设计,通过分离数据和时钟信号,避免了时差诱发的失真。I2S总线简单有效,可以有效提升输出数据的质量,在各种嵌入式音频系统中有广泛应用。 2)引脚:
SCLK | 串行时钟SCK,也叫位时钟BCLK(BCK),即每发送1位数字音频数据,SCK上都有1个脉冲。SCK的频率=2×采样频率×采样位数。在数据传输过程中,I2S总线的发送器和接收器都可以作为系统的主机来提供系统的时钟频率。 |
LRCK | 帧时钟WS,即命令(声道)选择,用于切换左右声道的数据。WS的频率等于采样频率,由系统主机提供。WS为“1”表示传输的是右声道的数据,WS为“0”表示传输的是左声道的数据。 |
SDATA | 串行数据信号SD,用于传输二进制补码表示的音频数据。高位在前,低位在后, 接收端可以根据需要放弃部分低位数据; |
推荐阅读
- 接口|axios接口报错-参数类型错误解决
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- 嵌入式-外设|DDR3基础详解
- ffmpeg|从零开始仿写一个抖音App——基于FFmpeg的极简视频播放器
- #|Multimedia
- USB转串口|USB转四串口芯片CH9344
- python|Python的DEBUG LOG
- 表单数据高级搜索功能设计
- 通过ve模板实现一键在线视频制作
- ARM的C语言程序优化