返回列表 回复 发帖

[应用程序问题] USB大量数据收发问题

USB一次收发8K数据是对的,但是第二次收发同样数据时部分数据就重叠,代码如下,请高手指点~
void USB_SendData (u8 *p_data, u32 num) //数据发送
{
    u32 remain = num;
    u32 index   = 0;
    while (remain > 64)                        //一次最多发送64字节
    {   
while(GetEPTxStatus(ENDP1) != EP_TX_NAK);  //等待发送结束
    UserToPMABufferCopy(&p_data[index], ENDP1_TXADDR, 64);
    SetEPTxCount(ENDP1, 64);
    SetEPTxValid(ENDP1);
    index  += 64;                           //计算数组中的偏移
    remain -= 64;       //计算剩余字节数
    }
while(GetEPTxStatus(ENDP1) != EP_TX_NAK);        //等待发送结束,发送最后<=64字节的数据
    {
UserToPMABufferCopy(&p_data[index], ENDP1_TXADDR, remain);   
    SetEPTxCount(ENDP1, remain);
    SetEPTxValid(ENDP1);
}
/* index   = 0;
remain = num;*/      
}
void USB_RecieveData (u8 *p_data, u32 num)//数据接收
{
   u32 remain = num;
   u32 index   = 0;
   while (remain >128)                        //一次最多发送128字节
    {
  while(GetEPRxStatus(ENDP3) != EP_RX_NAK);  //等待接收完毕
     PMAToUserBufferCopy(&p_data[index], ENDP3_RXADDR, 128);
  SetEPRxCount(ENDP3, 128);
     SetEPRxValid(ENDP3);
     index  += 128;                           //计算偏移和剩余字节数
     remain -= 128;
    }
  while(GetEPRxStatus(ENDP3) != EP_RX_NAK);      //等待接收完毕,发送最后<=128字节的数据
{         
    PMAToUserBufferCopy(&p_data[index], ENDP3_RXADDR, remain);
SetEPRxCount(ENDP3, remain);
    SetEPRxValid(ENDP3);
}
    index   =0;
remain = num;
}
怎么个重叠法,发大量数据应该没问题的啊,mass storage例程都是读写文件的啊
淘宝在线,嵌入式进阶:
http://shop60176961.taobao.com
返回列表