我的任务是为嵌入式设备编写设备驱动程序,该驱动程序将通过SPI接口与微控制器通信。最终,USB接口将用于从外部下载更新的代码并在验证阶段使用。
我的问题是,有没有人知道一个好的参考设计或文档或在线教程,它涵盖了嵌入式系统中USB协议栈/设备驱动程序的实现/设计?我刚刚开始阅读650页的USB v2.0规范,目前有点令人生畏。
正如我们所使用的微控制器一样,飞思卡尔9S12。
标记
基于goldenmean的(-AD)评论,我想添加以下信息:
1)嵌入式设备使用自定义执行程序,不使用COTS或RTOS。
2)设备将使用中断来指示数据已准备好从设备中检索。
3)我已经阅读了一些关于Linux的文档,但由于我对Linux一点都不熟悉,所以目前它并不是很有帮助(尽管我希望它会很快)。4)设计方法,至少现在,它为USB设备编写设备驱动程序,然后USB协议层(I / O)将驻留在设备驱动程序之上以解释数据。我认为这是最好的方法,但我可能是错的。
编辑 - 一年后
我只是想在他们从我脑海中消失之前分享一些项目,以防我再也不会在USB设备上工作了。在开发代码并将其启动并运行第一个时,我遇到了一些障碍。
我遇到的第一个问题是,当USB设备连接到主机(在我的情况下为Windows)时,主机发出重置请求。 USB设备将复位并清除中断使能标志。我没有阅读足够的文献知道这种情况正在发生,因此我从未收到过设置请求中断。我花了很长时间来弄明白这一点。
我遇到的第二个问题是没有正确处理Set_Configuration的设置请求。我正在处理它,但我没有正确处理请求,因为当设置请求进入时,USB设备没有发送ACK。我最终通过使用硬件USB协议分析仪找到了这个。
我遇到了其他问题,但这些是我花了很长时间才弄明白的两个最大问题。我不得不担心的另一个问题是big-endian和little-endian,分别是Freescale 9S12和USB数据格式(Intel)。
我最终建立的USB设备驱动程序类似于我过去所做的UART设备驱动程序。我已将代码发布到以下网址。
http://lordhog.wordpress.com/2010/12/13/usb-drive
我倾向于使用很多结构,所以人们可能不喜欢它们,因为它们不像使用#defines那样是门户(例如,MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20),但我喜欢它们,因为它使代码对我来说更具可读性。如果有人对此有任何疑问,请随时发送电子邮件,我可以尝试给它一些见解。只要您知道要关注哪些方面,“USB Complete:开发人员指南”这本书就很有帮助。这是一个简单的应用程序,只使用低速USB。
答案 0 :(得分:5)
在为任何接口(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
-AD
答案 1 :(得分:3)
我使用的是USB Complete by Jan Axelson的早期版本。确实非常完整。
来自编辑评论:
现在是第四版,这个开发人员的通用串行总线(USB)接口指南涵盖了项目开发的所有方面,如硬件设计,设备固件和主机应用软件。
答案 2 :(得分:1)
我很好奇,你为什么选择9S12?我在以前的工作中使用它,并不高兴。
关于我唯一不喜欢的是8051.我在目前的工作中使用的是ARM CortexM3,它在各方面都比9S12更好(时钟更快,每个时钟工作量更多,功耗更低,更便宜,良好的gcc支持,32位与16位)。
答案 3 :(得分:0)
我不知道您计划使用哪种硬件,但假设其灵活,STMicro提供一系列具有USB / SPI支持的微控制器和可与其部件一起使用的C代码库。 - 我多年来一直使用他们的ARM7系列微处理器取得了巨大的成功。
答案 4 :(得分:0)
这是一个由德克萨斯大学教授Jonathan Valvano维护的优秀网站。他在那里教四门课程(三门本科,一门毕业),都是关于使用9S12微控制器。他的网站包含他用于所有课程的所有讲义,实验手册,更重要的是初学者文件。
该网站看起来像是从90年代开始,但只是挖掘一下,你应该找到你需要的一切。
答案 5 :(得分:0)
答案 6 :(得分:0)
我正在使用Atmel V71开展项目。处理器非常强大,在芯片上提供的大量高端连接中,USB引擎可以为480 Mhz或48Mhz(不是USB 3.0)设备或主机模式。这些工具是免费的,并附带了许多主机和设备USB示例项目,其中包含所有USB堆栈代码。它支持10个端点,所有传输都通过DMA完成,因此您可以将大部分处理器功能用于其他任务。 Atmel USB堆栈无需RTOS即可正常工作