找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

M487 HSUSBD HS模式中断传输抖动大

[复制链接]
跳转到指定楼层
楼主
BOEINGNG 发表于 2024-4-20 11:15:11 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
我用M487 HSUSBD周期性的发送数据,USB的模式是高速模式,配置断点IN传输为中断传输方式,使用手动发送模式发送数据,每次判断EPA缓存为0才发送数据,中断传输的时间间隔是1ms,我给USB包建了一个FIFO,USB包产生的速率是2ms,我测了一下每次向USB写发送数据的时间间隔,发现最大时间间隔会随着测量时间的增加而增加,一般半个小时最大间隔在100ms,一个小时会在180ms左右,我们上位机是用python写的,用的libusb库,各位看看会是什么问题?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
 楼主| BOEINGNG 发表于 2024-4-23 10:50:47 | 显示全部楼层
chrishu 发表于 2024-4-23 09:36
1、每次判断EPA缓存为0才发送数据  -----怎么判断EPA缓存空的?另外怎么实现EPA空发送数据的?M487是从机, ...
  1. void transferDataPackages(USB_DATA_PACKAGES_FIFO * const packagesFIFO){
  2.         //Waiting usb send success
  3.         if(HSUSBD->EP[EPA].EPDATCNT & 0xFFFF)
  4.         {
  5.                 return;
  6.         }
  7.        

  8.         USB_DATA_PACKAGES * package = popPackageFromReadysFIFO(packagesFIFO);

  9.         formatDataAndSendPackages(package);
  10.         resetPackage(package);
  11. }
复制代码
这个在while loop中执行,只有HSUSBD->EP[EPA].EPDATCNT & 0xFFFF等于0才会发下一包数据
回复 支持 反对

使用道具 举报

板凳
 楼主| BOEINGNG 发表于 2024-4-28 18:31:50 | 显示全部楼层
chrishu 发表于 2024-4-24 13:51
你的意思是主循环里检查端点buffer的数据都发送出去了,就往buffer里填写数据,等待下一次IN令牌到来吗?
...

这问题我已经解决了,改成虚拟串口就好了
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU