阅读:805回复:1
usb的一些疑惑请教
在学习usb的开发过程中,碰到了一些想不通的地方,在这里提出来,看看大家是怎么看的,请大家给我些指导,谢谢。
1。usb设备的速度怎么测量?在论坛上经常看到一些网友说自己usb设备的传输速度达到多少多少,请问这个速度怎么测量出来的? 2。bus hound和usb monitor在使用时,只要usb设备在进行bulk传输时就会重启电脑,那usb设备的bulk传输就侦测不了了,是不是这样? 3。在usb smartboard中的固件里,有很多地方有这样的语句:DISABLE 和ENABLE,我知道这是因为信号量(如beppflags)需要互斥,所以为了怕在对这些变量进行修改的时候有其他的中断程序来改动这些变量,就加入了DISABLE,ENABLE来关和开中断。 void connect_USB(void) { // reset event flags DISABLE; bEPPflags.value = 0;//清除所有状态 ENABLE; // V2.1 enable normal+sof interrupt D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE); // Initialize D12 configuration D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M); } 但是我觉得在对controldata.wcount进行改动时,也同样需要加入DISABLE和ENABLE呀,不然在对他进行改动时有可能被其他中断程序改变呀! 4。大家再看看这两个程序: void single_transmit(unsigned char * buf, unsigned char len) { if( len <= EP0_PACKET_SIZE) { D12_WriteEndpoint(1, len, buf); } } void code_transmit(unsigned char code * pRomData, unsigned short len) { ControlData.wCount = 0; if(ControlData.wLength > len) ControlData.wLength = len; ControlData.pData = pRomData; if( ControlData.wLength >= EP0_PACKET_SIZE) { D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);//发送16字节数据 ControlData.wCount += EP0_PACKET_SIZE; DISABLE; bEPPflags.bits.control_state = USB_TRANSMIT; ENABLE; } else { D12_WriteEndpoint(1, ControlData.wLength, pRomData);//发送16字节内数据 ControlData.wCount += ControlData.wLength; DISABLE; bEPPflags.bits.control_state = USB_IDLE; ENABLE; } } 第一个程序里竟然没有对contorldata.wcount和contorl_state进行修改,那会出现什么情况? 问题有些乱,欢迎大家讨论,谢谢! |
|
沙发#
发布于:2004-02-28 11:33
(1)我也不知道!是不是自己设的!usb可以自己设速度的!
(2)这个我的bulk不出现这种情况啊! (3)controldata.wcount是用户定义的全局变量,用来记录了传送了几次了(主要是在中断程序中),他不是标志位是计数器,所以没这个问题吧! (4)single_transmit函数只是用来应答!真正的传数代码并不是它,而是中断和code―transmit,不过code―transmit只用在了get―description请求中了 [编辑 - 2/28/04 by zhangzhuoliang] |
|