原创 STM32/D12 U盘是如何枚举成功的? (原创)

2008-10-22 18:58 7258 10 10 分类: MCU/ 嵌入式

这里给出的两个设备枚举过程,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


差别在于STM32已经实现完善,BOTSCSI协议均实现,且可以当一个读卡器使用;而基本D12U盘仅仅是实现的枚举相关部分,BOTSCSI协议未实现;


 


转载请注明出处:青藤门客播报站,http://blog.ednchina.com/walnutcy/


 


先看下SETUP数据包的格式吧,都为8个字节长,具体定义如下诸表:


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


670a0619-4caf-418d-85c0-a4930976ecda.JPG 




Table 9-3. Standard Device Requests




 d4f00174-4394-4f1a-9d7a-72ba6ec48634.JPG


 

a260bba7-a8f6-469a-9455-9c3a2f135dd2.JPG


 

没有废话,下面就分析下在枚举的过程中PC机发给Device的数据,


=======================================


STM32 USB Data


//  这里的数据都是PC机发送给Device器件的


80 06 0001 0000 0040  => GET_DESCRIPTOR,


      // 因为设备描述符的长度不等,这里取一包用以更具体地判断,


00 05 0100 0000 0000  => SET_ADDRESS, Device的地址设置为0010


80 06 0001 0000 0012  => GET_DESCRIPTOR, Device描述,


      // 注意,这里的18字节长,是第一次取设备描述时Device告诉PC的。


80 06 0002 0000 0009  => GET_ DESCRIPTOR , Configuration Initial描述,


 // 注意,这里的主要目的在于得到Device的配置信息的确切长度,便于后边应用。// 在建立过程中,有多处都是有两次取设备相关描述信息的,两处都只是长度不同,详加注意就会发现,后面的那个长度才是我们写的Device固件中的实际长度.


80 06 0003 0000 00FF  => GET_ DESCRIPTOR , String描述,


80 06 0303 0904 00FF  => GET_ DESCRIPTOR , String的第3个描述,


      // 注意,0904language ID, PC是在上一次取String描述时得到的,后边的同。


80 06 0002 0000 00FF  => GET_ DESCRIPTOR , Configuration 的完整描述,


80 06 0006 0000 000A


80 06 0003 0000 00FF


80 06 0203 0904 00FF


80 06 0003 0000 00FF


80 06 0203 0904 00FF


80 06 0001 0000 0012


80 06 0002 0000 0009


80 06 0002 0000 0020


80 06 0003 0000 0002


80 06 0003 0000 0004


80 06 0303 0904 0002


80 06 0303 0904 001A


00 09 0100 0000 0000  => SET_CONFIGURATION 为第1


A1 FE 0000 0000 0001


 


 


 


D12 USB Data //  这里的数据都是PC机发送给Device器件的


//=======================================


Serial Baud rate is 57600


Build date : Oct 22 2008 - 09:41:09


type ? for help


\>Find Pdiusbd12, chip id = 0x1210


80060001-00004000


00050100-00000000


80060001-0000<?xml:namespace prefix = st1 ns = "Tencent" />1200


80060002-00000900


80060002-0000FF00


80060001-00001200


80060002-00000900


80060002-00002000


00090100-00000000


A1FE0000-00000100


A1FE0000-00000100


A1FE0000-00000100


80060001-00004000


00050200-00000000


80060001-00001200


80060002-00000900


00090100-00000000


80060001-00004000


00050100-00000000


80060001-00001200


80060002-00000900


00090100-00000000


80060001-00004000


00050200-00000000


80060001-00001200


80060002-00000900


00090100-00000000


 


 

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条