dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3243回复:20

请教68013Slave Fifo的问题

楼主#
更多 发布于:2003-06-06 19:25
我使用68013的slave fifo 模式从外部往微机视频数据,可是显示的图像错位。调试结果显示,当把一帧图像通过bulk传输到微机时,图像的第一个点不是微机输入缓冲区(readfile的input参数)的第一个点,而是偏离的512个字节,当把68013的buffer 个数设成3个时,正好没有偏差,如果设成2则左偏512个字节,设成4个则右偏512个字节。不知是何原因,请各位大虾指点。

最新喜欢:

jinghuirenjinghu...
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-17 18:46
你说的很有道理。All422内部就是一个SDRAM,读写可以分开。我最初用fifo的目的是为了适应1.1的版本。当时也没有考虑那么多的问题。
很高兴能和你讨论,不过我现在眼睛容易累,所以除了上班外很少上网。
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-17 18:37
我不太清楚你用的fifo的使用方式,这样看来更象是一个双口ram。
也就是说你的fifo其实是一个总在刷新的帧存,总保存一场数据。外围时钟无所谓做到多高。而主机接收数据的快慢,也就是屏幕刷新的快慢仅取决于你愿意以多快的速度来调用readfile。你的想法很有道理啊,我可能不应该追求系统内部所有器件都协调工作。那么存在的唯一问题就是应该去改一改驱动,使每个deviceiocontrol能提交差不多一场的数据才行。我原本的想法是为了保证视频信号的时域每点信号都能传送到主机,你的做法是保证视频信号的空间域每点能传送到主机,显然你的方法是对系统要求比较小。
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-17 17:34
我设计的思路是这样的:
首先,计算机发出一个读奇数场的命令(控制传输),这个命令通过68013的E口的一个管脚CPLD,CPLD先将外部Fifo 的读指针Reset(这就保证的送入的数据起始位置是写入的数据的起始位置),然后判断68013的内部fifo是否满,如果不满,就往里面送数据。同时微机用bulk传输读入一场的数据。所以说,读入的数据是完整的一场,直接送去显示就是一幅没有偏移的图像。读完一场后,再通过控制传输将相应的管脚设为无效,阻止CPLD往68013松数据。可以所,同步不是由AD控制,而是由主机控制(对于读数据而言)
  至于写外部fifo是由AD芯片完成,每来一个同步信号,将Fifo的写指针复位,当数据有效后,将数据依次写入。
  
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-17 09:01
to dengkangcn:
384K的?哇,那肯定用得很爽呵呵。
是否可以请教你几个具体的问题?
1,我在外围加了一个异步fifo(cy7c460),8K,图象以15M采样写进7c460,然后再以30M时钟将7c460里数据写进slave fifo,目前噪声比较大,我花了两个星期来折腾它。目前我利用的是7c460的half full信号,30M时钟信号和slave fifo的full信号,三者相与用做对slave fifo的写信号,不知你是怎么设计的?我的15M是30M分出来的,这样读写在某个时刻会同步,会不会出问题?
2,关于如果一旦传输中有丢数的情况产生,比如干扰大,这时候你是否有什么自动校正措施?比如标志好场起始等等。我考虑iso的机制是可以检查帧号来判断是否丢数的,但是bulk肯定要自己做校正。你在一篇帖子里说可以用pktend来对每个场开始做个标志,但是现在一个irp设成那么大了,那么是否可行呢?
ps:很想与你交流一下,我的email是yjmpepe@163.com,qq:25593793
可否与你讨论一下实现的具体问题?

dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-16 11:39
我的fifo是Al422B,每片有384K空间,读写完全分开
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-12 10:41
你真有先见之明啊,我当初设计的时候没有考虑到需要进行数据缓冲少了一个fifo,结果现在焦头烂额啊
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-12 10:30
也就是说你fifo里可能有上一次的数据是吧?
请问你外围的fifo是异步的还是同步的?我加了一块异步cy7c640,结果就这么一块fifo用不明白,郁闷啊。
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-11 08:31
  我的问题搞定了,方法是每次读数据前将fifo清空就行了,感谢各位网友,在这里讨论能让人思路开阔。
  我用bulk连续传输,如果光采集不显示可以达到23.7M。
  再请教各位三个问题:如何获得主机的USB版本号?check版本的驱动程序可用,但是free版本的驱动程序不可用,是什么原因?如何自动监测用户拔掉USB连接线?
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-10 16:21
to dengkangcn:
我也是新手,大家一起讨论一起进步。
你这样传的方式虽然不是连续的,但是在一帧内不可能出错。如果你真怀疑是fifo的倍数设定有问题的话,那干脆想办法从外围找个mcu之类的送一些约定好的数据,把问题简化一下,单从图象上看不好判断。
我的问题出在我硬件上缺少你那块外部fifo,所以在两个IRP之间图象数据太多把68013的fifo给塞满了引起丢数。
你试过连续的bulk传输?是怎么做的?速率多少?
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-09 21:28
to purplestar
你到cypress公司网站下一个开发包,里面有很多例子。
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-06-09 21:27
to yjmpepe
我试过很长时间的bulk传输,倒是没有出过什么问题。我说的fifo 的问题你能帮我分析一下吗?我首先是将一帧图像存储在外部Fifo,然后主机发出一个控制传输,使和 CPLD(CPLD是外部Master)相连的一个管脚(FR)为地,然后CPLD判断,如果68013的的内部Fifo不满,就让68013的SLWR信号为低,同时外部fifo读有效。之后host发出readfile命令,读入768*576个字节,然后再发出控制传输使FR为无效,至此,外部Master不再往68013写入数据。这样设计是有问题,因为读完768*576后,内部fifo是满的。下次再读的时候会把768*576之后的数据读入。请问你是怎么设计的?非常感谢。
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-06-09 08:54
哦,也就是说你现在传的是静态图象,我也这么干过,先在外部ram里存一帧然后用USB传输,我试过2倍和4倍的buffer,没有出现过你所说的问题(因为我观察到的图象都是一帧的起始点)。我现在做的逻辑是每到一个场同步才开始传送数据,我的问题出在数据无法连续传送上。我开始的时候也想从iso下手,但是没有iso的例子,而且按guo大虾的说法这和驱动方面的关系比较大,所以没敢下手,我觉得如果bulk可以实现而且还不会出错,当然如果机子很忙的时候用bulk可能会出事呵呵,你觉得呢?
purplestar
驱动牛犊
驱动牛犊
  • 注册日期2003-06-08
  • 最后登录2004-11-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-06-08 22:12
to dengkangcn:
我想请教一下你所指的example程序和inti函数在那里可以找到?
初始化寄存器时难道不用根据时序图自己写程序来访问寄存器吗?
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-06-08 18:25
to yjmpepe
再请教一个问题:你考虑过用iso来传输图像吗?
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-06-08 18:22
to yjmpepe
我设计的方法是这样的,首先用外部fifo存储一帧图像,然后主机发出\"开始读\"命令,将外部fifo读指针设成0,然后,指针累加,并将68013的slwr设为有效,读完768*576各象数后,将slwr设为无效。在程序除了改变内部fifo 的个数外,不做任何其他改动,显示结果不一样,这可能和fifo还是有关系吧。请问你是怎么做图像同步的?谢谢指点。
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-06-08 18:16
to purplestar
  如果用control pannal 找到了设备,将example的一个程序下载到68013中,程序断开68013和host的连接,然后又重新连接,如果想设寄存器,在程序的init函数中做就行了。
dengkangcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-10
  • 最后登录2010-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-06-08 18:12
to FORGETER
 记得在I2C总线上接1K电阻,大于4.7K都不太好用。
purplestar
驱动牛犊
驱动牛犊
  • 注册日期2003-06-08
  • 最后登录2004-11-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-06-08 15:09
dengkangcn朋友:
USB设备使用新手向您请教一个问题,我使用的是CY7C68001,我现在用FPGA来实现图像数据的传输,但是我现在就是搞不懂它启动过程的列举和寄存器初始化。
麻烦指点一下启动过程的整个顺序?
FORGETER
驱动牛犊
驱动牛犊
  • 注册日期2003-06-04
  • 最后登录2003-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-06-07 16:06
我现在刚开始用68013,没有开发板
现在有一个问题,在control panel 上找不到设备,
应该是没有返回正确的ID
设备管理器上也装不上fx2的驱动。

reset 大约400ms, wakeup 用1k电阻上拉 ea接0
还有什么要注意的吗?

CLKOUT 在RESET 时有12mhz输出,reset结束clkout也没有了,正常吗?

大侠帮忙看看是为什么?谢谢
上一页
游客

返回顶部