【问题标题】:Wrong data transfered via USB control transfer in Linux/MonoLinux/Mono 中通过 USB 控制传输的错误数据
【发布时间】:2015-03-20 13:24:17
【问题描述】:

我们这里有一个 USB 设备,上面有一个 EZ-USB FX 芯片,我们通过libusb-1.0 使用LibUsbDotNet 与它“对话”。使用 Windows 一切正常,但在 Ubuntu 14.04 下使用 Mono 3.12.1 则不起作用。我做了一些调查和测试,发现它无法初始化设备,我们使用以下逻辑(这是来自我的测试程序,但“真正的逻辑”是等价的):

protected bool ResetDevice(UsbDevice Device)
{
    Console.WriteLine("First ensure that the EZ-USB 8051 is RESET (CPUCS=1)");
    if (!ControlTransfer(Device, new byte[] { 1 }))
        return false;

    Console.WriteLine ("Then allow the EZ-USB CPU to 're-enumerate' (CPUCS=0)");
    if (!ControlTransfer(Device, new byte[] { 0 }))
        return false;

    Console.WriteLine("Reset done...");
    return true;
}

public bool ControlTransfer(UsbDevice Device, byte[] data, short? value = null)
{
    int written;
    var setupPacket = SetupPacket(value);
    return Device.ControlTransfer(ref setupPacket, data, data.Length, out written);
}
internal UsbSetupPacket SetupPacket(short? value = null)
{
    var controlPacket = new UsbSetupPacket();
    controlPacket.Request = 0xA0;
    controlPacket.RequestType = 64;
    controlPacket.Value = value ?? 0x07F92;
    controlPacket.Index = 0;

    return controlPacket;
}

然后,我使用 USB 分析器来分析通过 USB 端口发送的命令。
使用 Windows 我得到以下信息:
这是正确的,正如您所看到的,可以使用设备重置,但是在使用 Linux 时,我得到以下信息: 现在命令发送68 和A8 而不是01 和00,因此设备什么也不做。

有人知道这可能是什么原因吗?为什么它在 Linux 下发送错误的数据包?

【问题讨论】:

    标签: c# mono usb libusb-1.0 libusbdotnet


    【解决方案1】:

    这似乎是 LibUsbDotNet 的一个错误(很可能是 THIS 一个),因为当前 trunk (v2.2.9) 的构建确实解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多