找回密码
 立即注册
查看: 94|回复: 8

关于USB寄存器INMAXP的问题

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:79
  • 最近打卡:2025-06-17 09:31:19

5

主题

49

回帖

687

积分

高级会员

积分
687
发表于 2025-5-23 12:04:47 | 显示全部楼层 |阅读模式
在USB全速协议中,BULK传输一次的数据包最多为64字节,所以按道理应将USB IN端点的最大数据包大小值设置为8。


按照此理解,程序如果向IN端点的FIFO写入大于64字节的数据包,硬件可以自动将数据包裁剪为64字节。

但是在USB例程中,每次向端点填入数据包的长度却限制为64,等待当次包发送完后再填入下一段64字节。
实际操作中,如果向IN端点一次写入超过64字节长度的数据,实际硬件的确会发送超过64字节长度的数据包,
会触发主机的错误机制,下发端点复位指令。

那这个寄存器的功能是不是理解错了呢?
回复

使用道具 举报 送花

3

主题

698

回帖

107

积分

等待验证会员

积分
107
发表于 2025-5-23 12:08:00 | 显示全部楼层
在USB全速协议中,寄存器(如INMAXP)的作用是用于缓存和存储数据,以减少数据传输的时间和空间消耗。寄存器的大小设置直接影响数据传输的效率和稳定性。

1. 寄存器的作用  
   寄存器(如INMAXP)是一个临时的缓存区域,用于存储读写操作中的数据。在USB全速协议中,通常会使用寄存器来缓存数据,以减少数据传输的开销。

2. 最大数据包大小的设置  
   在USB全速协议中,BULK传输是指一次性传输多个数据字节,通常用于优化传输效率。寄存器的最大数据包大小设置为64字节,是因为:
数据传输效率:如果寄存器的最大大小设置为64字节,可以确保数据传输的效率,避免不必要的数据溢出。
数据缓存能力:寄存器的大小决定了数据缓存的能力,64字节的大小提供了足够的缓存能力以应对正常的数据传输需求。

3. 寄存器的实际功能  
   寄存器实际上是一个大小固定为64字节的临时缓存区域。当读写操作完成后,寄存器的内容会自动裁剪为64字节,以保持大小恒定。

4. 错误机制的处理  
   在USB全速协议中,当寄存器的内容读入超过64字节时,寄存器会自动裁剪为64字节。然而,如果寄存器的实际大小小于64字节,例如设置为8字节,读入超过8字节的数据时,寄存器会自动裁剪为8字节,导致数据丢失。此外,当寄存器的内容读入超过64字节时,寄存器会发送错误包,导致主机错误机制发回还原指令。

5. 如何调整寄存器的大小  
   如果寄存器的实际大小小于64字节,可以考虑增加寄存器的大小,以避免数据溢出或丢失。例如,设置寄存器的大小为64字节,可以确保数据传输的效率和稳定性。

6. 总结  
   寄存器的大小设置为64字节是正确的,以确保数据传输的效率和稳定性。如果寄存器的实际大小小于64字节,需要调整大小以避免数据溢出或丢失。错误机制的处理同样重要,确保寄存器的内容不会被错误地裁剪或发回还原指令。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 08:51:39
已绑定手机

68

主题

1926

回帖

4312

积分

荣誉版主

无情的代码机器

积分
4312
发表于 2025-5-23 12:20:44 | 显示全部楼层
没有自动裁剪,需要代码确认发送状态。和wMaxPacketSize保持匹配
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-06-17 09:09:48
已绑定手机

79

主题

5137

回帖

9134

积分

超级版主

DebugLab

积分
9134
发表于 2025-5-23 12:27:47 | 显示全部楼层
是软件拆分数据包的
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:79
  • 最近打卡:2025-06-17 09:31:19

5

主题

49

回帖

687

积分

高级会员

积分
687
发表于 2025-5-23 14:06:24 | 显示全部楼层
erci*** 发表于 2025-5-23 12:20
没有自动裁剪,需要代码确认发送状态。和wMaxPacketSize保持匹配

那这样的话这个寄存器有什么作用呢?如果不能自动裁剪的话,FIFO剩余的空间也用不了呀

点评

你可以配到最大值呀,只要和你描述符和代码逻辑匹配就行  详情 回复 发表于 2025-5-23 14:11
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 08:51:39
已绑定手机

68

主题

1926

回帖

4312

积分

荣誉版主

无情的代码机器

积分
4312
发表于 2025-5-23 14:11:56 | 显示全部楼层
rm5*** 发表于 2025-5-23 14:06
那这样的话这个寄存器有什么作用呢?如果不能自动裁剪的话,FIFO剩余的空间也用不了呀 ...

你可以配到最大值呀,只要和你描述符和代码逻辑匹配就行
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:79
  • 最近打卡:2025-06-17 09:31:19

5

主题

49

回帖

687

积分

高级会员

积分
687
发表于 2025-5-23 14:26:11 | 显示全部楼层
erci*** 发表于 2025-5-23 14:11
你可以配到最大值呀,只要和你描述符和代码逻辑匹配就行

我的意思是:本来有128字节的FIFO,按照BULK数据包的限制每次只能写入64字节,要等这次包发完了,才能填入下一个64字节,这个128字节的FIFO不就浪费了?
收OUT包的时候,主机一次多发几个64字节的包,能存入FIFO,然后再取缓存,反过来发IN包就没这个功能了。

点评

发必须一包一包发,不能直接连续写64*N,至于芯片内部有没有用闲置FIFO空间做缓存功能就不知道了。  详情 回复 发表于 2025-5-23 14:35
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 08:51:39
已绑定手机

68

主题

1926

回帖

4312

积分

荣誉版主

无情的代码机器

积分
4312
发表于 2025-5-23 14:35:24 | 显示全部楼层
rm5*** 发表于 2025-5-23 14:26
我的意思是:本来有128字节的FIFO,按照BULK数据包的限制每次只能写入64字节,要等这次包发完了,才能填 ...

发必须一包一包发,不能直接连续写64*N,至于芯片内部有没有用闲置FIFO空间做缓存功能就不知道了。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:79
  • 最近打卡:2025-06-17 09:31:19

5

主题

49

回帖

687

积分

高级会员

积分
687
发表于 2025-5-23 14:42:09 | 显示全部楼层
Debu*** 发表于 2025-5-23 12:27
是软件拆分数据包的

那就是这个寄存器只用作 AUTOSET 的自动置位IPRDY用了,没用到这个功能就不需要管这个寄存器?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-18 05:41 , Processed in 0.197131 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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