2602|2

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于d12的某些基础问题?? [复制链接]

这几天想学usb,就看了些usb协议方面的东西,pdiusbd12芯片,现在也基本能看懂网上的一些程序,但是有几个问题还是搞不大懂,望各位在座高手指点一二,谢谢~~

1.D12到底何时产生中断
  就是什么时候int_n会产生低电平呢?


2.Setup包中的数据在哪里?为什么可以直接读取数据包的8字节数据
      
  setup 设置阶段 主机发送一个令牌包setup pid 和地址等信息到端点0的out,它的这些信息在哪里?不在缓冲区中吗?我看很多程序都是--得到中断--查出是setup包--去端点0的out缓冲区读数据--得到8字节数据(bmRequestType,brequest,wvalue,windex,wlength)收到的是第二个包的数据。


3.d12得到数据后返回的ack呢?它自动发的吗?
   如上题,书上说设置阶段总共有三个包--主机发送令牌包,主机发送数据包(里面就是要求了),设备发送应答包,可是我从来没见到应答包,是不是设备自己发过去的?什么时候发的?
4. d12有个命令叫- 应答建立(f1),
  
void endp0_out(void)                            //终端点0输出中断处理

{

Last_Status.Register=read_last_status(0);

if(Last_Status.Status.setup_packet)

  {

   Control_Data.wLength=0;

   Control_Data.wCount=0;

   if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(unsigned char *)(&(Control_Data.DeviceRequest)))!=sizeof(REQUESTCMD))//read_endpoint_buff函数中当数据读完后执行了一个清除缓冲区操作,这个操作在‘应答建立’命令之前执行会有效吗?
{

set_endpoint_status(0,0);//初始化端点0,等待接收一个data0 pid

set_endpoint_status(1,0);

return;

}

  Control_Data.DeviceRequest.wValue=SWAP(Control_Data.DeviceRequest.wValue);

  Control_Data.DeviceRequest.wIndex=SWAP(Control_Data.DeviceRequest.wIndex);

  Control_Data.DeviceRequest.wLength=SWAP(Control_Data.DeviceRequest.wLength);



ack_setup(0);这两个就是应答建立
  ack_setup(1);

  Control_Data.wLength=Control_Data.DeviceRequest.wLength;

  usb_flags.flags.not_end=0;

  usb_flags.flags.usb_endp0_in=1;

  usb_flags.flags.setup_packet_in=0;

  usb_flags.flags.setup_packet_out=0;

  if(Control_Data.DeviceRequest.bmRequestType&0x80){usb_flags.flags.setup_packet_in=1;return;}

  else {usb_flags.flags.setup_packet_out=1;return;}

}

else

  {

   select_endpoint(0);

   clear_buffer();

  }

}

最新回复

1.检测中断的问题 是主机usb控制器根据端口电压的变化来产生中断的,高速的和快速的好像极性相反,比如插上usb设备电压由高到底或者是由低到高 2.setup 的问题 其实当usb设备插上主机时,物理上的通讯就已经建立了,当然能通过nazi编码进行传送数据了。 3.ack   应该是自动发的吧 4.应该是先清除再应答,把缓冲区清楚准备好进行下一次数据传输   详情 回复 发表于 2009-9-4 10:16
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
没人知道吗????
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
1.检测中断的问题
是主机usb控制器根据端口电压的变化来产生中断的,高速的和快速的好像极性相反,比如插上usb设备电压由高到底或者是由低到高
2.setup 的问题
其实当usb设备插上主机时,物理上的通讯就已经建立了,当然能通过nazi编码进行传送数据了。
3.ack
  应该是自动发的吧
4.应该是先清除再应答,把缓冲区清楚准备好进行下一次数据传输

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表