0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

IIS总线规范和软件模拟

嵌入式星球 2020-10-13 18:43 次阅读

引言
I2S(InterIC Sound Bus)是飞利浦公司针对数字音频设备之间的音频数据传输而制定的一种总线标准,采用沿独立的导线传输时钟与数据信号的设计,通过分离数据和时钟信号,避免了时差诱发的失真。I2S总线简单有效,可以有效提升输出数据的质量,在各种嵌入式音频系统中有广泛应用。但是在嵌入式音频系统设计中,并不是所有的MCU都支持I2S总线格式,再加上I2S还没有统一的接口标准,不同的厂家生产的设备接口也是五花八门,采用软件模拟实现I2S总线可有效解决在不支持其的MCU和设备之间通过I2S总线实现数据传输时出现的问题。
本文通过在以太网数字语音广播系统中软件模拟I2S总线实现语音数据传输,给出了软件模拟实现I2S总线的方法。

1、I2S总线规范
I2S为三线总线,3个信号分别为:
① 串行时钟SCK,也叫位时钟(BCK)。即每发送1位数字音频数据,SCK上都有1个脉冲。SCK的频率=2×采样频率×采样位数。在数据传输过程中,I2S总线的发送器和接收器都可以作为系统的主机来提供系统的时钟频率。
② 帧时钟WS,即命令(声道)选择,用于切换左右声道的数据。WS的频率等于采样频率,由系统主机提供。WS为“1”表示传输的是左声道的数据,WS为“0”表示传输的是右声道的数据。
③ 串行数据信号SD,用于传输二进制补码表示的音频数据。
I2S格式的信号无论有多少位有效数据,数据位的最高位(MSB)总是被最先传输,1次能够发送的数据决定于I2S格式的有效位数。
1个典型的I2S信号时序如图1所示

1.jpg

图1 I2S总线典型时序图


随着技术的发展,在统一的I2S接口下出现了多种不同的数据格式。根据SD信号相对于SCK和WS位置的不同,分为左对齐和右对齐2种格式,如图2和图3所示。

2.jpg

图2 16位有效位数的左对齐格式


3.jpg

图3 16位有效位数的右对齐格式


在上面2种数据传输格式中,当WS为“1”时传输的是左声道的数据,当WS为“0”时传输的是右声道的数据。为了保证数字音频信号的正确传输,发送端和接收端必须采用相同的数据格式。


2、软件模拟I2S

以太网数字语音广播系统主要是指以以太网为传播介质提供音频服务的广播系统,将语音信号以标准IP包的形式在以太网上进行传送,以实现语音广播功能。该系统在PC机端通过麦克风采集语音数据,然后将采集到的语音数据通过以太网发送给嵌入式终端,嵌入式终端将接收到的语音数据进行数/模转换后进行播放。系统实现框图如图4所示[5]。

4.jpg

图4 以太网数字语音广播系统框图


5.jpg

图5 LM3S8962与MS6336的连接图


广播系统终端的MCU LM3S8962将接收到的语音数据通过I2S总线发送给语音解码芯片MS6336进行数/模转换并播放,

LM3S8962和MS6336的连接如图5所示。为了完整还原出语音信号,需要保证软件模拟I2S信号时序严格精确,高低电平的转换采用延时程序实现。MS6336为16位D/A芯片,其I2S时序如图6所示。

6.jpg

图6 MS6336的典型I2S时序图


该系统中的语音数据双声道,16位采样,1个采样点的数据为4字节,1个采样点数据通过MCU发送给MS6336,数据发送流程如图7所示。

7.jpg

软件模拟I2S引脚的定义如下:
#define I2S_WS GPIO_PIN_5//模拟I2S声道选择时钟控制位
#define I2S_BCK GPIO_PIN_6//模拟I2S位时钟控制位
#define I2S_DATA GPIO_PIN_7//模拟I2S数据传送位
根据MS6336的I2S总线格式以及数据发送流程,软件模拟I2S总线的步骤如下:
① 根据语音数据采样率及采样位数计算得到SCK的值和WS的值(WS的值等于采样频率)。
系统采样率为44.1 kHz,则SCK=2×44.1 kHz×103×16=1 411 200 Hz,WS=44 100 Hz。1个SCK时钟周期T=1/SCK=07 μs。采用延时程序模拟SCK时钟周期需要应用示波器来精确延时时间。本系统中一个SCK周期的延时为delayI2S(2)。
② 将WS、BCK和DATA均置为高电平。
③ 选择左右声道。首先发送左声道数据,将WS置低(若发送右声道数据则将WS置高)。

