0

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

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 时,我得到以下信息: Linux 现在而不是01命令00发送68A8因此设备什么也不做。

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

4

1 回答 1

0

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

于 2015-03-23T08:41:24.207 回答