OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11916|回复: 34

利用SAI总线DMA传输多路音频信号的

[复制链接]

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
发表于 2016-7-20 16:41:23 | 显示全部楼层 |阅读模式
5金钱
        我之前在407的基础上做了一个基于IIS和USB的录音和放音的工程,现在因为要扩展到1拖4个数字mic也就是,原来的IIS满足不了要求。所以要用SAI总线。我手头现在有一个429的discovery开发板,用阿波罗的429的历程进行测试。429的声卡和录音历程和407很相似,大部分不要做修改,但还是有几个地方我吃不准。        先说一下基本情况,用到了一条SAI总线。接了4个数字mic,每个mic都是16K 16bit的数据。
        开始弄修改之前有3个地方不是太明白,请论坛有经验的朋友指点一下。


        第一个是SAI的基本设置,由于是1拖4,所以在历程基础上做了修改
        SAI1A_Handler.FrameInit.FrameLength=64         //
        SAI1A_Handler.FrameInit.ActiveFrameLength=1;   //这里的帧同步信息我看iis情况下是16,查了数据手册“PCM/DSP”模式设置为1
        SAI1A_Handler.SlotInit.SlotNumber=4;   //对应4个mic的
        第二是采样率,我设置成16K之后    SAIA_SampleRate_Set(REC_SAMPLERATE);
        帧时钟的脉冲频率(中间第二条红色的线)不是16K,算了一下只有5.11K。改成48K之后才变成附件的样子,单也只有15.64K。
        这里我觉得在多个slot情况下,频率设置是否有特殊要求。
        第三个就是DMA的问题,之前407开发板是2个IIS通道,现在一帧有4个通道的数据,这里是不是要修改成
        SAIA_RX_DMA_Init(sairecbuf1,sairecbuf2,SAI_RX_DMA_BUF_SIZE/2,1);SAI_RX_DMA_BUF_SIZE应该是128,一次传输一帧128个字节。  就存放发送音频数据的playbuf来说,playBuf[0]、playBuf[1]、playBuf[2]、playBuf[3]应该就是存放的一帧中4个mic传过来的数据。
        问题比较多,请有经验的朋友指点一下。
QQ图片20160720161046.png

最佳答案

