lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:2561回复:38

LikeDDK 请进

楼主#
更多 发布于:2004-08-20 12:09
你在调试中有一步是:连续读控制输出缓冲的N个字节,读出来的就是C0 08 80 06 00 01 00 00 40 00,程序里是怎么写的。
是 D12_ReadEndpoint吗?
不胜感激!!




-----------------------------
给分
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-25 11:57
谢谢!likeddk
已经ok了。int脚读完后位高。

我在中断的入口,放了一个指示灯,进入中断才点亮。
灯是亮了,可是这时候我只插上了电源,还没有插电缆。主机不可能发数。应该没有中断产生才对呀!why?
LikeDDK
驱动牛犊
驱动牛犊
  • 注册日期2001-09-30
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-24 22:08
to lhaih
int 脚上电为低,据说是D12的一个bug,只要上电后读一下中断寄存器,int就会变高的了。
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-24 17:43
另外:固件程序也不能进入到中断,会是什么原因呢。
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-24 17:40
调试出现的问题:int 脚接10k电阻到VCC,在中断来之前应该是为高呀。为什么我一插上51(无固件程序) ,还没有中断产生。int 脚就为低呢。
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-24 14:37
收到,正在看,程序写得不错,结构化很好,祝我好运吧,能看出一点对你有用的东东来 :cool:
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-24 14:07
我已经重发了,
我在网上遇到聊usb的一个人,我问他是不是wly76,他说是,上当了! :mad:
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-24 12:07
我没有说过,后边的油箱不是我的,你搞错了。
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-24 11:45
你不是说那个邮箱中毒了吗,我发到ytj_22去了。
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-24 10:25
油箱:ceo@soundwel.com.cn
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-24 10:12
没收到
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-24 09:54
装过驱动,但是每次都跳回到系统的usb驱动的目录下。然后提示有错误,无法安装成功。

我把程序发到你的信箱里了
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
12楼#
发布于: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等调用。

关注你的结果。
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-08-23 21:57
你跑哪去了,我不等你了,想到什么就去试一下,另外告诉我,发现设备后你装驱动了吗,装完后有什么情况,明天见.
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-08-23 21:23
你在线很好,你贴的程序完整吗,我希望看到完整的程序,我做过c的
不过汇编我很熟,邦你仔细看一下,希望能帮上忙,弹片机是什么型号
usb是什么型号.
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
15楼#
发布于: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,字符串描述是不是给我改成飞利浦就行了。
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-23 21:05
灯闪三次是枚举前的指示,灯长亮说明枚举成功,平常情况是这样,你现在可以试着通过主机向设备发送数据,用1端点,设备把收到的数据
原样或作有规律变化返回,用主机接收,只要成功,usb主体就成功了
祝你好运
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-08-23 15:17
to metalwing: 我做的是232转usb的设备,我先插上了移动硬盘,然后在那个口又插上了我的板子。在BUSHOUND里什么也看不到了。

likeddk & wly76: 但是主机能发现设备,只要插上电缆就能发现。即使不插上电源。
   第一次上电时,指示灯曾经闪过三次。在调C程序的时候从来没有亮过。在调一个汇编程序的时候,它是闪几下就一直亮着。

我以前用5.0总是重启,我不敢用了。

wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-08-23 12:50
指示灯一直没有反应吗?如果是这样,主机显示找到新设备的信息吗?
如果没有,看一下d+是什么状态,我怀疑你的主机根本就没找到设备.
LikeDDK
驱动牛犊
驱动牛犊
  • 注册日期2001-09-30
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-08-23 12:36
你用的是什么版本的bushound?我曾经用3.0的是看不到的,换5.0就能看到了!
上一页
游客

返回顶部