阅读:3133回复:30
请问高手:AN2131QC 可以同时定义 同步和块传输吗?
请问高手:AN2131QC 可以同时定义 同步和块传输吗?
|
|
|
沙发#
发布于:2002-07-09 14:41
对固件程序来说,一个endpoint只能指定一种传输方式,但可以给不同的endpoint指定不同的方式。只要固件程序支持,在驱动中就可以同时使用等时和块传输。
|
|
板凳#
发布于:2002-07-10 10:20
谢谢您的指导
您可以给出例子吗? |
|
|
地板#
发布于:2002-07-12 10:12
我在一个例程上修改成功了
Get Pipes显示有一个块端口(OUT),一个同步端口(IN) 测试中出现问题: 我在固件程序中 unsigned char cmdata=2; void TD_Init(void) { OUT07VAL = bmEP2; USBIEN |= bmSOF + bmURES; USBPAIR = 0x09; INISOVAL = bmEP8; EPIO[OUT2BUF_ID].bytes = 0; BPADDR = (WORD)TD_Poll; IN8ADDR = 0x00; USBBAV |= bmBPEN; USBBAV &= ~bmBPPULSE; } void ISR_Sof(void) interrupt 0 { register BYTE framel = USBFRAMEL; register BYTE frameh = USBFRAMEH; register BYTE i; IN8DATA = framel; IN8DATA = frameh; for(i=0;i<50;++i)IN8DATA=cmdata; EZUSB_IRQ_CLEAR(); USBIRQ = bmSOF; } void ISR_Ep2out(void) interrupt 0 { if (EPIO[IN1BUF_ID].cntrl & bmEPBUSY){ TOGCTL = 0x08 | IN1BUF_ID; WRITEDELAY(); if (TOGCTL & 0x80)TOGCTL |= 0x20; else TOGCTL |= 0x40; } cmdata=OUT1BUF[0]; IN1BC=0; OUT1BC = 0; EZUSB_IRQ_CLEAR(); OUT07IRQ = bmEP1; } 块输出后不能改变,同步输入的值 |
|
|
地下室#
发布于:2002-07-12 18:56
20分在等待!!!
|
|
|
5楼#
发布于:2002-07-15 10:56
使用默认的设置
SET_INTERFACE_IN input; input.interfaceNum = 0; input.alternateSetting = 1; 块、同步、中断、控制 四种传输全部都有 但如何稳定的实施下列的传输 每秒1000次同步IN 每秒200次块OUT 稳定性的关键在芯片设置还是应用程序? |
|
|
6楼#
发布于:2002-07-18 06:16
你在那个DESC.A51(定义描述符的文件)文件中有没有将你所要定义的端点的类型写清楚?
|
|
|
7楼#
发布于:2002-07-19 09:02
应该没有问题
因为使用Panel可以正确显示 我的设置 |
|
|
8楼#
发布于:2002-07-19 09:56
sunkai,liuxf66
稳定性的关键在芯片设置(firmware)还是应用程序? |
|
|
9楼#
发布于:2002-07-20 11:45
但如何稳定的实施下列的传输
每秒1000次同步IN 每秒200次块OUT 稳定性的关键在芯片设置还是应用程序? ------------------------------------ 同步传输每ms发生一次,无须更多设置,提供数据即可 块传输本身没有时间保证,不能从芯片设置中得到.如果你的确要精确定时,在应用程序中做定时发送或在firmware中做定时接收试试吧,好怪的课题. |
|
10楼#
发布于:2002-07-20 16:08
好怪吗?
我的目的是作一个AD 所以得保证精确的采样(读取、IN) 但同时还有一些设置或状态的切换需要从HOST发送 就这样的应用您使用什么组合方式设置呢? |
|
|
11楼#
发布于:2002-07-21 00:51
1,做采样跟iso无关,须bulk in
2,实现精确的采样时序方法很多,一种较好的方法是另外加一片mcu专门控制采样.可能的话也可以完全由单独的硬件模块提供采样时序.绝对不可能由主机程序控制发送in请求以达到精确采样的目的 3,准则:硬件决定软件,硬件不做好,firmware和app做的再精致也没有用 4,基于3,高速采样设备要有ram缓存采样结果数据,防止数据丢失,同时也就无需考虑必须每秒1000次in了,host尽可以总是in. 5,设置或状态切换当然是bulk out,不必要精确控制吧? |
|
12楼#
发布于:2002-07-23 10:52
可能我的理解有误
现在的情形是: 我修改了EZ-USB的例子IsoStream 他只定义了ISO IN 我只修改了periph.c中的 void ISR_Sof(void) interrupt 0 我现在想加输出,研究了几天例子IsoLoopback没有成功 于是就改为使用缺省端点 使用下列代码 SET_INTERFACE_IN input; input.interfaceNum = 0; input.alternateSetting = 1; if (hDevice != NULL) { bResult = DeviceIoControl (hDevice, IOCTL_Ezusb_SETINTERFACE, &input, sizeof(SET_INTERFACE_IN), NULL, 0, (unsigned long *)&nBytes, NULL); } 可以用EZ-USB Control Panel看到: Get PipeInfo Interface Size 276 Pipe: 0 Type: INT Endpoint: 1 IN MaxPktSize: 0x10 Pipe: 1 Type: BLK Endpoint: 2 IN MaxPktSize: 0x40 Pipe: 2 Type: BLK Endpoint: 2 OUT MaxPktSize: 0x40 Pipe: 3 Type: BLK Endpoint: 4 IN MaxPktSize: 0x40 Pipe: 4 Type: BLK Endpoint: 4 OUT MaxPktSize: 0x40 Pipe: 5 Type: BLK Endpoint: 6 IN MaxPktSize: 0x40 Pipe: 6 Type: BLK Endpoint: 6 OUT MaxPktSize: 0x40 Pipe: 7 Type: ISO Endpoint: 8 IN MaxPktSize: 0x10 Pipe: 8 Type: ISO Endpoint: 8 OUT MaxPktSize: 0x10 Pipe: 9 Type: ISO Endpoint: 9 IN MaxPktSize: 0x10 Pipe: 10 Type: ISO Endpoint: 9 OUT MaxPktSize: 0x10 Pipe: 11 Type: ISO Endpoint: 10 IN MaxPktSize: 0x10 Pipe: 12 Type: ISO Endpoint: 10 OUT MaxPktSize: 0x10 下载8051汇编代码: ;----------------------------------------------------------------- $NOMOD51 ; disable predefined 8051 registers $nolist $include (C:\\Cypress\\USB\\Target\\inc\\ezregs.inc) ; EZ-USB register assignments $list ; NAME eziso ; CSEG AT 0 mov dptr,#IN8ADDR ; set the FIFO start for EP8 to 0 mov a,#0 movx @dptr,a mov a,#0xFF mov dptr,#OEC movx @dptr,a mov dptr,#OEB movx @dptr,a mov dptr,#OEA movx @dptr,a ljmp loop ; ------------------------------------------------- org 100h ; ------------------------------------------------- loop: mov dptr,#USBIRQ ; wait for SOF IRQ bit movx a,@dptr jb acc.1,IsoIn mov dptr,#OUT2CS ; EP2OUT Control & Status reg movx a,@dptr jb acc.1,loop ; busy-keep checking ; service_OUT2: mov dptr,#OUT2BUF movx a,@dptr mov r7,a inc dptr movx a,@dptr mov r6,a inc dptr movx a,@dptr mov dptr,#OUTA movx @dptr,a mov a,r6 mov dptr,#OUTB movx @dptr,a mov a,r7 mov dptr,#OUTC movx @dptr,a mov dptr,#OUT2BC ; load anything to byte count to re-arm mov a,#1 ; any value movx @dptr,a sjmp loop ; IsoIn: mov a,#00000010b ; SOFIR bit movx @dptr,a ; writing 1 clears the SOF IRQ bit ; mov dptr,#USBFRAMEH ; put the frame number into first two EP8IN bytes movx a,@dptr mov dptr,#IN8DATA ; \"IN8DATA\" is a FIFO inside the EZ-USB chip movx @dptr,a ; byte 0 mov dptr,#USBFRAMEL movx a,@dptr mov dptr,#IN8DATA movx @dptr,a ; byte 1 ; mov r2,#24 loop_cm: mov dptr,#PINSC ; read PORTC pins movx a,@dptr mov dptr,#IN8DATA movx @dptr,a mov a,#0 movx @dptr,a djnz r2,loop_cm ; sjmp loop ; END 我的应用程序(ISO IN and BULK OUT)欢快的运行起来 但不幸的是或 2小时 或 5小时 程序停止 但没有死机 可以重新启动采集线程,程序又可运行,但依然会在一会停下来 我不知道是怎么会事 请高手指点 如果需要我可以把源代码发给您! |
|
|
13楼#
发布于:2002-07-24 08:57
sunkai老兄
这个帖子您也得关照一下! |
|
|
14楼#
发布于:2002-07-24 09:51
具体编程要靠自己喽,我的建议已经说了,仍然坚持用bulk in的观点
|
|
15楼#
发布于:2002-07-24 14:35
bulk in
我已经做成一个了 用EZ-USB Control Panel下载 可以稳定的运行, 但又到VENDOR_OR_CLASS_REQUEST_CONTROL的问题了 而且bulk in有一个更致命的弱点: 由于我采用8051直接控制AD 当用户在运行程序时,host程序如果不能及时读取 就出现“丢点”现象 对了这得请教您: 我如果在8051不断的向INnBUF写数据,他可以存多少数据? |
|
|
16楼#
发布于:2002-07-24 14:55
sunkai 请您在
“Ez_USB/AN2131QC/IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST问题 ” 中出现一下 先把那二十分给您 并向您这样的热心人致敬! |
|
|
17楼#
发布于:2002-07-24 17:42
bulk in 我开始也是用iso,不久就发觉不能很好地控制它,数据时对时错,改成bulk,起码保证数据完全正确,这时出现丢点的现象,正如你说的,我采取了缓存的办法,就不会丢了,这是我上面建议里的第3.4点. inbuf的大小是固定的64byte,可设置用pairing乒乓.inbuf是不能不断地写入,只有在!busy时才能写入,这是丢点的原因,所以要有个ram缓冲,用fifo是个不错的选择,这样只要成功控制fifo不会满就不会丢点了.iso inbuf是1024,本身就采取双buffer乒乓方式工作 [编辑 - 7/25/02 by sunkai] |
|
18楼#
发布于:2002-07-25 10:08
总之是我e文太差,看不懂说明书
|
|
|
19楼#
发布于:2002-07-25 10:17
不会吧,只怕是光急着做东西去了,前期看清看完文档是非常关键的,事半功倍.别人的建议有时也很重要,要是当初我早点咨询懂得用缓存,可以节省2个月的时间和做2块板子的银子和大量的脑细胞.
|
|
上一页
下一页