代码之家  ›  专栏  ›  技术社区  ›  Quibblesome

没有软件,硬件就无法调试吗?

  •  7
  • Quibblesome  · 技术社区  · 16 年前

    免责声明:我(大部分)对硬件一无所知。这可能是我的问题。但是我发现很难接受硬件调试是不可能的,所以我只想得到一些第二意见。

    我们有个问题。其中某些操作(在运行时交换USB设备)可能会破坏USB集线器或USB板上的芯片(这是自定义硬件)。这是一个模糊的问题(看起来“吹牛”的程度可能会有点不同),问题表现为断断续续的时装,有各种各样的症状 非常 难以可靠地再现(通常是包的随机损坏)。

    这导致很难确定新报告的问题是由硬件故障引起的,还是实际上是软件中的一个错误。此后,我们在这些设备上实施了保护,但如果未受保护的设备与受保护的设备一起使用,则有可能污染(现在受保护的)设备。其中一个端口也没有受到保护,这意味着有人仍然可以“杀死”一个 应该 不小心使用了错误的端口,以确保安全。

    这样做的结果是,如果不完全更换所有硬件,就不可能分辨出我们的哪些设备遇到了这个问题(我们已经为大多数生产硬件咬紧牙关,但仍然有很多开发和质量保证硬件存在这个问题)。

    我想这是可能的,假设有一块硬件,人们可以使用某种硬件诊断工具来确定工具包是否有故障。我生活在一个梦幻的世界里吗?我的硬件部门告诉我,唯一能证明故障的测试是软件测试…但正如我所说,这些症状很难重现。因为我对硬件没有那么丰富的经验,我不知道这是否是唯一的答案。因此我向全世界发问。

    6 回复  |  直到 16 年前
        1
  •  6
  •   Tim Williscroft    16 年前

    内置测试设备用于执行内置测试

    咬一口

    (不涉及字节。)

    军事/航空设备有额外的硬件进行测试是完全、完全正常的。

    最初的IBM PC机内置了数量惊人的测试硬件。

    就你的设备而言,一个测试设备和一些统计分析可以做到这一点。 这可以在加密狗的硬件中完成,但坦率地说,使用一些软件会更容易。 使用两个背对背的USB到RS232串行转换器来制作USB环回设备。 发送大量数据、校验和数据包并测量错误率。

    我假设您的错误发生在输入-输出和输出-输入侧。

    真的,你的硬件人员需要看一些应用说明;USB 热插拔安全,如果做根据书。 网络上有一个很酷的例子,就是将USB芯片的连接光耦合到电路板上,防止这种情况发生。USB芯片与主机相连,由主机供电,与USB芯片的接口为SPI,SPI与主板的其余部分光耦合。

    至于你,筹码部分失灵了。受伤的设备可以正常工作几个月然后死亡。静电放电(“静电冲击”)可以做你描述的同样的事情。一个设备可能会被太小的震动伤害,你感觉不到。

    半导体中的电线和特征是微观的,容易被杂散电流损坏。 如果硬件设计基本正确的话,那么你所经历的问题的最主要原因可能是当设备被处理成插头/插头时发生了静电放电。你的设备有自己的电源,它的接地电压相对于USB电缆的另一端浮动,直到它被连接。

    希望这有帮助。

        2
  •  4
  •   Phil J. Laszkowicz    16 年前

    不,不是。

    许多硬件制造商从硬件测试开始。输入和输出(IO)只是一个评估电路流向的问题。考虑在布尔运算中软件和硬件都处理的抽象。

    硬件的可读性就差一点!

        3
  •  1
  •   Matt    16 年前

    归根结底,硬件的通信线路(最基本的)是通过各种管脚高低的。

    我有一个兄弟(在汽车技术行业),他用静电计测量引脚上的电压,以隔离问题所在(我在这个领域还不够聪明,无法更详细地了解他是如何做到的)。

        4
  •  1
  •   Douglas Leeder    16 年前

    你的问题是唯一已知的症状很难检测(USB流中的数据包损坏),你需要软件(在某种程度上)来检测它。

    如果你能弄清楚为什么数据包会损坏(坏电压?)也许你能用硬件检测到?

    否则,您需要某种健壮的测试工具包,以及发送/接收大量数据包以查找损坏的软件?

        5
  •  1
  •   Brian Carlton    16 年前

    不。这就是示波器和逻辑分析仪的用途。还有更专业的设备,如 USB testers .

        6
  •  1
  •   JustJeff    16 年前

    硬件越简单,对信号的访问越多,就越有可能以“纯硬件”的方式进行诊断。例如,如果您将一个简单的并行端口卡插入PCI插槽,那么在PCI总线上放置一个总线分析器和适配器的输出就相对简单了,并查看当卡被寻址时输出是否正确。但请注意,您仍然需要尝试从PCI总线访问该卡,这意味着(a)某种PCI总线模拟,这将是一大堆测试硬件中的一个,或者(b)一台廉价的现成PC,带有几行测试代码。

    但在频谱的另一端,假设您正在处理一个大型的fpga。你可以在一个现场可编程门阵列中获得大量逻辑,而且你不一定能访问你想要的所有测试点。我个人遇到过一个在fpga中嵌入串行端口的错误,在这种情况下,移位寄存器预加载寄存器的竞争条件有时会损坏一个字节。假设vhdl可以被重新设计以显示测试点,并收集了一堆作用域和分析器,但是从管理的角度来看,试图用软件挑出问题要划算得多。在正常使用情况下,每到一个蓝月亮,有关的虫子就会出现一次。我们反复考虑引起bug的条件,并优化测试代码,直到我们有了一个测试软件,可以每分钟重现bug 2-3次。在这一点上,我们实际上可以提供线索给vhdl的家伙,帮助他们解决问题迅速。

    长话短说,在一周内,一个硬件缺陷通过软件被烟消云散,而从相同的信息开始,只使用“硬件”可能不会更快,而且需要很多昂贵的测试设备。所以,是的,你可能不需要软件就可以做到,但和往常一样,这是一种权衡,你必须在软件数量和硬件数量之间找到合适的平衡点。