阅读:2653回复:13
请问关于EZ_USB开发板的问题
为什么我的*.IIC文件固化到开发板后,一定要点“EZ_USB控制面板”中的“Run”才能从Pipe读出数据来?
而Walter Oney书中的Usbint.Hex加载进去之后,不用点“EZ_USB控制面板”中的Run就可以读出数据来了。 |
|
|
沙发#
发布于:2001-08-01 11:57
你是用什么工具固化的?是利用control panel 上的EEPROM工具吗?
|
|
|
板凳#
发布于:2001-08-01 16:54
另外我还想问一下:你的*.IIC文件是怎样生成的?能详细说明吗?
|
|
|
地板#
发布于:2001-08-01 20:11
老兄你好,谢谢你上次回我的帖子,因为我给了你分就被关闭了话题,但我还在期望你能继续帮帮我.我和你一样用CYPRESS的开发板.
你何必一定要把FIRMWARE放在EEPROM中呢,放在驱动程序中不也很好吗?改起来也方便点,也更安全. 我的EMAIL是sunkai2001@hotmail.com.如果你有时间请给我一点帮助. |
|
地下室#
发布于:2001-08-01 20:13
是用Hex2bix.exe -i生成的,固化的时候是用的“控制面板”上的“EEPROM”。现在发现问题可能不在这里,我写的驱动在读IN管道的时候,读请求发下去,没有任何数据返回;而写OUT管道的时候,似乎是成功的,请指教。
|
|
|
5楼#
发布于:2001-08-01 21:41
我个人的经历是这样:我用control panal来控制EZ-USB对开发板进行读写操作,当我按照它所带的读写操作时是没问题的,但是当我自己去用同步传输来对我外部脉冲进行记数时,当我读取数据的时候确实是会出现有时读不到的情况,但我想这本来是可以通过驱动程序来避免的,因为在协议中提到:USB的传送是通过每个ms送一个urb来实现的,所以,如果你在按send的那一刹那,正好在传送结束时那就正好把你的数据读了出来,而其他时刻就不能读到数据!是否可以这样理解?我用的也是cypress的板子,AN2131Q的。我现在做的是数据采集的开发!希望各位有机会可以多讨论一下!
|
|
|
6楼#
发布于:2001-08-02 12:52
我个人认为用EZ_USB器件开发USB设备最好不要用开发板,因为它存在BUG,且会导致无法理解的错误.其实只要把待观察的寄存器通过程序返回到主机,然后用CONTROL_PANNEL察看就可以了.事实证明这种方法既快又好,我就是这样做的,且用很短时间就完成了开发任务.
|
|
7楼#
发布于:2001-08-02 16:07
zzg你好,看了您在上面的回章以后很想向您讨教:您是如何考程序来实现对寄存器的观察的?我粗浅的认识是usb设备先把8051的处理结果送到FIFObuffer中,等待主机放松指令来把数据读走,请问如果不用control panal能否实现对寄存器的读取?或者说您自己写怎样的程序才能直接读取8051所记录或者处理的数据呢?您说不用开发板,那您是如何使芯片和主机连接起来的呢?而且control panal好象就是对开发板才有效的(不连接开发板那个panal就无法打开)。小弟才刚刚接触这个东东,而且以前没有做过硬件的开发,让老兄见笑了!还请老兄不吝赐教!导师催的急,我现在也是干着急,不知道怎么使劲,还望老兄能给予指点!小弟先谢过了! //bow~
|
|
|
8楼#
发布于:2001-08-02 19:20
上次你提到,关于“Interrupt Pipe”读请求如何精确定时发出的问题,在Walter Oney的大作中是这样解决的:
“当驱动程序读写批量管道时,它仅仅是创建URB并发送到总线驱动程序。但中断管道是用于向主机通知硬件事件,驱动程序需要始终维持一个未完成的读请求。” 请看如下代码: NTSTATUS OnInterrupt(PDEVICE_OBJECT junk, PIRP Irp, PDEVICE_EXTENSION pdx) { if (NT_SUCCESS(Irp->IoStatus.Status)) { KdPrint(("USBINT - Interrupt!\n")); StartInterruptUrb(pdx->DeviceObject); } return STATUS_MORE_PROCESSING_REQUIRED; } NTSTATUS StartInterruptUrb() { IoSetCompleteRoutine(OnInterrupt,...); //Send a request to pipe } |
|
|
9楼#
发布于:2001-08-03 17:25
Control Panel不只对开发板有效,它可实现任何采用EZ-USB器件的USB设备与主机的连接.方法是将ezusbw2k.inf的ID号改成USB设备的ID号,或将USB设备的ID号改成ezusbw2k.inf的ID号就可以了.至于如何将寄存器数据放入FIFO,我想就不用我说了吧!
|
|
10楼#
发布于:2001-08-03 20:25
谢谢,现在用cypress的可真不少,你的帖子很受欢迎哦。
在你的IN问题上我也有很多教训,在我写firmware的初期,也有你这种情况发生,原因基本都很相似,程序中的某些判断语句带来的跳转,使得bulk端点的buffer里的确没有写入数据,紧接着的写INxBC也没有执行,所以就无法IN了。这种情况多半发生在调整硬件时,那些判断条件并不象自己想象中那样。我想如果你在用开发板调试中能顺利通过(可以自己满足任何必须的条件),保证硬件符合你的要求,应该不会出现现在IN不了的情况了。 [sunkai 编辑于 2001-08-03 20:51] [sunkai 编辑于 2001-08-03 20:53] |
|
11楼#
发布于:2001-08-03 20:44
首先谢谢zzg老兄的指点!
对呀,有机会大家多交流下吧! 还望几位老兄,或说在开发usb上的前辈们所所指教呀! 不过,我还是不太明白是怎么把寄存器的值送到FIFO的,下面是我在Keil里写的程序,是根据例子改编的: ;----------------------------------------------------------------- ; eziso.A51 8-6-2001 LTH ; the simple counter for the external pulse ;----------------------------------------------------------------- $NOMOD51 ; disable predefined 8051 registers $nolist $include (..\..\..\target\inc\ezregs.inc) ; EZ-USB register assignments $list ; NAME eziso CSEG AT 0 mov a,#0d0H mov dptr,#PORTCCFG movx @dptr,a mov tmod,#05H ;T0方式1记数 setb tr0 ;启动T0记数 ljmp loop ; ------------------------------------------------- org 100h ; ------------------------------------------------- loop: mov dptr,#USBIRQ; wait for SOF IRQ bit movx a,@dptr jnb acc.1,loop mov a,#00000010b; SOFIR bit movx @dptr,a ; writing 1 clears the SOF IRQ bit mov a,th0 mov dptr,#IN8DATA movx @dptr,a ; byte 0 mov a,tl0 mov dptr,#IN8DATA movx @dptr,a ; byte 1 ; sjmp loop ; END 不知道为什么它不能通过Keil调试,只能靠它生成.hex文件后靠control panal来load到芯片里!这个程序的目的是对外部的脉冲进行记数!有哪位可以解释一下为什么不能通过Keil来调试?还有做了这一步这样才能使PC显示出结果?谢谢各位仁兄! |
|
|
12楼#
发布于:2001-08-03 21:03
时间长了,我有点模糊了,是否应该先分配等时端点缓冲区,bulk是不需要的。说的不对,不要笑话。
|
|
13楼#
发布于:2003-08-28 21:55
zzg:你好,我是初学者,我现在没有开发板。开发68013,不用开发板怎么做?因为不知道怎么开始,请指教。
|
|