OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2742|回复: 3

虚拟USB口实验

[复制链接]

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-26 17:10:49 | 显示全部楼层 |阅读模式
本帖最后由 xujian468 于 2016-5-26 17:12 编辑

修改了原子哥的部分程序,把固定的一组字节数据发送给上位机,使用COM口接收,发现发送1~63个字节都能发送成功(上位机完整接收数据),发送64个字节或者以上就需要发送很多次上位机才能接收到,这是啥原因?
for(i=0;i<63;i++)
{
        USB_USART_SendData(0xaa);//发送63个字节的0xaa
}

这个发送一次,上位机就能接收到
for(i=0;i<64;i++)
{
        USB_USART_SendData(0xaa);//发送64个字节的0xaa
}

需要ARM发送很多次上位机才能接收到
这是啥原因?
跟下面这部分代码有关吗?
void EP1_IN_Callback (void)
{
        u16 USB_Tx_ptr;
        u16 USB_Tx_length;
        if(uu_txfifo.readptr==uu_txfifo.writeptr)                //无任何数据要发送,直接退出
        {
                return;
        }
        if(uu_txfifo.readptr<uu_txfifo.writeptr)                //没有超过数组,读指针<写指针
        {
                USB_Tx_length=uu_txfifo.writeptr-uu_txfifo.readptr;//得到要发送的数据长度
        }else                                                                                        //超过数组了 读指针>写指针
        {
                USB_Tx_length=USB_USART_TXFIFO_SIZE-uu_txfifo.readptr;//得到要发送的数据长度
        }
        if(USB_Tx_length>VIRTUAL_COM_PORT_DATA_SIZE)        //超过64字节?
        {
                USB_Tx_length=VIRTUAL_COM_PORT_DATA_SIZE;        //此次发送数据量
        }
        USB_Tx_ptr=uu_txfifo.readptr;                                        //发送起始地址               
        uu_txfifo.readptr+=USB_Tx_length;                                //读指针偏移  
        if(uu_txfifo.readptr>=USB_USART_TXFIFO_SIZE)        //读指针归零,1024
        {
                uu_txfifo.readptr=0;
        }
        UserToPMABufferCopy(&uu_txfifo.buffer[USB_Tx_ptr], ENDP1_TXADDR, USB_Tx_length);
        SetEPTxCount(ENDP1, USB_Tx_length);
        SetEPTxValid(ENDP1);         
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
 楼主| 发表于 2016-5-27 09:24:18 | 显示全部楼层
怎么没大神来提点一下呀
回复 支持 反对

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
 楼主| 发表于 2016-5-28 14:52:12 | 显示全部楼层
大神快出现吧
回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-5-28 15:13:56 | 显示全部楼层

USB协议规定,
一帧数据的最后一个包,字节数量必须<64(注意是<,而不是≤);
否则会认为本帧没有结束,等待上述条件出现。



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 20:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表