阅读:954回复:2
关于枚举问题。
之前在两个开发板上实现了u盘,ep0的差别比较大。第一块开发板上最简单了,只需要把所有的descriptor考到固定的一块地址空间,系统就可以自动完成所有枚举,软件不需要干预。第二块开发板上,就麻烦了,需要软件处理ep0中断,然后解析标准命令,然后将数据发回去。
现在有个疑问,想和大家讨论一下: 一般ep0的最大包size为8B,但是我在DI时,比如device_descriptor时,直接就把18个字节的数据发过去了,相当于是在一个中断处理程序中,就把18个字节发送过去。 照我的理解应该是来一个ep0中断发送8个字节,然后等待下一个中断啊,继续发送。所有糊涂了。 现在做的是第三块开发板,spec好像就是这么要求的,知道设置ep0 last packet寄存器,才认为这次DI结束。 |
|
沙发#
发布于:2004-05-21 08:13
按你的描述你的芯片的EP0缓冲区不止8BYTES
象D12芯片的0端点的缓冲区就有64BYTES,虽然它的数据手册上写的是16. 另外,你是用什么看的数据,如果你把0端点包设置为8的话,那就是肯定是几次中断,你可以在中断服务程序那里的EP0IN用串口打印点数据就知道了 |
|
板凳#
发布于:2004-05-21 09:42
谢谢你的回复。原来那块开发板上ep0的缓冲区就是8bytes。发送的时候,每8个发送一次,然后告知host fifo中有数据,并Delay等待其读完数据,然后接着发。而不是通过发生中断,再从中断服务程序中接着发数据。
而现在手上的开发板,我看他的代码应该是如你所说。 先调着看看。。。 |
|