- 130
- 0
- 约2.46千字
- 约 3页
- 2018-06-05 发布于河南
- 举报
PDIUSBD12使用心得
PDIUSBD12使用心得
??? 说句实在话,ZLG团队做的软件包真的非常好,非常专业!基本上不用怎么修改就可以直接使用。不过在使用过程中,还是有些地方需要我们去注意。以下是我们公司在使用过程中出现的情况,请ZLG团队及D12的用户们多多交流!1.?? 当MCU通过D12发数据给主机时不能简简单单的调用写函数,如下:D12_WriteEndpoint(5,64,filebuffer);如果您用的是51等慢速的单片机可能没什么事情,当用ARM等快速的处理器作大量数据传输时可能会出现丢包的现象。在MCU连续的给主机发包的过程中,主机还没有将上一个包的数据从D12读走(就是D12的缓冲区处于满的情况),MCU又将另一个包写进去时会覆盖掉以前的。因此在每写入一个包时必须先判断 D12有没有空的缓冲区,如下:??? while (1)?????????????????? //如果端点的两个缓冲区都为满,则等待{? outportb(D12_COMMAND,0x85);? EndpState = inportb(D12_DATA);? EndpState = 0x60;? if (EndpState != 0x60)???????? //有空缓冲区,则发送数据? {??? break;? }}D12_WriteEndpoint(5,64,filebuffer);2.?? 同样,在主机给MCU发送大量数据时也可能会产生丢包的情况。起初我们的MCU是直接查询bEPPflags.bits.ep2_rxdone来判断D12是否收到主机数据,然后读取。下面的代码在主程序中执行,如下:? if (bEPPflags.bits.ep2_rxdone == 1)?? //收到主机下载的数据? {??????????????????????????? ??? for(i=0;i64;i++)?????????? //从缓冲区中读走一包数据??? {??????? CheckSum +=EpBuf;???? //累加校验和??????? *pUsbByte= EpBuf;???? //保存数据??????? pUsbByte ++;??? }??? RecDataLong += 64;???????? //累加收到的数据长度??? ARMDisableInt(); //关中断,我觉得没有必要,因为都没有判断该标志??? bEPPflags.bits.ep2_rxdone = 0; //清空端点2收到数据标志??? ARMEnableInt();}有一种很奇怪的现象:当PC机打开的应用程序越多且频繁的操作这些程序时,丢包的现象越严重!所以当我要从PC机发送一个几十MByte的文件到MCU时,就不能让PC机做其它事情了,否则就出现丢包。起初我们在PC机软件做了很多努力,但都失败。后来发现不是D12里的缓冲区被覆盖了,而是软件包中的 EpBuf缓冲区被覆盖。因为D12接收到主机发来的一个包后会产生中断,然后将数据放入EpBuf,而此时如果我们还没有从EpBuf读走数据时, D12又从主机收到一个包产生中断,此时读取包数据时就会将EpBuf原来的数据覆盖掉,因为端点接收数据处理函数便没有去判断 bEPPflags.bits.ep2_rxdone是否等于0,如下:void ep2_rxdone(void){? INT8U len;? D12_ReadLastTransactionStatus(4);?????????????? //清中断标志位? len = D12_ReadEndpoint(4,EP2_PACKET_SIZE,EpBuf);?? //读取缓冲区中的数据? if (len != 0)??? bEPPflags.bits.ep2_rxdone = 1;}此时由于已经调用了D12_ReadEndpoint(4,EP2_PACKET_SIZE,EpBuf)函数,而在该函数中写了清缓冲区的命令,所以主机就会继续往D12发送数据,而使EpBuf内容被覆盖。我觉得最简单最保险的方法就是从D12中读出的数据直接存入自己的缓冲区中,就可以保证在给D12 写清缓冲区命令前数据都被存放好了,而且也提高了响应速度!修改ep2_rxdone函数如下:extern unsigned char *pUsbByte;???????????? //指向自己定义的缓冲区void ep2_rxdone(void){? INT8U len;? D12_ReadLastTransactionStatus(4);???????? //清中断标志位if (pUsbByte to_pctrans.tran
您可能关注的文档
- Module9Unit4Behindbeliefs教学重难点.doc
- MPEG24 中基于DT网格编码算法的实现.pdf
- MSH6在子宫内膜癌中的种系突变情况及特征荟萃分析.doc
- MTT改良法检测胎盘口服液的生物活性.doc
- MTX、米非司酮及生化汤联合治疗胎盘植入及胎盘粘连的临床研究.doc
- M+树:一种新型、高效的动态哈希算法.pdf
- N 2 O用于分娩镇痛的临床观察.doc
- N-羟基琥珀酰亚胺-荧光素-O-乙酸酯柱前衍生HPLC分离荧光检测肽及其水解产物.doc
- NATIONAL PROGRAMME FOR REHABILITATION OF PERSONS WITH DISABILITIES–A BLEND OF CBR AND IBR.doc
- NCPAP呼吸支持联合多沙普伦治疗早产儿呼吸暂停48例.doc
- Pep六下Unit4Myholiday.doc
- Peronismo y educación 19431955 el problema historiográfico de las fuentes.doc
- PEP小学五年级英语上册电子书.doc.doc
- Pfannestiel切口腹膜外剖宫产术100例及临床评价.doc
- PGE2与胎儿胎盘循环.doc
- PHARMACYFeb.2005DPC4SMAD4在子宫内膜癌中的表达及意义.doc
- Phantosys_DVP系统技术文档.pdf
- photoshop基础教程入门者使用免费.doc
- Photoimpact酶瓜.doc
- PICC在早产儿应用中常见的原因及处理.doc
原创力文档

文档评论(0)