seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:956回复:2

关于枚举问题。

楼主#
更多 发布于:2004-05-20 20:33
之前在两个开发板上实现了u盘,ep0的差别比较大。第一块开发板上最简单了,只需要把所有的descriptor考到固定的一块地址空间,系统就可以自动完成所有枚举,软件不需要干预。第二块开发板上,就麻烦了,需要软件处理ep0中断,然后解析标准命令,然后将数据发回去。
现在有个疑问,想和大家讨论一下:
一般ep0的最大包size为8B,但是我在DI时,比如device_descriptor时,直接就把18个字节的数据发过去了,相当于是在一个中断处理程序中,就把18个字节发送过去。
照我的理解应该是来一个ep0中断发送8个字节,然后等待下一个中断啊,继续发送。所有糊涂了。

现在做的是第三块开发板,spec好像就是这么要求的,知道设置ep0 last packet寄存器,才认为这次DI结束。

seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-21 09:42
谢谢你的回复。原来那块开发板上ep0的缓冲区就是8bytes。发送的时候,每8个发送一次,然后告知host fifo中有数据,并Delay等待其读完数据,然后接着发。而不是通过发生中断,再从中断服务程序中接着发数据。

而现在手上的开发板,我看他的代码应该是如你所说。

先调着看看。。。
chenchi1982
驱动牛犊
驱动牛犊
  • 注册日期2004-03-21
  • 最后登录2018-05-26
  • 粉丝0
  • 关注0
  • 积分-12分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-21 08:13
按你的描述你的芯片的EP0缓冲区不止8BYTES
象D12芯片的0端点的缓冲区就有64BYTES,虽然它的数据手册上写的是16.
另外,你是用什么看的数据,如果你把0端点包设置为8的话,那就是肯定是几次中断,你可以在中断服务程序那里的EP0IN用串口打印点数据就知道了
游客

返回顶部