Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

Компоненты и материалы

Микроконтроллер Microchip ATtiny85 × 1
Стабилизатор SparkFun LM1117 3.3 В × 1
USB‑разъём Type‑A (SparkFun) × 1
Резистор 10 кОм × 2
Резистор 2.21 кОм × 1
Arduino Proto Shield × 1
Тактическая кнопка 12 мм (SparkFun) × 1
Power Bank / зарядка с поддержкой QC × 1
Перемычки 0.1″ (набор) × 8
Пин‑хедер 36 пинов (0.1″) × 1
Резистор 0.05 Ом (шунт) × 10
Arduino UNO (для программирования) × 1
Перемычки «папа‑мама» × 7
Светодиод × 1
Резистор 22.1 кОм × 1

Инструменты

Программное обеспечение

О проекте

Введение

Многие USB‑устройства используют Qualcomm Quick Charge (QC) для быстрой зарядки при напряжениях 9/12 В вместо стандартных 5 В. Это позволяет использовать QC‑совместимые пауэрбанки для питания проектов, требующих большей мощности или напряжения.

Цель проекта — создать устройство, «взламывающее» протокол QC, чтобы хоббисты и инженеры могли получать 5/9/12 В от своих пауэрбанков для энергозатратных задач.

Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство
Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство
Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

На фото: выход 5, 9, 12 В от QC 2.0 пауэрбанка под нагрузкой 10 Ом / 5 Вт.

Разработка устройства

Два активных компонента: стабилизатор LM1117 3.3 В и МК ATtiny85. Остальное — резисторы, кнопка, разъёмы, перемычки, макетная плата.

Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

Компоненты размещаются аккуратно, затем паяются. Нулевые перемычки используются для перемыканий. На плате есть джамперы для отключения цепей во время прошивки (линии SPI — MOSI, MISO, SCK — в работе являются GPIO).

Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство
Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство
Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

Прошивка ATtiny85 через ISP

ATtiny85 извлекается из основания и ставится на макетку. Arduino UNO прошивается скетчем ArduinoISP (Файл → Примеры → ArduinoISP).

Шаги:

  1. Установить поддержку ATtiny в Arduino IDE (работа David A. Mellis).
  2. Записать загрузчик (Burn Bootloader) через Arduino UNO как ISP.
  3. Разработать и загрузить код через Arduino UNO как ISP.
Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство
Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

ISP = in‑system programmer. Альтернативно — прошить ATtiny85 на плате, сняв все джамперы вокруг него.

Принцип работы

Устройство подключается к QC‑совместимому пауэрбанку (по умолчанию 5 В). После прошивки все джамперы замкнуты — МК общается с источником по линиям D+/D‑.

LM1117 питает ATtiny85. 4 вывода МК подключены к двум делителям напряжения (по два резистора 10 кОм и 2.2 кОм) для формирования уровней на D+/D‑. Ещё один вывод — кнопка с подтяжкой к питанию.

Протокол QC 2.0/3.0 использует линии D+/D‑ для согласования напряжения. Таблица уровней (по даташиту CHY):

Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

QC 2.0 активируется, когда на D+ и D‑ одновременно поданы 0.6 В (строка 4) минимум на 1.25 с. Если D+ падает ниже 0.325 В — режим отключается, вывод 5 В.

ATtiny85 через делители формирует нужные комбинации. Пример: 3.3 В на D+ — оба вывода (PB3, PB4) в HIGH. 0.6 В на D‑ — верхний резистор (PB1) HIGH, нижний (PB3) LOW.

Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

Кнопка (INPUT_PULLUP): пока не нажата — HIGH, цикл ожидания. Нажатие прерывает цикл, устанавливается следующее напряжение, снова ожидание. Светодиод светит тускло (5 В), средне (9 В), ярко (12 В) — визуальная индикация.

Возможные применения

Поддержка других классов QC

QC 2.0 Class B, QC 3.0, QC 4.0 обратно совместимы с Class A — устройство может работать, но доступны только 5/9/12 В. Для других напряжений изучите даташиты CHY 100/101/103 и адаптируйте код.

⚠ Предупреждения!

Внимание: Не повторяйте проект, если пункты выше не понятны — риск пожара или порчи оборудования!

Напряжения можно переключать вручную без МК — достаточно 4 перемычки для воспроизведения состояний D+/D‑ по таблице. МК может быть избыточен для таких простых переходов.

Ссылки

Код

ATtiny85 Code (C/C++) — QC Controller

///========================= 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);
  // 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
}

Схемы

Схема на circuits.io
Реверс‑инжиниринг Qualcomm Quick Charge 2.0/3.0 с ATtiny85: практическое руководство

Производственный процесс

  1. Qualcomm запускает 5G-включенную AI дрон-платформу для драйвинга автономных БПЛА инноваций
  2. Герметизация FDM-деталей в Stratasys Insight: практическое руководство
  3. Принтер Markforged Mark Two ускоряет инновации на хакатоне по аппаратному обеспечению MIT 2016 года
  4. Интерактивный гироскопический LED-дисплей на NeoPixel Ring и Arduino
  5. DIY-костюм «Облако»: LED-лента, Arduino Nano и детали SparkFun
  6. Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
  7. Компактная MIDI-барабанная установка с 3D-печатью
  8. Освоение распознавания и синтеза речи на Arduino Due
  9. Внешний S-метр для радиостанций Icom: CI-V + Arduino
  10. Компактный стерео FM-радио на RDA5807 и Arduino Nano