eidy00
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望17点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1333回复:5

D12芯片固件程序中遇到的一些问题

楼主#
更多 发布于:2004-06-10 16:10
当接收到主机发送的setup信息包之后,返回d12芯片的设备描述符信息包,但是信息包的长度是18字节,d12芯片端点1每次只能发送16个字节的信息,所以应该发送两次。在周力功的固件编程中ep0_txdone函数中并没有体现出多次发送的语义阿!按照我的理解,可能的意义就是第一次发送完16个字节之后,整个程序进入另外一个循环,首先还是要读取中断寄存器命令,然后判断寄存器中的数据,继而进行数据的发送。可是第一次接收完setup包之后,不是通过f2命令将缓冲区清空了吗?这样的话怎样进行下面未完成的数据发送呢?

以上是我个人的理解,不知道哪里有错误,请大家指点一下!
能否讲一下,超过16个字节之后应该怎样发送呢?谢谢了
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-10 17:14
端点0的发送中断服务程序ep0_txdone中有对于超过16个字节的处理啊,但只处理两次,即不能超过32个字节,端点0所要一次发送的数据不可能超过超过32个字节,你可以看一下那些设备描述符、配置描述符、接口描述符、端点描述符等,肯定不会超过32个字节的。
eidy00
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望17点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-10 17:23
是不是每发送完一次数据,16个字节或者小于16个字节的话,都要发一个命令数据fah,来表示缓冲区数据有效是吗?
这样的话连续进行两次ep0_txdone函数是否就可以将超过16个字节的数据发送出去呢?谢谢了
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-10 18:30
没注意耶,看来又学到了一点,谢谢
测试过,正确!
端点0的发送中断服务程序ep0_txdone中有对于超过16个字节的处理啊,但只处理两次,即不能超过32个字节,端点0所要一次发送的数据不可能超过超过32个字节,你可以看一下那些设备描述符、配置描述符、接口描述符、端点描述符等,肯定不会超过32个字节的。
 
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-10 19:47
在ep0_txdone代码中有这样的语句:
 if( i >= EP0_PACKET_SIZE)
 {
    。。。。。。
 }
 else if( i != 0) {
 。。。。。。
}
表示如果请求的数据大于16个字节,但小于32个字节,则通过两次发,这种情况下,只有一个请求。比如主机请求设备描述符(18个字节)。
如果大于32个字节,ep0_txdone这样处理是不行的,但实际中,各种描述符都不大于32个字节,所以这样处理没有问题。对于端点1和端点2,也可以这样处理,但我觉得在应用程序中,请求的字节数不能大于端点缓冲区的大小,要想这样做,就象你说的,可以重复进行多次请求,但这对于端点0是没有必要的,因为用户基本不用在应用程序中控制端点0!
------------------------------------------------------------
是不是每发送完一次数据,16个字节或者小于16个字节的话,都要发一个命令数据fah,来表示缓冲区数据有效是吗?
这样的话连续进行两次ep0_txdone函数是否就可以将超过16个字节的数据发送出去呢?谢谢了



[编辑 -  6/10/04 by  bobbysun2000]
eidy00
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望17点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-11 09:22
我也是按照分两次发送信息包的方法实现,不过现在出现了一个问题:就是当第一次发送完毕后,进行第二次发送的时候还是要首先读取一下端点1的状态01h,这时候返回的状态是缓冲区已满!这样根本没办法进行下一次的数据发送;然后我就发送了一个f2命令,来清空缓冲区,不过这样虽然没有缓冲区满的问题了,但是主机就根本收不到发送的数据包了!
请问这样该怎么办呢?
游客

返回顶部