作为一个初学者,我也是最近两周多才接触usb通信的,在usb通信协议中最难理解的可能就是usb枚举过程。虽然网上也有这usb枚举过程的详细说明,
http://www.cnblogs.com/shangdawei/archive/2012/11/01/2749619.html,但是没有结合具体的程序或函数进行分析,对初学者来说还是比较难懂的。尤其是usb枚举过程时间有限,一旦超过规定时间,电脑将识别不到usb设备,因此调试usb枚举过程非常麻烦,你不可能在IDE中通过单步调试一步步观察上面网页中所述的步骤。如果你在同一个平台直接移植usb固件,当然不用担心这样的问题,因为usb枚举问题可能不会出现。这样你也省去学习usb枚举过程的麻烦,直接搞懂usb读写过程就行了。话虽如此但是我们还是有必要来学习一下它的枚举过程好么!以下是我将430单片机上的usb固件移植到C51上学习体会,usb芯片是D12.
1).首先在usb设备未插入电脑前,D12芯片INT_N引脚为低电平,C51外部中断标志IE0初始也为0,外部中断引脚丢失中断.
2). 当usb设备插入电脑,D12芯片将检测到D+和D-两根线的电平变化,INT_N复位拉高,同时D12中断寄存器的将产生新值,C51将读取这个中断寄存器的值 int_sta=Read_InR(); int_sta的值等于SUSPEND,即挂起状态,表示芯片可工作。
3).D12挂起之后将进入第一次中断,C51转向外部中断服务程序,继续读取最新的中断寄存器的值 int_sta=Read_InR(); 这时候 int_sta等于INT_BUSRE