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

    文章

    15

    浏览量

    19565
  • IIS总线
    +关注

    关注

    0

    文章

    4

    浏览量

    8907
收藏 人收藏

    评论

    相关推荐

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

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

    PCI-Express总线接口的布线规

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

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

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

    分享I2C总线规范

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

    怎样精准的通过软件模拟满足I2C总线的时序及各部分定时的要求?

    怎样精准的通过软件模拟满足I2C总线的时序及各部分定时的要求?
    发表于 11-03 06:23

    IIS一共几种格式?

    IIS一共几种格式?如果单片机没有IIS,可以用单片机io模拟吗,主时钟可以用内部时钟输出,其他总io模拟可以吗,stm32f030芯片
    发表于 10-23 07:23

    Cat 6 布线系统现场测试规范

    Cat 6 布线系统现场测试规范,网络布线规范,值得研究!
    发表于 10-09 11:00 0次下载

    can总线规范2.0

    can 总线规范,包含两份文档:中文版为周立功的翻译版本英文版为BOSCH的原版英文文档
    发表于 09-20 08:02

    IIS2MDC磁力传感器相关资料

    器件具有高达±50高斯的磁场动态量程。可以对IIS2MDC进行配置,使其产生用于磁场检测的中断信号,并自动补偿由较高应用层产生的硬铁偏移。IIS2MDC的ST软件支持包括驱动、倾斜补偿的电子罗盘、动态磁力计校准和6轴或9轴传感器
    发表于 09-13 06:00

    I2C总线的使用与编程

    I2C总线规范中进行了描述,该规范可在飞利浦网页或文件夹中的Keil Development Tools CD-ROM中找到。
    发表于 09-04 07:23

    STM32U5 HexaSPI总线到PSRAM的PCB布线规

    电子发烧友网站提供《STM32U5 HexaSPI总线到PSRAM的PCB布线规则.pdf》资料免费下载
    发表于 08-01 09:06 2次下载
    STM32U5 HexaSPI<b class='flag-5'>总线</b>到PSRAM的PCB布<b class='flag-5'>线规</b>则

    机房布线规范你知道吗

    机房作为弱电布线中最重要的网络部分,机房布线规范是大家要了解清楚的,干净整洁的机房布线能保证整个工程网络的快速稳定运行,因此,科兰通讯为大家带来了机房布线规范。 机房布线规范: 同一IDC,同一规格
    的头像 发表于 07-05 09:51 721次阅读

    求问用过SPI总线的大神,有没有做过SPI总线模拟SGPIO总线

    ,但是在开始前需要至少五个周期的低电平(也就是说SGPIO的使能信号是上升沿触发,而不是维持高电平),附件为SGPIO总线规范的详情,中文翻译版会有一些理解偏差,但大概意思一样。
    发表于 06-16 06:53

    2022最新综合布线规范标准来喽

    随着综合布线在建筑中的普及,越来越多的人咨询布线规范标准,为了保证羡慕的安全,科兰布线小编为大家分享一下2022最新综合布线规范标准,希望帮到大家。
    的头像 发表于 05-23 11:16 3913次阅读

    LPC55xx为I2C总线配置非“真正的开漏”引脚,还需要考虑什么?

    I2C 总线规范的 I2C 总线引脚”(参见表 3“引脚说明”)。手册进一步指出:“除 P0_13 和 P0_14 引脚外,所有引脚都是标准 (MFIO) 端口引脚,它们是组合 I2C/MFIO 端口引脚
    发表于 05-16 07:21