继this问题之后,我正在寻找一种可以连接两个USB主机的设备,同时仍然可以完全编程。我想要一些可以做到以下的事情:
伪装成任意USB设备
从PC获取输入,除了将其传递给其他主机外什么也不做。
我一直在寻找能让我这样做的微控制器(最好是预装配的),但到目前为止还是空白了。有没有人知道允许我这样做的控制器(最好是便宜的)?
答案 0 :(得分:1)
从PC获取输入,除了将其传递给其他主机外什么也不做。
从USB的角度来看,这是非感性的。 USB是基于主机的协议:除非主机首先请求,否则设备将永远不会发送数据。请记住,“主机”和“设备”在协议本身中具有特定含义;您可以将“主机”视为主设备,将“设备”视为从设备。这些角色被烘焙到USB控制器中。没有办法说服任何给定PC或外设中的标准USB控制器交换角色。 PC上的附加卡是USB设备控制器(让你的PC充当设备),但“便宜”不是我用来描述它们的一个词。
您真正要做的是创建一个USB设备到设备桥接器的东西。所以,好吧,你需要有两个USB(2.0)设备控制器(可能不是那么昂贵,一些微处理器已经有移动控制器)。然后你必须让他们传递一些有意义的东西。这真的很难,因为正如我上面提到的,主机必须告诉设备发送数据,并且可以随时将数据发送到设备。假设游戏控制器显示为HID设备(假设控制台不侦听某些奇怪的自定义描述符,并使用一些奇怪的自定义协议),则将使用中断管道来传输数据。保证以最低费率对该管道进行轮询。所以你让控制台以某种速率请求数据,这是不固定的,而主机作为游戏手柄以某种速率发送数据。这两个人不可能同步,所以你需要在你想要创建的小工具上使用某种大小合适的缓冲区,这会增加更多的$$和更多的复杂性。
USB也非常快。在高速(USB2.0)中,帧长度为125微秒。这意味着你必须以大约8KHz的速度完成请求,这与微控制器的时钟速度相比似乎很慢,但请记住,你必须一次完成所有其他工作。我不确定是否有一个业余爱好者级别的微控制器可以满足你所需要的一切,特别是你不需要自己动摇USB堆栈的那个。
答案 1 :(得分:1)
试试这个芯片 - > FTDI 232它们是协议芯片,它会将数据转换为i2c,spi,serial,无论你想要什么。好,简单又便宜:)。 FTDI公司,甚至更好的(vinculum),otg和你需要的一切,但我会从FTDI232开始。你只需要用自己喜欢的uC来完成你想要的工作。 ...另一方面,你必须做一些小板,也许是一些焊接,:)。祝你好运!
答案 2 :(得分:0)
您需要在设备中使用$$$$并在开发工作中使用$$$$$来实现您想象的方式。您最好告诉我们您想要模仿什么,如果有人已经为您做了,请查看here。如果没有,那么使用LUFA库和一些更大的USB AVR,它可以作为USB主机,并通过其他协议(I2C / SPI / UART)连接其中两个(一个作为USB客户端,另一个作为USB主机)。
答案 3 :(得分:0)
与此同时,此问题有很好的解决方案。将FaceDancer Library与该功能强大的软件所支持的一块板(即GreatFET One)一起使用,您将获得所需的一切:
GreatFET One具有两个USB连接器:第一个用于模拟任何类型的USB设备,而第二个用于转发通过第一个连接器接收/发送的所有请求/响应。
当然,此工具要求您知道要模拟的设备的USB协议。尽管有一些代码示例,但是自定义它们后,您仍然必须知道自己在做什么。