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
    +关注

    关注

    1603

    文章

    21326

    浏览量

    593242
  • usb
    usb
    +关注

    关注

    59

    文章

    7436

    浏览量

    258217
  • Cypress
    +关注

    关注

    10

    文章

    136

    浏览量

    81540
  • CY7C68013A
    +关注

    关注

    2

    文章

    20

    浏览量

    21543
  • 编写
    +关注

    关注

    0

    文章

    29

    浏览量

    8373
  • 双向通信
    +关注

    关注

    0

    文章

    12

    浏览量

    8585

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

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

收藏 人收藏

    评论

    相关推荐

    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想实现一个generic HID设备,如何修改描述符及端点最大数据包的大小?

    通过CY7C68013A想实现一个generic HID设备,使用一个中断型输入端点和一个中断型输出端点,最大数据包长度均为1024(或512?)字节,请问基于CY3684开发套件提供的固件模板,该如何修改描述符及端点最大数据包的大小? 谢谢!
    发表于 02-28 06:37

    利用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

    CY7C68013FPGA通信返回数据顺序不正确是怎么回事?

    如图,CY7C68013 在与 FPGA 通信测试时偶尔会出现接收的数据顺序与发送数据顺序不一致的情况,BB BB 为协议头是首先发送的二个字节,从FPGA时序仿真也能看出是首写发送
    发表于 02-27 07:27

    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