如何制定 Ultranet 协议?

逆向工程
2021-06-09 03:17:08

Ultranet 是一种音频协议,允许通过标准以太网电缆传输具有多个通道的低延迟音频。例如,您可能有一个 Midas 调音台,将音频数据包传输到舞台上的一系列个人混音器。

我在互联网上找不到它的文档,我怀疑它是第 1 层协议。因为它使用以太网硬件(电缆和插座等)而不是有线格式。我相信这一点的原因是,当我将 Macbook 插入录音机的 Ultranet 输出时,没有 IP,而 Wireshark 完全没有看到电线上的任何东西。我尝试使用非常宽的掩码设置手动 IP,但仍然一无所获。

我过去曾成功解码Mymix协议,即第 3 层。这在 Wireshark 中仅显示为数据包流......很简单。每个数据包都有一个标头和 6 个 24 位样本的有效载荷。

我猜这个过程可能是从电线上的示波器开始的?或者还有其他我应该调查的事情吗?(顺便说一句,我不知道如何使用示波器......我主要了解软件内容)。

是否有逆向工程线路协议的标准程序?

2个回答

是的,它类似于 2xAES3。数据基本上是 PCM,每对 8 个通道。http://www.diyaudio.com/forums/digital-line-level/261683-suggestions-please-16-channel-24-bit-digital-audio-recorder-3.html

物理 RJ45 引出线: 1:Ch 1-8 (TD+) 2:Ch 1-8 (TD-) 3:Ch 9-16 (TD+) 4:Vcc 5:Vcc 6:Ch 9-16 (TD-) 7:地线 8:地线

“通过 RJ45 供电”:Vcc 是 15 伏直流电(选择的引脚类似于以太网供电标准)。这来自内部开关模式 PSU,旨在为 P16-m 外部监控盒供电。没有说明指定每个连接器提供多少电流(P16-i 上有六个输出连接器)。P16-m 也可以由外部 PSU 供电,后面板显示“12v 300mA”。所以可以肯定地说,每个 P16-i 输出插座可以提供大约 4 瓦的功率。

需要注意的另一件事是,P16m 需要在 Vcc 引脚上消耗一些功率,以打开数据输出。一些实验发现,从Vcc到GND的5k6电阻不会将其打开;而 2k2 电阻器确实将其打开。所以 P16m 正在寻找大约 7mA 的电流消耗来打开输出。

差分信号:每个 P16-I 输出(1、2、3、6)通过一个 74LVC245 八进制缓冲收发器设备的一半馈送,用于仅输出模式。这些产生接近 5v 的峰值信号,在每对上进行差分驱动。

每对的数据速率约为 12.2MHz,包括 32 位数据 x 8 个通道 x 48kHz 采样率 - 换句话说,每秒 1.5 MB。两对意味着每秒有 3.0 MB 的原始数据。

32 位“样本”包括 24 位音频 + 8 位帧。成帧字节通常为 0x01,但偶尔为 0x09,表示“复帧”。这对于锁定正确的起始通道至关重要。实际上,WM8804 看到的真实数据速率就像“立体声 192kHz”。

24 位音频实际上是 20 位,我的设备上的 LS 4 位始终为零。其他设备(如 X32)可能具有不同的 ADC,因此行为不同。

差分信号可以通过“MagJack”和这样的电路接收:http ://tuck1s.blogspot.co.uk/2015/11/differential-line-receiver-for.html

出于我的目的,我想实时流式传输音频,并将其写入某个永久存储。我认为 XMOS StartKit 是最理想的选择。您可以在此处查看有关它们的更多信息:http : //www.xmos.com/products/boards#startkit 这些成本非常低,可从 Farnell、RS 等获得。

我已经编写了一些代码来解码并将信号存储到 SD 卡上。为了简单起见,我只写了信号的 MS 16 位。目前我正在以 WAV 格式进行流式传输并且可以正常工作。我可以将录制的信号加载到 Sonar X1 或 Audacity 中,音频显示效果很好。

