Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids

Onderdelen en benodigdheden

Onderdeel Aantal
Microchip ATtiny85 1
SparkFun LM1117 3.3V Regulator 1
SparkFun USB Male A connector 1
Weerstand 10 kΩ 2
Weerstand 2,21 kΩ 1
Arduino Proto Shield 1
SparkFun Drukknop 12mm 1
QC Power Bank of Lader (Quick Charge 2.0/3.0 compatibel) 1
Generieke Jumper (0,1") 8
Male Header 36 posities 1 rij lang (0,1") 1
Weerstand 0,05 Ω (shunt voor stroommeting) 10
Arduino UNO (als ISP programmeerder) 1
Male/Female Jumper Wires 7
LED (generiek) 1
Weerstand 22,1 kΩ 1

Benodigde gereedschappen

  • Soldeerbout

Apps en online services

  • Arduino IDE

Over dit project

Inleiding

Veel USB‑gevoede apparaten gebruiken Qualcomm Quick Charge (QC) voor sneller laden bij hogere spanningen dan de standaard 5V. Dit project ontwikkelt een apparaat dat het QC‑protocol “hackt”, zodat hobbyists en ingenieurs hun QC‑powerbanks kunnen gebruiken voor projecten die 9V of 12V nodig hebben (tot 18W).

Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids

Ontwikkeling van de Hack / Apparaat

Het apparaat heeft twee actieve componenten: de LM1117 3.3V regulator en de ATtiny85 MCU. De rest zijn weerstanden, drukknop, connectors, jumpers, headers, protoboard.

Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids

Eerst worden componenten netjes geplaatst en gesoldeerd. Nul‑ohm links verbinden delen. Jumpers schakelen de on‑board schakeling uit voor programmeren (SPI pinnen zijn tijdens werking GPIO).

Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids

ATtiny85 programmeren met ISP

Voor programmeren haal je de ATtiny85 uit de IC‑voet en zet hem op een breadboard. Een Arduino UNO fungeert als ISP programmeerder via de ArduinoISP sketch (File > Examples > ArduinoISP).

Stappen:

  1. Installeer ATtiny ondersteuning in Arduino IDE (David A. Mellis).
  2. Brand de bootloader met Arduino UNO als ISP.
  3. Ontwikkel en upload code met Arduino UNO als ISP.
Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids

Alternatief: programmeer de ATtiny85 op de print door alle jumpers eromheen te halen.

Apparaat werking

Sluit het apparaat aan op een QC‑compatibele powerbank. Standaard levert USB 5V. Na het programmeren moeten alle jumpers zitten zodat de MCU via D+/D‑ met de QC‑bron communiceert.

De LM1117 voedt de ATtiny85. De MCU start de code. 4 I/O pinnen sturen twee spanningsdelers (2x 10k, 2x 2,2k) aan voor D+ en D‑. Een drukknop (input pull‑up) laat de gebruiker de spanning wisselen.

Hoe QC 2.0/3.0 spanningsschakeling werkt

USB heeft 4 lijnen: VBUS (standaard 5V), D+, D‑, GND. Bij gewone laders is VBUS vast. Bij QC zit er een interne boost converter die de spanning aanpast op verzoek van het aangesloten apparaat (PD).

QC 2.0/3.0 gebruikt D+/D‑ voor communicatie. De PD legt spanningen op D+/D‑; de QC‑lader past VBUS aan. Volgende tabel (uit CHY datasheet) toont welke D+/D‑ combinatie welke uitgangsspanning geeft:

Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids

QC 2.0 activeert wanneer D+ en D‑ de waarden van rij 4 hebben gedurende minstens 1,25s. Als D+ onder 0,325V daalt, stopt QC en valt VBUS terug naar 5V.

De ATtiny85 genereert via de spanningsdelers de benodigde D+/D‑ signalen:

Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids
  • Voor 3,3V op D+: beide pinnen (PB3, PB4) HIGH.
  • Voor 0,6V op D‑: bovenste pin HIGH, onderste LOW (PB1, PB3).

De drukknop (pull‑up) houdt de code in een while lus zolang niet ingedrukt. Bij indrukken breekt de lus, volgende spanning wordt ingesteld, weer een while lus. Een LED brandt zwak (5V), matig (9V), fel (12V) als visuele indicatie.

Mogelijke toepassingen

  • 12V LED‑strips aansturen
  • RF zenders/ontvangers voor groter bereik
  • 12V Relais, motoren
  • Elke spanning 1,25–10V met LM317 of LM2596
  • 9V IR remote
  • Robot auto voeding
  • Laptop laden met 20V (zie waarschuwing)
  • Systemen tot 18W (WiFi, LTE, IoT)
  • Backup voeding remote systemen
  • LCD/LED monitors, printers, scanners
  • Lage‑vermogen portable PC

Ondersteuning voor andere QC klassen

QC 2.0 Class B, QC 3.0 en QC 4.0 zijn achterwaarts compatibel met QC 2.0 Class A. Dit apparaat werkt waarschijnlijk met alle actuele laders/powerbanks, maar spanningopties blijven 5V, 9V, 12V. Voor andere spanningen: raadpleeg CHY 100/101/103 datasheets en pas code aan.

⚠️ Waarschuwing!

  • Gebruik alleen hoogwaardige QC Power Banks/Laders met kortsluitbeveiliging. Belasting mag niet boven 18W uitkomen. Controleer het typeplaatje van de belasting.
  • Vermijd 20V uitgang: de LM1117 3.3V regulator haalt maximaal 15V. In de code nooit D+ en D‑ tegelijk 3,3V laten worden.
  • Indien 20V nodig is (QC 2.0 Class B, QC 3.0, 4.0), gebruik een regulator die >20V aan kan (bv. LM317 op 3,3V). Anders worden regulator en MCU vernietigd.
  • Let op polariteit van de uitgang: rood = +, blauw = –.
  • Vermijd losse USB contacten (contactweerstand = hitte, rendementsverlies).
  • Tijdens ISP programmeren alle jumpers verwijderen om SPI pinnen te isoleren.
  • Code niet wijzigen zonder QC protocol te begrijpen. Ontwerp bedoeld voor QC 2.0 Class A, deels bruikbaar voor hogere standaarden.
  • De hack werkt niet met alle QC laders/powerbanks.
  • GPIO schakelvolgorde is cruciaal om afschakeling van hoog‑spanningsmodus te voorkomen.

Let op: Repliceer dit project niet als bovenstaande punten niet begrepen worden; brandgevaar of schade kan ontstaan!

Handmatig spannen wisselen zonder MCU is mogelijk: 4 jumper draadjes die de D+/D‑ condities nabootsen door verbinding met Vcc (3,3V) en GND (0V) op de weerstanden in de juiste volgorde. MCU is voor dergelijke eenvoudige overgangen misschien overkill.

Referenties

Code (ATtiny85)

///========================= Algorithm ========================///
/* First, Connect the D+ pin to a voltage 0.325 to 2 volts and keep the D- floating, then wait at least 2 seconds.
   Two actions happen during this 2 seconds:
   The D+ and D- voltage equal a voltage between 0.325 to 2 volts for 1.25 seconds.
   (because the D+ and D- pins connect together inside the CHY100 at first)
   Then the D+ keeps at a voltage between 0.325 to 2 volts and the D- voltage decrease to zero.
   (because the D+ and D- pins disconnect and a resistor inside the CHY100 discharges the D-)
   *** CHY100 is a QC 2.0 Protocol interface chip inside Power bank/charger ........ other QC 2.0 chips are probably similar
   Make D+ above 3.0 V first and then connect the D- to a voltage between 0.325 to 2 volts. The VBUS jumps to 9V.
   While keeping the D- connection with a voltage between 0.325 to 2 volts, make D+ a voltage between 0.325 to 2 volts.
   The VBUS jumps to 12V. (because the D+ and D- voltage are between 2V and 0.325V)
   Disconnect the D+ from a voltage between 0.325 to 2 volts. VBUS jumps to 5V,
   Because the QC2.0 exits Voltage changing mode and VBUS goes to the default value 5V.
   start from beginning when needing to enter QC2.0 again)
*/
// ============ IMPORTANT NOTE ================
// *** Sequence of making pins HIGH and LOW is important
// *** If D+ falls below 0.325V during transition because of wrong GPIO Switching Sequence
// *** QC 2.0 will exit High Voltage Mode and VBUS will go back to 5 Volts
// ==============================================
#define PUSH_SWITCH 0
#define Dp_2k2 4
#define Dp_10k 3
#define Dn_2k2 2
#define Dn_10k 1
int Press_Detect = 0;

void setup() {
  pinMode(PUSH_SWITCH, INPUT_PULLUP);
  // Now Initiating QC Handshake by making D+ 0.6 v keeping D- at Gnd
  Init_QC();
}

void loop() {
  //// 5V ////
  while (digitalRead(PUSH_SWITCH) == 1) { }
  delay(250);
  //// 9v ////
  Set_9V();
  while (digitalRead(PUSH_SWITCH) == 1) { }
  delay(250);
  //// 12v ////
  Set_12V();
  while (digitalRead(PUSH_SWITCH) == 1) { }
  delay(250);
  // Set_5V();
}

///********************** Functions **********************///
void Init_QC() {
  //pinMode(Dn_2k2, INPUT);
  //pinMode(Dn_10k, INPUT);
  pinMode(Dp_2k2, OUTPUT);
  pinMode(Dp_10k, OUTPUT);
  digitalWrite(Dp_2k2, LOW);
  digitalWrite(Dp_10k, HIGH);
  delay(3000);
  // now QC protocol is active
}

void Set_9V() {
  pinMode(Dp_2k2, OUTPUT);
  pinMode(Dp_10k, OUTPUT);
  digitalWrite(Dp_10k, HIGH);
  digitalWrite(Dp_2k2, HIGH);
  pinMode(Dn_2k2, OUTPUT);
  pinMode(Dn_10k, OUTPUT);
  digitalWrite(Dn_2k2, LOW);
  digitalWrite(Dn_10k, HIGH);
}

void Set_12V() {
  pinMode(Dp_2k2, OUTPUT);
  pinMode(Dp_10k, OUTPUT);
  pinMode(Dn_2k2, OUTPUT);
  pinMode(Dn_10k, OUTPUT);
  digitalWrite(Dn_2k2, LOW);
  digitalWrite(Dn_10k, HIGH);
  digitalWrite(Dp_10k, HIGH);
  digitalWrite(Dp_2k2, LOW);
}

void Set_5V() {
  pinMode(Dp_2k2, OUTPUT);
  pinMode(Dp_10k, OUTPUT);
  digitalWrite(Dp_10k, HIGH);
  digitalWrite(Dp_2k2, LOW);
  pinMode(Dn_2k2, OUTPUT);
  pinMode(Dn_10k, OUTPUT);
  digitalWrite(Dn_2k2, LOW);
  digitalWrite(Dn_10k, LOW);
}

void Set_20V() {
  // change Voltage Regulator !!!
  // do at your own risk
}

Schema

Circuits.io schema

Reverse‑Engineering Qualcomm Quick Charge 2.0/3.0 met ATtiny85: Praktische Gids

Productieproces

  1. Interactieve gyroscoop LED-display met NeoPixel-ring en Arduino
  2. DIY Wolk Kostuum: LED-strip, Arduino Nano & SparkFun Onderdelen
  3. Een eenvoudige obstakelsensor bouwen met Arduino – IR LED & Fotodiodo Tutorial
  4. Bouw een Compacte MIDI Drumkit met 3D-printen
  5. Spraakherkenning & Synthese Meesteren op Arduino Due
  6. Externe S-meter voor Icom-radios via CI-V en Arduino
  7. Compacte RDA5807 Mini Stereo Radio – Arduino Nano Project
  8. IoT4Car: Voertuigtelemetrie Vastleggen & Analyseren met Arduino MKR1000
  9. FDM-delen afdichten met Stratasys Insight: Een praktische gids
  10. Markforged Mark Two versnelt innovatie op MIT Hardware Hackathon 2016
  11. Qualcomm lanceert 5G-ingeschakeld AI-drone-platform voor autonom UAV-innovatie