CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3131回复:30

请问高手:AN2131QC 可以同时定义 同步和块传输吗?

楼主#
更多 发布于:2002-07-08 13:18
请问高手:AN2131QC 可以同时定义 同步和块传输吗?
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-26 12:13
哦,这样啊,非要用c++builder么?实在不行就先用vc做个dll,ezmr好用就搬过来,用c++builder调用如何
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-26 12:00
比如USB网眼
您说他是什么传输?
我用一个工具软件看我的EC300使用的是ISO
他其中的一帧数据出错不影响我的整体监视
我的系统也是这样
我不在乎其中有一段数据丢失、损毁
关键是系统可以稳定的运行
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-26 00:23
硬件不做好,一切白扯,采集系统不要数据正确,耍我还是蒙人? :)
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-25 19:54
这就是我说的不能保证主机准时发in请求的原因,分时系统嘛,你要想定时收发,它可不这样想.
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-25 15:24
分给完了,被系统骗了2分

关键是硬件方面坚持不用FIFO
而且我对数据正确性没有要求

我刚才又试了一下,10ms读一次,也不行
如果我在采集的时候同时启动一个大程序
采集停掉,最后的几秒出现好像很难读的样子!(和以前一样)
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-25 14:47
有两个例子,我最开始采用的和你现在的一样,后来改用IsoStream,结果都不理想.
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-25 14:35
设备是被动的,要主机每ms都去读一次,数据才能回来,你怎样让os保证每ms都能执行一次deviceioctrl?显然不可以,用死循环不可以,用线程做也不可以,我测试过,做不到这一点,进出一次不只1ms,接收的数据是断断续续的.
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-25 13:23
这样的话
我们先明确:

固件的程序因其 短小,结构简单 一旦可以正常传输
就可以一往无前的工作下去

就可以断定问题出在host端
驱动我是用的开发板的
应该也没问题

应用上,
1、IOCTL_Ezusb_RESETPIPE
2、IOCTL_EZUSB_START_ISO_STREAM
3、象EzMr一样,建立一个线程,不断的IOCTL_EZUSB_READ_ISO_BUFFER

有漏洞吗?
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-25 12:15
我在杭州出差,从南京来
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-25 12:13
说到这里,我不得不承认并非高手,只不过经历长了一点,失败的次数多一点,说道理论方面的东西还得要真正的高手襄助.从架构和协议来说无论哪种传输方式都应该保证可以长期稳定运行(显然是一句废话).
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-25 11:01

我开始也是用iso,不久就发觉不能很好地控制它,数据时对时错,改成bulk,起码保证数据完全正确,这时出现丢点的现象,正如你说的,我采取了缓存的办法,就不会丢了,这是我上面建议里的第3.4点.
inbuf的大小是固定的64byte,可设置用pairing乒乓.inbuf是不能不断地写入,只有在!busy时才能写入,这是丢点的原因,所以要有个ram缓冲,用fifo是个不错的选择,这样只要成功控制fifo不会满就不会丢点了.iso inbuf是1024,本身就采取双buffer乒乓方式工作


我公司硬件人员对数据完全正确兴趣不大
只要稳定,您评估一下ISO可以长时间稳定运行吗?
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-25 10:17
不会吧,只怕是光急着做东西去了,前期看清看完文档是非常关键的,事半功倍.别人的建议有时也很重要,要是当初我早点咨询懂得用缓存,可以节省2个月的时间和做2块板子的银子和大量的脑细胞.
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-25 10:08
总之是我e文太差,看不懂说明书
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-24 17:42
bulk in
我已经做成一个了
用EZ-USB Control Panel下载
可以稳定的运行,
但又到VENDOR_OR_CLASS_REQUEST_CONTROL的问题了

而且bulk in有一个更致命的弱点:
由于我采用8051直接控制AD
当用户在运行程序时,host程序如果不能及时读取
就出现“丢点”现象

对了这得请教您:
我如果在8051不断的向INnBUF写数据,他可以存多少数据?

我开始也是用iso,不久就发觉不能很好地控制它,数据时对时错,改成bulk,起码保证数据完全正确,这时出现丢点的现象,正如你说的,我采取了缓存的办法,就不会丢了,这是我上面建议里的第3.4点.
inbuf的大小是固定的64byte,可设置用pairing乒乓.inbuf是不能不断地写入,只有在!busy时才能写入,这是丢点的原因,所以要有个ram缓冲,用fifo是个不错的选择,这样只要成功控制fifo不会满就不会丢点了.iso inbuf是1024,本身就采取双buffer乒乓方式工作


[编辑 -  7/25/02 by  sunkai]
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-07-24 14:55
sunkai 请您在
“Ez_USB/AN2131QC/IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST问题 ”
中出现一下
先把那二十分给您

并向您这样的热心人致敬!
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-07-24 14:35
bulk in
我已经做成一个了
用EZ-USB Control Panel下载
可以稳定的运行,
但又到VENDOR_OR_CLASS_REQUEST_CONTROL的问题了

而且bulk in有一个更致命的弱点:
由于我采用8051直接控制AD
当用户在运行程序时,host程序如果不能及时读取
就出现“丢点”现象

对了这得请教您:
我如果在8051不断的向INnBUF写数据,他可以存多少数据?
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-07-24 09:51
具体编程要靠自己喽,我的建议已经说了,仍然坚持用bulk in的观点
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-07-24 08:57
sunkai老兄
这个帖子您也得关照一下!
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于: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小时 程序停止

但没有死机
可以重新启动采集线程,程序又可运行,但依然会在一会停下来
我不知道是怎么会事
请高手指点

如果需要我可以把源代码发给您!
cuiming73@263.net 10101973@sina.com
上一页
游客

返回顶部