用于嵌入式设备的USB – 设计设备驱动程序/协议栈

我的任务是为嵌入式设备编写设备驱动程序,该驱动程序将通过SPI接口与微控制器通信.最终,USB接口将用于从外部下载更新的代码并在验证阶段使用.

我的问题是,有没有人知道一个好的参考设计或文档或在线教程,它涵盖了嵌入式系统中USB协议栈/设备驱动程序的实现/设计?我刚刚开始阅读650页的USB v2.0规范,目前有点令人生畏.

就像一个FYI,我使用的微控制器是飞思卡尔9S12.

标记

根据goldenmean的(-AD)评论,我想添加以下信息:

1)嵌入式设备使用自定义执行程序,不使用COTS或RTOS.

2)设备将使用中断来指示数据已准备好从设备中检索.

3)我已经阅读了一些关于Linux的文档,但由于我对Linux一点都不熟悉,所以目前它并不是很有用(尽管我希望它会很快).

4)设计方法,至少现在,它为USB设备编写设备驱动程序,然后USB协议层(I / O)将驻留在设备驱动程序之上以解释数据.我认为这将是最好的方法,虽然我可能是错的.

编辑 – 一年后

我只想分享一些项目,然后再从我的脑海中消失,以防我再也无法在USB设备上工作.在开发代码并将其启动并运行第一个时,我遇到了一些障碍.

我遇到的第一个问题是,当USB设备连接到主机(在我的情况下为Windows)时,主机发出重置请求. USB设备将复位并清除中断使能标志.我没有阅读足够的文献知道这种情况发生了,因此我从未收到过设置请求中断.我花了很长时间来弄明白这一点.

我遇到的第二个问题是没有正确处理Set_Configuration的设置请求.我正在处理它,但我没有正确处理请求,因为当设置请求进入时USB设备没有发送ACK.我最终通过使用硬件USB协议分析仪找到了这个.

我遇到了其他问题,但这些是我花了很长时间才弄明白的两个最大的问题.我不得不担心的另一个问题是大端和小端,飞思卡尔9S12与USB数据格式(英特尔).

我最终构建了USB设备驱动程序,类似于我过去所做的UART设备驱动程序.我已将代码发布到以下URL.

http://lordhog.wordpress.com/2010/12/13/usb-drive

我倾向于使用很多结构,所以人们可能不喜欢它们,因为它们不像使用#defines那样是门户(例如,MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20),但我喜欢它们,因为它使代码对我来说更具可读性.如果有人对此有任何疑问,请随时发送电子邮件,我可以尝试给它一些见解.只要您知道要关注哪些方面,“USB Complete:开发人员指南”这本书就很有帮助.这是一个简单的应用程序,只使用低速USB.

我使用的是 USB Complete by Jan Axelson的早期版本.确实非常完整.

从编辑评论:

Now in its fourth edition, this developer’s guide to the Universal Serial Bus (USB) interface covers all aspects of project development, such as hardware design, device firmware, and host application software.

相关文章
相关标签/搜索