阅读:2441回复:30
[求助!]关于USBN9603固件中数据结构转换的问题
在9603USB_device_req_handler()函数中,有如下语句
byte *msg = control_receive_buffer.data; USB_request_t *req = (USB_request_t *)msg; ... (*usb_std_device_req[REQ_DEVICE(req)])(req); ... 但是我将REQ_DEVICE(req)打出来发现竟然是0 然而msg[1]却是正确的设备请求的编号,不知道这是什么原因, 导致了数据结构的转换没有成功。 我用的是arm9的芯片,ads和sdt分别编译生成了映象文件,但是结构都是一样的。不知道为什么? 如果单纯用control_receive_buffer.data来控制也可以,但是就是改动的地方太多了,有没有其他办法? 恳请liumda bbiliu 还有其他高手帮忙,多谢! ps: liumda,你好 前些日子在忙别的事,把usb的事放下了,现在还要麻烦你了,谢谢! |
|
沙发#
发布于:2004-06-03 21:42
你已经做到处理请求了啊,我现在在中断这里卡住了,一直收到的都是ALT中断,没有RX和TX中断,所以枚举不能进行下去,不知道你当初有没有遇到这样的问题?后面的请求处理部分程序我还没怎么细看呢,还是希望liumda、bbiliu等牛人出来指点指点啊!
|
|
板凳#
发布于:2004-06-04 08:02
我目前中断来得也是很多的
ALT中断,我要把板子RESET多次才能出现RX中断。 我推测问题主要在于两个方面: 1,是读写时序的问题。 2,是主机端总线驱动的问题。 我想解决办法应该从配置usb读写时序入手。 我一开始用的是存控来读写usb,后来由于总总问题 就改用GPIO来模拟时序了,可以读写。但是感觉还是 不怎么好。 总线驱动方面,换一个USB端口可以加快出现RX中断 的响应时间。 目前我只能做到这些,不知对你是否管用。 常联系把,有困难一起克服! |
|
地板#
发布于:2004-06-04 08:56
ip4347:你的程序本身没有问题,我想问题可能出在KEIL C51和ADS编译器对指针的处理的差别上,你仔细研究一下他两之间的差别吧?有结果了,请回复一下!
|
|
|
地下室#
发布于:2004-06-04 09:02
你已经做到处理请求了啊,我现在在中断这里卡住了,一直收到的都是ALT中断,没有RX和TX中断,所以枚举不能进行下去,不知道你当初有没有遇到这样的问题?后面的请求处理部分程序我还没怎么细看呢,还是希望liumda、bbiliu等牛人出来指点指点啊! 你的这个问题我也曾经遇到过,我用的是ARM+9603,后来通过屏蔽高速缓冲就好了 FPGA+9603没有做过,不知道是不是也存在高速缓冲,但愿这个提示对你有用! |
|
|
5楼#
发布于:2004-06-04 17:00
多谢两位的回答。
“屏蔽高速缓冲”是什么意思?是和9604配合的controller那边比如ARM的问题吗?我现在用示波器测到ALT中断来的频率是在65k~70k之间。 回ip4347:我好像不管怎么reset都没有RX中断,读写时序上应该没什么问题吧,我随机地读一个寄存器或者修改之后再读,数据都和预想的一样。时序上除了datasheet上讲的那些setup time、hold time之类的另外还应该注意些什么? |
|
6楼#
发布于:2004-06-04 22:18
toLiumda:
ADS中,看了一下c的汇编代码,感觉没有什么问题。 不过,我发现是宏定义的函数的问题,REQ_DEVICE(reg)被我通过 串口打出来,发现是006,但是 (*usb_std_device_req[REQ_DEVICE(req)])(req);就是进不去,不能调用标准请求函数 明天我再看看。 toX 我想读写时序按照DATASHEET上的来就没有什么问题了 高速缓冲是CACHE,我没有打开,但是也是有很多的ALT中断,SD3类型的,一直在发各不停,只有多次RESET才能出现RX中断, 很是心烦,我再挑挑看把有劲展告诉你。 |
|
7楼#
发布于:2004-06-05 13:49
发现的问题:
1.网上给的代码中,TWO_BYTES 竟然用的是 unsigned int 类型32位,我把它改成了 unsigned short类型。 2 用SDT编译,竟然把一个8个字节的数据结构USB_request_t看作了20个字节。 另外,REQ_DEVICE(req)这个宏,在SDT中汇编指令给的不正确。 应该是 LDRB R0,[R4,#1] 但是汇编给出的竟然是LDRB R0,[R4,#4]。 3 改用ADS编译后,可以解决上述问题。但是ads编译器选用的类型是arm7和我使用的不一致,虽然从汇编代码看不出问题,但是执行的时候却跳转不到标准请求的函数中去,见鬼了。sdt可以跳转进去,只是跳转的位置不正确。 我在想,总是出现alt中断会不会和编译器的配置相关啊? |
|
8楼#
发布于:2004-06-05 14:59
我目前成功的完成了枚举过程,系统识别后进行了注册。
目前不足之处还是在于要多次RESET才能够有数据接受中断, 我想还是从编译器的设置,特别是处理器型号的设置入手 |
|
9楼#
发布于:2004-06-06 10:49
不过你遇到的这些问题好像对我来说不存在,因为我用的控制器不是MCU或者ARM这些,是要自己在FPGA上开发的。
|
|
10楼#
发布于:2004-06-06 12:05
我想fpga只不过频率低了一些吧,应该和mcu之类没什么太大差别,
你用的编译环境是什么啊? |
|
11楼#
发布于:2004-06-07 09:19
是在ISE里开发的,但不是编译环境吧
|
|
12楼#
发布于:2004-06-07 16:04
真是受不了了啊,本来以为是给NFSR写了RESET之后没有等待那个100us,刚才试了一下还是不行....
|
|
13楼#
发布于:2004-06-07 19:39
哥们别放弃啊,我正在找办法呢
|
|
14楼#
发布于:2004-06-08 20:07
你用的fpga的频率是多少啊?
会不会和频率相关? |
|
15楼#
发布于:2004-06-08 20:16
我的FW里用的时钟是FPGA上的时钟,27M的,这有什么联系吗?
|
|
16楼#
发布于:2004-06-09 08:52
我的FW里用的时钟是FPGA上的时钟,27M的,这有什么联系吗? 这个时钟应该没有问题,我想是不是和你的FPGA的地址总线有关系?比如总线的宽度是8位还是16位?还有数据总线等等。国半的DEMO程序没有问题,只要稍做修改就可以用了。你应该多考虑一下你的FPGA的程序问题。 -----个人意见 ip4347,Xranger:你们的PC部分的驱动做好了吗?用什么做的?DDK? [编辑 - 6/9/04 by liumda] |
|
|
17楼#
发布于:2004-06-09 09:10
突然发现把cable拔了之后还是不断收到ALT中断,而且情况都一摸一样,难道说我的cable有问题?不会这么衰吧
|
|
18楼#
发布于:2004-06-09 09:12
FPGA和9604的连接是我们自己分配的,地址/数据总线就是从FPGA里拉了8根线出来和9604相连的,这应该也没问题吧
|
|
19楼#
发布于:2004-06-09 09:35
liumda
我pc部分的驱动没有做好,正等固件写好了用windriver做 |
|
上一页
下一页