当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《用于嵌入式设备的USB-设计设备驱动程序/协议栈》经验,为你挑选了1个好方法。

我的任务是为嵌入式设备编写设备驱动程序,该驱动程序将通过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.



1> goldenmean..:

在为任何接口(USB,并行端口等)编写设备驱动程序时,需要开发的代码取决于是否有任何操作系统(OS),在该处理器/微控制器上运行的RTOS.例如,如果那将要运行说WinCE - 它将有自己的驱动程序开发工具包,并在设备驱动程序开发中遵循的步骤.对于像Linux,symbian这样的其他操作系统也是如此.

如果它将是一个普通的固件代码(无操作系统),它将控制处理器/微控制器,那么它就完全不同了.因此,基于上述任何一种情况,您需要阅读并理解: -

1.)处理器/微控制器开发板的硬件规格 - 注册文件,端口,存储器布局等.

2.)USB规格

3.)我很快发现了几个指针.谷歌是你的朋友! http://www.lrr.in.tum.de/Par/arch/usb/usbdoc/ - Linux USB设备驱动程序

http://www.microsoft.com/technet/archive/wce/support/usbce.mspx

-广告

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有