打印
[数据传输]

dsp板通过68013给pc机发送数据异常

[复制链接]
1663|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
亚洲飞鹰|  楼主 | 2014-2-18 12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一直在弄dsp和usb,68013数据传输模式是异步slave fifo的模式,现在把我的设计思路说明一下
1.开发板是DM648的dsp开发板,集成了68013和56引脚的cpld,既然采用的的是异步slave fifo的bulk传输模式,控制引脚就需要有EWE\ERE读写信号,SLOE输出使能信号,PKTEND短数据包结束信号,SLCS片选信号,fifo_adr0/fifo_adr1地址信号,还有FLAGA/B/C fifo空满标志信号。其中sloe输出使能信号由clpd来控制它的逻辑,其他的信号由dsp来控制它的逻辑。
2.其中一个问题,开发板是清华设计的开发板,dsp内部集成了读写信号(换句话说,就是读写信号我无法控制),其中assign  EWEN = ASDWEN;  //write enable 这就是写信号的产生,也就是由dsp的ASDWEN引脚来控制(内部集成好的);读信号assign  EREN = AOEN; //both R_WN and #AOE act low 读信号由AOEN引脚控制
3.固件程序中采用端点2为OUT端点,端点6为IN,AUTOIN和AUTOOUT方式。BULK传输模式,其中端点6为4*512缓冲。
4.pc机上用Cypress带的CYconSole软件来发送和接受数据,当pc机给usb发送数据时(也就是在dsp端接受),数据接受一切正常,发送什么接受什么。当我dsp给pc机发送时,问题是比如我发送01 02 03 那么接受到的数据就是01 00 00 00 02 00 00 00 03 00 00 00;首先确定了不是因为字节序的问题。
dsp上程序是
void Dsp_PC(char* buf,int len)
{       
        int i=0;
        int pin_ADR0=16;
        int pin_ADR1=17;
        int pin_FLAGB=19;
        int pin_PKTEND=21;

       
        if(0==GPIO_Input_Read(pin_FLAGB))        //读取端点是否满,为0时,端点已满,不可再写操作
        {
                while(1)
                {
                        if(1==GPIO_Input_Read(pin_FLAGB))
                        {   
                                break;
                        }
                }                               
        }


        if(1==GPIO_Input_Read(pin_FLAGB)) // 不满,可以写数据
        {       
                GPIO_Output_Config(pin_ADR1,1); //这是给FIFO_ADR[1:0]赋值10
                GPIO_Output_Config(pin_ADR0,0);       
                GPIO_Output_Config(pin_PKTEND,1);//给PKTEND引脚写1       

                for(i=0;i<len;i++)
                {               
                         *(unsigned int*)USB_68013CS=buf[i];//USB_68013CS是求得的usb2.0在我开发板上的地址
                        uDelayuS(7);                       
                }       
               

                GPIO_Output_Config(pin_PKTEND,0);//发送完数据后,PKTEND引脚电平跳变
                GPIO_Output_Config(pin_PKTEND,1);
        }                        

        return ;
}
5.这个问题一直无法解决,相同的pc机给dsp发送数据时,跟dsp给pc机发送采用的程序几乎一样,但是写操作时数据中间就夹杂三个00 如果我发送10个数据,那么我用示波器检测写信号时发生了10次的高低跳变,也没问题,但是我测试时,我在*(unsigned int*)USB_68013CS=buf[i];这句话前后给写引脚EWE分别写0 写1,给他跳变,那么就没有00 ,接受就很正常。

请教各位,谁有这块的经验,至于我的固件程序,我让cypress公司的技术支持看过,他们说没有问题。
如果我想在dsp板上给写信号写0和写1,那么我就得改版开发板。这不合乎我的初衷,现在我怀疑的就是对于异步slave fifo这种模式的写时序我控制达不到人家的要求

相关帖子

沙发
亚洲飞鹰|  楼主 | 2014-2-20 15:38 | 只看该作者
没人知道吗?各位大神??那有没有人知道,slavefifo模式端点6的固件程序怎么配置啊?        EP6FIFOCFG = 0x0C;            // AUTOIN=1, ZEROLENIN=0, WORDWIDE=0
        SYNCDELAY;

        EP6AUTOINLENH=0x04;
        SYNCDELAY;
        EP6AUTOINLENH=0x00;
        SYNCDELAY
是因为我固件程序的问题才导致端点6不能正确传输数据吗

使用特权

评论回复
板凳
lixianshang| | 2014-2-25 14:03 | 只看该作者
楼主你好,请问你的问题解决了吗?我现在也遇到了类似的问题

使用特权

评论回复
地板
亚洲飞鹰|  楼主 | 2014-3-11 13:37 | 只看该作者
我的发送数据接收到00的问题解决了,整个原理都实现了,但是现在测试68013的速度太慢,不知道什么原因!现在测试下来的速度只有1MB/S,肯定是达不到要求的!

使用特权

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

本版积分规则

3

主题

7

帖子

0

粉丝