Digulter PMODE2S 是一个立体声音频模块,接受所有主要音频数据接口格式和采样率。
特点包括:
1.立体声24位D/A转换器。
2.通过标准耳机插孔输出音频转换信号。
3.支持所有主要音频数据接口格式。
4.接受16-24 位音频数据。
5.用于灵活设计的小型PCB尺寸1×0.8 英寸(2.5 厘米×2 厘米)。
6.具有GPIO接口的6引脚PMOD 端口。
PMOD2S 利用Cirrus Logic CS4344立体声D/A 转换器来获取数字音频数据,并通过标准立
体声耳机插孔输出相应的模拟信号。它的主时钟范围可以从512kHZ 到50MHZ。
I2s 协议要求数据在位时钟的下降沿上计时。第一位数据(MSB)不在下降沿上计时,直
到LRCK 改变状态后第一个完整的位时钟周期已经过去。位时钟的上升沿通知板上芯片可
以读取下一位数据。在每个LRCK 改变之前传送数据的一个比特时钟周期的延迟也意味着
在LRCK 改变发生之后,数据的最低有效位(LSB)将被转移。这种板上的芯片必须遵循特
定的相位关系,尽管相位关系必须在整个音频会话中保持一致。I2s 的一个实例时序图如下
所示:
i2s 芯片共有三个时钟:
首先串行数据输入的时钟,也叫位时钟,用来对应数字音频的每一位数据。
还有左右声道时钟LRclk 用于选择左右声道。LRclk 值为“0”表示正在传输的是左声道的数据, 为“1”表示正在传输的是右声道的数据。
最后是主时钟,用来保持信号所有的同步。由于串行速率使用的时钟是20M,根据i2s 协议串行速率=采样率x 采样位数,采样率等于左右声道时钟。
本模块采取建立两个16bit 的左右声道寄存器用来存放串行数据,然后通过计数器左右声道计数器L_count 与R_count 来实现移位寄存,当左右声道计数器小于16 时,左右声道的寄存器开始进行移位寄存数据的功能。
其程序实现如下:
reg [4:0] L_count;
reg [4:0] R_count;
reg [15:0] L_data;
reg [15:0] R_data;
reg finish_flag; //完成一次左右声道数据接收标志
always @ (negedge Bclk , posedge rst)begin
if(rst==1'b1)begin
L_count <= 5'd0;
R_count <= 5'd0;
L_data <= 16'd0;
R_data <= 16'd0;
finish_flag <= 1'b0;
end else begin
if(LRclk==1'b0)begin
R_count <= 5'd0;
if(L_count< 5'd16)begin
L_count <= L_count+1'b1;
L_data <= {L_data[14:0],sdata};
end
end else begin
L_count <= 5'd0;
if(R_count< 5'd16)begin
R_count <= R_count+1'b1;
R_data <= {R_data[14:0],sdata};
end
if(R_count==5'd15)begin
finish_flag <= 1'b1;
end else begin
finish_flag <= 1'b0;
end
end
end
end
本模块最终目的是生成左右声道时钟便于输入i2s芯片,随机选取上千次数据进行观测后没有发现误码,选取其中一组数据为例,例如由下图可以看出,左右声道时钟LRclk已经生成,LRclk 频率根据i2s协议:串行速率=采样率 x 采样位数得出,
LRclk 等于62.5kHz。
当LRclk为低时可以看到下面对应的是左声道数据,当LRclk为高时,可以看到下面对应的是右声道数据,与i2s的时序图一致。而每当左右声道数据完整记录一次的时候,可以看到标致寄存器finish_flag置高。由此可见,i2s芯片模块功能实现成功。