路由器的串口只输出垃圾

逆向工程 硬件 串行通讯 协议
2021-06-10 08:33:29

我正在尝试对 2Wire ADSL 调制解调器/路由器进行逆向工程,主要用于练习。我打开它并找到了一个串行端口(已经有了一个方便的标头)但是我没有从中获得任何有用的数据,只有胡言乱语。该设备确实可以工作(足以显示其 Web UI),只有这个端口给我带来了麻烦。

破译引脚

为什么我很确定这是正确的引脚排列:

  • 板上任何地方都没有其他引脚/焊盘输出任何看起来像数据的东西
  • 如果我短接 Tx 和 Rx,或连接到我的终端和垃圾邮件空格键,它无法启动(LED 保持红色)
  • 一个 NC 引脚在示波器上看起来与未连接时相同(轻微噪音,而不是稳定的 0V 或 3V)

我试过的:

  • 几种波特率:1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, 921600, 921600,
  • 奇偶校验和停止位设置的各种组合
  • 将其连接到 USB FTDI 适配器
  • 将其连接到 Raspberry Pi 的串行引脚
  • 向 Tx 添加上拉和下拉电阻
  • 在硬件和软件中反转 Tx 信号
  • 保持串行接地未连接

不管怎样,进来的数据都是乱码,或者什么都没有。

在我的范围内,它绝对看起来像数据,在通电时在 0V 和 +3.3V 之间跳跃约 1/4 秒,然后转到 +3.3V 并保持在那里。

信号分析

但我似乎无法找到任何设置和连接的组合来给我任何连贯的输出。我错过了什么吗?

(为了记录,我确实拥有这个调制解调器。)

2个回答

如果这是数据,那么应该有一个公共时钟,上升/下降沿信号都在该时钟的各个滴答上。

我将示波器输出的下半部分水平缩放 500%,并让 gimp 在其上覆盖一个网格,调整网格的宽度和偏移,直到我发现看起来像是时钟的东西(单击图像查看它是全尺寸的):

在此处输入图片说明

所以是的,这可能是串行数据。而且,如果我正确理解“10 us”显示,您的白色网格虚线相距 10 us,这意味着我的网格线相距 1.6 us,这意味着比特率应该在 1/0.0000016=625000 波特附近,即与您的比特率不同,以防止它们工作。如果可以,请尝试将比特率设置为更接近该值的值。

尽管如此,即使您使用正确的比特率,我也看到该信号有问题。在某些情况下,信号上升沿和下降沿的斜率太平了 - 请参阅绿色标记。并且有看起来像线路噪声的尖峰(红色标记)。在我看来,这条数据线上的电容似乎太大了。这可以解释平坦的斜率 - 串行驱动器无法输出足够的电流来提高对电容的信号 - 它也可以解释红色标记 - TX 上的短脉冲甚至无法提高电压到它应该的值。

但是,我在这里有点超出我的深度。也许EE 堆栈交换中的友好人员可以帮助解决这个问题。

您的信号质量非常差:相对于比特率,您的上升和下降时间太慢。如果信号确实如您的示波器图所示,并且这不仅仅是一个测量问题,那么您无法从中获得相干数据也就不足为奇了。相对于波特率,串行端口信号应该具有非常清晰和明确定义的上升和下降时间。

首先,尝试获取尽可能干净的范围跟踪。放大更多 - 在您使用的水平时基上,随着那些杂乱的脉冲,很难很好地了解正在发生的事情。然后,确保您在探头上使用示波器的 10x 模式,并且所有负载功能(例如 75Ω 终端)都已关闭。确保您的探头接地牢固,并且 TX 线上除了您的示波器之外没有其他任何东西。然后,再次测量。你用的是什么范围?

假设这是一个标准的异步串行信号,应该有一个从高到低的转换来标记每个字节的开始(起始位)。对于连续传输,这些应该均匀地间隔开。看看你的顶部情节,它看起来可能是这种情况,但我很难将这样的网格与您的底部图对齐。尝试尽可能提高信号质量,然后放大捕获的稀疏(大部分为零)部分,看看是否可以确认这样的模式。如果这是ASCII,你应该可以找到一些空格字符,它们是0x20,应该用位序列0000001001表示(如果启用奇偶校验,则为000000100x1,如果有2或1.5个停止位,则再附加1或一半分别)。如果您找不到均匀间隔的起始位转换,那么这可能不是标准的 UART 输出。

无论哪种方式,一旦您解决了信号完整性问题,事情就会变得更加清晰。

编辑:还要确保您的示波器探头得到适当补偿!