引言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 i2s总线典型时序图
随着技术的发展,在统一的i2s接口下出现了多种不同的数据格式。根据sd信号相对于sck和ws位置的不同,分为左对齐和右对齐2种格式,如图2和图3所示。
图2 16位有效位数的左对齐格式
图3 16位有效位数的右对齐格式
在上面2种数据传输格式中,当ws为“1”时传输的是左声道的数据,当ws为“0”时传输的是右声道的数据。为了保证数字音频信号的正确传输,发送端和接收端必须采用相同的数据格式。
2、软件模拟i2s以太网数字语音广播系统主要是指以以太网为传播介质提供音频服务的广播系统,将语音信号以标准ip包的形式在以太网上进行传送,以实现语音广播功能。该系统在pc机端通过麦克风采集语音数据,然后将采集到的语音数据通过以太网发送给嵌入式终端,嵌入式终端将接收到的语音数据进行数/模转换后进行播放。系统实现框图如图4所示[5]。
图4 以太网数字语音广播系统框图
图5 lm3s8962与ms6336的连接图
广播系统终端的mcu lm3s8962将接收到的语音数据通过i2s总线发送给语音解码芯片ms6336进行数/模转换并播放,lm3s8962和ms6336的连接如图5所示。为了完整还原出语音信号,需要保证软件模拟i2s信号时序严格精确,高低电平的转换采用延时程序实现。ms6336为16位d/a芯片,其i2s时序如图6所示。
图6 ms6336的典型i2s时序图
该系统中的语音数据双声道,16位采样,1个采样点的数据为4字节,1个采样点数据通过mcu发送给ms6336,数据发送流程如图7所示。
软件模拟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=07 μ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<
新能源利用如何“泛能化”?
联发科超越高通成全球手机芯片领域的王者
人脸识别助力反欺诈
电位器和编码器有什么不同?
一加5什么时候上市?一加5发布会邀请函爆光,配置、价格、外观是不是就静待发布会了!
IIS总线规范和软件模拟
理解ADC误差对系统性能的影响
VR眼镜头盔Oculus正式支持空间追踪
市场渐淡PCB上游原物料调整布局
车企“害怕的”or“想要的”,正是华为的这项能力?
喜讯!巨蟹数科荣获国家级“高新技术企业”认定!
PLC远程监控系统给汽车装备的制造带来了哪些优势
日本推出AIST人形机器人意在纾解老龄少子化所造成的劳动人口短缺问题
智慧工厂F5G全光网应用技术白皮书
点成案例| BE-Gradient 微流控芯片用于胶质母细胞瘤的研究
USB C型备用模式:适用于所有人的模式
算法工程师应具备哪些工程能力
基于MIMO的LTE数字直放站技术研究及系统应用
8月,事关锂电池和新能源汽车的两条行业新规正式实施
宏展:高低温湿热试验箱如何进行湿热交变?