0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的cy7c68013a双向通信教程

e9Zb_gh_8734352 来源:chengfengwenalan 作者:chengfengwenalan 2023-03-09 09:40 次阅读

01基于FPGA的cy7c68013a双向通信实验

cy68013

教程是基于FPGA的cy7c68013a的USB双向通信实验,本教程主要内容:

1.cy7c68013a的固件编写,以及生成iic固件和下载固件。

2.cy7c68013a的slave模式,以及他的读写时序

3.cy7c68013a的FPGA的上板测试,包括发送和接收两部分

02开发过程

cy68013

01驱动

在进行试验前要先安装好Cypress提供的usb驱动,插上usb后,电脑就会检测到未识别的设备,这时打开设备管理器,右键未识别的usb,然后手动选择驱动。

在驱动会在本教程最后的链接中给出,如图所示:

a07b7700-bdb5-11ed-bfe3-dac502259ad0.pnga0968bbc-bdb5-11ed-bfe3-dac502259ad0.png

02固件

固件是在CY68013的FPGA内部有一个MCU,需要给MCU固化程序,固件的编写主要是确定IN和OUT端点,以及一些标志信号

a0ca9b28-bdb5-11ed-bfe3-dac502259ad0.png

固件只需要改这些参数即可,一般情况下不需要修改,很容易看出本教程中设置的时钟是48MHz,然后设置EP2为OUT端点,512字节,4缓冲,bulk (注意OUT,IN都是相对PC来说的,OUT表示PC--->cy7c68013a,IN则相反)

EP6为IN端点,512字节,4缓冲,bulk

flag_a 为EP2的EF,也就是空标志信号,为低时表示空,也就是没有数据过来,为高则表示有数据来了

flag_d 为EP6的FF,也就是满标志信号,为低时表示写满了,这时再去写就是无效写了,为高则表示没有写满,可以继续写。

a0e72a9a-bdb5-11ed-bfe3-dac502259ad0.png

教程提供的固件所在文件夹:固件源码什么的都在Firmware文件中

a0fd7138-bdb5-11ed-bfe3-dac502259ad0.png

03时序

Slave FIFO的时序如图所示。

a1231fb4-bdb5-11ed-bfe3-dac502259ad0.png

有图很容易看出,再写之前要先把FIFOADR确认好,这个决定了你写的对象是谁

a135a710-bdb5-11ed-bfe3-dac502259ad0.png

slave读操作

a1472b34-bdb5-11ed-bfe3-dac502259ad0.png

然后在该fifo非满时(相应的FF标志位高),才可以进行写操作,这个时序很简单,就是拉低slwr信号就可以了,注意FD要与slwr对齐。

注意:写操作时,slwr与FD的数据都是FPGA来控制的,为了让cy7c68013a更好的采样,ifclk与clk反向之后再发送给cy7c68013a.

读时序跟写也是类似的,再读之前先确定FIFOADR,然后拉低sloe,这时FD总线就会出现第一个数据,然后检测到slrd为低时,FD就会显示下一个数据。

04FPGA与cy7c68013a通信

前面主要是准备工作,现在正是进入测试:

项目工程如下:

a16fadca-bdb5-11ed-bfe3-dac502259ad0.png

a186aff2-bdb5-11ed-bfe3-dac502259ad0.png

具体代码都已经有了详细注释了,这里就不详细解释。

本教程所用的调试工具是官方的工具

a1a73164-bdb5-11ed-bfe3-dac502259ad0.png

03调试

Deep learnning

下面给出写的signal tap 的调试截图

写是一次写512个字节数据,0-255,注意usb的fifo是一次发送16位的,也就是2个字节。先发送低字节,然后再发送高字节,这我直接把低字节给赋值为0了

a1c3ec78-bdb5-11ed-bfe3-dac502259ad0.png

a1d8294a-bdb5-11ed-bfe3-dac502259ad0.png

a1eb6a96-bdb5-11ed-bfe3-dac502259ad0.png

前面局部放大图

a202dc6c-bdb5-11ed-bfe3-dac502259ad0.png

后面局部放大图,注意只有在flag_d为高时,slwr为低才是有效写,否则就是无效写,因为当flag_d为低时,表示写满了,这时fifo就会丢弃后面写的数据。

a2205e90-bdb5-11ed-bfe3-dac502259ad0.png

PC端接收到的数据要2个字节一起读,因为usb是16位发送的,可以看出接收到的数据的确是0000-00FF。

注意:pc接收数据按照下图标的编码顺序执行

a2331e86-bdb5-11ed-bfe3-dac502259ad0.png

a2524220-bdb5-11ed-bfe3-dac502259ad0.png

a26cf6e2-bdb5-11ed-bfe3-dac502259ad0.png

pc发送数据按1-->2-->3的步骤,可以看出我们发送了12 34 56 78 这4个字节

a280d608-bdb5-11ed-bfe3-dac502259ad0.pnga29715bc-bdb5-11ed-bfe3-dac502259ad0.png

注意这里我是设置了cmd_flag标志信号的,只有cmd_flag为高时的cmd_data的数据才是有效的,也就是pc发送过来的数据

a2a8ace6-bdb5-11ed-bfe3-dac502259ad0.png

alter 的fifo ip 是可以读写位宽不一致的,具体看下面的图。

a2c8d782-bdb5-11ed-bfe3-dac502259ad0.png

由上图可以看出这个和usb是一样的格式,都是先发低字节,然后再发高字节。或者说先接收低字节,然后再接收高字节。