我的代码在 GitHub 上免费提供:https : //github.com/tuck1s/UltranetReceiver 这还不完美 - 代码中标记了许多 TODO。

请注意以下几点: - 我们没有 Behringer 的“许可”,他们可能会告诉我们这是一个专有接口。然而,使用 DSO 解码非常简单,并且可以在盒子外部完成所有操作。- 我使用的 SDCard 代码以 4 位模式驱动 SD 卡。对于商业用途,您需要注册至少 1000 美元的 SD 卡协会 - 我使用的 FATFS 代码基于已发布的开源代码,最初位于http://elm-chan.org/fsw_e.html和这里的派生工作:https : //github.com/xcore/sc_sdcard

其他人已经提供了有关此特定协议的线索,因此我将只讨论解码协​​议的一般机制。您已经指定了“wire”,但这种通用方法也可以并且已经应用​​于光纤和 RF 协议。

制定调查计划

最好的开始通常不会被提及,但在实践中却非常重要。这一步是制定计划。您想了解有关协议的哪些信息?你打算用这些知识做什么?与您的情况一样,您所知道的可能包括协议的名称及其目的。它也可能是您可以收集或推断的任何线索。例如,您知道它是具有多个通道的低延迟音频。您是否拥有可以控制和观察的设备,或者您只是被动地倾听?是否有监管机构或标准机构可能拥有有关协议的文件?您是否寻找过专利或专利申请?是否有您可以阅读的具有类似目的的协议?

目视调查信号

人眼和大脑非常擅长模式识别,因此有用的第一步是将感兴趣的信号转换为视觉表示。对于有线 2 线连接,我通常会首先在线路上使用一个简单的万用表。这给出了可能存在哪些电压的粗略指示。这对人身安全和您可能连接的任何其他设备的安全都很重要。在这种情况下,由于它通过以太网布线,并且考虑到目的,它很可能与以太网电压兼容,并且可能使用 +/- 2.5V 的以太网电压。因此,我将使用的下一步是连接示波器。最简单和最典型的“示波器设置”只是电压随时间变化的图表。这可以提供很多见解。例如,是否使用了离散电压电平?如果是这样,多少(2、4、更多?)?信号似乎是打包的还是或多或少是连续的?信号变化之间的最短持续时间是多少?更高级的示波器还有其他有用的功能,例如频谱分析和/或 FFT 以及时间和电压测量。

尝试以已知方式修改信号

如果您有可以控制的设备,请尝试仅更改一件事,看看它如何影响输出信号。例如,尝试通过单个通道发送 1kHz 正弦波音频信号。现在通过 2 个通道发送相同的信号。尝试更改音频频率。尝试更改音频幅度。所有这些都可以引导您对协议有一些了解。

看看您是否可以以数字形式捕获信号

如果您可以忠实地将信号数字化并将其作为文件存储在计算机中,那么您就可以使用更多资源进行调查。您可以在计算机上进行频谱分析。您可以使用现成的或您自己的自定义软件在计算机上尝试有关调制类型、通道化等的理论。这对我们大多数人来说是有趣的部分!

测试你的理论

如果你认为你已经弄清楚了协议,并且如果你有可以控制的设备或至少可以观察到更多的样本,那么用这些数据测试你的理论。查看您的计算机实现的协议是否与您观察到的相符。理想情况下,您还可以构建自己的界面并假装是协议的一端或另一端。就音频设备而言,如果您不太正确,则不太可能伤害到任何东西。其他领域(例如车辆发动机控制)可能需要更加谨慎。看看您是否可以测试极端情况和错误条件。

分享你的结果

如果可以,并且有责任这样做,请考虑分享您的结果。很可能某个地方的某个人也有同样的兴趣。通过共享笔记,与单独工作相比,你们都会取得更大的进步。很多时候,我很幸运地在 github 或 sourceforge 等上找到了一个半生不熟的部分实现,这为我节省了大量时间。我也试图以同样的精神分享我的发现。

祝好运并玩得开心点!