whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:807回复:1

usb的一些疑惑请教

楼主#
更多 发布于:2004-02-25 09:35
在学习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进行修改,那会出现什么情况?
问题有些乱,欢迎大家讨论,谢谢!
zhangzhuoliang
驱动牛犊
驱动牛犊
  • 注册日期2003-06-23
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望42点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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]
游客

返回顶部