阅读:2157回复:14
PDIUSBD12芯片为何不工作
我用PDIUSBD12芯片搭了一个小电路,基本是参考网上下载的基本电路搭的。D12并行接口与单片机(5402DSP)的一IO地址关联,主要信号有A0,CS_N,Int_N,RD_N,WR_N,DATA[0]-DATA[7].
D12的其他引脚则参考别人的经验接地或拉高。 现在用单片机往D12的命令口写0xF3,希望D12的CLOCKOUT引脚输出的脉冲频率发生变化。可是没能成功。 用FD命令读芯片ID,返回的是0。这样是不是表明D12没有工作。 开始我以为是并行接口的时序不对,经逻辑分析仪观察后表明是正常的。请问D12芯片在单片机端需要一些什么初始化过程?我的问题有可能出在哪里?大侠们救我。 |
|
沙发#
发布于:2003-07-29 13:46
D12 相当于 2 X 8 的 RAM,你注意读写时 CS 应该是 低,SUSPEND 应该是低,RESET 应该是高,还有就是上电时有没有正确复位(如果复位OK,CLKOUT 就应该有输出)! :D
|
|
板凳#
发布于:2003-07-29 13:51
注意看看CLKOUT的输出时钟频率和你设置的一样不。
|
|
地板#
发布于:2003-07-29 17:21
不好意思,我把数据线D0至D7接反了。接到了MCU的D7至D0。
现在MCU通过并口读写D12已经没有问题。 插到PC后,系统也能提示找到硬件, 只是不知道下一步该如何做。 感谢各位的回答 |
|
地下室#
发布于:2003-07-29 17:25
枚举成功了吗?
|
|
5楼#
发布于:2003-07-29 20:05
初接触USB,不好意思。
枚举成功根据什么判断, 我现在的情况是:单片机的固件程序初始化完成后进入循环,等待中断,这时我将USB线插入PC机(WINDOWS 2000 PRO),可在视窗右下角看到USB设备的系统图标。插入USB线后,固件程序进入ep0_rxdone() |
|
6楼#
发布于:2003-07-29 20:16
枚举成功应该是连上主机后发现USB设备,并能识别,然后在设备管理器中可以发现自己定义的芯片名称,用BUS HOUND监控可以发现设备的VID和PID。
|
|
7楼#
发布于:2003-07-29 21:45
我再问一下,我现在还没有写设备驱动程序,没有该程序的参与,枚举USB设备能成功吗?
|
|
8楼#
发布于:2003-07-29 23:01
会弹出一个要你装驱动程序的对话框。
|
|
|
9楼#
发布于:2003-07-30 08:30
对,要求你装驱动就表示成功了。
|
|
10楼#
发布于:2003-07-30 10:17
我也在用5402+d12方案,请问你c还是汇编编写程序的,关于usb的设备描述符等等这种内容的定义,你是怎么实现的?请指教,比如象周立功的例程:
code char * _NAME_USB_REQUEST_DIRECTION[] = { \"Host_to_device\", \"Device_to_host\" }; code char * _NAME_USB_REQUEST_RECIPIENT[] = { \"Device\", \"Interface\", \"Endpoint(0)\", \"Other\" }; 和这种定义 code char * _NAME_USB_REQUEST_TYPE[] = { \"Standard\", \"Class\", \"Vendor\", \"Reserved\" }; 我怎么用5402定义 |
|
11楼#
发布于:2003-07-30 11:56
我是用的C,把PHILIPS下来的固件程序稍微改了改,错误是没了。
能不能正常工作我现在还没法知道。 我很菜,指导一下我吧。 我现在的情况是,5402通过并行总线读写D12芯片没问题。固件程序也基本能跑起来,在固件程序初始化完成后进入死循环时,将USB线插入PC机,PC能找到新设备,但在设备前有问号。此时的固件程序提示已进入USB中断,并处理get descriptor 我下一步该如何做。 |
|
12楼#
发布于:2003-07-30 14:43
很抱歉,我的情况比你还差,我用c例程修改后,就是没法通过编译,因为关于上面所说的定义描述符这一块,我都不会改,后来用汇编写,也是到了计算机找到设备,产生中断,但是我读中断都读不到。能不能把你5402关于定义这些内容
code char * _NAME_USB_REQUEST_RECIPIENT[] = { \"Device\", \"Interface\", \"Endpoint(0)\", \"Other\" }; 和这种定义 code char * _NAME_USB_REQUEST_TYPE[] = { \"Standard\", \"Class\", \"Vendor\", \"Reserved\" }; 怎么修改的方法告诉我吗?或者把这一段程序发给我,请帮帮忙。我回头另发贴给你送分。我真的很急。谢谢你。我有任何进展一定跟你交流。 jchen_2000@sohu.com jchen_2000@163.com |
|
13楼#
发布于:2003-07-30 16:34
我有51的汇编程序。特别简单。
|
|
14楼#
发布于:2003-07-30 19:17
你定义那些东西干什么?他们只是个值而已,你只要找到文件中使用的地方,在参考usb协议第9章的内容定义一些常量即可,如下:
#define USB_RECIPIENT 0x1F #define USB_RECIPIENT_DEVICE 0x00 #define USB_RECIPIENT_INTERFACE 0x01 #define USB_RECIPIENT_ENDPOINT 0x02 #define USB_REQUEST_DIR_MASK 0x80 #define USB_REQUEST_TYPE_MASK 0x60 #define USB_STANDARD_REQUEST 0x00 #define USB_CLASS_REQUEST 0x20 #define USB_VENDOR_REQUEST 0x40 #define USB_REQUEST_MASK 0xFF /* GetStatus */ #define DEVSTS_SELFPOWERED 0x01 #define DEVSTS_REMOTEWAKEUP 0x02 #define USB_DEVICE_DESCRIPTOR_TYPE 0x01 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 #define USB_STRING_DESCRIPTOR_TYPE 0x03 #define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 #define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 #define USB_DEVICEQUALIFIER_DESCRIPTOR_TYPE 0x06 #define USB_OTEHRSPEEDCONFIGURATION_DESCRIPTOR_TYPE 0x07 #define USB_INTERFACEPOWER_DESCRIPTOR_TYPE 0x08 #define USB_FEATURE_ENDPOINT_STALL 0x0000 #define USB_FEATURE_REMOTE_WAKEUP 0x0001 没必要搞得那么复杂!就用上面这些足够了,或者干脆用他们得值就行了! |
|