我们这里有一个USB设备,上面有一个EZ-USB FX芯片,我们通过libusb-1.0
使用LibUsbDotNet
与它“对话”。使用Windows一切正常,但在Mono 3.12.1
下使用Ubuntu 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时我得到以下内容:
现在命令发送01
和00
而不是68
和A8
,因此设备不执行任何操作。
是否有人知道这可能是什么原因?为什么它会在Linux下发送错误的数据包?