Сотрудничество
ИСКУССТВО
КРАСОТА И ЗДОРОВЬЕ
РЕМЕСЛО
КУЛЬТУРА И ИСТОРИЯ
РАЗВЛЕЧЕНИЯ
ЭКОЛОГИЯ
ЕДА И НАПИТКИ
ОБРАТНАЯ ИНЖЕНЕРИЯ
НАУКИ
СПОРТ
ТЕХНОЛОГИИ
НОСИМЫЕ УСТРОЙСТВА
Ввод в эксплуатацию: первый час с вашим собственным чипом, проверенный ESP32
English
Youblob (drawn from the sketch's pin map) · CC0
Ed

Создано

Ed

29. сентябрь 2026FI
44
0
0
0
0

Ввод в эксплуатацию: первый час с вашим собственным чипом, проверенный ESP32

Ввод в эксплуатацию (bring-up) — так инженеры называют первое включение нового кремния, и порядок действий важнее любого отдельного теста. Сначала смотрите, потом подавайте питание, сначала питание, потом тактовый сигнал, и в любом случае ограничьте ток, прежде чем делать что-либо ещё, поскольку короткое замыкание, которое ограничитель тока остановил бы за секунду, может уничтожить единственные имеющиеся у вас чипы. Эта ступень — план ввода в эксплуатацию для PWM диммера из предыдущих ступеней, на макетной плате со ступени 2. ESP32 выполняет работу лаборатории: формирует тактовый сигнал чипа, удерживает его сброс, задаёт скважность на восьми выводах и измеряет время PWM, который возвращается, после чего выводит PASS или FAIL для каждой скважности. Блокнот превращает сбой в название вывода, провод которого неисправен. Честно говоря: чипа пока нет. Скетч скомпилирован для этой схемы, а ожидаемые значения получены из симуляций предыдущих ступеней; первый реальный запуск — за вами.
Продвинутый
Один день, когда придёт чип

Инструкции

1

Какие числа ожидать и как читать сбой

Загрузка блокнота Jupyter…
2

Чип, который вы запускаете

Встроенная схема подключает подтягивающие резисторы к каждому входу, поэтому неподключённый чип остаётся в отключённом состоянии. Именно это ядро и проверяет данный план.
3

Перед подачей питания

Ничего не подключено: осмотрите чип-на-плате, установленный на breakout-плате, под лупой: посадка ровная, без перемычки припоя, ничего не отходит. Затем мультиметром измерьте сопротивление между одной контактной площадкой VDD IO и одной контактной площадкой GND IO breakout-платы, в обеих полярностях, и запишите оба значения. Показание, близкое к нулю, означает короткое замыкание: остановитесь. В таблице контактных площадок для run-1 указано, какие площадки breakout-платы являются VDD IO и GND IO; используйте таблицу вашего запуска, так как wafer.space утверждает, что распиновка меняется между запусками. Таким же образом проверьте, что ни одна контактная площадка данных не замкнута на соседнюю или на землю.

Материалы для этого шага:

Кристалл заказной ASICКристалл заказной ASIC1 штука
Печатная платаПечатная плата1 штука

Необходимые инструменты:

МультиметрМультиметр
4

Питание при низком пределе тока

Установите лабораторный источник питания на напряжение питания вашего чипа перед подключением. Это напряжение зависит от библиотек, с которыми был собран ваш чип: библиотеки шаблона по умолчанию рассчитаны на 5 В, а также возможна сборка с библиотеками на 3,3 В. Возьмите точное значение из документации к вашему запуску; таблица контактных площадок run-1 называет контакты питания, но не их напряжение. Установите предел тока на самое низкое значение, при котором источник еще стабилизирует напряжение, подключите VDD IO и GND IO, и включите питание, при этом ESP32 должен оставаться отключенным. Без тактового сигнала и при всех входах, подтянутых к земле, чип должен оставаться неподвижным. Запишите ток. Если источник сразу уходит в ограничение тока, выключите питание: где-то есть короткое замыкание. Затем запишите ток еще дважды: в режиме сброса при работающем тактовом сигнале и во время воспроизведения паттерна. Эти три значения - собственная сигнатура вашего чипа; если плата позже потребляет заметно больше, чем сегодня, на ней неисправность.

Необходимые инструменты:

Лабораторный источник питанияЛабораторный источник питания
МультиметрМультиметр
5

Подключите ESP32

Двенадцать проводов, как на рисунке и в заголовке скетча: GPIO 27 к пину тактового сигнала, 26 к rst_n, 32 к входу 0 (enable), 13, 14, 18, 19, 21, 22, 23 и 25 к двунаправленным пинам с 0 по 7, а двунаправленный пин 8 обратно к GPIO 34, плюс общий провод земли. GPIO 34 — это вывод только для входа на ESP32, поэтому он никогда не сможет конфликтовать с выходом микросхемы. Деталь ESP32 — это устройство на 3,3 В, и его входы не выдерживают 5 В. Если уровень ввода-вывода вашей микросхемы не 3,3 В, поставьте преобразователи уровней на все двенадцать линий: три четырёхканальные платы. Распространённый тип имеет подтягивающие резисторы с обеих сторон, которые могут перебивать слабые подтягивающие к земле резисторы микросхемы, пока ESP32 не начнёт управлять своими пинами; скетч удерживает сброс и разрешение в низком уровне сразу после запуска, до того как начнёт работать тактовый сигнал.

Материалы для этого шага:

Преобразователь логических уровнейПреобразователь логических уровней3 штук
Соединительные проводаСоединительные провода1 штука

Необходимые инструменты:

Макетная платаМакетная плата
6

The test sketch

bringup.ino. It starts the chip's clock with the ESP32's LED PWM peripheral at 100 kHz, with 1-bit resolution for a plain square wave; holds reset low for 1,000 chip clocks; checks that the output stays low while enable is off; then sets seven duty values and measures the high time with pulseIn, averaged over eight periods, against 10 microseconds per step, within 3 microseconds. It compiles for the ESP32 with the Arduino ESP32 core 3.3.12; it has not been run, because the chip does not exist yet.
bringup.inocpp
// SPDX-License-Identifier: Apache-2.0
// First-light test for the PWM dimmer chip (Youblob silicon rungs 3 and 6), run from an ESP32.
// The ESP32 is the whole lab: it makes the chip's clock, holds its reset, sets the duty on eight
// pads, and times the PWM that comes back, then prints PASS or FAIL for each duty value.
//
// Wiring, through a logic level converter if your chip's I/O is not 3.3 V (see the blueprint):
//   CLK      GPIO 27  -> clk pad         RST_N  GPIO 26 -> rst_n pad   (both clear of the boot strapping pins)
//   EN       GPIO 32  -> input[0]        D0..D7 GPIO 13,14,18,19,21,22,23,25 -> bidir[0..7]
//   PWM_IN   GPIO 34  <- bidir[8]        (GPIO 34 is input-only on the ESP32: it cannot fight the chip)
//   and a common ground.

const int PIN_CLK = 27, PIN_RST = 26, PIN_EN = 32, PIN_PWM = 34;
const int DATA_PINS[8] = {13, 14, 18, 19, 21, 22, 23, 25};

// 100 kHz: slow enough for a level converter's pull-up edges, and one chip clock is 10 us,
// so pulseIn's 1 us resolution sees a tenth of a clock.
const uint32_t CHIP_CLK_HZ = 100000;
const float US_PER_CLK = 1e6f / CHIP_CLK_HZ;
const float PERIOD_US = 256 * US_PER_CLK;          // one PWM period: 256 chip clocks = 2560 us
const float TOL_US = 3.0f;                         // allowed error, about a third of a clock

void setDuty(uint8_t d) {
  for (int b = 0; b < 8; b++) digitalWrite(DATA_PINS[b], (d >> b) & 1);
}

// Average high time over n periods; returns -1 if the pin never went high (pulseIn timed out).
float meanHighUs(int n) {
  float sum = 0;
  for (int i = 0; i < n; i++) {
    unsigned long t = pulseIn(PIN_PWM, HIGH, 3 * (unsigned long)PERIOD_US);
    if (t == 0) return -1;
    sum += t;
  }
  return sum / n;
}

bool alwaysLow(unsigned long ms) {
  unsigned long t0 = millis();
  while (millis() - t0 < ms)
    if (digitalRead(PIN_PWM)) return false;
  return true;
}

void setup() {
  Serial.begin(115200);
  delay(500);
  for (int b = 0; b < 8; b++) pinMode(DATA_PINS[b], OUTPUT);
  pinMode(PIN_RST, OUTPUT);
  pinMode(PIN_EN, OUTPUT);
  pinMode(PIN_PWM, INPUT);

  // Reset low BEFORE the clock starts, then give the chip some clocks in reset.
  digitalWrite(PIN_RST, LOW);
  digitalWrite(PIN_EN, LOW);
  setDuty(0);
  if (!ledcAttach(PIN_CLK, CHIP_CLK_HZ, 1)) {      // 1-bit resolution: a plain square wave
    Serial.println("FAIL: could not start the clock on GPIO 27");
    return;
  }
  ledcWrite(PIN_CLK, 1);                           // 1 of 2 steps high = 50 % duty
  delay(10);                                       // 1,000 chip clocks in reset
  digitalWrite(PIN_RST, HIGH);

  Serial.printf("# chip clock %lu Hz, PWM period %.0f us\n", (unsigned long)CHIP_CLK_HZ, PERIOD_US);
  Serial.println("duty,expected_us,measured_us,result");
  int fails = 0;

  // Disabled: the output must stay low whatever the duty.
  setDuty(200);
  bool low = alwaysLow(20);
  Serial.printf("disabled,0,%s,%s\n", low ? "0" : "high seen", low ? "PASS" : "FAIL");
  fails += !low;

  digitalWrite(PIN_EN, HIGH);
  const uint8_t duties[] = {0, 1, 16, 64, 128, 200, 254};
  for (uint8_t d : duties) {
    setDuty(d);
    delay(10);                                     // let a few periods pass with the new value
    float expected = d * US_PER_CLK;
    float got;
    bool ok;
    if (d == 0) {
      ok = alwaysLow(20);
      got = ok ? 0 : meanHighUs(8);                // a pad stuck high shows up here as a duty above 0
    } else {
      got = meanHighUs(8);
      ok = got >= 0 && fabsf(got - expected) <= TOL_US;
    }
    Serial.printf("%u,%.1f,%.1f,%s\n", d, expected, got, ok ? "PASS" : "FAIL");
    fails += !ok;
  }
  Serial.printf("# %d failure(s)\n", fails);
}

void loop() {}

Необходимые инструменты:

Отладочная плата ESP32Отладочная плата ESP32
Настольный компьютерНастольный компьютер
7

Как выглядит правильный вывод микросхемы

Откройте монитор последовательного порта на скорости 115200 бод. Работающая микросхема выводит по строке: скважность, ожидаемое и измеренное время высокого уровня в микросекундах и результат: # тактовая частота микросхемы 100000 Гц, PWM период 2560 мкс duty,expected_us,measured_us,result disabled,0,0,PASS 0,0.0,0.0,PASS 1,10.0,10.0,PASS ... 254,2540.0,2540.0,PASS # 0 failure(s) Затем также посмотрите на вывод 8 с помощью осциллографа: один период при этой тактовой частоте должен составлять 2 560 микросекунд, с чистыми фронтами. Скетч измеряет время, а осциллограф показывает форму сигнала; медленный или звенящий фронт после преобразователя уровней виден только на осциллографе.

Необходимые инструменты:

Цифровой осциллографЦифровой осциллограф
8

Чип, который не запускается

Устранение неполадок при вводе в эксплуатацию.

Flow

Loading...
9

Источники и честные ограничения

**Источники**, прочитано 29 сентября 2026: wafer-space/chip-on-board-wire-bonded-pcbs, run-1/README.md (таблица контактных площадок, называющая контакты ввода-вывода VDD и GND, и примечание о том, что распиновка меняется между запусками); wafer-space/gf180mcu-project-template, README.md и Makefile (значение по умолчанию 5 В и варианты библиотеки 3,3 В); симуляции предыдущих ступеней для ожидаемых времён высокого уровня. **Честные ограничения.** Чипа пока не существует: этот план и его эскиз не запускались на кремнии. Напряжение питания и ток здесь не указаны, потому что документация по запуску, доступная на момент написания, их не указывает. Влияние преобразователя уровня на подтягивающие резисторы зависит от используемой вами платы.

Материалы

4

Требуемые инструменты

6

CC0 Общественное достояние

Этот чертёж выпущен под лицензией CC0. Вы можете свободно копировать, изменять, распространять и использовать эту работу в любых целях без запроса разрешения.

Поддержите мейкера, покупая товары через его чертёж, где он получает Комиссию мейкера установленную продавцами, или создайте новую итерацию этого чертежа и включите его как связь в свой чертёж для распределения дохода.

Обсуждение

(0)

Войти чтобы присоединиться к обсуждению

Загрузка комментариев...