阅读:1915回复:4
救命!救命!!我的DS产生的usb驱动read时出问题了
救命!救命!!我的DS产生的usb驱动出问题了。情况是这样的,驱动能正常工作,而且应用程序可以对USB进行写操作,但进行读时出了问题,即读时死机。我看了看驱动程序的读函数Read(KIrp I) ,在其最后调用函数m_Endpoint1IN.SubmitUrb(I, pUrb, LinkTo(ReadComplete), pCompInfo, 0)死住,请问是不是这儿出了问题?请帮助解决,谢谢。
调试跟踪firmware没有收到这个读的中断 端点2 bulk 方式 读写地址:0x02,0x82; 望大虾解惑 |
|
|
沙发#
发布于:2003-05-15 13:19
hi,哥们,你的问题解决了吗,如果已经解决,请帮助我以下,
我采用DS2.6开发,和你的问题一样,请帮助!! 谢谢 |
|
板凳#
发布于:2003-05-16 09:41
这位老兄,你好.关于这个问题,俺给你解释一下...
读(readfile)的时候,在读之前,d11或其他的usb接口芯片的缓冲区应该先有效,就是里面先有东东啦,这样读才能有效,否则系统返回错误,不给读啦。 具体做法:在读之前先通知firmware(典型的,用售主命令如:read_write_register)应用层要读数据,并且告此次读包要读数据的数量,先让它给放上,超过buffer_size,只放buffer_size.使驱购缓冲区有效。这样就能读出东西啦。中断是在这个缓冲区被读完以后才发生,不是一发读命令就产生。当读完后,产生中断,在中断里看看是否上次超出了buffer_size,那么把剩下的再放进去,系统就会在下个读时刻把它读走,然后又产生中断,如此循环,直到这个读包整个完成,应用层的readfile也就返回啦。ok 应用层: ... deviceiocontrol(read_write_rigerst...); readfile(...); ..... 驱动: ... switch(iocontrolcode) ... case read_write_rigerst: buildvendorrequest(.....); brak; ... firmware: ..... //over good luck to you! |
|
|
地板#
发布于:2003-05-16 09:43
如果认为俺回答得好,可适当给俺点分。。。 :D
|
|
|
地下室#
发布于:2003-07-14 17:41
void WriteEndPoint(uint8 endp, uint16 len,uint8* buf)
{ uint16 i; ISP1581_ENDPT_INDEX = endp; ISP1581_BUFFER_LENGTH = len; //SPLIT(ISP1581_BUFFER_LENGTH,0)=SPLIT(len,1); //SPLIT(ISP1581_BUFFER_LENGTH,1)=SPLIT(len,0); for(i=0;i<len;i++) //写缓冲区数据,到数目后自动使能。 //DDRA = 0xFF; { ISP1581_DATA_PORT = *(buf++); ISP1581_CONTROL_FUNCTION |= 0x08; //使能缓冲区 } 哥们帮我看看,这段固件写代码正确吗,可用户读不到数据呀! |
|
|