至此本教程就全部介绍完了,教程只挑了最关键的部分讲述USB的开发,但是包括了固件,驱动和FPGA程序,一个完整的USB和FPGA开发的工程完全可以进行在此基础上进行二次开发。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21663

    浏览量

    601667
  • usb
    usb
    +关注

    关注

    60

    文章

    7888

    浏览量

    263922
  • Cypress
    +关注

    关注

    11

    文章

    136

    浏览量

    81983
  • CY7C68013A
    +关注

    关注

    2

    文章

    20

    浏览量

    21638
  • 编写
    +关注

    关注

    0

    文章

    29

    浏览量

    8431
  • 双向通信
    +关注

    关注

    0

    文章

    13

    浏览量

    8615

原文标题:基于FPGA的cy7c68013a双向通信教程

文章出处:【微信号:gh_873435264fd4,微信公众号:FPGA技术联盟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FX2 CY7C68013A如何在C++环境中使用LoadEEPROM函数?

    我使用的是 FX2 CY7C68013A 芯片。 我知道 CyUSB.NET 库中有我需要的 LoadEEPROM 函数。 请问如何在 C++ 环境而不是 C#/CLR 环境中使用该函数? C
    发表于 05-31 06:59

    FX2从CY7C68013A移植到CYUSB2014的过程是怎样的?

    我计划将我的设计从 CY7C68013A 移植到 CYUSB2014。 我是否可以使用相同的开发工具,只是选择不同的组件? 有什么潜在问题需要注意吗?
    发表于 05-28 07:18

    cy7c68013a的数据传输错误的原因?

    cy7c68013aFPGA采用同步slfifo模式通讯,当上位机使用control center发送2个字节时,FPGA收到数据正确,当发送4个以上字节时会出现头两个字节丢失,后两个字节重复的现象,百思不得其解?固件使用官网
    发表于 02-28 08:25

    CY7C68013A无法加载EEPROM中的程序是为什么?

    我通过cycontrol将.IIC文件下载到24lc64中,但是再次启动时无法加载到CY7C68013A中,必须再使用cycontrol将hex文件下载到ram中才能使用,这是为什么?
    发表于 02-28 06:52

    利用CY7C68013a采集OV6946图像数据遇到的疑问求解

    利用CY7C68013a采集OV6946图像数据。采用了Slave FIFO和GPIF两种模式,编写了各自固件和上位机程序,在不同的PC机上(WIN 7或WIN 10)进行测试,发现: (1
    发表于 02-28 06:26

    通过control center上位机读取USB芯片CY7C68013A数据失败的原因?

    大家好,通过control center上位机读取CY7C68013A芯片的数据,连续读取512个字节能够成功,读取2个字节失败,错误码是997,一开始读取2个字节也是失败的,先读取512个字节再读取2个字节也是失败的。
    发表于 02-27 08:28

    请问CY7C68013A可以使用8bit FIFO数据接口吗?

    因为FPGA管脚不太够,想问下CY7C68013A-56PVXI可以使用8bit FIFO数据接口吗?可以的话,FPGA连接的是低8bit(FD0~FD7) 还是高8bit(FD8~F
    发表于 02-27 08:18

    cy7c68013a固件已经配置成异步slave模式,是否有MCU用IO口控制cy7c68013a通过数据总线来实现与PC的USB口通信

    cy7c68013a的固件已经配置成异步slave模式,是否有MCU用IO口控制cy7c68013a通过数据总线来实现与PC的USB口通信,这样应用的示例程序或教程? 目的就是在现有的MCU系统中增加一个USB
    发表于 02-27 08:14

    cy7c68013传输数据错误与传输停止的疑问求解

    我现在正在使用CY7C68013A开发一个摄像头产品,首先PC上位机传输300K左右的配置数据传输给FPGA(通过CY7C68013A的端口6,端口位OUT),然后FPGA开始采集图像
    发表于 02-27 08:00

    下位机CY7C68013A发送数据,上位机C#读取数据,会丢帧或者帧内错位的原因?

    下位机CY7C68013A发送数据,上位机C#在1个while循环内不断地读取数据,510字节1帧,1秒333帧、1秒667帧、1秒1333帧,会整帧丢帧或者帧内丢部分字节导致错位(帧头不在开始的位置),这个怎么回事?
    发表于 02-27 07:31

    CY7C68013A FPGA发送数据到PC则会丢包或者收到的数据对不上是为什么?

    我们这边有个客户使用CY7C68013A,客户配置成slavefifo模式,PC端发送数据到FPGA时数据正常,FPGA发送数据到PC则会丢包或者收到的数据对不上。能否帮忙看下客户的配置是否正确。
    发表于 02-27 07:14

    CY7C68013A通过USB与平板设备通信,平板能找到该USB设备但显示无驱动的原因?

    使用贵司的CY7C68013A通过USB 与平板设备(安卓设备)通信时遇见问题,平板能找到该USB设备,但是显示无驱动,不能进行数据传输。请问是需要自己写安卓的驱动程序吗?或者官网提供现成的驱动程序?
    发表于 02-27 06:35

    fpga通过cy7c68013a将数据经过USB传输至电脑,每次都会多接收数据的原因?

    fpga通过cy7c68013a将数据经过USB传输至电脑,采用slave FIFO模式 同步写入,每一次计划传输520字节的数据,我通过SLWR这个信号控制写入数据字节个数,现在发现每次电脑接收
    发表于 02-27 06:18

    USB芯片CY7C68013AFPGA进行通信,从EP6读取512字节是正常的,但是读取2个字节失败的原因?

    大家好,USB芯片CY7C68013AFPGA进行通信,从EP6读取512字节是正常的,但是读取2个字节失败(fpga端一直在发)Bulk IN failed,谢谢
    发表于 02-27 06:03

    请问CY7C68013A高速模式如何配置?

    请问CY7C68013A高速模式如何配置?手册里只有提到了中断和ram
    发表于 02-23 08:09