查看完整内容[请看2#楼]

原子的晶振是25MHz,你的板子是8MHz,25/8=3.125,正好符合你的时钟频率差异。所以你的程序要改一下HSE。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2082
金钱
2082
注册时间
2014-12-19
在线时间
711 小时
发表于 2016-7-20 16:41:24 | 显示全部楼层
原子的晶振是25MHz,你的板子是8MHz,25/8=3.125,正好符合你的时钟频率差异。所以你的程序要改一下HSE。
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-20 16:53:57 | 显示全部楼层
自己帮顶一下@正点原子 @lvehe
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-7-20 20:50:13 | 显示全部楼层
1,你那个activeframelenth,得调试下,我也说不准该设置多少。   2,2楼已经给出答案。   3,你是MIC,应该是采集数据,怎么变成发送数据了?
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-21 09:07:50 | 显示全部楼层
正点原子 发表于 2016-7-20 20:50
1,你那个activeframelenth,得调试下,我也说不准该设置多少。   2,2楼已经给出答案。   3,你是MIC,应该 ...

是这样的,项目是放音和录音一体,发送和采集都有,我提问题的时候省事只写了采集的部分代码。
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-21 17:11:50 | 显示全部楼层
正点原子 发表于 2016-7-20 20:50
1,你那个activeframelenth,得调试下,我也说不准该设置多少。   2,2楼已经给出答案。   3,你是MIC,应该 ...

原子哥,我想问一下。目前手头有一个407的开发板,但是PCM的实际格式我不清楚。我看了wm8978也支持pcm格式。我想直接这么修改一下,用DSP做主,wm8978做从。然后看看能否正确放音
这两个地方坐下修改: WM8978_I2S_Cfg()这里修改为PCM/DSP格式。然后分频寄存器R6置0直接由外部控制bclk和mclk
不过我想了一下如果是这样的话,其他配置左右声道音量这些是不是就没用了。这个思路不知道是否可行。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-5-10
在线时间
26 小时
发表于 2016-7-21 17:58:33 | 显示全部楼层
帮~~~点
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-5-10
在线时间
26 小时
发表于 2016-7-24 18:34:55 | 显示全部楼层
楼主,有usb模拟声卡,能录音和放音的例子吗?我的录音后,扬声器放的声音很失真,研究了好久没进展
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-25 09:19:47 | 显示全部楼层
skyqiu 发表于 2016-7-24 18:34
楼主,有usb模拟声卡,能录音和放音的例子吗?我的录音后,扬声器放的声音很失真,研究了好久没进展

有倒是有,不过你还是要调整一下。
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-25 09:24:01 | 显示全部楼层
skyqiu 发表于 2016-7-24 18:34
楼主,有usb模拟声卡,能录音和放音的例子吗?我的录音后,扬声器放的声音很失真,研究了好久没进展

附件在这里,参考一下。
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-25 09:34:21 | 显示全部楼层
本帖最后由 czdspeed 于 2017-11-13 15:05 编辑

附件在这里,参考一下。

刚才没有上传成功。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-5-10
在线时间
26 小时
发表于 2016-7-25 09:53:40 | 显示全部楼层
czdspeed 发表于 2016-7-25 09:34
刚才没有上传成功。

SAI总线接口 407上面可以使用吗
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-25 15:37:23 | 显示全部楼层
skyqiu 发表于 2016-7-25 09:53
SAI总线接口 407上面可以使用吗

407只能支持IIS,不支持SAI,我发给你的就是407的代码。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-5-10
在线时间
26 小时
发表于 2016-7-25 21:16:54 | 显示全部楼层
czdspeed 发表于 2016-7-25 15:37
407只能支持IIS,不支持SAI,我发给你的就是407的代码。

多谢了!
回复

使用道具 举报

2

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2012-5-8
在线时间
314 小时
发表于 2016-7-26 10:02:43 | 显示全部楼层
不知道楼主使用的什么逻辑分析仪?!
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-27 09:44:48 | 显示全部楼层
zuoyi 发表于 2016-7-26 10:02
不知道楼主使用的什么逻辑分析仪?!

ZEROPLUS  一个台湾公司的好像也不是太贵。你网上找找。
回复

使用道具 举报

2

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2012-5-8
在线时间
314 小时
发表于 2016-7-27 11:59:31 | 显示全部楼层
czdspeed 发表于 2016-7-27 09:44
ZEROPLUS  一个台湾公司的好像也不是太贵。你网上找找。

果然孕龙,这个逻辑分析仪不错!
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-27 15:38:03 | 显示全部楼层
正点原子 发表于 2016-7-20 20:50
1,你那个activeframelenth,得调试下,我也说不准该设置多少。   2,2楼已经给出答案。   3,你是MIC,应该 ...

activeframelenth好像就只能设成1位,我在我们公司定制的音频片子上试验了,设成其他长度就不能解析声音了。
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-7-27 15:55:24 | 显示全部楼层
skyqiu 发表于 2016-7-24 18:34
楼主,有usb模拟声卡,能录音和放音的例子吗?我的录音后,扬声器放的声音很失真,研究了好久没进展

对了,我这里也有个问题就是用原子的历程放音,不论是音频播放还是声卡的例子。只要把音量加到很大就会失真。我后来推算了一下好像音量在大于16384之上就一定会,就是有效不失真的数据大概只有15位。我用捷布朗的扬声器就没有这个问题。这个看上去是软件造成的问题。不知道你的时候发现没有,就时把电脑的音量和播放软件的音量放到最大。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-5-10
在线时间
26 小时
发表于 2016-7-31 21:43:28 | 显示全部楼层
czdspeed 发表于 2016-7-27 15:55
对了,我这里也有个问题就是用原子的历程放音,不论是音频播放还是声卡的例子。只要把音量加到很大就会失 ...

这个我没太注意,最近没时间弄那个。
你知道怎么获取声音的分贝大小吗?比如放音录音的时候能实时显示声音的分贝。
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-8-1 08:33:57 | 显示全部楼层
skyqiu 发表于 2016-7-31 21:43
这个我没太注意,最近没时间弄那个。
你知道怎么获取声音的分贝大小吗?比如放音录音的时候能实时显示声 ...

o,这个直接在音频的属性里面看。我截个图吧
QQ图片20160801083307.png
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2016-9-18
在线时间
10 小时
发表于 2016-9-18 11:17:16 | 显示全部楼层
你好,向你询问下,SAI是由哪几个信号线组成的,能否和SPI的4跟数据线进行互连
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2016-9-19 10:07:27 | 显示全部楼层
蓝色风暴first 发表于 2016-9-18 11:17
你好,向你询问下,SAI是由哪几个信号线组成的,能否和SPI的4跟数据线进行互连

好像初始化4个信号就可以了,帧时钟、 位时钟、主时钟、和一个发送或者接收的通道(半双工的)。
帧时钟相当于spi的片选、位时钟相当于spi的sck,发送或者接收的通道对应miso或者mosi。可能可以连起来,但是我也不确定你要试试。
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2016-9-18
在线时间
10 小时
发表于 2016-9-27 10:23:04 | 显示全部楼层
czdspeed 发表于 2016-9-19 10:07
好像初始化4个信号就可以了,帧时钟、 位时钟、主时钟、和一个发送或者接收的通道(半双工的)。
帧时钟 ...

后来发现SAI要与音频信号线相连,就找到芯片的MCASP功能,连的是SAI CLK =MCASP ACLKX; SAI FS = MCASP FSX;  SAI OUT = MCASP AXR0;  SAI IN = MCASP AXR1
回复

使用道具 举报

4

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2015-8-20
在线时间
63 小时
发表于 2017-1-3 20:21:29 | 显示全部楼层
你好,我想问一下你的DMA怎么弄的? 数据手册中DMA中没有SAI数据流啊。在SAI章节没细说DMA数据流的问题。我不清楚到底该怎么配置?
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2017-1-7 14:47:22 | 显示全部楼层
江成88 发表于 2017-1-3 20:21
你好,我想问一下你的DMA怎么弄的? 数据手册中DMA中没有SAI数据流啊。在SAI章节没细说DMA数据流的问题。我 ...

SAIB_RX_DMA_Init  你搜素一下,这个和407的IIS总线从DMA上传输还是一样的,基本不需要变的。
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2015-9-26
在线时间
22 小时
发表于 2017-11-7 00:18:28 | 显示全部楼层
你好,請問要更改成雙聲道的MIC跟SPEAKER,採樣率為48000Hz要怎麼做
F7及SAI也可以,每次修改descriptors的部份時就會整個都不能用
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2017-11-7 09:34:41 | 显示全部楼层
ryuki001 发表于 2017-11-7 00:18
你好,請問要更改成雙聲道的MIC跟SPEAKER,採樣率為48000Hz要怎麼做
F7及SAI也可以,每次修改descriptors ...

描述符修改是一个部分,你要加mic的话还要加很多数据流输入的函数,另外SAI IN也要绑定到USB的接口函数里面,不是一句两句可以说清楚的。我建议还是用带I2S总线的USB芯片去做,我们现在写的驱动用的时候都时不时有点小问题。
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2015-9-26
在线时间
22 小时
发表于 2017-11-10 09:51:42 | 显示全部楼层
謝謝解答
那請問要改成雙聲道的麥克風跟雙聲道的揚聲器要怎麼做?你之前提供的例程中,麥克風只有一個聲道
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2017-11-13 15:04:50 | 显示全部楼层
ryuki001 发表于 2017-11-10 09:51
謝謝解答
那請問要改成雙聲道的麥克風跟雙聲道的揚聲器要怎麼做?你之前提供的例程中,麥克風只有一個聲道

双通道的话你要把I2s传递过来的数据量也扩大一倍,另外usb的描述符也要改成2通道,通道的数据量扩大,播放的接口函数也要相应的修改。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-9-6
在线时间
4 小时
发表于 2019-12-27 09:42:01 | 显示全部楼层
想请教下,如果是多通道的MIC采集怎么做
回复

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
 楼主| 发表于 2020-1-17 15:10:56 | 显示全部楼层
liudema 发表于 2019-12-27 09:42
想请教下,如果是多通道的MIC采集怎么做

我这个项目隔得有点远了具体细节记不清楚,我们公司是用了pcm格式采集了4路mic的信号。每一路是16bit所以一帧是64bit,最后采集完以后要把每一帧的数据分别丢到4个buf里面就可以了。
回复

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-5-23
在线时间
6 小时
发表于 2020-3-12 13:51:34 | 显示全部楼层
czdspeed 发表于 2016-7-25 09:34
附件在这里,参考一下。

刚才没有上传成功。

附件在哪?
回复

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-5-23
在线时间
6 小时
发表于 2020-3-12 21:03:11 | 显示全部楼层
czdspeed 发表于 2020-1-17 15:10
我这个项目隔得有点远了具体细节记不清楚,我们公司是用了pcm格式采集了4路mic的信号。每一路是16bit所以 ...

楼主,方便请教几个问题吗?谢谢
我的qq849763364
回复

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-5-23
在线时间
6 小时
发表于 2020-3-14 18:11:55 | 显示全部楼层
OK,我已经解决了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 11:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表