打印

新手求助CY7C68013A + FPGA实现上下位机通信

[复制链接]
1758|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kury123|  楼主 | 2015-8-4 18:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kury123 于 2015-8-4 18:29 编辑

    本人新手,最近在弄USB和FPGA通信,遇到一个很奇怪的问题,希望高手们能够帮帮忙指点一下。
    我是参照AN61345的例子来测试slaveFIFO的同步传输,下位机verilog代码基本就是使用的cypress给的,没有更改,即检测FLAGB和FLAGC,如果EP6为空,则执行IN传输,如果EP2为满则执行OUT传输,读数据。上位机调试使用的是USB control center。
    固件设置slaveFIFO同步传输,外部IFCLK30M,EF2 BULK OUT 512 x2,EP6 BULK IN 512 x2,EP1、EP4和EP8禁用。EP2设置AUTO OUT,16位模式; EP6设置AUTO IN,16位模式,使能零长度包,自动传输字节512.
    首先,对于IN传输,只要上位机将数据读取之后,FLAGB(满标志位)无效,下位机开始往FIFO写数据,但是上位机第一次和第二次读到的是之前发送的数,第三次读到的才是刚刚发送的数,好像EP6里面多出来512个字节上一次发送的数。这个问题不知道该如何解决。
    其次,对于OUT传输,只要下位机检测到FLAGC(空标志位)无效,就开始读取FD[15:0]的数据。但是,读取的数据始终不对,通过Bus Hound查看USB发送的数据是正确的,FLAG能够正常跳转。比如我发送偶数个变化的16位数,但是FPGA接收到的数却是不变的,始终为发送的第一个数或者第二个数。另外,从SLOE和SLRD的有效周期来看,读到的数据比实际发送的数据少一个。

    以上就是我目前遇到的两个问题,不知道哪位同仁有没有遇到过同样的情况,或者哪位高手能够帮我解决一下,感激不尽。也可提供必要薪酬。
沙发
USB-Emily| | 2015-8-5 11:29 | 只看该作者
1. 建议你使用内部IFCLK 30MHz试一试;
2. 端点buffer的配置一定符合datasheet上的一个表格Figure 2-5.  Endpoint Configuration,EP4,EP8即使不使用也需要配置。
3. 一定保证FPGA控制的timing完全正确,你使用的FPGA 和官方的FPGA一样吗? 如果完全一样,你也许可以使用Cypress的verilog语言,如果不一样,就不好说了。
4. 你可以先在EP2, EP6都是manual mode的情况下去发送数据,这样应该会好控制,如果auto的话,EP6中可能就会有数据了。

使用特权

评论回复
板凳
kury123|  楼主 | 2015-8-5 15:19 | 只看该作者
USB-Emily 发表于 2015-8-5 11:29
1. 建议你使用内部IFCLK 30MHz试一试;
2. 端点buffer的配置一定符合datasheet上的一个表格Figure 2-5.  En ...

嗯,谢谢哈,我先试试看

使用特权

评论回复
地板
electronictech| | 2016-5-19 17:35 | 只看该作者
USB-Emily 发表于 2015-8-5 11:29
1. 建议你使用内部IFCLK 30MHz试一试;
2. 端点buffer的配置一定符合datasheet上的一个表格Figure 2-5.  En ...

我现在也在做CY7C68013A通信,我现在的问题是FPGA写到EP6 IN端点的数据,从上位机上读不出来,是用C语言写的,通过编译看到,程序写的每一步都执行,但是无法将数据放到FD总线上,EP6一直提示是空的,请大家指教一下,或提供一个写的参考程序。

使用特权

评论回复
5
waiter| | 2016-6-1 15:32 | 只看该作者
Slave FIFO的接口时序可能不对。

使用特权

评论回复
6
dpf_eei| | 2016-6-4 15:46 | 只看该作者
十年前做过的东西。

使用特权

评论回复
7
nightmare8641| | 2016-10-21 10:47 | 只看该作者
学习下,最近也在做这个

使用特权

评论回复
8
meper| | 2016-11-7 16:30 | 只看该作者
楼主,你的问题解决了没有呀?最近也在做这方面的东西,遇到跟你一样的问题了....

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