1. 缘由
拿到Cix开发有一阵子了,写了一篇NPU的测评文章,链接在这:跳跳跳,发现大家好像对枯燥的技术性文章热情不高:
欢迎大家给我评论评论,说道说道不喜欢的原因噢~ 比如:
--- “UP文章写的太烂了,不忍直视”,
--- “在线下我可能得叫一声 章工牛的!但不好意思,这里是网络,我的意思是你还得练!!!”
或者其他啥的。。。
所以这次我决定给开发板做点不一样的事情,要简单点的,实用一点的,好玩一点、接地气一点的东西,以下就是我的心路历程。
刚开始想着AI PC主打的是强大的CPU、GPU能力以及AI能力,那我刚好可以做一个机械臂来玩玩,调研了两天后发现成本有点子高,不仅是金钱成本,技术成本以及学习成本都超出了我业余er的承受范围(主要是我周末想去公园钓鱼),于是退而求其次转而先做一个小一点的项目热热身。
2. 摸索方向
研究板子的时候发现,板子自带了一组GPIO口,官方描述是:“O6 主板上包含一个 40 针 GPIO 连接器,用于低速总线连接和通用输入/输出 (GPIO) 功能。”
这是嵌入式领域标志性特点呀,关于这块我略微懂点拳脚啊,好!就从这着手了:
看上述表格,总共40 pin的IO口,能做的项目可多了,比如当年大学单片机第一课的:“点流水灯”!花式电灯的100种玩法!(开玩笑的);
数了一下里面的各种接口:
- 通用gpio(3.3v兼容)有13个;
- 复用的SPI口算两组,
- 一组IIC接口;
- 一组UART串口;
- 具有PWM功能的GPIO(3.3V)2个;
- IIS音频数字接口一组;
- 3.3V、5V电源;
PWM GPIO用来做呼吸灯的或者控制舵机啊,步进电机啊啥的;
IIC、SPI有的话相当于板载一个MCU了,我们做系统设计的时候可以省一个单片机了;
UART一般用来打印log调试信息或者终端控制的,这里都直接linux了,用处不大;
哎~IIS,这里有点意思,IIS是音频数字总线,音频数据在芯片间传输一般都是走IIS总线接口,现在好多商用级音频设备都通过HDMI线走IIS信号,来连接音频前后级设备,我们这里天然的直接有接口了呀,直接在这里做块小板子,插到主板上,IIS信号路径就是尽可能短了,完美呀!
3. 确认过眼神
好了!我知道了,我们来做一个准专业级HIFI设备吧!
也就是给O6加一个专属的外设HIFI声卡,当然了,既然都专业级了,我们的规格必须得到位:
- 数字界面(用来处理音频数字信号输入输出接口管理的)部分输入支持同轴、光纤、IIS,当然了O6只有IIS我们只支持IIS即可(为什么不支持USB呢?因为实际听感上USB接口会偶有顿挫感,不够完美,所以直接冲IIS接口)。
- 规格上支持PCM 44.1K~768KHz,支持DoP64~DoP128,支持native DSD64~DSD256;
- DAC部分采用双PCM1794A全平衡解码,两路PCM1794A设定MONO模式,分别负责左右声道解码,理论上可以做到最高132dB信噪比。
- 晶振部分采用有源双晶振架构,配合CT7306数字界面芯片来实现超低jitter的时钟系统;
- 耳放部分电路基础版采用芯片来实现,主要是TI的音频类运放,用在IV转换电路,LPF电路,以及最后的功率放大电路部分;
- 电源部分主要是从主板取电(当然也可选择从外接线性电源),取5V/3.3V电,转正负12V给到运放供电,从而增大耳放输出的动态范围,这里的电源方案主要是为了便携,并未严格考虑纹波的控制以及瞬态响应性能,争取在pro版本解决电源纹波以及瞬态响应的问题
- PCB部分需要仔细考虑布局以及关键信号的处理,否则引入噪声的话,“听到的背景就不够黑了!”
1. Pro版本的耳放部分将会基于当前方案进行全面的参数升级,并做成独立供电的桌面级设备。
2. 选用更好的运放,并且功率部分改为分立元件版本以获得足够低的失真。
供电部分使用进口带屏蔽层变压器供电,精心设计线性电源以get足够的纹波控制;
3. 规格部分升级DoP支持到DoP256, DSD支持到DSD512;
4. 晶振还是配合数字界面走双晶振架构,来获得极致的时钟jitter控制,只是普通有源晶振升级为TOSC或者恒温晶振,或者直接采用专用PLL时钟芯片方案;
数字界面设计为支持同轴、光纤、IIS输入,输出也同样如此,即可做数字前端也可做单独的耳放设备;
5. DAC可能会选用双CS43198芯片来支持更高规格的音频直出,甚至直推DSD;
6. 对电容的选择会更加偏音频一点;
7. 新增一个外壳,做成HIFI设备该有的模样。
这个版本比较烧钱了,而且对模拟电路的设计调优能力要求较高了,以后有空了单独做个完整的桌面级设备出来。
4. 搭建系统架构
4.1 硬件架构
至此,硬件部分的介绍就完成了,
硬件的整体架构如上图所示,目标是做成一块pcb板,直接插到主板上就能用。
软件部分控制、音频处理等都教给linux应用层来处理了,当然要是处理DSD native数据的时候可能需要改下linux driver层,这个到时候碰到了再说;
在player层面尽量精简,给予足够的软件灵活度来配合AI顶层的需求;
AI层面来实现我们的想法,天马行空,肆意妄为,随心所欲~(欢迎提供思路~)
我目前的构思是:
当你坐在电脑前工作时,NPU会跑实时分割网络获取人脸部分,然后推送到LVM部分进行情绪识别,基于情绪识别结果送到LLM获取当下情绪内最适合的歌曲推荐,并从网络获取音频流并播放。
所以从软件部分来看,我愿称之为最适合程序员的播放器。
4.2 软件架构
于是软件层面的架构如下图所示:
从架构看就知道这是一个从硬件到linux驱动到AI的端到端应用,对我来说是个不小的工程,由于个人只有业余时间弄,因此进度较慢,感兴趣的同学们关注一下吧!
当然了,特别感兴趣的同学也可以直接参与进来一起开发,在上面架构图中的每个环节都可以,比如懂硬件开发,我们就一起设计电路,选型芯片,设计参数指标,比如懂linux,我们就一起移植volumio这样的系统,优化各种音频IC的控制方案,懂AI的我们就一起微调大模型。。。(总之我全程参与~主打一个陪伴式开发
),最终我将过程整理出来作为教程,造福广大网友!
这里的基础版本我计划开源,并且每个部分的设计原理以及参数计算(比如芯片手册带读、运放参数计算,噪声估计,三极管静态动态分析等等啥的,软件部分可能会用到linux驱动开发,linux应用开发以及外设控制,最重要的就是AI部分的开发了,设计图像处理,大模型微调以及MCP开发等等。。。)我都会以教程的方式分享给大家,稍微有点基础的同学跟着就能走完整个流程!
好了,话不多说,我去画板子去了!下次见!bro~(只能周末等娃睡着才有时间研究研究,日常拖更~下次见~)