110514390
驱动牛犊
驱动牛犊
  • 注册日期2010-12-29
  • 最后登录2011-01-10
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1593回复:1

一个51开发板上USB初始化枚举的问题,急求高手相助

楼主#
更多 发布于:2010-12-29 14:27
我现在有一个AT8XC51SN1DC的学习开发板,上面有一个MP3的例程,我最近想在这个板子上开发USB AUDIO,因此还找了一些USBAUDIO的产品和资料
我想首先修改那个板子上的配置描述符为USBAUDIO的配置描述符来先让计算机将它枚举为一个USBAUDIO设备,可是这一步就出现了问题

 

原本例程里的设备描述符里,第7行最大包大小是0X20,那问题就是,原本最大包大小是0X20时,原程序的配置描述符刚好也是32字节,使用WriteEP函数很成功的就把配置描述符发过去了
WriteEp(0, 32, Configuration_Descriptor_All);
void WriteEp(unsigned char EpNum, unsigned char nLength, unsigned char *Data)
{
    unsigned char i=0;

    UEPNUM = EpNum;//指向相应端点
    UEPSTAX |= DIR;//设置方向为写

    while (nLength--)
    {
        UEPDATX = Data[i++];//将数据写入端点
    }

    UEPSTAX |= TXRDY;//发送数据Sending the data,this action will switch between bank0 and bank1

    while (!(UEPSTAX & TXCMP)) ;//等待发送完成

    UEPSTAX &= (~(TXCMP));//清中断标志clear TXCMP
}


而我现在要写的配置描述符有64字节,而我使用
WriteEp(0, 64, Configuration_Descriptor_All);
或者
WriteEp(0, 32, Configuration_Descriptor_All);
WriteEp(0, 32, Configuration_Descriptor_All+32);

都没有办法成功发送,请问高手这EP0到底怎样发送2个连续的数据包?
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2011-01-18 14:16
配置描述符不是想发多少个就发多少个,而是主机要求你发多少就发多少,一切得听主机的。
游客

返回顶部