文档介绍:说句实在话,ZLG团队做的软件包真的非常好,非常专业!基本上不用怎么修改就可以直接使用。不过在使用过程中,还是有些地方需要我们去注意。以下是我们公司在使用过程中出现的情况,请ZLG团队及D12的用户们多多交流!1.  当MCU通过D12发数据给主机时不能简简单单的调用写函数,如下:D12_WriteEndpoint(5,64,filebuffer);如果您用的是51等慢速的单片机可能没什么事情,当用ARM等快速的处理器作大量数据传输时可能会出现丢包的现象。在MCU连续的给主机发包的过程中,主机还没有将上一个包的数据从D12读走(就是D12的缓冲区处于满的情况),MCU又将另一个包写进去时会覆盖掉以前的。因此在每写入一个包时必须先判断D12有没有空的缓冲区,如下:   while(1)                  //如果端点的两个缓冲区都为满,则等待{ outportb(MAND,0x85); EndpState=inportb(D12_DATA); EndpState&=0x60; if(EndpState!=0x60)        //有空缓冲区,则发送数据 {   break; }}D12_WriteEndpoint(5,64,filebuffer);2.  同样,在主机给MCU发送大量数据时也可能会产生丢包的情况。,然后读取。下面的代码在主程序中执行,如下: if(==1)  //收到主机下载的数据 {                              for(i=0;i<64;i++)          //从缓冲区中读走一包数据   {       CheckSum+=EpBuf;    //累加校验和       *pUsbByte=EpBuf;    //保存数据       pUsbByte++;   }   RecDataLong+=64;        //累加收到的数据长度   ARMDisableInt();//关中断,我觉得没有必要,因为都没有判断该标志   =0;//清空端点2收到数据标志   ARMEnableInt();}有一种很奇怪的现象:当PC机打开的应用程序越多且频繁的操作这些程序时,丢包的现象越严重!所以当我要从PC机发送一个几十MByte的文件到MCU时,就不能让PC机做其它事情了,否则就出现丢包。起初我们在PC机软件做了很多努力,但都失败。后来发现不是D12里的缓冲区被覆盖了,而是软件包中的EpBuf缓冲区被覆盖。因为D12接收到主机发来的一个包后会产生中断,然后将数据放入EpBuf,而此时如果我们还没有从EpBuf读走数据时,D12又从主机收到一个包产生中断,此时读取包数据时就会将EpBuf原来的数据覆盖掉,,如下:voidep2_rxdone(void){ INT8Ulen; D12_ReadLastTransactionStatus(4);              //清中断标志位 le