I2S,PCM,IOM-2,I2C,SPI,UART,GPIO

概述

I2S,PCM,IOM-2都是数字音频接口,传数据的。

I2C,SPI,UART,GPIO是控制接口,传控制信令的。

I2S

I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频 数据传输而制定的一种总线标准。

I2S至少3根线:

1. 比特时钟线

首先解释一下比特时钟线。比特时钟线上对每个bit有一个脉冲,比特时钟频率是

采样率*每个channel的bit数*channel数,比如,在播放44.1Khz CD的时候,比特时钟频率就是:44.1KHz*16*2 = 1.4112MHz

2. 字时钟线

另一个时钟可以称为字时钟,标示当前送达的是左声道还是右声道。注意: I2C最多支持两个声道!低电平表示左声道,高电平表示右声道。

3. 复用数据线

所谓复用,指的是左右声道的复用。传输数据是以2的补码,大端形式给出。

I2S可能还有一根线,是主时钟线或上行数据线。所以,碰到四线的I2S也不要惊讶哦~~

PCM

也是传输数字音频的,一般是固定8k的采样率的单声道音频。

IOM-2

高品质音频,一般传给蓝牙A2DP的是这种接口

I2C

两根线,一个CLK线,一根DATA线,有主从模式,一般MCU做主,器件做从。I2C使用两根双向半双工的线,主提供时钟。时钟都是bit时钟,发送请求的时候,比如获取寄存器内容的时候,主发送请求,然后交出DATA线控制权,从回答请求,并返回寄存器内容。

下面就是一主多从的例子:

SPI

Only 2chip select lines so max number ofdevices is very limited. Bus is faster andcan be driven over longer cable runsthan I2C. Programming more difficult.Device selection very limited unless youare willing to solder SMD.

UART

Welcome tothe 1970s! 通用异步串行口。按照标准波特率完成双向通讯,速度慢。UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。 UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。

GPIO

GPIO,通用型输入输出(GeneralPurpose I/O)的简称,其引脚可以供使用者由程式控制自由使用,PIN脚可作为通用输入(GPI)或通用输出(GPO)或通用输入输出(GPIO),如当clk generator, chip select等。

既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电平的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电平或者低电平;对于其他特殊功能,则有另外的寄存器来控制它们。

例子

这边有个手机上FM+BT芯片接口的例子:蓝牙用的是PCM/I2S传输音频数据,控制信令走UART/I2C,FM音频走模拟电路。

时间: 2024-12-09 00:18:27

I2S,PCM,IOM-2,I2C,SPI,UART,GPIO的相关文章

串行通信协议I2C、SPI、UART

终端和其他终端或者外设通信的方式:串行通信和并行通信 串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度. 其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机.计算机与外设之间的远距离通信. 并行通信时数据的各个位同时传送,可以字或字节为单位并行进行. 并行通信速度快,但用的通信线多.成本高,故不宜进行远距离通信.计算机或PLC各种内部总线就是以并行方式传送数据的. 常用的串行通信协议: SPI(Serial Peripheral Inter

(3)I2C总线的字节格式,时钟同步和仲裁

字节格式 发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整数据,比如说服务一个内部中断,那么它可以将时钟线SCL拉低来强制使主机进入wait状态.当从机准备好新的字节数据传输时,释放时钟线SCL,数据传输便继续进行. ACK和NACK 每个字节后都有ACK发生.ACK应答位允许接收器通知发送器字节成功接收了下一个字节可以发送了.主机产生所有的时钟脉冲,包括

SPI,UART,I2C都有什么区别,及其各自的特点

区别: SPI:高速同步串行口.3-4线接口,收发独立.可同步进行 UART:通用异步串行口.按照标准波特率完成双向通讯,速度慢 I2C:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片.有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了.作为接口的一

XMOS发布集单片机,AI,FPGA,DSP于一身的跨界处理器完全体xcore.ai,致力于AIOT,售价1美元起步

说明:XMOS这次致力于打造全新的,颠覆性的嵌入式平台,简化开发人员要学一堆东西才能开发一款高性能AIOT产品的痛点. XCORE.AI集单片机,AI,FPGA,DSP于一身,嵌入式软件开发人员可以灵活的实现各种控制,而不用担心固定的硬件性能/资源不够用的问题.并且性能强劲,可以让物联网终端设备在本地就处理数据,无需上传到云端处理. 引言: 过去的5年中,Amazon Alexa,  Google Home, Facebook Portal,  Apple Homepod等都是采用的XMOS语音

Gt9xx芯片,在规格书+Linux驱动的基础上,移植为USB裸机经验。直接用开发板,不去碰硬件的坑。

1,用内核代码和规格书来印证数据格式: //命令3字节,IC地址 u8 end_cmd[3] = {GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF, 0}; //总长度 前 3个字节.最大点数*8.加1 u8 point_data[2 + 1 + 8 * GTP_MAX_TOUCH + 1]={GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF}; 2,读数据:调

Uart,IIC和SPI的区别

1.UART, SPI, IIC的详解 UART.SPI.IIC是经常用到的几个数据传输标准,下面分别总结一下: UART(Universal Asynchronous Receive Transmitter):也就是我们经常所说的串口,基本都用于调试. 主机和从机至少要接三根线,RX.TX和GND.TX用于发送数据,RX用于接受数据(收发不是一根线,所以是全双工方式).注意A和B通信A.TX要接B.RX,A.RX要接B.TX(A用TX发B当然要用RX来收了!) 如果A是PC机,B是单片机,A和

对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。

这段时间折腾了哈java web应用的压力测试,部署容器是tomcat 7.期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘.对web应用开发者来说,我们很关心应用可同时处理的请求数,以及响应时间.应用本身和它运行在其中的web容器是两个很重要的影响因素.对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束.如果同时进来的请求多于当前可用的请求处理线程数,额外的线程就会被创建,直到到达配置的最大线程数(maxThreads

vue之better-scroll的封装,包含下拉刷新,上拉加载功能及UI(核心为借鉴,我仅仅是给轮子套上了外胎...)

先发原文作者.地址等信息.我把内容全部搬过来了,也可以去看原文.内容绝对是满满的干货,给原作者点赞!(我添加的内容在转载过来的后面,内容不多) 作者: ustbhuangyi 链接:http://www.imooc.com/article/18232 来源:慕课网 在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 也可以是横向滚动的导航栏,如图所示: 可以打开"微信 -> 钱包->滴滴出行"体验效果. 我们在实

谭浩强 c程序设计 8.17用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串"486"。n的位数不确定,可以是任意位数的整数。

8.17用递归法将一个整数n转换成字符串.例如,输入486,应输出字符串"486".n的位数不确定,可以是任意位数的整数. #include <stdio.h> char str1[20];int i=0;long n;int main(){        int longToStr(long n);    char *revstr(char *str, int len);    printf("请输入一个整数n:\n");    scanf("