for(ChannelCnt=0;ChannelCnt<2;ChannelCnt++){//双声道选择播放
if(ChannelCnt==0){//右声道选择信号为高电平
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = ~I2S_WS;
}
else{//左声道选择信号为低电平
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = I2S_WS;
}
……
}

④ 选择高低字节。将左声道数据以高低字节的顺序发送,在发送高字节第1位数据之前先发送1个周期的串行时钟。

for(HorLCnt=0;HorLCnt<2;HorLCnt++){//声道数据高低字节选择
if(ChannelCnt==1){//左声道
if(HorLCnt==0){//低字节
c=*(SampLEData+1);//SampleData指向音频数据缓冲区首地址,即左声道低字节
delayI2S(2);//发送第一个数据位之前需要延迟一个位时钟周期
}
else{//低字节
c=*SampleData;
}
}
……
}

⑤ 开始传输音频数据(音频数据的传输在SCK下降沿准备数据,在SCK的上升沿发

送给数据接收端)。将采样点左声道数据的高字节最高位送给SD,设置SCK为低电平,此时为SCK的下降沿,数据准备好。延时半个SCK周期以后将SCK置为高电平,此时SD线上的数据发送给数据接收端,延时半个SCK周期。依次将左声道剩余位数据按照最高位的方式发送出去。

