高级会员

- 积分
- 890
- 金钱
- 890
- 注册时间
- 2014-8-16
- 在线时间
- 193 小时
|
最近在开发usb转串口,忽然发现某种情况下不会输出,直到下一次输出才会把上次的输出一起显示出来,然后追踪发现在这种特殊的情况下,正好发送的是64字节数据,根据usb2.0协议,如果发送64字节数据,需要再另外发送一次0长度的数据包。因为没有太多时间看底层的东西,直接修改发送与发送回调函数
在hw_config.c文件中添加need0lengthpacket标志位
在Handle_USBAsynchXfer函数中的最后一个else中最后添加一段代码
[mw_shl_code=c,true]if (USB_Tx_length == 64)
{
USB_Need_0_Length_Packet = 1;
}[/mw_shl_code]
在usb_endp.c文件中的EP1_IN_Callback的判断USART_Rx_length==0的代码段中添加如下代码
[mw_shl_code=applescript,true]if(USB_Need_0_Length_Packet == 1)
{
USB_Need_0_Length_Packet = 0;
SetEPTxCount(ENDP1, 0);
SetEPTxValid(ENDP1);
}[/mw_shl_code]
然后再编译运行就可以了。
|
|