串口 SPI I2s区别 下载本文

内容发布更新时间 : 2024/5/18 15:29:19星期一 下面是文章的全部内容请认真阅读。

UART是指串口通信的芯片,串口就是串行通信的接口(区别于并口 因为数据是按bit串起来传输的)一般在主机上都有的DB9的接口 就是串口 。232 485 是串行通信的不同标准(区别是电气电平值不一样 按通信网络的七层规范 这都属于物理层吧 232与485相比 一般距离较近用232 较远485 )。

串口就是实际的物理接口 ,COM口呢 则是系统虚拟的 ,系统会根据应用程序所申请的COM口请求去使用物理接口。 I2C 总线(Inter-Integrated Circuit)

I2C号称是最简单的串行通讯协议,只需要一根数据线一根时钟线就可以完成半双工通讯。一根是双向的数据线SDA,另一根是时钟线SCL。

I2C协议:

1.谁主动发起数据请求(读/写)谁就是主机。 2.主机提供时钟。

3.SCL为高电平时,SDA从高到低跳变表示起始条件,从低到高跳变表示结束条件。数据传输过程中SDA表示的数据的跳变只能发生在SCL为低电平的时候。 4.主机发送起始条件后,发送的第一个字节是从机地址(7bit)+读写指示(1bit),从机在SDA上产生1bit的ACK。 5.第一个字节的传输至此结束。以后的字节传输也是发送方发送一个8bit数据,接收方发一个1bit的ACK。至于是主机发送数据还是从机发送就看读写指示位。 6.数据传输结束后主机发送停止条件。

7.主机发送停止条件之前,如果主机是接收方需要回应,则主机发NACK。为什么不是ACK,这个还需要再想想。

SPI 总线(Serial Peripheral interface)

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

该接口一般使用4 条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI 和低电平有效的从机选择线SS(有的SPI 接口芯片带有中断信号线INT 或INT、有的SPI 接口芯片没有主机输出/从机输入数据线MOSI)。

SPI 的工作模式有两种:主模式和从模式,无论那种模式,都支持3Mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。 I2S

AD1836是ADI公司新推出的一款高性能的单片声码器,适用于数字音频系统。它采用5V供电,数字接口输入输出电平为LVTTL电平,可以直接和一般的FPGA连接。AD1836集成了3路立体的D/A和两路立体的A/D,参考电压为2.25V,为了降低信号的干扰,模拟信号的输入输出均采用差分的形式,输入输出模拟信号的最大峰峰值为5.6V。系统时钟为12.288MHz,数据采样率最高为96kHz,采样位数最高为24位,可以通过SPI口方便地对内部功能寄存器

进行配置,从而选择相应的功能,例如:时钟、工作模式、采样率、采样位数、工作A/D和D/A的路数等选择。其中A/D和D/A的数字接口可以配置为I2S接口模式,本文主要以AD1836中的D/A为例介绍I2S接口的设计。

I2S总线协议简介

I2S(Inter IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,它既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有三个主要的信号:

(1)串行时钟BCLK,也叫位时钟,即对应于数字音频的每一位数据,BCLK都有一个脉冲。BCLK的频率=2×采样率×采样位数。

(2)帧时钟LRCLK,用于切换左右声道的数据。LRCLK为“1”表示正在传输的是右声道的数据,为“0”则表示正在传输的是左声道的数据。LRCLK的频率等于采样频率。

(3)串行数据SDATA,就是用二进制补码表示的音频数据。

有时为了使系统能够更好的同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟,是采样频率的256倍或384倍。典型的I2S接口时序如图1所示,对于系统而言,产生BCLK和LRCLK信号的信号端是主设备。I2S的数据线用于串行数据,当LRCLK变化(也就是左右通道的数据切换),在第二个BLCK处数据开始,按照高位在先低位在后的顺序进行传输。数据在BCLK的下降沿改变,在BCLK的上升沿进行数据的采样。因此,在BCLK的上升沿处数据必须是稳定的,接收端和发送端处理的有效数据的位数可以不同:如果接收端可处理的有效数据的位数多于发送端,将不足的数据位用0补足;反之,则将多余的数据位舍弃。

I2S接口硬件设计

本设计采用Altera公司的Stratix系列的FPGA,EP1S10672I7来实现AD1836中D/A的I2S接口设计。该芯片内核电压为1.5V,I/O电压为3.3V,符合AD1836数字接口输入输出电平要求,其中D/A部分的I2S接口硬件设计原理图如图2所示。

本设计中,将AD1836采样时钟设置为48kHz,采样位数为24位。从AD1836数据手册可知,其系统时钟(MCLK)为12.288MHz,左右通道数据切换时钟(LRCLK)等于采样时钟(48kHz),数据位时钟(DBCLK)为64×左右通道数据切换时钟(3.072MHz)。所以串行数据线上传输的是24位的有效数据,其余数据位时钟周期对应的数据线上的数据为0,串行数据线DSDATA1、DSDATA2、DSDATA3分别对应于三路的立体D/A,所有的时钟线和数据线均经过下拉电阻后与FPGA的I/O相连。

基于FPGA的实现

逻辑模块设计

FPGA内部逻辑模块主要包括分频模块和D_A接口模块,如图3所示。其中分频模块将AD1836的系统时钟12.288MHz分频为3.072MHz(即位时钟BCLK);start信号为模块使能信号,为高时,D_A接口模块将从DATIN引脚输入的24位并行数据转换为串行数据,从Datout引脚输出;当左右通道时钟切换时,输入的24位并行数据也相应改变,同时从LRclk引脚输出48kHz的左右通道数据切换时钟,从Bclk引脚输出3.072MHz的位时钟信号。LRclk和Bclk都是在AD1836的系统时钟(MCLK)的基础上分频得到的,从而保证了整个系统的同步性。

软件设计

所有软件的设计是在QuartusⅡ 6.0中采用Verilog HDL语言输入完成的,系统采用10MHz的有源晶振,通过FPGA内部的锁相环进行二级倍频从而得到12.288MHz的时钟信号,然后通过clkin_12_288M引脚送入分频模块。主要的程序如下:

分频模块

Module freq3_027M(clkin12_288M, clkout3_027M);

input clkin12_288M; //时钟输入引脚

output clkout3_027M; //时钟输出引脚

reg clkout3_027M; //分频计数器

integer cunt;

always@( posedge clkin12_288M) begin

cunt=cunt+1;

if (cunt<=1)

begin clkout3_027M=1'b0;end

else if((cunt<=3)&&(cunt>=2))

begin clkout3_027M=1'b1;end

else

begin cunt=0;clkout3_027M=1'b0;end

end

endmodule

D_A接口模块

(1)左右通道切换时钟和数据位时钟

assign LRCLKout = LR_f; //左右通道切换时钟

assign BCLKout =(BCLK_f)?BCLKin:1'b1; //数据位时钟

(2)时钟输出和数据的并串转换

always@( negedge BCLKin) begin