OVER CURRENT PROTECT ON USB PORT

根据USB协议2.0的7.2.1.2.1 Over-Curent Protection和11.12.5 Over-current Reporting and Recovery规定,USB HOST和SELF-POWERED HUB必须执行过电流保护.保护包括两方面,一是HUB必须有办法检测过电流的情况并向USB软件报告,二是过电流限制机制不需要经过用户的机械干涉就可以重新复位.也就是11.12.5描述的Reporting and Recovery. 目前WINTV和手机部3108的设计里都没有OC保护,因此如果发生意外, 用户的USB设备马上报销,因为协议里没有说USB DEVICE必须对所接受的电流进行保护.

电路保护元器件主要有物理型的和电子型的两种.

1.物理型:自恢复保险丝(协议里提到的聚合PTC),热敏电阻,聚合开关,POLYSWITCH等,特点为
  (1)可恢复性,过电流之后又恢复到常态,不必更换;
  (2)阻抗高,一般说来,这种自恢复保险开关在电路正常状态下,其阻抗比相同的金属型熔断器高,这样,就增加了电子产品的电能消耗,对于以电池为电源的电子产品来说,这种情况是不可忽视的,在某些电路应用中,由于其电阻大而产生热噪声也是不能使用的原因;
  (3)响应速度慢,如PolySwitch响应时间是1s,与金属型熔断器、电子型限流开关相比较,这种自恢复保险开关的响应速度慢,因而它不适用于保护那些对过电流特别敏感的电路;
  (4)存在老化现象,这种有机聚合物自恢复保险开关是靠自己随温度变化的伸缩而实现过电流保护作用的,因而随着时间的推移,其特性会发生一些变化,在高可靠产品中使用这种自恢复保险开关时,要考虑这一特性;
  (5)体积较大,与金属型熔断器、电子型限流开关相比较,其承受的功率密度较低,因而体积较大。

上面这几个特点是网上COPY来的,我不太理解为什么USB协议里提到可以用聚合PTC和固态开关做电流限制.物理型只能做到OC时"消除或减小所有受影响的下行口电源",并无须用户机械干涉的RECOVRY,但并不能将OC情况报告给软件知晓.

2.电子型.就是用芯片啦,编程只要抓住几个IN/OUT PIN就可以,它内部是怎么消除过大电流,又怎么能够输出OC INDICATER我们就不用管了,省事.我在网上找了几款CURRENT LIMIT的芯片,有的其实功能也不算强.比如AAT4610(http://www.analogictech.com/products/digitalfiles/AAT4610.pdf),它的5PIN分别是INPUT / OUTPUT / ON / GND / SET, ON是芯片使能,SET接个电阻来控制限制的电流强度,其他就没了. 这仍然无法把OC情况报告给软件,废.

MAX1607(http://pdfserv.maxim-ic.com/en/ds/MAX1607.pdf)就符合要求了,8 PIN中的第5 PIN是OC OUTPUT, 这个可以连接到PXA27X CPU的USBHPWR脚上,一旦OC发生,OC OUTPUT置低, USBHPWR得知后, 会立刻做下面几件事:
1. 把该PORT断开连接,并通过USBHPEN脚停止对VBUS供电(需要硬件上实现)
2. set UHCRHPSx[POCIC] = 1
3. set UHCRHPSx[PPS] = 0
4. 前面2和3的操作会影响UHCINTS[RHSC]位,触发中断处理程序.

在程序里,usb\hcd\common\cdevice.cpp对GetPortStatus返回的OC情况进行处理.
if ( hubStatus.change.port.OverCurrentChange ) 
{
    if ( hubStatus.status.port.PortOverCurrent ) 
    {
        DetachDevice( port );
        SetOrClearFeature( port, USB_REQUEST_CLEAR_FEATURE, USB_HUB_FEATURE_PORT_POWER );
    } 
    else
    {
        hubStatus.change.port.ConnectStatusChange = 1;
    }
}

如果是短路(比如电缆或接口老化)原因造成的OVER CURRENT, 我们可以在DetachDevice后, 在UI上弹出个警告框提醒用户, 让用户操作来干涉并纠正; 如果是暂时的OC产生中断, 而当查询时 hubStatus.status.port.PortOverCurrent=0, 则属于自动恢复, 在协议规定的范围内.


本文转自Walzer博客园博客,原文链接:http://www.cnblogs.com/walzer/archive/2006/02/05/325585.html,如需转载请自行联系原作者

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
prs_overcurrent.c是一个用于处理电源过流保护的C语言源代码文件。 电源过流保护是一种用于保护电路免受过大电流的损害的措施。在电路中,当电流超过预设的安全限制时,电源过流保护会自动切断电源供应,以防止电路元件过热或损坏。prs_overcurrent.c就是一个实现电源过流保护功能的程序。 在代码文件prs_overcurrent.c中,我们可以看到一系列的函数和变量的定义和实现,这些函数和变量的作用是检测和响应电源过流情况。 其中包括: 1. main函数:作为程序入口,负责初始化和配置电源过流保护模块,并启动保护功能。 2. overcurrent_check函数:用于检测电流是否超过设定的阈值,根据检测结果决定是否触发过流保护。 3. overcurrent_action函数:当检测到过流情况时,该函数会执行相应的动作,例如切断电源供应、发出警报或记录异常信息。 4. overcurrent_reset函数:当过流保护动作结束后,该函数会复位过流保护模块,使其重新进入工作状态。 5. 其他辅助函数和变量:帮助实现过流保护的其他功能,例如设置阈值、记录异常日志等。 代码文件中还可能包含必要的注释,用于解释代码的作用和工作原理,以及相关的调试信息。 总之,prs_overcurrent.c是一个实现电源过流保护功能的C语言源代码文件,通过其中定义的函数和变量,可以检测和响应电路中的过流情况,提供保护措施,保证电路的正常运行和元件的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值