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

[复制链接]
2075|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一直提示是空的,请大家指教一下,或提供一个写的参考程序。
waiter 发表于 2016-6-1 15:32 | 显示全部楼层
Slave FIFO的接口时序可能不对。
dpf_eei 发表于 2016-6-4 15:46 | 显示全部楼层
十年前做过的东西。
nightmare8641 发表于 2016-10-21 10:47 | 显示全部楼层
学习下,最近也在做这个
meper 发表于 2016-11-7 16:30 | 显示全部楼层
楼主,你的问题解决了没有呀?最近也在做这方面的东西,遇到跟你一样的问题了....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部