20楼#
发布于:2004-08-23 12:36
你用的是什么版本的bushound?我曾经用3.0的是看不到的,换5.0就能看到了!
|
|
21楼#
发布于:2004-08-23 12:50
指示灯一直没有反应吗?如果是这样,主机显示找到新设备的信息吗?
如果没有,看一下d+是什么状态,我怀疑你的主机根本就没找到设备. |
|
22楼#
发布于:2004-08-23 15:17
to metalwing: 我做的是232转usb的设备,我先插上了移动硬盘,然后在那个口又插上了我的板子。在BUSHOUND里什么也看不到了。
likeddk & wly76: 但是主机能发现设备,只要插上电缆就能发现。即使不插上电源。 第一次上电时,指示灯曾经闪过三次。在调C程序的时候从来没有亮过。在调一个汇编程序的时候,它是闪几下就一直亮着。 我以前用5.0总是重启,我不敢用了。 |
|
23楼#
发布于:2004-08-23 21:05
灯闪三次是枚举前的指示,灯长亮说明枚举成功,平常情况是这样,你现在可以试着通过主机向设备发送数据,用1端点,设备把收到的数据
原样或作有规律变化返回,用主机接收,只要成功,usb主体就成功了 祝你好运 |
|
24楼#
发布于:2004-08-23 21:15
那个有反映的是汇编的程序,C的程序可是一点反映也没有。
而这个汇编的程序,最后一点我没看到它发送端点描述符,接口描述符的程序。仅仅有配置的。程序如下: GET_DESCRIPTOR: MOV R0,#3AH ;wLength MOV @R0,#10H MOV R0,#33H MOV A,@R0 CJNE A,#01H,GET_DESCRIPTOR1 MOV R0,#3BH ;wCount MOV @R0,#12H MOV R0,#3CH ;设置数据指针 MOV @R0,#00H INC R0 MOV @R0,#HIGH DeviceDescr INC R0 MOV @R0,#LOW DeviceDescr AJMP GET_DESCRIPTOR_EXIT GET_DESCRIPTOR1: CJNE A,#02H,GET_DESCRIPTOR2 MOV R0,#3BH ;wCount MOV @R0,#09H MOV R0,#3CH ;设置数据指针 MOV @R0,#00H INC R0 MOV @R0,#HIGH ConfigDescr INC R0 MOV @R0,#LOW ConfigDescr AJMP GET_DESCRIPTOR_EXIT GET_DESCRIPTOR2: CJNE A,#03H,GET_DESCRIPTOR23 MOV R0,#32H MOV A,@R0 CJNE A,#00H,GET_DESCRIPTOR21 MOV R0,#3BH ;wCount MOV @R0,#03H MOV R0,#3CH ;设置数据指针 MOV @R0,#00H INC R0 MOV @R0,#HIGH USBStringLanguageDescription INC R0 MOV @R0,#LOW USBStringLanguageDescription AJMP GET_DESCRIPTOR_EXIT GET_DESCRIPTOR21: CJNE A,#01H,GET_DESCRIPTOR22 MOV R0,#3BH ;wCount MOV @R0,#0FH MOV R0,#3CH ;设置数据指针 MOV @R0,#00H INC R0 MOV @R0,#HIGH USBStringDescription1 INC R0 MOV @R0,#LOW USBStringDescription1 AJMP GET_DESCRIPTOR_EXIT GET_DESCRIPTOR22: CJNE A,#02H,GET_DESCRIPTOR23 MOV R0,#3BH ;wCount MOV @R0,#0FH MOV R0,#3CH ;设置数据指针 MOV @R0,#00H INC R0 MOV @R0,#HIGH USBStringDescription2 INC R0 MOV @R0,#LOW USBStringDescription2 AJMP GET_DESCRIPTOR_EXIT GET_DESCRIPTOR23: ACALL RESERVED RET GET_DESCRIPTOR_EXIT: SETB PSW.5 ACALL USB_SUBMIT RET ;*********get_configuration******** GET_CONFIGURATION: MOV R0,#41H MOV A,@R0 JZ GET_CONFIGURATION1 MOV A,#01H SJMP GET_CONFIGURATION2 GET_CONFIGURATION1: MOV A,#00H GET_CONFIGURATION2: MOV R0,#30H MOV @R0,A MOV R0,#3AH ;wLength MOV R1,#3BH ;wCount MOV @R0,#01H MOV @R1,#01H ;设置数据指针 MOV R0,#3CH MOV @R0,#30H ;用R3来保存当前数据指针偏移量 INC R0 MOV @R0,#00H ;用R4来保存当前数据指针基址高字节 INC R0 MOV @R0,#00H ;用R5来保存当前数据指针基址低字节 CLR PSW.5 ACALL USB_SUBMIT RET ;*********set_configuration******** SET_CONFIGURATION: MOV R0,#30H MOV A,@R0 JNZ SET_CONFIGURATION2 MOV R0,#41H ;configuration MOV @R0,00H MOV R0,#3AH MOV @R0,#00H ACALL USB_SUBMIT MOV A,#0D8H ACALL D12_COMMAND MOV R0,#32H MOV A,@R0 JNZ SET_CONFIGURATION1 MOV A,#00H ACALL D12_DATA_W SJMP SET_CONFIGURATION_EXIT SET_CONFIGURATION1: CJNE A,#01H,SET_CONFIGURATION_EXIT MOV A,#01H ACALL D12_DATA_W MOV A,#0D8H ACALL D12_COMMAND MOV A,#00H ACALL D12_DATA_W SJMP SET_CONFIGURATION_EXIT SET_CONFIGURATION2: CJNE A,#01H,SET_CONFIGURATION3 MOV R0,#3AH ;wLength MOV R1,#3BH ;wCount MOV @R0,#00H MOV @R1,#00H ;设置数据指针 MOV R0,#3CH MOV @R0,#30H ;用R3来保存当前数据指针偏移量 INC R0 MOV @R0,#00H ;用R4来保存当前数据指针基址高字节 INC R0 MOV @R0,#00H ;用R5来保存当前数据指针基址低字节 CLR PSW.5 ACALL USB_SUBMIT MOV A,#0D8H ACALL D12_COMMAND MOV A,#00H ACALL D12_DATA_W MOV A,#0D8H ACALL D12_COMMAND MOV A,#01H ACALL D12_DATA_W MOV R0,#41H ;configuration MOV @R0,0FFH SJMP SET_CONFIGURATION_EXIT SET_CONFIGURATION3: ACALL RESERVED SET_CONFIGURATION_EXIT: RET GET_INTERFACE: MOV R0,#30H MOV @R0,#00H MOV R0,#3AH ;wLength MOV R1,#3BH ;wCount MOV @R0,#01H MOV @R1,#01H ;设置数据指针 MOV R0,#3CH MOV @R0,#30H ;用R3来保存当前数据指针偏移量 INC R0 MOV @R0,#00H ;用R4来保存当前数据指针基址高字节 INC R0 MOV @R0,#00H ;用R5来保存当前数据指针基址低字节 CLR PSW.5 ACALL USB_SUBMIT RET SET_INTERFACE: MOV R0,#32H MOV A,@R0 JNZ SET_INTERFACE1 MOV R0,#33H MOV A,@R0 JNZ SET_INTERFACE1 MOV R0,#3AH ;wLength MOV R1,#3BH ;wCount MOV @R0,#00H MOV @R1,#00H ;设置数据指针 MOV R0,#3CH MOV @R0,#30H ;用R3来保存当前数据指针偏移量 INC R0 MOV @R0,#00H ;用R4来保存当前数据指针基址高字节 INC R0 MOV @R0,#00H ;用R5来保存当前数据指针基址低字节 CLR PSW.5 ACALL USB_SUBMIT SJMP SET_INTERFACE_EXIT SET_INTERFACE1: MOV A,#40H ACALL D12_COMMAND MOV A,#01H MOV A,#41H ACALL D12_COMMAND MOV A,#01H SET_INTERFACE_EXIT: RET StandardDeviceRequest: AJMP GET_STATUS AJMP RESERVED;//clear_feature, AJMP RESERVED; AJMP RESERVED;//set_feature, AJMP RESERVED; AJMP SET_ADDRESS AJMP GET_DESCRIPTOR AJMP RESERVED;reserved, AJMP GET_CONFIGURATION AJMP SET_CONFIGURATION AJMP GET_INTERFACE AJMP SET_INTERFACE AJMP RESERVED; AJMP RESERVED; AJMP RESERVED; AJMP RESERVED; DeviceDescr: DB 12H DB 01H DW 1001H DB 0dcH DB 00H DB 00H DB 10H DW 0471H DW 0666H DW 0001H DB 00H DB 00H DB 00H DB 01H ConfigDescr: DB 09H DB 02H DW 2000H DB 01H DB 01H DB 00H DB 0a0H DB 32H USBStringLanguageDescription: ;//sizeof(USBStringLanguageDescription), ;DB 03H DB 03H DB 09H DB 04H USBStringDescription1: ;sizeof(USBStringDescription1), ;DB 0FH DB 03H DB 'C' DB 0H DB 'y' DB 0H DB 'p' DB 0H DB 'r' DB 0H DB 'e' DB 0H DB 's' DB 0H DB 's' DB 0H DB ' ' USBStringDescription2: ;sizeof(USBStringDescription1), ;DB 0FH DB 03H DB 'C' DB 0H DB 'y' DB 0H DB 'p' DB 0H DB 'r' DB 0H DB 'e' DB 0H DB 's' DB 0H DB 's' DB 0H DB ' ' END 他用的是cypress的片子,我用的d12,字符串描述是不是给我改成飞利浦就行了。 |
|
25楼#
发布于:2004-08-23 21:23
你在线很好,你贴的程序完整吗,我希望看到完整的程序,我做过c的
不过汇编我很熟,邦你仔细看一下,希望能帮上忙,弹片机是什么型号 usb是什么型号. |
|
26楼#
发布于:2004-08-23 21:57
你跑哪去了,我不等你了,想到什么就去试一下,另外告诉我,发现设备后你装驱动了吗,装完后有什么情况,明天见.
|
|
27楼#
发布于:2004-08-24 09:30
1.GoodLink。GoodLink是靠一个引脚接发光二极管实现的。在 USB设备枚举时LED指示灯将立即闪亮;当PDIUSBD12被成功枚举并配置时, LED指示灯将会始终亮;经过PDIUSBD12的USB数据传输过程中, LED将一闪一闪,传输成功后LED熄灭;在挂起期间,LED熄灭。这种特性可以使我们知道 PDIUSBD12的状态,方便电路调试。
2.单片机的中断应设置为电平触发;中断后一定要读上次传输状态寄存器(命令40-45H),以清 除中断寄存器中的中断标志。这样,PDIUSBD12的中断输出才能变回高电平,这一点非常重要。 3.在接收到Setup包后,一定要调用ACK set up命令重新使能端口0。 4. 在向IN端点写完数据后,一定调用Val i date Buffer(命令FAH),指明缓冲区中的数据有效,可以发送到主机。 5 当读完数据后,一定调用Clear Buffer(命令F2H),以保证可以接收新的包。 6 可以通过调用Read Chip ID(命令FDH)检查PDIUSBD12是否工作。该命令要读两个字节数 据。 USB初始化过程为: ① Set Address Enable; ② Set Endpoint Enable(此时LED亮); ③ Disconnect; ④ delay(1~2 s); ⑤ Connect(即用43h参数调用Set Mode,此时LED灭); ⑥ Read Interrupt Register。 在调试USB单片机程序时,还要特别注意Win dows对USB 设备的枚举顺序: ① GetDeviceDescriptor。主机主要对Length域感兴趣,发送内容一定要正确,特别是第 2字节type一定为0x01,即Device;否则,主机将不响应,或 者再重复2次后放弃。可检查一下对EP0的RX、TX的设置次序。 ② SetAddress。一般为02或03。 ③ 连续3次GetDeviceDescriptor,读取全部设备描述符,一般为 18 B,分为多次传输。如果不正确,主机将不响应或重复2次后放弃。 ④ GetConfigDescriptor。注意第2字节一定为0x02,即config 。 ⑤ GetStringDescriptor(可能没有),根据在设备描述符中是否有 String索引而定。一般先读取LanguageID,再读取product string。 ⑥ 读取全部ConfigDescriptor,次数根据描述符的大小决定(端点个数不同,描述符大小不同),如 果不正确,主机将不响应或再重复2次后放弃。 ⑦ 如果以上步骤都正确,主机将找到新设备,提示安装驱动程序;否则找到未知设备,不可用。 安装驱动程序后,以后的每次PlugIn,枚举次序与以上步骤略有不同,之后会有 SetConfiguration、GetConfiguration和GetInterface等调用。 关注你的结果。 |
|
28楼#
发布于:2004-08-24 09:54
装过驱动,但是每次都跳回到系统的usb驱动的目录下。然后提示有错误,无法安装成功。
我把程序发到你的信箱里了 |
|
29楼#
发布于:2004-08-24 10:12
没收到
|
|
30楼#
发布于:2004-08-24 10:25
油箱:ceo@soundwel.com.cn
|
|
31楼#
发布于:2004-08-24 11:45
你不是说那个邮箱中毒了吗,我发到ytj_22去了。
|
|
32楼#
发布于:2004-08-24 12:07
我没有说过,后边的油箱不是我的,你搞错了。
|
|
33楼#
发布于:2004-08-24 14:07
我已经重发了,
我在网上遇到聊usb的一个人,我问他是不是wly76,他说是,上当了! :mad: |
|
34楼#
发布于:2004-08-24 14:37
收到,正在看,程序写得不错,结构化很好,祝我好运吧,能看出一点对你有用的东东来 :cool:
|
|
35楼#
发布于:2004-08-24 17:40
调试出现的问题:int 脚接10k电阻到VCC,在中断来之前应该是为高呀。为什么我一插上51(无固件程序) ,还没有中断产生。int 脚就为低呢。
|
|
36楼#
发布于:2004-08-24 17:43
另外:固件程序也不能进入到中断,会是什么原因呢。
|
|
37楼#
发布于:2004-08-24 22:08
to lhaih
int 脚上电为低,据说是D12的一个bug,只要上电后读一下中断寄存器,int就会变高的了。 |
|
38楼#
发布于:2004-08-25 11:57
谢谢!likeddk
已经ok了。int脚读完后位高。 我在中断的入口,放了一个指示灯,进入中断才点亮。 灯是亮了,可是这时候我只插上了电源,还没有插电缆。主机不可能发数。应该没有中断产生才对呀!why? |
|
上一页
下一页