简单的USB主机堆栈

时间:2009-02-17 08:30:57

标签: c++ c embedded usb

我正在尝试使用Atmel处理器上的USB主机端口连接到单个USB设备。我有一个内存有限且没有操作系统的嵌入式系统。我想实现一个简单的专用主机来连接单个USB从设备。

有人可以指导我使用简单的USB主机吗?

处理器是Atmel AT91SAM9261S。

3 个答案:

答案 0 :(得分:1)

首先,如果我没记错,AT91SAM9261S上有OHCI usb controller,你需要实现至少简单的主机控制器驱动程序(你可以看看Linux实现)。根据您的设备将使用的传输类型,它可能不是很难 - 非常难:)没有简单的方法来实现USB堆栈。 实现控制器驱动程序后,您需要注意usb设备枚举部分,请查看USB spec的第9章。只有在此之后,您才能开始实现设备逻辑。

对于简化的用例,有很多代码可以省略,但没有好的usb背景很难确定什么是相关的,什么不是。

如果您正在寻找商业解决方案my company,可以提供一个解决方案。

答案 1 :(得分:1)

我使用了On-Time中的RTUSB-32堆栈。它是一个小的脚印堆栈,很容易集成到我们的环境中,文档很好。它们很好地抽象出所需的支持,因此它完全是平台和操作系统中立的,并且需要提供相对较少数量的钩子 - 即:它被很好地封装。

既然你得到了所有的源代码,你会发现代码并不是世界上构造得最好的代码,当然,如果需要的话,它可以在没有大量工作的情况下进行破译。在任何情况下,它基本上“正常工作”没有问题。我们已经在一些产品中运行了几年,并且只遇到了堆栈的一个兼容性问题,它在某些类型的USB 2.0集线器上并没有完全正确地进行自动发现。我们向他们发送了一个中心样本,他们在几天内就有了补丁。很难打败那个。总的来说,我认为这是一个很好的价值,当然还要坐下来从头开始编写这个东西。

答案 2 :(得分:0)

如果您的设备不必是主机,那么这将更加容易:-P,因为Atmel提供了USB设备的示例源代码。如果我是你,我会考虑在Atmel's AT91SAM third party页面上使用一个喜欢USB的RTOS,这可能需要Ilya建议的jungo USB堆栈。

如果您确实编写了自己的OHCI驱动程序,libusb可能有助于实现USB堆栈的上层。