阅读:1977回复:11
usb固件程序问题。新手求助
大家好,我很遗憾现在才找到这里来,如果早发现,我不会走了这么多的弯路。请教各位高手。我的问题如下:
我用ti5402+d12做的usb通信的数据采集,别的我基本做好了,但是usb我实在新手,花了3周时间看文档和资料,还是不太明白,我买了周立功的开发板,由于5402对一些位操作不接受,而所带的c51例程很多都是包含位操作,我只好用汇编来移植固件程序,我也知道这是一种很笨的方法。现在我仅仅能实现soft connect ,然后计算机发现我的设备。(顺便问一下,计算机能不能用周立功的开发板所带的驱动程序),产生中断,我读中断寄存器的值,有时是c0,有时是00,并且中断总是低有效了,不会恢复到高电平。如果我按照周立功的例程所做的顺序先读chip_id,总是读到1012或者0000。 希望大家能帮帮我这个新手。如果解决了,我会把结果告诉大家。谢谢。 |
|
沙发#
发布于:2003-08-01 21:16
现在我的程序就在这里就不行了。
port4001=0xf3; connect usb port4000=0x16; port4000=0x05; 频率改为8M正确。 产生中断14脚变低 然后 port4001=0xf4; i=port4000; j=port4000; i+=(j<<8); 这时候,我读到的经常是00或者c0,按理说,14脚会变高吗?我的中断管脚还是为低。请帮忙看看。 |
|
板凳#
发布于:2003-08-01 21:08
自己顶一下。会不会usb芯片内部坏了一部分啊。我现在还是没做出来。郁闷 应该不会,最可能的就是程序的问题。 |
|
地板#
发布于:2003-08-01 21:04
自己顶一下。会不会usb芯片内部坏了一部分啊。我现在还是没做出来。郁闷
|
|
地下室#
发布于:2003-07-31 15:52
我用工具看到开发板接上时就是这些数据了,但是我用我的板0接上时却一个都没有,就是说第一次的中断rst后,就没有下文了。为什么啊
|
|
5楼#
发布于:2003-07-30 16:27
bushound察看这是正确的值
Dev - Device ID Time - Elapsed time since the start of the previous Phase Phase - ADDR= 1394 transfer address LOCK= 1394 lock transaction CDB = Command block NSTS= NT status CTL = USB control packet RSET= bus reset DI = Data In RSTS= I/O Request Status DO = Data Out SNS = SCSI Sense Data IDE = IDE task file command SSTS= SCSI Request Block Status ISOC= Isochronous Transfer USTS= USB status (14) BulkUsb.Sys USB Bulk Dev Phase Data Info Time Cmd.Phase.Ofs --- ----- ----------------------------------------------------- ---------------- ----- ------------------ 1.1.80 14 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 2.6mn 2.1.0 14 DI 12 01 01 01 - dc 00 00 08 - 71 04 33 02 - 13 02 00 00 ........q.3..... 8.5ms 2.2.0 00 01 .. 2.2.16 14 CTL 80 06 00 02 - 00 00 09 02 GET DESCRIPTR 73us 3.1.0 14 DI 09 02 20 00 - 01 01 00 40 - 00 09 04 00 - 00 02 08 06 .. ....@........ 12ms 3.2.0 50 00 07 05 - 02 02 40 00 - 00 07 05 82 - 02 40 00 00 P.....@......@.. 3.2.16 14 CTL 00 09 01 00 - 00 00 00 00 SET CONFIG 59us |
|
|
6楼#
发布于:2003-07-30 15:50
十分感谢朋友帮忙,你给的东西对我有用,但是,我手头也有,关键是这些代码在5402中没法编译通过。我不知道怎么修改为dsp的c,所以用汇编来做了。你写的这些就是关键地方。我不知道怎么解决。不过我想给点分你,怎么给啊?我真的不会,找不到在哪?很惭愧。我用bushond看了一下数据,数据如下:
7 CTL a3 00 00 00 - 01 00 04 00 CLASS 0us 1.1.0 7 DI 01 01 01 00 .... 35us 1.2.0 7 CTL a3 00 00 00 - 01 00 04 00 CLASS 63us 2.1.0 7 DI 01 01 01 00 .... 23us 2.2.0 7 CTL 23 01 10 00 - 01 00 00 00 CLASS 38us 3.1.0 7 CTL a3 00 00 00 - 01 00 04 00 CLASS 88us 4.1.0 7 DI 01 01 00 00 .... 6us 4.2.0 7 CTL a3 00 00 00 - 01 00 04 00 CLASS 109ms 5.1.0 7 DI 01 01 00 00 .... 51us 5.2.0 7 CTL 23 03 04 00 - 01 00 00 00 CLASS 37us 6.1.0 7 DI 02 . 90ms 7.1.0 7 CTL a3 00 00 00 - 01 00 04 00 CLASS 4us 8.1.0 7 DI 00 01 10 00 .... 7us 8.2.0 7 CTL 23 01 14 00 - 01 00 00 00 CLASS 20us 9.1.0 7 CTL a3 00 00 00 - 01 00 04 00 CLASS 19ms 10.1.0 7 DI 00 01 00 00 .... 8us 10.2.0 7 USTS 05 00 00 80 no response 80ms 11.1.0 7 CTL a3 00 00 00 - 01 00 04 00 CLASS 510ms 12.1.0 显示说没响应,应该就是我的描述符没有吧? 很弱的问题。 |
|
7楼#
发布于:2003-07-30 15:33
我的的d12成功通信,就是难于接收大批数据
你的设备枚举还未成功,假若你的硬件线路正确 设备配置如下,上位机驱动装bulk,应该能搞定 UBYTE code USB_Device_Descriptor[] = { 0x12,// 描述表大小 (18 bytes) 0x01,// 设备描述表类型: Device 0x01, 0x01,// USB spec版本号(BCD码): 1.10 0xdc,// class code (each interface specifies class information) ???? 0x00,// device sub-class (must be set to 0 because class code is 0) 0x00,// device protocol (no class specific protocol) 0x08,// 端点0最大包大小: 8 0x71, 0x04,// 厂商ID: Philips 0x33, 0x02,// 产品ID: 0211 GpsPda 0x13, 0x02,// 设备发行号(BCD码): 2.13 0x00,// 厂商信息字符串索引 0x00,// 产品信息字符串索引 0x00,// 设备序列号字符串索引(不支持:0) 0x01// 可能配置数 }; UBYTE code USB_Configuration_Descriptor[] = { 0x09,// 配置描述表长度(9) 0x02// 配置描述表类型:Configuration 0x20,0x00,// 配置描述表及附带表(Interface & Endpoints)总长度: 9+9+7*2=32=0x20 ///shc change 0x01,// 配置个数 0x01,// 配置描述表标识 0x00,// 配置描述表字符串描述表索引 0x40,//0x80, // 配置属性: 总线供电 //////shc change 0x0,//0x32, // 总线供电最大值(*2mA):100mA 0x09,// 接口描述表长度(9) 0x04,// 接口描述表类型 0x00,// 接口号(0) 0x00,// 接口可选设置数目 0x02,//0x04,// 端点数, /////////////// shc change 0x08,//0xdc,// 类代码: ////////////////////////////// 0x06,//0xa0,// 子类码??????????????????????????????????????? 0x50,//0xb0,// 协议码,0x080650 0x00,// 接口字符串描述表索引(不支持) 0x07,// 端点描述表长度(7) 0x05,// 端点描述表类型 0x02,// OUT 端点(2) 0x02,// 传输模式(0 控制、1 同步、2 批、3 中断传输) 0x40, 0x00,// 最大包大小(64) 0x0, //0x0A,// 轮寻时间 (10ms)//////////////// shc change 0x07,// 端点描述表长度(7) 0x05,// 端点描述表类型 0x82,// IN 端点(2) 0x02,// 传输模式(0 控制、1 同步、2 批、3 中断传输) 0x40, 0x00,// 最大包大小(64) 0x0 //0x0A,// 轮寻时间 (10ms) }; //************************************************************************* // USB Protocol Layer //************************************************************************* |
|
|
8楼#
发布于:2003-07-30 15:12
今天又忙乎一天,还是没什么进展,不过我现在怀疑硬件问题了,因为我的goodlink指示灯从来没亮过.是什么原因呢?顺便问一句,我怎么才能把分给回答者,我是昨天才注册的,不大清楚情况了.
谢谢 |
|
9楼#
发布于:2003-07-30 01:33
我看了你说的jinghuiren文章,似乎说的不是一个现象。你所指的是哪一篇?
|
|
10楼#
发布于:2003-07-30 00:56
你查查以前jinghuiren的帖子,好像我说过是中断设置的问题!
|
|
11楼#
发布于:2003-07-30 00:48
不好意思,忘了说一点了,我对d12进行设置是可以成功的,比如改clkout的频率输出可以按需修改。
|
|