[转载] USB设备流程
2018-07-06 09:53 Lyp_02 阅读(400) 评论(0) 收藏 举报Microsemi开发用来参考
来自 https://blog.csdn.net/suipingsp/article/details/30238891
USB设备内部都有USB的芯片和MCU(Micro CPU Unit)。 USB设备上电后,首先初始化(设备自身逻辑和USB芯片的初始化) 。连接PC后即可开始USB设备与主机的交互进程。
1,Firmware程序的基本框架
设备Firmware的工作往往采用前、后台的方,前后台通过中断标志位进行通信,中断标志位可设置成全局变量以简化设计。
前台程序:死循环。不断的检测标志位,判断是否有中断,有则进入到相应的时间处理函数中。如果有操作系统则会不止这么简单 。
后台程序:中断处理程序。读取中断标记,判断并处理中断事务(如传输错误、收到Setup包、收到令牌包、传输完成等),设置相应的标志位。
下面是一个基本的USB firmware的基本交互框架。
后台==== 前台=====
•中断处理函数(ISR) 循环{
• 读USB芯片的中断寄存器
• 清USB芯片中断 检测USB中断标志
• 判断中断类型 置中断标志位
• 中断事件处理
• 调用相应的请求处理函数
•======================= }
• ==================================
设备中数据的接收过程:USB芯片完成数据的解包和打包,存放在内部的缓存中,通过中断的方式告知MCU,MCU:完成数据包的分析和处理。
设备中数据的数据发送:MCU将数据写入USB芯片内部缓存,USB芯片接收到来自HOST的IN令牌包时,将缓存中的数据送到USB总线上。当发送完成后,通常USB芯片通过中断的方式告知MCU。
2,USB request处理过程
本节通过一次典型的Get Descriptor请求交互过程来描绘USB设备firmware和主机间的通信过程:
•设备收到SETUP令牌包---->引起USB芯片中断MCU,设置中断标志为SETUP
•设备收到SETUP数据包---->USB芯片接收数据包,并存放在断点缓存中,以ACK响应Host
•设备 Firmware中检测中断标志,进入到SETUP事件处理函数,读取并解析SETUP数据包,将设备描述符填入USB芯片缓存,等待发送完成
•设备收到IN令牌包--- >若此时MCU已经完成数据填充,则USB芯片将数据发回HOST,否则以NAK响应
•设备循环上一步骤,直至数据被发送完成
•HOST收到描述符,并以ACK响应USB设备--->USB芯片中断通知MCU此次传输完成,MCU设置USB芯片在收到下一个IN令牌包时回复ZLP。
•HOST发送IN令牌包--- >USB芯片自动回复ZLP数据包。
•HOST收到数据包,并回ACK-----> USB请求完成
浙公网安备 33010602011771号