XMOS USB数字界面
简介
基于XMOS的xCore-200系列中的XU208-128-QF48芯片设计的USB音频数字界面,实现了USB到I2S信号的转换。
简介:基于XMOS的xCore-200系列中的XU208-128-QF48芯片设计的USB音频数字界面,实现了USB到I2S信号的转换。开源协议
:CC-BY-NC 3.0
描述
2023/2/7:
附件中添加固件(xu208_audio_firmware.bin),支持192kHz/32bit PCM,不支持DSD,有条件的可以直接烧录到flash里使用。
2023/2/19:
第一版附件(xu208_audio_firmware.bin,已从附件中删除),引脚定义与PCB标注的不一致,实际引脚定义如下
第二版固件(xu208_audio_firmware_ver2.bin),修正了上述问题,引脚定义与PCB标注的丝印一致。
这是一个采用XMOS XU208制作的USB转I2S音频接口界面,支持32bit位深/192kHz采样率,理论最高支持PCM 32bit/768kHz和DSD512模式(我偷懒没做,要修改固件)。使用4层板工艺,大小4CM×2.2CM,应该是目前体积最小的数字界面。
鉴于市面上售卖的大多数是Amanero板型,不仅板子面积大,而且还使用了笨重的USB Type-B接口,因此想要自己做一个小体积的C口数字界面。之所以选择XMOS是因为只有这个芯片的资料是开源的,意大利方案不开源,CMedia的CM6631A方案太老,并且这两个BOM面积也比较大,而Saivtech的SA9227同样不开源,至于ComTrue的CT7601则不支持使用外部时钟。
网上有制作成功的先例但是不多,现在已经被Amanero方案抢占了风光,但是综合而言XMOS的可开发性还是挺强的,这个芯片的资料官方全部开源,甚至手把手教学。原理图参照市面上多种USB数字界面的结构,设计成子卡的形式,方便与不同的板子连接。
因为是搭配我的数字D类功放使用的([Hi-Res]基于TAS5825M的D类数字功放),我制作的数字界面仅支持32bit/192kHz的PCM,不支持DSD模式,但是理论上修改固件就能实现支持。如果有需要还可以添加音频输入端口,这是市面上售卖的绝大部分数字界面都做不到的。
原理图说明:
主芯片使用QFN48封装的XU208-128-QF48-C10,是目前能搞到的体积最小的数字界面芯片,内建高速USB2.0 PHY,简化电路设计。
该芯片需要3.3V的IO电压和1.0V的核心电压进行供电,3.3V电压从LDO取得,核心电压则使用DC-DC方案,减小系统功耗。
搭配的时钟是Accusilicon的AS318B,2520封装,价格实惠,性能可靠,关键是体积够小,完美符合要求。
上电复位(POR)电路使用的是NCP303LSN09T1G,但鉴于立创没货,使用BU4209G TR替代,如果有更好的替代方案请在评论告诉我。
固件使用SPI NOR Flash进行存储,型号不太重要,大部分都是通用的,我这里选择便宜大碗的ZD25WQ80BTIGT,8Mbit容量,但是实测我的固件也就27kb,也就是说你换成512Kbit的Flash也是能工作的。注意XU208支持SPI和QSPI flash,两种不同协议的flash对接线方式和软件代码都有要求,需要自己详细对照手册和例程。
输出端使用2.0mm的2×10pin排针,但是感觉还是不太满意,如果有更好的连接方式也在评论区告诉我。
固件制作说明:
所有的资料官网上都有,需要自己注册一个XMOS账号,包括开发工具,软件库,例程和教程都在官网上有,自己对着教程折磨就行了。
软件写好后需要自己写一个SPI spec文件,具体网上能搜到就不说了,然后在Flash configurationbin中选择输出到xxx.bin文件,这个就是固件。其中还要指定你的SPI spec文件,设置启动区空间大小(比固件体积大就行,实在不够把flash空间全分配进去),Other XFlash Option里必须加--noinq(用于使用第三方工具烧录),可选加--verbose(查看生产flash的过程是否有报错)。
固件烧录教程:
烧录固件并不需要官方的XTAG调试器和因此XTAG接口。直接使用Flash编程器(例如CH341A编程器),夹住flash去烧就是了。要注意烧录过程要把XMOS设置成复位状态,自己想办法,不然flash可能会被占用而无法烧录。
初版存在的问题:
1、USB反接不识别,可能是DP/DN线阻抗寄了,现已修改,但能不能用还有待考证。
2、两个机械孔开成4mm了,本来应该设计成3mm的,现已改正。
可能需要大家修改的地方:
1、输出端的2.0mm排针,换成2.54mm的可能更符合大众需求,或者有更好的方式在评论区交流一下。
2、如果不希望从USB取电,而是自己额外供电,把图中的R7断开即可,然后在排针VIN端供电(不要超过5V)
附件里有datasheet和最简单的教程,更详细的教程需要自己搜或者去XMOS论坛提问。
常年不看私信,所以你私信问的问题很可能不会有答复,建议在评论区交流。
评论