for(BitCnt=0;BitCnt<8;BitCnt++){//1次传送的数据长度为8位,先传送高字节再传送低字节置时钟线SCK为低,开始准备数据位
HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = ~I2S_BCK;
if((c<

⑥ 当将1个采样点的左声道的数据发送完以后,延时2个SCK周期,然后发送右声道的数据(同左声道数据的发送过程)。
根据以上的过程对每个采样点的数据进行处理,就可以实现通过软件模拟I2S总线传输音频数据了。以上实现的是典型I2S时序模拟,而左对齐和右对齐2种格式只是时序稍有差异,模拟实现过程同典型I2S总线模拟实现过程基本相同。

结语
在以太网数字语音广播系统中应用软件模拟实现I2S总线时序,能够成功地实现语音信号的数据传输,实现语音信号的实时广播,表明了软件模拟实现I2S总线的可行性,为解决不支持I2S总线的MCU和各种I2S总线设备间的通信提供了一种可行的方法。但是,在应用软件模拟实现I2S的以太网数字语音广播系统实时播放语音信号时,存在一些噪声,表明在采用软件模拟实现I2S的时序精确性上存在一些欠缺。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IIS
    IIS
    +关注

    关注

    0

    文章

    17

    浏览量

    19614
  • IIS总线
    +关注

    关注

    0

    文章

    4

    浏览量

    8919
收藏 人收藏

    评论

    相关推荐

    tlv320aic12k可以使用IIS接口吗?

    你们好!tlv320aic12k与cpu通信可以使用I2S接口模式没,他可以使用McAsp接口格式与CPU进行通信,也有看到MCASP使用的是IIS协议,所以请教下tlv320aic12k可以使用IIS接口么,怎么和cpu通信,谢谢!
    发表于 10-31 08:33

    aic3106通过mic在收到数据发送给IISIIS将数据发送给软件编码,编解码后有回音怎么解决?

    aic3106通过mic在收到数据发送给IISIIS将数据发送给软件编码,然后软件解码,将数据发送给IIS
    发表于 10-17 08:17

    了解TI基于PCB布线规则的DDR时序规范

    电子发烧友网站提供《了解TI基于PCB布线规则的DDR时序规范.pdf》资料免费下载
    发表于 10-15 11:47 1次下载
    了解TI基于PCB布<b class='flag-5'>线规</b>则的DDR时序<b class='flag-5'>规范</b>

    USB转IIS应用SSS1700参考电路图

    SSS1700设计参考电路,SSS1700应用USB转IIS方案设计电路,鑫创SSS1700设计方案
    发表于 07-31 10:38 5次下载

    为什么CAN总线分支在0.3米内是最可靠的?

    线性拓扑是CAN总线线规范中最为常见的,如果采用了线性拓扑中的“T”型分支连接,按规定分支长度是不能大于0.3m的,需要更长的分支应该怎么办呢?CAN拓扑分类CAN(控制器局域网
    的头像 发表于 07-05 08:25 1724次阅读
    为什么CAN<b class='flag-5'>总线</b>分支在0.3米内是最可靠的?

    ESP32同时使用IIS和UART时出错,为什么?

    ESP32同时使用IIS和UART时出错,如果不使用IIS,三个串口都可以正常使用... 如果使用IIS只打开串口1,会出现如下图错误(但是程序可以运行,只是串口部分有问题) 如果使用IIS
    发表于 06-26 07:21

    高速pcb布线规则有哪些

    高速pcb布线规则有哪些 高速PCB布线规则 摘要:随着电子技术的快速发展,高速PCB设计变得越来越重要。为了确保信号完整性和电磁兼容性,遵循一定的布线规则至关重要。本文将详细介绍高速PCB布
    的头像 发表于 06-10 17:33 703次阅读

    释放总线潜力:汽车总线离线模拟解决方案

    传统的ECU模拟工具通常需要依赖上位机软件来发起通信,这在离线场景和自动化产线中带来不便。为了应对这一挑战,虹科推出了创新的汽车总线离线模拟解决方案,基于PCAN-Router系列网关
    的头像 发表于 02-20 14:38 436次阅读
    释放<b class='flag-5'>总线</b>潜力:汽车<b class='flag-5'>总线</b>离线<b class='flag-5'>模拟</b>解决方案

    虹科方案|释放总线潜力:汽车总线离线模拟解决方案

    导读: 传统的ECU模拟工具通常需要依赖上位机软件来发起通信,这在离线场景和自动化产线中带来不便。为了应对这一挑战,虹科推出了创新的汽车总线离线模拟解决方案,基于PCAN-Router
    的头像 发表于 01-30 11:10 393次阅读
    虹科方案|释放<b class='flag-5'>总线</b>潜力:汽车<b class='flag-5'>总线</b>离线<b class='flag-5'>模拟</b>解决方案

    电动机绕组的接线规

    以U相绕组为例,说明其接线规律:因为两个相邻的极相组处在不同极性的磁极下,所以,它们的电流绕行方向是相反的。于是得到两个相邻极相组之间的接线规律:下层边与下层边相接,上层边与上层边相接。
    发表于 01-22 09:54 903次阅读
    电动机绕组的接<b class='flag-5'>线规</b>律

    iis的80端口被占用怎么解决?

    \"。记住次PID; 3、打开Windows任务管理器,在进程中找到PID为\"4\"的程序,如下图所示:显示80端口被pid4 system占用。 二、或者修改IIS端口为其它未用端口,如81端口;相应的,站点也修改到对应的81端口。在IIS服务器里面绑定中改端口
    发表于 12-25 17:24

    PCI-Express总线接口的布线规

    PCI-Express总线接口的布线规
    的头像 发表于 11-29 15:49 1023次阅读
    PCI-Express<b class='flag-5'>总线</b>接口的布<b class='flag-5'>线规</b>则

    adau1452的iis接口硬件和软件怎么设计?

    请问这个硬件部分是兼容所有iis接口的音频芯片么?有没有较多的参考设计,目前的需求有两类,一类是一路入,一路出,一类是两路入,16路出,后面的我可以参考官方 的板子,但是前面的设计没办法,之前我是用wm8978或者es8388这类芯片,看接口不知道怎么连接,软件部分怎么设
    发表于 11-28 08:01

    ADAU1452是否支持多路IIS主从同时输入?如何做到同步?

    如图我们想将5.1 (伴奏)3路IIS信号与 2.01路IIS 信号通过ADAU1452进行混音后 输出5.13路 IIS信号. 请问:由于5.1 伴奏只能作为IIS master
    发表于 11-28 06:34

    分享I2C总线规范

    电子发烧友网站提供《分享I2C总线规范.pdf》资料免费下载
    发表于 11-18 10:49 0次下载
    分享I2C<b class='flag-5'>总线规范</b>