r1743 - developers/werner/usb-pullup
werner at sita.openmoko.org
werner at sita.openmoko.org
Sat Apr 14 00:31:32 CEST 2007
Author: werner
Date: 2007-04-14 00:31:20 +0200 (Sat, 14 Apr 2007)
New Revision: 1743
Modified:
developers/werner/usb-pullup/README
developers/werner/usb-pullup/new.fig
developers/werner/usb-pullup/new.spice
developers/werner/usb-pullup/runs
developers/werner/usb-pullup/si.pl
Log:
Improved performance with high-impedance load on D+.
Modified: developers/werner/usb-pullup/README
===================================================================
--- developers/werner/usb-pullup/README 2007-04-13 19:58:31 UTC (rev 1742)
+++ developers/werner/usb-pullup/README 2007-04-13 22:31:20 UTC (rev 1743)
@@ -6,13 +6,9 @@
2) Replace R1911, Q4901, R4910, and D4910 with the circuit shown
in new.fig
- For Q1, Q2, RB1, and RB2 an NXP PEMH19 can be used, so the number
+ For Q1, Q2, RB1, and RB2 an NXP PEMH14 can be used, so the number
of components stays the same.
- R4910 is split into R1 and R2 in order to bias both transistors.
- The value of R1 and R2 has been slightly adjusted to compensate
- for losses over Q1 and Q2.
-
This two-transistor solution also eliminates the USB_PULLUP to
nRESET path that might allow mis-configured GPIO to keep the
device out of reset.
@@ -44,22 +40,19 @@
The simulation also models the 10 uA the CPU may draw on nRESET.
To perform all simulations shown here, simply run "./runs".
-USB attached:
+An example:
-Switches Q2.IE I(IO_3V3) V(nRESET)
-USB: 2.09 mA 2.10 mA 2.63 V pull-up enabled
-USB+UG: 2.26 pA 58.11 uA 2.96 V pull-up disabled
-USB+UP: 2.31 mA 2.32 mA 2.61 V invalid !
-USB+RG: 3.04 pA 100.00 uA 90.00 nV reset
-USB+RG+UG: 0.00 pA 100.00 uA 90.00 nV reset
-USB+RG+UP: 184.93 uA 284.92 uA 90.00 nV reset (*)
+RUSB=1000:
+Switches Q2.IE V(RUSB) I(IO_3V3) V(nRESET)
+: 1.24 mA 1.24 V 1.25 mA 3.02 V pull-up enabled
+UG: 2.92 pA 2.92 nV 80.21 uA 3.20 V pull-up disabled
+UP: 1.26 mA 1.26 V 1.27 mA 3.01 V invalid !
+RG: 27.38 uA 27.38 mV 357.38 uA 320.00 nV reset
+RG+UG: 1.10 pA 1.10 nV 400.21 uA 320.00 nV reset
+RG+UP: 53.83 uA 53.83 mV 383.83 uA 320.00 nV reset (*)
+Here, the external load on D+ is 1000 kOhm to ground. The columns
+show the current into the load, the voltage on D+, the total
+current drawn from IO_3V3, and the resulting voltage on nRESET.
-Without USB:
-
-Switches Q2.IE I(IO_3V3) V(nRESET)
-: 0.00 pA 10.00 uA 2.97 V pull-up enabled
-UG: 0.00 pA 58.11 uA 2.96 V pull-up disabled
-RG: 0.00 pA 100.00 uA 90.00 nV reset
-
(*) Is such a high Q2.IE acceptable in this (probably rare) state ?
Modified: developers/werner/usb-pullup/new.fig
===================================================================
--- developers/werner/usb-pullup/new.fig 2007-04-13 19:58:31 UTC (rev 1742)
+++ developers/werner/usb-pullup/new.fig 2007-04-13 22:31:20 UTC (rev 1743)
@@ -7,121 +7,129 @@
Single
-2
1200 2
-6 3225 3975 3900 4125
+6 10500 7800 11100 8700
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 10800 7800 10800 8400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 10500 8400 11100 8400
+4 1 0 50 -1 2 12 0.0000 4 135 90 10800 8700 0\001
+-6
+6 5625 3375 6300 3525
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3225 3975 3375 3975 3375 4125 3225 4125 3225 3975
-4 0 0 50 -1 0 12 0.0000 4 135 375 3525 4125 RRG\001
+ 5625 3375 5775 3375 5775 3525 5625 3525 5625 3375
+4 0 0 50 -1 0 12 0.0000 4 135 375 5925 3525 RRG\001
-6
-6 8250 7200 8850 8100
+1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4800 3450 300 300 4800 3450 5100 3450
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 6000 5700 6300 5700 6300 6600 6000 6600 6000 5700
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 6600 7200 7500 7200 7500 7500 6600 7500 6600 7200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 8550 7200 8550 7800
+ 8100 6900 8100 7800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 8250 7800 8850 7800
-4 1 0 50 -1 2 12 0.0000 4 135 90 8550 8100 0\001
--6
-1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2400 4050 300 300 2400 4050 2700 4050
+ 3600 7350 6600 7350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6150 6600 6150 7350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7500 7350 8100 7350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 8100 3600 6450
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3300 8100 3900 8100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 6300 3600 6000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3450 6150 3750 6150
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3900 3300 4800 3300 4800 3600 3900 3600 3900 3300
+ 3525 6825 3675 6825 3675 6975 3525 6975 3525 6825
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 3525 7575 3675 7575 3675 7725 3525 7725 3525 7575
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 9300 7650 10200 7650 10200 7950 9300 7950 9300 7650
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8550 7800 9300 7800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 10200 7800 10800 7800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+ 1 0 1.00 60.00 120.00
+ 8550 6900 8100 7350 8550 7800
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 6300 2700 7200 2700 7200 3000 6300 3000 6300 2700
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
- 3900 3450 3300 3450 3300 4800
+ 6300 2850 5700 2850 5700 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3300 3450 3300 2700
+ 5700 2850 5700 2100
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 5700 3000 5700 3900
+ 8100 2400 8100 3300
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 4800 3450 5700 3450
+ 7200 2850 8100 2850
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 0 1.00 60.00 120.00
- 5700 3450 6150 3900
+ 8100 2850 8550 3300
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 6000 1800 6300 1800 6300 2700 6000 2700 6000 1800
+ 8400 1200 8700 1200 8700 2100 8400 2100 8400 1200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6150 1350 6150 1800
+ 8550 750 8550 1200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
- 6150 2700 6150 3000 5700 3450
+ 8550 2100 8550 2400 8100 2850
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6150 3900 6150 5100
+ 5700 300 5700 600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3300 900 3300 1200
+ 5550 450 5850 450
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3150 1050 3450 1050
+ 8550 300 8550 600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6150 900 6150 1200
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6000 1050 6300 1050
+ 8400 450 8700 450
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3150 1800 3450 1800 3450 2700 3150 2700 3150 1800
+ 5550 1200 5850 1200 5850 2100 5550 2100 5550 1200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3300 1350 3300 1800
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 6900 4350 7800 4350 7800 4650 6900 4650 6900 4350
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6150 4500 6900 4500
+ 5700 750 5700 1200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
- 3300 3450 2400 3450 2400 3750
+ 5700 2850 4800 2850 4800 3150
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 0 1.00 60.00 120.00
- 2400 3825 2400 4275
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 5
- 1 0 1.00 60.00 120.00
- 7800 4500 8550 4500 8550 6300 8100 6750 8550 7200
+ 4800 3225 4800 3675
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3000 4800 3600 4800
+ 5400 4200 6000 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 2100 4800 2700 4800
+ 4500 4200 5100 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 2400 4350 2400 4800
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 6000 5100 6300 5100 6300 6000 6000 6000 6000 5100
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 6600 6600 7500 6600 7500 6900 6600 6900 6600 6600
+ 4800 3750 4800 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 8100 6300 8100 7200
+ 6150 5250 6150 5700
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3600 6750 6600 6750
+ 6000 4950 6300 4950
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 6150 6000 6150 6750
+ 6150 4800 6150 5100
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 7500 6750 8100 6750
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3600 7500 3600 5850
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3300 7500 3900 7500
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3600 5700 3600 5400
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
- 3450 5550 3750 5550
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3525 6225 3675 6225 3675 6375 3525 6375 3525 6225
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
- 3525 6975 3675 6975 3675 7125 3525 7125 3525 6975
-4 0 0 50 -1 0 12 0.0000 4 135 705 3600 2325 RR = 33k\001
-4 0 0 50 -1 0 12 0.0000 4 135 675 6450 2325 R1 = 680\001
-4 1 0 50 -1 0 12 0.0000 4 135 795 4350 3150 RB1 = 22k\001
-4 0 0 50 -1 0 12 0.0000 4 180 1200 6000 3525 Q1 (hFE = 200)\001
-4 0 0 50 -1 2 12 0.0000 4 135 90 3450 1725 1\001
-4 0 0 50 -1 2 12 0.0000 4 135 90 6300 1725 1\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 5250 3300 3\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 6300 3075 4\001
-4 1 0 50 -1 0 12 0.0000 4 135 675 7350 4200 R2 = 680\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 6000 4575 5\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 3150 3300 2\001
-4 0 0 50 -1 0 12 0.0000 4 135 840 3600 1125 VIO =3.3V\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 3000 1125 1\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 5850 1125 1\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 3300 5100 0\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 2400 5100 0\001
-4 1 0 50 -1 0 12 0.0000 4 135 795 7050 6450 RB2 = 22k\001
-4 0 0 50 -1 0 12 0.0000 4 180 1200 8400 6825 Q2 (hFE = 200)\001
-4 0 0 50 -1 0 12 0.0000 4 135 720 6450 5625 RU = 47k\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 3600 7800 0\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 5850 6600 7\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 8700 5625 8\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 7800 6600 9\001
-4 1 0 50 -1 2 12 0.0000 4 135 180 8700 7275 10\001
-4 0 0 50 -1 0 12 0.0000 4 135 360 3825 6375 RUP\001
-4 0 0 50 -1 0 12 0.0000 4 135 390 3750 7125 RUG\001
-4 0 0 50 -1 0 12 0.0000 4 180 5145 3600 8925 Q1, Q2, RB1, and RB2 are integrated in an NXP PEMH19 dual NPN\001
-4 1 0 50 -1 2 12 0.0000 4 135 90 3300 5625 1\001
-4 2 0 50 -1 0 12 0.0000 4 135 555 1950 4275 = 10uA\001
-4 2 0 50 -1 0 12 0.0000 4 135 630 1950 3975 IRESET\001
+ 8550 3300 8550 6900
+4 1 0 50 -1 0 12 0.0000 4 135 795 7050 7050 RB2 = 22k\001
+4 0 0 50 -1 0 12 0.0000 4 180 1200 8400 7425 Q2 (hFE = 200)\001
+4 0 0 50 -1 0 12 0.0000 4 135 720 6450 6225 RU = 47k\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 3600 8400 0\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 5850 7200 7\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 7800 7200 9\001
+4 0 0 50 -1 0 12 0.0000 4 135 360 3825 6975 RUP\001
+4 0 0 50 -1 0 12 0.0000 4 135 390 3750 7725 RUG\001
+4 0 0 50 -1 0 12 0.0000 4 180 5145 3600 9525 Q1, Q2, RB1, and RB2 are integrated in an NXP PEMH19 dual NPN\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 3300 6225 1\001
+4 1 0 50 -1 0 12 0.0000 4 135 480 9750 7875 RUSB\001
+4 1 0 50 -1 2 12 0.0000 4 135 180 8700 8025 10\001
+4 0 0 50 -1 0 12 0.0000 4 135 705 6000 1725 RR = 33k\001
+4 0 0 50 -1 0 12 0.0000 4 135 765 8850 1725 R1 = 1500\001
+4 1 0 50 -1 0 12 0.0000 4 135 795 6750 2550 RB1 = 22k\001
+4 0 0 50 -1 0 12 0.0000 4 180 1200 8400 2925 Q1 (hFE = 200)\001
+4 0 0 50 -1 2 12 0.0000 4 135 90 5850 1125 1\001
+4 0 0 50 -1 2 12 0.0000 4 135 90 8700 1125 1\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 7650 2700 3\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 8700 2475 4\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 5550 2700 2\001
+4 0 0 50 -1 0 12 0.0000 4 135 840 6000 525 VIO =3.3V\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 5400 525 1\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 8250 525 1\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 5700 4500 0\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 4800 4500 0\001
+4 2 0 50 -1 0 12 0.0000 4 135 555 4350 3675 = 10uA\001
+4 2 0 50 -1 0 12 0.0000 4 135 630 4350 3375 IRESET\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 5850 5025 1\001
+4 1 0 50 -1 2 12 0.0000 4 135 90 8700 5025 5\001
Modified: developers/werner/usb-pullup/new.spice
===================================================================
--- developers/werner/usb-pullup/new.spice 2007-04-13 19:58:31 UTC (rev 1742)
+++ developers/werner/usb-pullup/new.spice 2007-04-13 22:31:20 UTC (rev 1743)
@@ -3,28 +3,27 @@
VIO 1 0 DC 3.3
IRESET 2 0 DC 0.00001
-RR 1 2 33000
-RB1 2 3 22000
-RB2 7 9 22000
-RU 5 7 47000
+RR 1 2 10000
+RB1 2 3 47000
+RB2 7 9 47000
+RU 1 7 47000
-* Drop IO_3V3 in two steps, so that we get a useful bias on each transistor
-R1 1 4 680
-R3 5 8 680
+R1 1 4 1500
Q1 4 3 5 QMOD
-Q2 8 9 10 QMOD
+Q2 5 9 10 QMOD
+* Change <RUSB> to the respective resistance of the load
+RUSB 10 0 <RUSB>
+
* Switch: uncomment to pull nRESET low
*RRG 2 0 0.001
* Switch: uncomment to drive USB_PULLUP high (invalid !)
*RUP 1 7 0.001
* Switch: uncomment to drive USB_PULLUP low
*RUG 7 0 0.001
-* Switch: uncomment to connect USB
-*RUSB 10 0 0.001
.MODEL QMOD NPN BF=200
.OP
-.PRINT OP @Q2[IE] I(VIO) V(2)
+.PRINT OP @Q2[IE] V(10) I(VIO) V(2)
.END
Modified: developers/werner/usb-pullup/runs
===================================================================
--- developers/werner/usb-pullup/runs 2007-04-13 19:58:31 UTC (rev 1742)
+++ developers/werner/usb-pullup/runs 2007-04-13 22:31:20 UTC (rev 1743)
@@ -1,13 +1,17 @@
#!/bin/sh
-echo "Switches Q2.IE I(IO_3V3) V(nRESET)"
-for n in USB USB+UG USB+UP USB+RG USB+RG+UG USB+RG+UP \
- '' UG RG; do
- printf "%-16s" "$n:"
- sed '/^\*R\('`echo "$n" |
- sed 's/+/\\\\|/g'`'\) /s/^.//' <new.spice |
- spice -b 2>/dev/null |
- sed '/^0 */s///p;d' |
- perl si.pl A A V
+for r in 0.0001 1000 10000 1000000; do
+ echo
+ echo "RUSB=$r:"
+ echo "Switches Q2.IE V(RUSB) I(IO_3V3) V(nRESET)"
+ for n in '' UG UP RG RG+UG RG+UP; do
+ printf "%-12s" "$n:"
+ sed '/^\*R\('`echo "$n" |
+ sed 's/+/\\\\|/g'`'\) /s/^.//' <new.spice |
+ sed 's/<RUSB>/'$r'/' |
+ spice -b 2>/dev/null |
+ sed '/^0 */s///p;d' |
+ perl si.pl A V A V
+ done
done
# Don't know why SPICE complains about my .PRINT commands. It does the right
Modified: developers/werner/usb-pullup/si.pl
===================================================================
--- developers/werner/usb-pullup/si.pl 2007-04-13 19:58:31 UTC (rev 1742)
+++ developers/werner/usb-pullup/si.pl 2007-04-13 22:31:20 UTC (rev 1743)
@@ -2,33 +2,47 @@
sub cvt
{
- $_[0] =~ /-?(\d.\d+)e[-+](\d+)/ || die "$_[0]";
+ $_[0] =~ /-?(\d.\d+)e([-+]\d+)/ || die "$_[0]";
$m = $1;
$e = $2;
- $p = " ";
- while ($e % 3) {
+ while (abs($e) % 3) {
$m *= 10;
- $e++;
+ $e--;
}
- if ($e > 9) {
+ if ($e < -9) {
$p = "p";
- $e -= 12;
+ $e += 12;
}
- elsif ($e > 6) {
+ elsif ($e < -6) {
$p = "n";
- $e -= 9;
+ $e += 9;
}
- elsif ($e > 3) {
+ elsif ($e < -3) {
$p = "u";
- $e -= 6;
+ $e += 6;
}
- elsif ($e > 0) {
+ elsif ($e < 0) {
$p = "m";
+ $e += 3;
+ }
+ elsif ($e < 3) {
+ $p = " ";
+ }
+ elsif ($e < 6) {
+ $p = "k";
$e -= 3;
}
- while ($e > 0) {
+ elsif ($e < 9) {
+ $p = "M";
+ $e -= 6;
+ }
+ elsif ($e < 12) {
+ $p = "G";
+ $e -= 9;
+ }
+ while ($e < 0) {
$m /= 10;
- $e--;
+ $e++;
}
print sprintf("%6.2f",$m)." $p";
}
More information about the commitlog
mailing list