完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用“从FIFO”和“ButkOut-Autoto”模式在PC机和FPGA之间传输数据。
这是最后一个问题,我在痛苦的调试过程中发现: 1,我发送一个512字节批量到68013 2、68013得到这个块,然后EP2PF=1,Frabb=1。 3、FPGA让FIFOADR=10, 4、在2个周期之后,SLUE=1,准备从68013读取数据 5、经过一段时间后,SLRD=1,读取数据 6,读取512字节,sLesLED=0,停止读取 它工作正常,但有时有一两个字节丢失了: 正确的传输方式是: 0x00 0x01 0x02 0x03 0x04 0x05…0xFF-EP2WORLY=1 FPGA收到512字节 但有时它喜欢这样: 0x00 0x01 0x03 0x04 0x05 0x06……0xFF-EP2WORLY=1 FPGA收到511字节 我已经换了三个筹码,问题一直是… 当做, 天空。 以上来自于百度翻译 以下为原文 I use 'slave-fifo' and 'bulkout-auto' mode to transfer data between pc and FPGA. This is the final problem, i find it during a painful debugging: 1、I send a 512bytes bulk to 68013 2、68013 get this bulk, then the EP2PF=1, FLAGB=1 3、FPGA let the FIFOADR=10, 4、After 2 period, SLOE=1,ready to read data from 68013 5、After a period,SLRD=1,read data 6、read 512bytes,SLOESLED=0,stop reading It shoud work properly,but sometimes one or two bytes are losing like this: A right transmission is: 0x00 0x01 0x02 0x03 0x04 0x05......................0xff --ep2empty=1 fpga recieved 512 bytes but sometimes it likes this: 0x00 0x01 0x03 0x04 0x05 0x06........................0xff --ep2empty=1 fpga recived 511 bytes I have changed three chips, the problem has always been... Regards, Sky. |
|
相关推荐
3个回答
|
|
您好!
正如你所说,只有511个字节将读空标志位将被设置,可以请你把痕迹是否发送512字节或不。请你分享整个项目吗? 当做, 维卡斯 以上来自于百度翻译 以下为原文 Hi As you have mentioned that only 511 bytes will be read and empty flag will be set, could you please take a trace and check whether it is sending 512 bytes or not.Could you please share the entire project? Regards, Vikas |
|
|
|
你好。
Vavc 谢谢你的回复。 我使用EP2PF并将EP2FIFOFX值设置为FLAGB,当512字节的批量已经准备提交时,将设置该值。 所以,我认为PC到68013的数据是正确的。 我的PC和68013的代码关联到FPGA如下: 68013 init: 虚空(虚空) {//在启动时调用一次 CPUCs=0x10;//CkkSPD[1:0]=10,对于48 MHz操作,输出输出 pFrAgAsAb=0x4a;//FLAB-EP2PF,FLAGE-EP6EF 同步延迟; pFrAgCSCD= 0x08;//FLAG-EP2EF 同步延迟; PoACACFG=0x80; 同步延迟; IFCONFIG=0x03;/ /对于异步?同步吗? 同步延迟; FIFOP极性=0x3F; 同步延迟; CPUCS=0x02; 同步延迟; RVCTL=0x01; 同步延迟; EP4CFG= 0x01;//清除有效位 同步延迟; EP8CFG= 0x01;//清除有效位 同步延迟; EP2CFG= 0xA0;//OUT 512字节,4X,散装 同步延迟; EP6CFG= 0xE0;//在512字节,4X,散装 同步延迟; FiPosit=0x80;/ /激活NAC-ALL以避免竞争条件 同步延迟;//参见TRM第15.14节 FIFSET=0x02;//复位,FIFO 2 同步延迟; FIFSET=0x04;//RESET,FIFO 4 同步延迟; FIFSET=0x06;//RESET,FIFO 6 同步延迟; FIFSET=0x08;//RESET,FIFO 8 同步延迟; FiPosit=0x00;/ /去激活NACK-ALL 同步延迟; EP2FIFOCFG=0x00; 同步延迟; EP2FIFOCFG=0x10;/ /自动输出=1,字宽=0 同步延迟; EP6FIFOCFG=0x00; 同步延迟; EP6FIFOCFG=0x09;//Outin=1,ZeloLein=1,WordNew=1 同步延迟; EP6AutoLunh=0x02; 同步延迟; EP6AutoLeNLL=0x00; 同步延迟; EP2FIFOFFH=0x88; 同步延迟; EP2FIFOFL= 0x00; 同步延迟; IpkTalk=0x84; 同步延迟; IpkTalk=0x84; 同步延迟; IpkTalk=0x84; 同步延迟; IpkTalk=0x84; 同步延迟; } 68013重置(错误时调用,EP0供应商): 布尔-斯塔尔(空) { FippET= 0x80; 同步延迟; FiPosit=0x02; 同步延迟; FippET= 0x06; 同步延迟; FippET= 0x00; 同步延迟; EP2FIFOCFG=0x00; 同步延迟; EP2FIFOCFG=0x10;//8位 同步延迟; EP6FIFOCFG=0x00; 同步延迟; EP6FIFOCFG=0x09 ; 同步延迟; EP6AutoLunh=0x02; 同步延迟; EP6AutoLeNLL=0x00; 同步延迟; IpkTalk=0x84; 同步延迟; IpkTalk=0x84; 同步延迟; IpkTalk=0x84; 同步延迟; IpkTalk=0x84; 同步延迟; 返回(真); } FPGA,从68013读: -------------------- 当满= & gt; 箱满 当0=gt时; UBSDATAGEN和LT; FIFO-UTRAILUTION & LT; 懒惰=‘0’; SLRD=‘0’; FIFOADR & lt=“00”; 如果UBSLULL =“1”,那么 CONULLUN: = CONNULL + 1; 其他的 康满:=0; 如果结束; 当1=gt时; 懒惰=‘1’; CONULLUN: = CONNULL + 1; 当2=gt时; CONULLUN: = CONNULL + 1; 当3=gt时; SLRD=‘1’; FIFO-UTRAILUTION & LT; CONULLUN: = CONNULL + 1; 当别人= & gt; 案例FIFOU-UTRANUMYWORKWHULL是 当“000111111101”=gt; 康满:=0; 当“001111111101”=gt; 康满:=0; 当“010111111101”=gt; 康满:=0; 当“011111111101”=gt; UBSCHECK(15下降到8)& lt=UBS2 DATAZIN(7下降到0); 当“011111111110”=gt; UBSCHECK(7下降到0)& lt=UBS2 DATAZIN(7下降到0); 懒惰=‘0’; SLRD=‘0’; FIFO-UTRAILUTION & LT; 当“100000000000”=gt; 判决; 康满:=0; 当别人= & gt; FIFO-UTRAILUTION & LT;= FIFOUTUTRAIL写; 结束情况; 结束情况; 当做, 维卡斯 以上来自于百度翻译 以下为原文 HI. VAVC. Thanks for your reply. I used the EP2PF and set the EP2FIFOPFX value to the FLAGB will be set when a 512bytes bulk has been ready to commit. So, i think the data that PC to 68013 is right. My codes associated PC to 68013 to fpga is as follows: 68013 init: void TD_Init( void ) { // Called once at startup CPUCS = 0x10; // CLKSPD[1:0]=10, for 48MHz operation, output CLKOUT PINFLAGSAB = 0x4A; // FLAGB - EP2PF ,FLAGA - EP6EF SYNCDELAY; PINFLAGSCD = 0x08; // FLAGC - EP2EF SYNCDELAY; PORTACFG |= 0x80; SYNCDELAY; IFCONFIG = 0x03; // for async? for sync? SYNCDELAY; FIFOPINPOLAR |= 0x3F; SYNCDELAY; CPUCS |= 0x02; SYNCDELAY; REVCTL = 0x01; SYNCDELAY; EP4CFG = 0x01; //clear valid bit SYNCDELAY; EP8CFG = 0x01; //clear valid bit SYNCDELAY; EP2CFG = 0xA0; //out 512 bytes, 4x, bulk SYNCDELAY; EP6CFG = 0xE0; // in 512 bytes, 4x, bulk SYNCDELAY; FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; // see TRM section 15.14 FIFORESET = 0x02; // reset, FIFO 2 SYNCDELAY; // FIFORESET = 0x04; // reset, FIFO 4 SYNCDELAY; // FIFORESET = 0x06; // reset, FIFO 6 SYNCDELAY; // FIFORESET = 0x08; // reset, FIFO 8 SYNCDELAY; // FIFORESET = 0x00; // deactivate NAK-ALL SYNCDELAY; EP2FIFOCFG = 0x00; SYNCDELAY; EP2FIFOCFG = 0x10; // AUTOOUT=1, WORDWIDE=0 SYNCDELAY; EP6FIFOCFG = 0x00; SYNCDELAY; EP6FIFOCFG = 0x09; // AUTOIN=1, ZEROLENIN=1, WORDWIDE=1 SYNCDELAY; EP6AUTOINLENH = 0x02; SYNCDELAY; EP6AUTOINLENL = 0x00; SYNCDELAY; EP2FIFOPFH = 0x88; SYNCDELAY; EP2FIFOPFL = 0x00; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; } 68013 reset(called when error,a EP0 vendor): BOOL RstAll(void) { FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0X02; SYNCDELAY; FIFORESET = 0x06; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP2FIFOCFG = 0x00; SYNCDELAY; EP2FIFOCFG = 0x10; //8bits SYNCDELAY; EP6FIFOCFG = 0x00; SYNCDELAY; EP6FIFOCFG = 0x09 ; SYNCDELAY; EP6AUTOINLENH = 0x02; SYNCDELAY; EP6AUTOINLENL = 0x00; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; INPKTEND = 0x84; SYNCDELAY; return( TRUE ); } FPGA, read from 68013: -----------FULL------------ when full => case con_full is when 0 => u***_data_en<='0'; fifo_utr_write<='0'; sloe<='0'; slrd<='0'; fifoadr<="00"; if u***_full='1' then con_full:=con_full+1; else con_full:=0; end if; when 1 => sloe<='1'; con_full:=con_full+1; when 2 => con_full:=con_full+1; when 3 => slrd<='1'; fifo_utr_write<='1'; con_full:=con_full+1; when others => case fifo_utr_num_w_buffer is when "000111111101" => con_full:=0; when "001111111101" => con_full:=0; when "010111111101" => con_full:=0; when "011111111101" => u***_check(15 downto 8)<=u***_data_in(7 downto 0); when "011111111110" => u***_check(7 downto 0)<=u***_data_in(7 downto 0); sloe<='0'; slrd<='0'; fifo_utr_write<='0'; when "100000000000" => u***_state<=judge; con_full:=0; when others => fifo_utr_write<=fifo_utr_write; end case; end case; Regards, Vikas |
|
|
|
你好。
在试用之后,我发现丢失的字节总是落后于0x00,像这样: 当做, 天空 以上来自于百度翻译 以下为原文 Hi. After trial, I find that the losing bytes always behind lost of 0x00 like this: Regards, Sky |
|
|
|
只有小组成员才能发言,加入小组>>
754个成员聚集在这个小组
加入小组2098 浏览 1 评论
1845 浏览 1 评论
3664 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1782 浏览 6 评论
1532 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
556浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
409浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
433浏览 2评论
379浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
905浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 12:43 , Processed in 0.925697 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号