周立功的工程师: 你好.我公司是贵公司的客户,我们现在有一个问题想赐教! 我用的是LPC2148,DMA传输模式,上位机用逻辑端点1, 发送2字节数据到下位机. 上位机程序. ret = WriteData214x(1, sendbuf, 2, 1000); if (ret != 2) { MessageBox("逻辑端点 1 发送数据错误!"); return; } //这里定义了sendbuf[512]; ret = ReadData214x(0, &ack, 1, 1000); if (ret != 1) { MessageBox("逻辑端点 1 接收数据错误!"); return; } if (ack != 1) { MessageBox("逻辑端点 1 应答错误"); return; } 下位机程序. if (bEPPflags.bits.ep1_rxdma == 1) { len = USB_DMASetTransLength(2, 2); //配置逻辑端点2的DMA接收数据长度 DISABLE(); bEPPflags.bits.ep1_rxdma = 0; pSrc = USB_DMAGetBuffer(2); len = (pSrc[0] << 8) + pSrc[1]; /* 取得需要接收的数据的字节长度 */ pDst = USB_DMAGetBuffer(3); a[0]=0x01; memcpy(pDst,a,1); len =USB_DMASetTransLength(3, 1);// 配置物理端点3 DMA发送缓冲区大小 USB_DMAStart_IN(3); ENABLE(); }
问题:: 编译后,运行上位机程序出现"逻辑端点 1 接收数据错误!" 而当我把上面的程序改成 ret = WriteData214x(1, sendbuf, 512, 1000); if (ret != 512) { MessageBox("逻辑端点 1 发送数据错误!"); return; } //这里定义了sendbuf[512]; 后程序运行完全正常! 如果把WriteData214x 里的函数发送字节个数改成小于512时就会出现错误! (1) 请问,是不是下位机端点缓冲区设置了512,上位机就只能发送512个字节的包吗?我这里只想发送2个字节的数据.或小于512的包,请问是不是每次都得发送512的包? (2) 请问WriteData214x是不是有问题? 谢谢!! |