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

D12芯片如果返回配置信息,最多能返回多少字节?

楼主#
更多 发布于:2004-06-11 16:45
前面记得有人说过控制端点在返回描述符或者其他信息的时候最多只能返回32字节的信息,但是当主机发出请求要得配置描述表时,所有相关接口与端节点的描述表都被返回了,加起来之后有46个字节那么多,这样的话后面的14个字节是不是直接被主机扔掉了呢?
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-13 19:32
主机发送IN令牌时,D12应该会向MCU申请中断,中断被相应后,就执行中断服务程序,在中断服务程序中会读取D12的中断寄存器,来知道是什么中断请求,进而执行相应操作!你剩下的两个字节没有发出去,你看一下程序,在第二次传送时是不是把设备描述符缓冲偏移量搞错了

[编辑 -  6/13/04 by  bobbysun2000]
eidy00
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望17点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-12 10:16
非常感谢bobbysun2000的回答,我想我的问题可能就是发送18个字节时出现的错误了!
如果是“主机对它们是一个SETUP令牌建立请求,通过IN令牌分几次获得数据的”那么怎样判断主机接收一次16个字节的数据后发送的IN令牌呢?是不是通过读中断寄存器来获取呢?
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-12 09:45
    第一个问题,上次说的只能32个字节是不合适的,今天又看了一下书,准确的应该只能一次发送16个字节,当主机请求的描述符超过16个字节时,首先通过端点发送16个字节,这时主机发现得到的数据不够,会再次发送一个IN令牌,请求做后面的字节。也就是说,请求的描述符的总字节数很多,但主机对它们是一个SETUP令牌建立请求,通过IN令牌分几次获得数据的。
    
    第二个问题,你获得的那个80 06 00 02 00 00 00 E9 肯定有问题,请求配置描述符的长度为0是不可能的。
我用BUS Hound 采集到得数据是这样的:
80 06 00 01 00 00 12 00 (这是设备描述符索取请求)
80 06 00 02 00 00 09 01 (这是配置描述符索取请求)

    第三个问题,可能是你程序的问题了,在D12_WriteEndpoint函数的一开始,就把端点缓冲的指针初始到缓冲的起始位置,所以你不用管端点的缓冲是不是被清空,应该注意的是,ControlData.pData缓冲的偏移量要控制好。
eidy00
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望17点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-11 19:28
再问大家一下,为什么发送设备描述符的时候总是发送同样的数据呢?比如第一次的16个字节发送完毕后,是否需要清空缓冲区的操作呢?不然将会把原来的前两个字节再一次的发送出去,也就完成了18个字节的发送。请谁帮帮忙阿:)
eidy00
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望17点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-11 16:48
还有,当我返回设备描述符之后,D12芯片应该接收到发送配置描述符的信息的--但是确实一下这样的信息包:80 06 00 02 00 00 00 E9   这代表什么意思呢?按理说应该是80 06 00 02 00 00 09 00这样的话才是正确的吧!
请指教!
 
游客

返回顶部