wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1359回复:8

D12 固件程序中定义的缓冲区的问题?

楼主#
更多 发布于:2004-06-17 21:03
我正在学习D12的固件程序,有点问题不太明白,向大家请教一下:程序中定义的CONTROL_XFER结构体中的
unsigned char dataBuffer[MAX_CONTROLDATA_SIZE],
为什么把MAX_CONTROLDATA_SIZE定义为8,我看了看设备描述符中端点0的最大包的大小为16呀?并且这个值在控制输出中断函数
void EP0_RxDone_Isr(void)中使用到:
if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE)
{  
    mudk12Flags.bits.bControl_State = USB_IDLE;
    USBCHIP_SetEndpointStatus(0, 1);
    USBCHIP_SetEndpointStatus(1, 1);      
}        注:  CONTROL_XFER    ControlData;
为什么 ControlData.DeviceRequest.wLength的值不能大于8呀?
 :mad:
多多交流,少走弯路!!!
stanleyhe
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2006-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-17 21:07
USB的标准请求应该都是8个字节。
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-17 21:57
可是,《D12固件编程与驱动开发》书上说unsigned char dataBuffer[MAX_CONTROLDATA_SIZE]中存储的是带数据传输的控制请求(包括标准请求和自定义请求)所要求传输的数据呀?
多多交流,少走弯路!!!
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-06-18 15:00
让我来告诉你吧。上面的这段程序是在令牌包阶段,也就是在象SetXXX或GetXXX这样的请求stage。此时,这样的数据不会大于8的。如果大于8,说明数据有错。
一起交流,共同提高!
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-18 20:55
可书上是这样说得呀:ControlData.DeviceRequest.wLength表明第二阶段的数据传输长度,wLength为0,则表明无数据传输。像在Get Desecriptor和Set Desecriptor 命令中,wLength的值为描述符的长度,描述符的长度不可能不能超过8个字节呀?
多多交流,少走弯路!!!
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-06-21 11:57
请注意,这还有一个数据方面的问题:H-->D或D-->H是不同的。
一起交流,共同提高!
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-22 08:40
lejianz 大侠,能不能说得再详细一点!!我这两天一直为这个问题所困!!!先谢啦!!!
多多交流,少走弯路!!!
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2004-06-22 13:49
我不是说了吗?MAX_CONTROLDATA_SIZE是在SETxxx令牌包阶段,数据从H至D,它的长度不会大于8的,如果真要大于8,那只好STALL了。象SetDescriptor请求,它是不支持的。你可以看一看此DEMO程序中的StandardRequest是否有SetDescriptor请求。仔细想一下吧。
一起交流,共同提高!
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-06-22 17:46
非常感谢lejianz,我好像明白一点啦!!! :)
多多交流,少走弯路!!!
游客

返回顶部