找回密码
 注册
搜索
查看: 2662|回复: 18

[讨论] [讨论]usb设备如何判断是否与pc端联接

[复制链接]
发表于 2005-9-15 20:45:00 | 显示全部楼层 |阅读模式
从软件角度来说,usb设备能够判断是否已经与pc端联接么?
发表于 2005-10-1 13:00:00 | 显示全部楼层
在这里你要区分PC是HOST端,或是你的USB是个HOST端。在HOST端会有个进程在不停的检测是否有DEVICE端插入(通过中断可知)。HOST检测到有DEVICE插入,将会对该设备发送一系列的COMMAND来咨询DEVICE,DEVICE会告诉HOST,它是那类的设备等必要信息,HOST再根据这些信息给DEVICE配制相应的资源。
如果你对USB协议熟的话,你应该了解到HOST是如何侦察DEVICE是否已插入。[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-10-1 17:12:00 | 显示全部楼层
<P>楼上讲得不错</P><P>HOST是通过检测DP信号大于3.3V,就认为有Device插入吧</P>
点评回复

使用道具 举报

发表于 2005-10-9 14:22:00 | 显示全部楼层
同意楼上的
点评回复

使用道具 举报

发表于 2005-10-16 19:08:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
点评回复

使用道具 举报

发表于 2005-11-7 09:59:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>caesarbbde</I>在2005-10-1 17:12:55的发言:</B>

<P>楼上讲得不错</P>
<P>HOST是通过检测DP信号大于3.3V,就认为有Device插入吧</P></DIV>



不是的吧?
那我们经常会有USB设备插入PC之后,PC找不到这个设备,什么反应都没有的现象发生,这应该怎么样解释呢?
应该是通过PU上电平的跳变来检测的
点评回复

使用道具 举报

发表于 2005-11-7 10:02:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>Jerry311</I>在2005-10-1 13:00:25的发言:</B>
在这里你要区分PC是HOST端,或是你的USB是个HOST端。在HOST端会有个进程在不停的检测是否有DEVICE端插入(通过中断可知)。HOST检测到有DEVICE插入,将会对该设备发送一系列的COMMAND来咨询DEVICE,DEVICE会告诉HOST,它是那类的设备等必要信息,HOST再根据这些信息给DEVICE配制相应的资源。
如果你对USB协议熟的话,你应该了解到HOST是如何侦察DEVICE是否已插入。

<P align=right><FONT color=red>+3 RD币</FONT></P></DIV>


HOST可以主动的检测,但不是不停的检测,是通过中断的方式得到通知,这时候发SETUP包
SLAVE只能被人检测,但不一定触发相应的设备插入中断,所以有时也会找不到的
点评回复

使用道具 举报

发表于 2005-11-8 21:39:00 | 显示全部楼层
<P>手机USB充电时,可以简单的用电压来判断(我们目前做的手机上就是这样的)同样可以判断出是否是500mA或者100mA供电的。</P><P>然而,最准确的方法是通过协议来获取这方面的资讯。</P>
点评回复

使用道具 举报

发表于 2005-11-8 22:52:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>lwqhunter</I>在2005-11-8 21:39:01的发言:</B>

<P>手机USB充电时,可以简单的用电压来判断(我们目前做的手机上就是这样的)同样可以判断出是否是500mA或者100mA供电的。</P>
<P>然而,最准确的方法是通过协议来获取这方面的资讯。</P></DIV>
<P>请问电压检测是用ADC么?电流是怎么判断的呢?</P>
点评回复

使用道具 举报

发表于 2005-11-9 09:28:00 | 显示全部楼层
<P>通常,我们把pc做为USB的host端,把手机端的USB称为device端,当用USB连接线连接了pc和手机,一般情况下是pc端检测到有一个usb设备插入(HOST是通过检测DP信号大于3.3V,pc端有USB的最底层驱动来做这些事情);当检测到有usb设备插入到pc后,pc断会启动microsoft(如果用了这个OS)编写的USB host底层驱动向usb设备发一些usb规定通信包,我们通常称为setup包,这些包大概有5个批次吧(具体不清楚了,不过我有详细的D12设备的驱动程序);如果手机端的USB驱动能正确应答这些包,那么最原始的USB通道就打通了,(这里不考虑硬件问题哦),其实这个通道只是最原始的通道,如果要使pc和手机能正确通信,那么还得用USB类协议,这个类协议有很多,比如说mass storage;video;audio等等,通常我们用的手机有u盘功能,用的类协议就是mass storage;只有这个类协议也通了,那么pc和手机就可以正常通信了。(备注:mass storage 的pc端上层驱动windows系统自带了驱动,如果用其它类协议,得自己写usb上层驱动。)。</P><P>欢迎大家讨论这个话题阿,我对u盘包括FAT文件系统还是非常熟悉的,以后可以互相交流。</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-11-9 11:01:00 | 显示全部楼层
<P>本人提供USB网卡驱动程序源代码,功能完全兼容国外Belcarra公司的usblan驱动程序,完全自己开发,和任何公司无关.

适用于和手机进行数据传输, USB网卡, 以及具有USB接口的网络设备(成功案例有上海有线通cable modem的USB驱动).

如有公司或者个人需要购买源代码,请先email联系:mirrorlittle@sohu.com 李先生
请看<a href="http://www.52rd.com/bbs/viewthread.php?tid=3200" target="_blank" >http://www.52rd.com/bbs/viewthread.php?tid=3200</A> 贴</P><P>如果大家以后在项目中能用到,请联系,呵呵。</P>
点评回复

使用道具 举报

发表于 2006-4-6 22:44:00 | 显示全部楼层
USB otg的话,首先mcu会下一个内存段写一串数据, otg master usb ack会去读取这些数据然后确定自己是host还是device,确定后工作流程就如普通的usb设备了
点评回复

使用道具 举报

发表于 2008-4-26 15:02:00 | 显示全部楼层

我来说一说mtk上的做法

从设备检测是否和PC连接有两种办法:
1:检测USB 的VDD供电,这个VDD是和PC上的USB端口的VDD连接的。
     对于MTK手机,由于这个VDD就是Vchg(使用USB端口充电),因此,插入动作首先引起的是充电中断,但是普通的充电器也能引起充电中断,因此,需要检测DP和DM的电平状态,mtk的做法是检测DP的电平;在PC测,DM和DP有15K的下拉电阻;在充电中断发生时,把VUSB打开(时间很短,采样完adc后马上关闭,PC不会认为是一个设备的接入),检测DP的adc值,因此就能判别出来是USB充电器或数据线接入和普通的充电器接入。

   在检测出插入类型后,发一个消息到AP,AP显示充电器接入或选择USB功能;如果选usb功能,在mtk测把Vusb打开,把1.5k的电阻上拉到3.3v,这个时候PC才检测到有一个USB设备接入,开始枚举过程.
点评回复

使用道具 举报

发表于 2008-4-27 10:14:00 | 显示全部楼层
学习!
点评回复

使用道具 举报

发表于 2008-4-29 00:09:00 | 显示全部楼层
以下是引用caesarbbde在2005-10-1 17:12:00的发言:
<P>楼上讲得不错</P><P>HOST是通过检测DP信号大于3.3V,就认为有Device插入吧</P>

对于上面的DP大于3.3V,PC才能检测到表示疑问,手机上(MTK手机)DP一般通过1.5K的电阻接上拉3.3V,那么DP上的电压应该<3.3V,还是因为从BBIC输出来的DP本身也有一定的电压呢?
点评回复

使用道具 举报

发表于 2008-6-14 15:17:00 | 显示全部楼层
好帖子,让我学到不少知识 ,应该多开一些这样的帖子,大家互相讨论。
点评回复

使用道具 举报

发表于 2008-6-15 16:31:00 | 显示全部楼层
学习
点评回复

使用道具 举报

发表于 2008-6-16 13:50:00 | 显示全部楼层
以下是引用davidwang1在2008-4-26 15:02:00的发言:
从设备检测是否和PC连接有两种办法:
1:检测USB 的VDD供电,这个VDD是和PC上的USB端口的VDD连接的。
                                 对于MTK手机,由于这个VDD就是Vchg(使用USB端口充电),因此,插入动作首先引起的是充电中断,但是普通的充电器也能引起充电中断,因此,需要检测DP和DM的电平状态,mtk的做法是检测DP的电平;在PC测,DM和DP有15K的下拉电阻;在充电中断发生时,把VUSB打开(时间很短,采样完adc后马上关闭,PC不会认为是一个设备的接入),检测DP的adc值,因此就能判别出来是USB充电器或数据线接入和普通的充电器接入。

                 在检测出插入类型后,发一个消息到AP,AP显示充电器接入或选择USB功能;如果选usb功能,在mtk测把Vusb打开,把1.5k的电阻上拉到3.3v,这个时候PC才检测到有一个USB设备接入,开始枚举过程.



那就是说如果我的BB不支持USB,外加一颗USB芯片的话,我就可以在 charge的中断中读取相关ADC 的来判断是充电器 还是 USB线插入?
不知道我理解的对不对?
点评回复

使用道具 举报

发表于 2010-4-13 11:15:00 | 显示全部楼层
通过判断D+的高电平
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-25 10:15 , Processed in 0.050569 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表