作者的话
开篇我就讲到了,ADAU1777 是这个开发板的 Codec,逆天的超低延时,能够实现模拟四进两出,这颗芯片在独立使用的时候,BOSE 等公司用它来做主动降噪,他的知名蓝牙降噪产品全部是用的 ADAU1777,可见这颗芯片的强大之处。
ADAU1777 不仅仅可以作为音频 DSP 单独使用,其超低的延时,超高采样率,超低功耗,很多客户也用它来做 CODEC,AD/DA 的效果奇佳!
我们 21489 的开发板选用了这颗 DSP 作为 CODEC 来使用,本章会把 ADAU1777 作为一个单独的 DSP,详细的讲解如何去开发它。我们认为只有掌握了这颗 DSP 的使用方法,才能够更好的理解它作为CODEC去配合21489的原理。所以这个开发板,也可以认为是ADAU1777的开发板,一个开发板可以同时学习 2 颗 DSP 的开发!!!
再一次,循序渐进,用户没有看错,21489 的开发板,我们首先讲 ADAU1777 这颗 codec,非常简单,顺着文章往下看!
开发板的开关说明
开发板的开关如下:
SW2 和 SW3:它们是控制 21489 从 SPIflash BOOT 或从 NORflash BOOT 的开关,因为本文档我要专门讲 ADAU1777,所以就让 21489 先歇着吧,SW2 拨到 OFF,SW3 拨到 OFF。21489就不以任何形式 BOOT。
S5:配置 21489 的内核时钟频率,默认就好,不管他,关于 SW2,SW3 和 S5 这几个跟 21489相关的开关原理,我会在 21489 开发文档中详细去讲,这里不用管,按照我说的去拨,21489就彻底歇菜,让我们在这个文档里主攻 ADAU1777。
SW1:ADAU1777 的自启动开关,这个就跟我们要开发的 ADAU1777 非常相关了,把他拨到OFF,则是 ADAU1777 的调试模式,拨到 ON 就是ADAU1777 从 eeprom 自启动的模式。我们在做开发的时候,就把它拨到 OFF。(和 21489 联调的时候,需要让 ADAU1777 做好程序,固化并脱机运行,就要拨到 ON 了)
所以归纳一下,开始调试 ADAU1777,请把 SW1 拨到 OFF,SW2 和 SW3 都拨到 OFF,S5 不管他。
开发前的准备工作
- 硬件准备
一台 64 位的 PC,一块开发板,一个 USBi 仿真器,两根音频线,两个输入音源,可以是 PC 或者手机或者其他模拟音频输入设备,一个输出音源设备,可以是耳机音箱等。(为啥要 64 位的 PC 呢,是因为 ADI 现在提供的新版本 SigmaStudio 软件只支持 64 位的 OS 了。输入和输出音源这个我也要简单说一下,因为我们这个是开发板,目的是为了迅速的教会大家使用 ADAU1777,所以就用最简单的外设,文档中我使用了 2 个手机作为输入音源,一个小
音箱作为输出设备)
- 软件准备
首选需要安装 SigmaStudio 软件,这个软件是开发和配置 ADAU1777 的唯一工具,你的所有功能都依赖这个软件来实现,包括与 21489 的联调!所以请随时关注 ADI 官网上的软件更新情况,确保自己安装的是最新的 SigmaStudio 软件,已获得更多更稳定的功能。
SigmaStudio 软件官网下载链接:
http://www.analog.com/cn/design-center/processors-and-dsp/evaluation-and-development-software/ss_sigst_02.html
这个软件是完全免费的,直接下载安装即可。特别注意,安装 SigmaStudio 时,有可能需要你安装 Microsoft.NET Framework Ver4.0,如果你的机器之前没有安装过此类软件包。
最新版本的.net Framework 可到以下网站下载:
http://www.microsoft.com/zh-cn/download/details.aspx?id=17718
操作系统特别注意,若是 WIN7 或以上 PC 系统,请确保“我的文档”在 C 盘目录中,否则在安装过程中有可能会提示出错。
软件都装好了,就可以正式开启我们的 ADAU1777 的开发之旅了!
开发平台搭建示意图
-
USBi 仿真器接入开发板,并插入 PC 上电(开发板和仿真器均有温馨防反插设计,不用担心插反了)
-
5V1A 外接电源供电。
-
LINE IN 接入一路(接的是手机音源输入,注意该模拟输入口对应的音频通道编号,这个我在后面的章节会详细讲解)
-
HP OUT 接入模拟立体声输出(我接的是一个小音箱输出,,这个我在后面的章节会详细讲解)
USBi 通过 USB 线插入 PC 后,如果弹出找到新硬件并要求安装设备驱动,请选择自动安装。如自动安装失败,可手动定位到 USBi 的驱动安装目录:
C:\Program Files\Analog Devices Inc\Sigma Studio\USB drivers.
安装完毕后,可在设备管理器里检查是否有 Analog Devices USBi 设备,如下图所示,则表示安装成功,否则须重试。
ADAU1777 的开发 1:直通 1
我们从最简单的开始,先做一个直通的例程。先把这个板子弄出声来,这个程序我觉得几分钟就能掌握,你会发现 SigmaDSP 的开发竟然是如此的简单!
开关选择:请按我上文写到的开关说明来做。开始调试 ADAU1777,
请把 SW1 拨到 OFF,SW2和 SW3 都拨到 OFF,S5 拨到 1 OFF 0 ON。(后面的例程不再重复说明)
下面要做的事很简单,选择一路 LINE IN 2 &3,输入音源,通过 ADAU1777 进行模拟转数字,并不经过任何的数字音效处理,直通为数字转模拟,再输出到音箱。让手机输入音源播放音乐,看看音箱能否正常的发声。
按下图链接硬件:
- 打开 SigmaStudio 软件。我安装的是 4.4 版本。选择 File> New Project,新建一个工程。
- 首先设计 Hardware,把 ADAU1777,USBi 鼠标选中,拖到 Hardware 里来,然后按照下面的图示进行链接(这是所有 SigmaDSP 设计的第一步):
注意!请不要随便改变 USBi 单元显示的 SPI 或 I2C 地址,否则会导致通信错误, 从而不能正常联接调试,你的硬件是怎么设计的,你就选择怎样的链接。(先拖出来 USBi,再拖出来 ADAU1777 作为 IC1,再拖出来 E2Prom 作为 IC2)
- 硬件链接设计好了,接下来的音频设计步骤,需要转换到原理图设计页面(Schematic),选中 Schematic。
1)首先设计 Input,同样是将左边的 input 拖到右边。Tree Toolbox, 点开 IO 模块组, 然后选择 Audio Input 模块中的 Input(因为我们要用到开发板上的 IN2-3),并将其拖到右边的空白工作区,并选择 2/3 打勾。
这里为什么选择的是 2 和 3 打勾呢,因为我们开发板上硬件设计的就是 2/3 接口输入音源。请看下图的模拟音源输入接口:
2)设计输出接口,点开 IO 的 output,如下图拖出来 2 个。(为什么这里要拖出来 2 个呢?因为是左右声道呀)
因为只有一个 OUTPUT,用的是 0/1,所以我们这里不用选了。默认就是 0/1。
HPOUT 接的是音箱,所以一会出声的就是音箱了。
3)将这几个模块连线,就完成了一个最简单的直通程序了。
4)将做好的例程下载到板子上。可按 F7 或快捷按钮,或通过主菜单 Link Compile Download来把你的设计下载到开发板的 ADAU1777 中,实现ADAU1777 的音频直通功能。
如 USBi 与开发板通信正常, SS 右下角的状态栏会显示 100%, Active: Downloaded。
- 将输入音源设备播放音源,输出音源开始正常播放。
怎么样,是不是不要 10 分钟,就能自己开发出第一个 SigmaStudio 例程啦 😃
注意:USBi 将例程 DOWN 到了板子上 ADAU1777 的 SRAM 上,断电就没有了。这种在线调试是为了快速验证功能。但开发的最终需要实现脱机,开发板上我们只需要把程序下载到外部 EEPROM 实现自启动即可。由于我还打算多写一些例程,就暂时先不对脱机做更多的说明,会留在最后一个大的章节来讲。
ADAU1777 的开发 2:直通 2
第一个例程我们把板子弄出声了,输入音乐,输出音乐,这个也是验证板子上 ADAU1777 硬件是否正常的最常规办法。
第二个例程,我们继续做一个直通程序,把接口改一下,让用户能更深刻的理解输入输出接口是如何配置的硬件连接上,输入,手机改接入 LINE0/1,输出还是接 OUTPUT。
1)SigmaStudio 里,首先是硬件设计,再是原理图设计,跟例程 1 完全一样,我就不再重复
叙述了。
2)在原理图的设计中,输入改为 LINE0/1。
对应板子上的输入接口:
3)输出还是 0/1,然后将原理图连好,完成设计
4)下载程序,手机从 0/1 输入接口输入音乐,输出接口音箱发出音乐,完成直通。
ADAU1777 的开发 3:音量大小调节
ADAU1777 是四进两出,通过上面的例程,我们希望用户能够熟练掌握如何配置各个接口,实现直通。从这个例程开始,我们来做一下音频处理,从最基础的音量大小调节来看。
1)硬件连接上,输入手机接入 LINE0/1,输出还是接 OUTPUT。
2)SigmaStudio 里,首先是硬件设计,再是原理图设计,跟例程 1 完全一样,我就不再重复叙述了。
3)在原理图的设计中,输入为 LINE0/1,输出为 0/1
4)我们要在输入 0/1 和输出 0/1 里加入音量控制算法模块,来实现音量调节的功能。(特别注意,SigmaDSP 的开发,一定要理解信号流,输入,输出,把信号流完全掌握,就很容易设计程序了)
5)这个音量模块只有一进一出的通道,我们需要通过设置,把他调成两进两出,这样就可以跟我们的输入输出接了。(注意,很多算法模块均可通过此操作来增加通道)
6)逻辑连线,下载程序,从 0/1 手机输入音乐,0/1 音箱播放,在软件中实时调节音量调节模块,可以控制音箱输出的音乐音量。
ADAU1777 的开发 4:单通道音量调节
接上一个例程,我们用的是一个音量调节模块,来控制左右声道立体声,这个例程我们用 2个音量调节模块,分别控制输出的 0 和 1,这个时候请把输出接到耳机上,两个耳朵能听的效果更明显。
下载程序后,0/1 输入的音乐,在 0/1 输出口输出到耳机,这个时候分别调节两个调音量模块,可以明显在耳机的两个耳朵里听到不同音量的音乐。
ADAU1777 的开发 5:静音
这个例程,我们设置了一个静音模块,正常情况下,0/1 输入音源,输出到耳机正常播放,当鼠标点击静音模块打勾,则输出耳机静音,没有声音。
1)将静音模块拖出来
2)选中静音模块,选择 2 通道,和音量调节模块增加通道一样。
3)连好线,并使用 UBSi 下载程序。
耳机两个耳朵都正常播放。当用鼠标点中静音模块,则实现静音。再次取消选中,又恢复正常播放。
ADAU1777 的开发 6:单通道静音
这个例程,我们设置了两个个静音模块,正常情况下,0/1 输入音源,输出到耳机正常播放,当鼠标点击每一个静音模块分别打勾,则输出耳机对应通道静音。
将程序下载,耳机正常听到音乐,当选中 mute1 或者 mute2,则控制关掉相关的声道,在耳机中就会对应的某个耳朵没有声音了。
把两个静音模块全部都选中,则全部静音。
ADAU1777 的开发 7:线性增益
如果我们对输入的音源音量不满意,觉得声音太小了,该怎么办?这里有一个线性增益模块,可以放大音量。这个功能在 MIC 输入的时候很常用,输入音源如果接的是 MIC,一般进来的声音都很小,加一个线性增益会加强很多。
进行逻辑连线后,通过 USBi 下载程序,通过数字的输入,调节增益大小,从输出端能很明显的听到效果。
ADAU1777 的开发 8:混音
开发板上做了 4 进 2 出,ADAU1777 也是正好能够支持这些通道的输入输出。所以给我们做混音提供了先决条件,我们来看一看如何用 ADAU1777 做混音。
非常简单,硬件链接,我们用两个手机作为输入音源,一个插到 0/1 输入,一个插到 2/3 输入。输出 0/1 到耳机。
SigmaStudio 软件中,先做硬件配置,再进行原理图设计:
通过 USBi 在线下载后,两个手机输入不同的音乐,进行混音后在耳机里可以清晰的听到。
ADAU1777 的开发 9:反馈
“反馈”(Feedback)算法在信号通道中生成一个延迟,并将信号重新引导至该通道中较早发生的输入。(图中所示即为这种反向信号流,这是唯一一个绿色输入位于右侧、蓝色输出位于左侧的模块。)注意,如果设计中要求反馈,则必须使用该模块。
我做一个例子,主要是要讲一下这个反馈的信号流是反的,唯一一个反向信号流的模块。
题外话,这只是一个示范例程,具体反馈应该怎么用,合不合理我不知道,需要各位声学工程师大神的专业知识来细调啦。OP 作为电子工程师,只能努力教大家怎么用模块,至于真正意义上在音频框架下的调音,就有点跨界了。
ADAU1777 的开发 10:PEQ
ADAU1777 主要的技术方向是超低延时,超低功耗,在音频音效方面的能力就显得比较弱,比其他的 SigmaDSP 要差很远,不过也能支持一些均衡器,这里说一下 PEQ。
程序还是最简单的 0/1 输入,经过 PEQ 后,0/1 输出。我们点击这个 PEQ,进入调节界面。
在这里进行具体参数的调节。这个时候有很多新手用户就有疑问,这个东西怎么调。统一说一下,很简单,我们打开 ADI 官方的 WIKI:
https://wiki.analog.com/resources/tools-software/sigmastudio/toolbox
这个网址一定要记住,非常重要。打开后,我们找到相应的模块:
ADAU1777 的开发 11:1 段二阶滤波器
拖出来直接用,点击模块可以弹出细调的对话框,具体参数怎么调去 wiki 上找,这里就不多说了。
ADAU1777 的开发 12:多段二阶滤波器
我们在做其他 SigmaDSP 的时候,总是会说到多段滤波器,比如 31 段 EQ,在 ADAU1777 里能不能做,怎么做,其实很简单,你只需要多拖出来一些滤波器连起来不就好了,至于最多能做多少段,我在这里不好下定论,因为你所拖出来的每个算法模块都是需要占用 DSP 资 源的,处理器内存有限,当你把算法模块都拖出来之后,能顺利的下载,就说明可以做,如 果报错,那么就说明 DSP 功能溢出,无法实现,通过这种简单的方式就可以试啦。
这个例程我们尝试做 5 段看看。
频点跟具体参数我都没有调,细致的调节请参照 WIKI 上对这个模块的详细说明。
ADAU1777 的开发 13:仿真头模块和激励模 块来做频响验证
SigmaStudio 软件提供了仿真头模块和激励模块,配合使用可以来观察用户做的滤波器频响等参数。
ADAU1777 的开发 14:主动降噪
ADAU1777 是专业降噪耳机的首选 DSP,如 BOSE 等品牌的主动降噪耳机,均选用此芯片。ADI 为 BOSE 专门定制了降噪算法,这个是私有算法,我们无法拿到的。但是 ADI 也提供了一些说明,可用软件中现有的公版 EQ,延迟等模块来组成降噪的功能,或者客户如果有自己的降噪算法,可以添加到软件中去直接使用。
我们收集了 ADI 的一些在 ADAU1777 上做降噪的相关文档,并简单的搭建了一下程序,旨在指导用户如何使用 ADAU1777,至于降噪等最终的实现效果,需要用户自己调试和钻研。
至于这个程序怎么来的,参数怎么计算,我附了一个专门的文档:“ADAU177X-Active Noise Reduction”,这个文档是我搜集的 ADI 公司的一个技术问答。
ADAU1777 的开发 15:子程序设计
一个设计小技巧,可以把程序分为主程序和子程序,这样其他开发人员阅读程序就会方便很 多,比如这个程序:
0/1 音源输入,经过一个音量调节模块,再经过一个二阶 EQ,输出到 0/1。如何来做子程序:
然后进行子程序设计:
回到主程序,发现子程序模块多了可连接的节点,链接起来即可。
EQ 也是这样操作,做完之后程序如下:
ADAU1777 的开发 16:伪模块
也是一个设计小技巧,当你的设计很复杂的时候,可以通过伪模块来让阅读者更清晰的看懂程序。
以这个程序为例,什么叫伪模块,我们可以先不连线。
出现伪模块,按要求链接。
选着 1,则会点亮 1 链接的模块,这样在很复杂的程序设计里,连线各种纠缠在一起的时候, 就能很快找到对应的链接模块。这个伪模块设计就跟我们之前的正常连线效果一样。
ADAU1777 的开发 17:设置采样率
常见的功能,在 SigmaStudio 里是怎么实现的呢,我们来看这个例程:
新建一个工程,默认的采样率是 48KHz。想要调节采样率,只需要在这个红框里调,注意采样率是必须你的 DSP 能够支持的。比如我这里调到 192KHz。
这个调完了还不够,我们必须一定要点一下这个图标,将 192KHz 贯穿到整个设计里。
配置完之后,我们来看一看每个点的采样率:
已经改为 192000 了。
特别注意,当你修改了采样率,你的正常播放的音乐就会停止,需要重新下载程序,新的采样率才会生效!
ADAU1777 的开发 18:烧写和脱机
这是 ADAU1777 开发的最后一步,将做好的程序固化到外部 EEPROM 中实现脱机。整个文档到了这个最后一个章节,终于和我们的 21489 开发有相关了。想要用 1777 做 CODEC,就需 要先在SigmaStudio 里对 1777 进行程序设计和配置,让他能匹配 21489 的设计。并将设计好的程序固化,上电后 1777 就按固化的程序运行,来做 21489 的 codec。感觉就跟 CPLD 一 样了。
我们就用例程 17 的程序,192K 采样率的直通程序,怎么去实现下载和脱机呢?
1)设计好程序后,一定必须务必要先用 USBi 下载,确保正确运行之后,再做后面的操作。
2)回到 Hardware 配置中,进行下载:
3)按图配置进行:
4)OK,进行烧写
5)烧写完成后,给板子断电,拔掉 USBi JTAG,让 USBi 和板子完全脱离,将 SW1 开关拨到ON,让 ADAU1777 自启动,然后上电,实现 0/1 输入,0/1 输出的脱机功能。