{
  "family": "Power",
  "name": "L.1T",
  "rev": "b",
  "tile_id": 6,
  "json_version": "0.12",
  "updated_at": "2026-06-19T00:00:00.000Z",
  "headline": "single-cell Li-Ion charge controller with adjustable LDO output",
  "description": "Perfect for wearables and compact battery-powered devices, the Power.L1.T tile integrates a single-cell Lithium-Ion battery charger with a max charge current of 500mA with a programmable LDO output and a 12-bit ADC for battery and system monitoring.",
  "application_notes": [
    {
      "sort": 0,
      "details": "When a battery is first connected, the IC will enter the ultra-low-current ship mode, which it will exit when voltage is first applied to the SUPPLY pads.  Ship mode can be re-entered either programmatically or by disconnecting/reconnecting the battery.",
      "heading": "Existing Ship Mode",
      "image_url": ""
    },
    {
      "sort": 1,
      "details": "When the SW pad is floating, the LDO output will be connected.  Connect SW to GND/SUPPLY- to turn off the output.",
      "heading": "Normally-On Operation",
      "image_url": ""
    },
    {
      "sort": 2,
      "details": "In the default low-power mode, the I2C interface is disabled.  To exit low-power mode, drive the LP to greater than 1.35V.",
      "heading": "Low-Power Mode",
      "image_url": ""
    },
    {
      "sort": 3,
      "details": "The LDO output can supply up to 150mA in a range from 0.6-3.7V in 0.1V steps.  The power-on default output is set to 1.8V, and can be adjusted by writing to the LDOCTRL register.",
      "heading": "adjustable LDO output",
      "image_url": ""
    }
  ],
  "package": {
    "pads": 10,
    "type": "T44",
    "size_x": 4000,
    "size_y": 4000,
    "size_z": 0
  },
  "power": [
    {
      "max": 3.7,
      "min": 0.6,
      "type": "system",
      "notes": "adjustable; 1.8V power-on default",
      "gnd_pad": [
        "1"
      ],
      "function": "",
      "direction": "output",
      "adjustable": true,
      "is_required": true,
      "max_current": "",
      "positive_pad": [
        "10"
      ]
    },
    {
      "max": 5.5,
      "min": 3.4,
      "type": "charge",
      "notes": "",
      "gnd_pad": [
        "9"
      ],
      "function": "",
      "direction": "input",
      "is_required": false,
      "max_current": "500mA",
      "positive_pad": [
        "8"
      ]
    },
    {
      "max": 4.6,
      "min": 3.6,
      "type": "rechargeable battery",
      "notes": "",
      "gnd_pad": [
        "6"
      ],
      "function": "single-cell Li-Ion battery",
      "direction": "input",
      "is_required": false,
      "max_current": "500mA (charge)",
      "positive_pad": [
        "7"
      ]
    }
  ],
  "components": [
    {
      "url": "https://www.ti.com/product/BQ25150",
      "part": "BQ25150",
      "datasheet": "https://mosaic-component-datasheets.s3.eu-north-1.amazonaws.com/6/Texas_Instruments-BQ25150.pdf",
      "manufacturer": "Texas Instruments"
    }
  ],
  "pads": [
    {
      "pad": "1",
      "geometry": {
        "size_x": 1000,
        "size_y": 400,
        "center_x": -1500,
        "center_y": 1600
      },
      "functions": [
        {
          "type": "power",
          "function": "GND",
          "direction": "output"
        }
      ]
    },
    {
      "pad": "2",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": -1600,
        "center_y": 800
      },
      "functions": [
        {
          "note": "drive greater than 1.35V to exit low-power mode when in battery-powered mode (internal 900k pull-down).",
          "type": "digital",
          "function": "LP",
          "direction": "input"
        }
      ]
    },
    {
      "pad": "3",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": -1600,
        "center_y": 0
      },
      "functions": [
        {
          "note": "connect to GND to disable the LDO output (battery charging will be unaffected).",
          "type": "digital",
          "function": "SW",
          "direction": "input"
        }
      ]
    },
    {
      "pad": "4",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": -1600,
        "center_y": -800
      },
      "functions": [
        {
          "note": "",
          "type": "digital",
          "function": "I2C.CLK",
          "direction": "bidirectional",
          "interface": "I2C",
          "is_default": true
        }
      ]
    },
    {
      "pad": "5",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": -1600,
        "center_y": -1600
      },
      "functions": [
        {
          "note": "",
          "type": "digital",
          "function": "I2C.DAT",
          "direction": "bidirectional",
          "interface": "I2C",
          "is_default": true
        }
      ]
    },
    {
      "pad": "6",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": 1600,
        "center_y": -1600
      },
      "functions": [
        {
          "note": "",
          "type": "power",
          "function": "BATT-",
          "direction": "bidirectional",
          "is_default": true
        }
      ]
    },
    {
      "pad": "7",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": 1600,
        "center_y": -800
      },
      "functions": [
        {
          "note": "",
          "type": "power",
          "function": "BATT+",
          "direction": "bidirectional",
          "is_default": true
        }
      ]
    },
    {
      "pad": "8",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": 1600,
        "center_y": 0
      },
      "functions": [
        {
          "note": "3.15-5.5V, up to 500mA",
          "type": "power",
          "function": "SUPPLY+",
          "direction": "input",
          "is_default": true
        }
      ]
    },
    {
      "pad": "9",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": 1600,
        "center_y": 800
      },
      "functions": [
        {
          "note": "",
          "type": "power",
          "function": "SUPPLY-",
          "direction": "input",
          "is_default": true
        }
      ]
    },
    {
      "pad": "10",
      "geometry": {
        "size_x": 800,
        "size_y": 400,
        "center_x": 1600,
        "center_y": 1600
      },
      "functions": [
        {
          "note": "1.8V, up to 10mA",
          "type": "power",
          "function": "V+",
          "direction": "output"
        }
      ]
    }
  ],
  "interfaces": [
    {
      "name": "I2C",
      "type": "I2C",
      "parameters": {
        "modes": [
          "slave"
        ],
        "addresses": [
          {
            "address": "0x6B",
            "is_default": true
          }
        ],
        "data_bits": [
          8
        ],
        "address_bits": [
          7
        ],
        "max_clock_speed": ""
      },
      "pad_assignments": [
        {
          "pad": "4",
          "role": "bus",
          "function": "I2C.CLK",
          "is_required": true
        },
        {
          "pad": "5",
          "role": "bus",
          "function": "I2C.DAT",
          "is_required": true
        }
      ]
    }
  ],
  "twin": {
    "score": 1,
    "source": "// Digital twin for Power.L.1T — TI BQ25150 single-cell Li-Ion charger + 1.8 V LDO.\n//\n// A linear charge controller with an integrated 1.8 V LDO and an ADC. The tile's\n// pad map (Power-L-1T-b.json): SUPPLY+ (pad 8, 3.15–5.5 V) / SUPPLY- (pad 9) is\n// the charge input; BATT+ (pad 7) / BATT- (pad 6 = BGND) the cell; V+ (pad 10) is\n// the 1.8 V LDO out; I²C on pads 4/5; LP (pad 2) wakes from low-power; SW (pad 3)\n// to GND disables the LDO.\n//\n// THE INTERESTING GROUND: the downstream GND (pad 1) is NOT a hard tie — it\n// reaches BGND (pad 6) only through an on-board SI8806 MOSFET whose gate is pulled\n// from the LDO. So GND(1), BGND/BATT-(6) and SUPPLY-(9) are distinct nets, and\n// pad 1's ground is SWITCHED: when the LDO is off (SW→GND, or no power), the\n// MOSFET opens and the downstream system's ground floats — a true soft off. The\n// twin models pad 1 as a gated ground that follows the LDO.\n//\n// Conversions mirror the driver (canonical): VBAT/VIN/PMID = raw·6 V/2^16,\n// percent = (VBAT-3000)·100/1200 (3.0 V=0%, 4.2 V=100%). Chip currents are\n// datasheet (IIN 0.78 mA charge-off, ship 10 nA, active 21 µA w/ LDO). The\n// charge/LDO load currents are modeled (external cell + load) → power inferred.\nimport type { TileSim } from '../tileSim';\n\nconst I2C_ADDR = 0x6b;\nconst LDO_MV = 1800; // tile's fixed LDO output (pad 10), up to 10 mA\nconst VIN_MIN_MV = 3150; // SUPPLY+ minimum\nconst VIN_OVP_MV = 5500; // above this, VIN OVP\n\n// chip currents (datasheet Electrical Characteristics)\nconst IIN_QUIESCENT_UA = 780; // VIN input supply, charge disabled\nconst IBAT_SHIP_UA = 0.01; // 10 nA ship-mode battery discharge\nconst IBAT_ACTIVE_LDO_UA = 21; // active, LDO enabled\nconst IBAT_LP_LDO_UA = 1.7; // low-power, LDO enabled\n\n// LDO modes (power_l_1t_ldo_mode_t)\nconst LDO_MODE_LDO = 0;\nconst LDO_MODE_LOAD_SWITCH = 1;\n\ninterface State {\n  // ── inputs ──\n  vin_mv: number; // SUPPLY+ voltage (0 = unplugged)\n  batt_mv: number; // cell voltage\n  battery_present: number;\n  adcin_mv: number; // general-purpose ADC input (pad ADCIN)\n  ts_mv: number; // NTC thermistor sense\n  fault: number; // VIN OVP / safety-timer / etc.\n\n  // ── charger config ──\n  charging_enabled: number;\n  charge_current_ma: number; // fast-charge current\n  charge_voltage_mv: number; // termination (full) voltage\n  precharge_ma: number;\n  term_pct: number;\n  input_limit_ma: number;\n\n  // ── LDO + power state ──\n  ldo_enabled: number;\n  ldo_mode: number; // LDO vs load-switch\n  sw_grounded: number; // SW pad tied to GND → disables LDO\n  lp_mode: number; // low-power mode\n  ship: number; // ship mode (battery disconnected)\n\n  // ── TS thresholds (tracked) ──\n  ts_cold: number;\n  ts_cool: number;\n  ts_warm: number;\n  ts_hot: number;\n  ts_enabled: number;\n\n  [field: string]: number;\n}\n\n// STAT0/STAT1 status bits as packed by the driver's status struct order.\nconst ST_VIN_PGOOD = 1 << 0;\nconst ST_CHARGING = 1 << 1;\nconst ST_CV = 1 << 2;\nconst ST_DONE = 1 << 3;\n\nconst pick = (args: number[], i: number, cur: number) =>\n  args.length > i && Number.isFinite(args[i]) ? args[i] : cur;\nconst clamp = (v: number, lo: number, hi: number) => Math.max(lo, Math.min(hi, v));\n\nconst vinPresent = (s: State) => s.vin_mv >= VIN_MIN_MV && s.vin_mv <= VIN_OVP_MV && s.fault !== 1;\nconst poweredUp = (s: State) => s.ship !== 1 && (vinPresent(s) || s.battery_present === 1);\n\n// LDO output live: enabled, not shorted off via SW, the part is powered, not shipped.\nconst ldoOn = (s: State) =>\n  s.ldo_enabled === 1 && s.sw_grounded !== 1 && poweredUp(s) && s.ship !== 1;\n// The SI8806 ground switch follows the LDO — downstream GND (pad 1) is gated on it.\nconst gndConnected = (s: State) => ldoOn(s);\n\nfunction charging(s: State): boolean {\n  return (\n    vinPresent(s) &&\n    s.charging_enabled === 1 &&\n    s.battery_present === 1 &&\n    s.ship !== 1 &&\n    s.batt_mv < s.charge_voltage_mv\n  );\n}\nconst chargeDone = (s: State) =>\n  vinPresent(s) && s.battery_present === 1 && s.batt_mv >= s.charge_voltage_mv;\n\n// 0–100% fuel gauge: 3.0 V → 0 %, 4.2 V → 100 % (driver's linear map).\nconst percent = (s: State) => clamp(Math.round(((s.batt_mv - 3000) * 100) / 1200), 0, 100);\n\nfunction statusByte(s: State): number {\n  let b = 0;\n  if (vinPresent(s)) b |= ST_VIN_PGOOD;\n  if (charging(s)) {\n    b |= ST_CHARGING;\n    if (s.batt_mv >= s.charge_voltage_mv - 100) b |= ST_CV;\n  }\n  if (chargeDone(s)) b |= ST_DONE;\n  return b;\n}\n\nconst sim: TileSim<State> = {\n  tile: 'Power.L.1T',\n\n  defaultState: {\n    vin_mv: 0,\n    batt_mv: 3800,\n    battery_present: 1,\n    adcin_mv: 0,\n    ts_mv: 600,\n    fault: 0,\n\n    charging_enabled: 1,\n    charge_current_ma: 100,\n    charge_voltage_mv: 4200,\n    precharge_ma: 10,\n    term_pct: 10,\n    input_limit_ma: 500,\n\n    ldo_enabled: 1,\n    ldo_mode: LDO_MODE_LDO,\n    sw_grounded: 0,\n    lp_mode: 0,\n    ship: 0,\n\n    ts_cold: 0,\n    ts_cool: 0,\n    ts_warm: 0,\n    ts_hot: 0,\n    ts_enabled: 1,\n  },\n\n  controls: [\n    {\n      type: 'slider',\n      field: 'vin_mv',\n      label: 'SUPPLY+ in',\n      min: 0,\n      max: 5500,\n      step: 50,\n      unit: 'mV',\n    },\n    {\n      type: 'slider',\n      field: 'batt_mv',\n      label: 'Battery voltage',\n      min: 2400,\n      max: 4600,\n      step: 10,\n      unit: 'mV',\n    },\n    { type: 'toggle', field: 'battery_present', label: 'Battery present' },\n    {\n      type: 'slider',\n      field: 'charge_current_ma',\n      label: 'Charge current',\n      min: 5,\n      max: 500,\n      step: 5,\n      unit: 'mA',\n    },\n    { type: 'toggle', field: 'charging_enabled', label: 'Charging enabled' },\n    { type: 'toggle', field: 'ldo_enabled', label: 'LDO enabled' },\n    { type: 'toggle', field: 'sw_grounded', label: 'SW→GND (LDO off)' },\n    { type: 'toggle', field: 'fault', label: 'Fault (OVP/timer)' },\n    { type: 'toggle', field: 'ship', label: 'Ship mode' },\n  ],\n\n  hostCalls: {\n    // ── lifecycle ──\n    tile_power_l_1t_find: () => ({ scalar: I2C_ADDR }),\n    tile_power_l_1t_init: () => ({\n      scalar: 0,\n      nextState: { charging_enabled: 1, ldo_enabled: 1, ship: 0 },\n    }),\n\n    // ── charger config ──\n    tile_power_l_1t_set_charge_current_ma: ({ args }) => ({\n      nextState: { charge_current_ma: clamp(pick(args, 0, 100), 5, 500) },\n    }),\n    tile_power_l_1t_set_charge_voltage_mv: ({ args }) => ({\n      nextState: { charge_voltage_mv: clamp(pick(args, 0, 4200), 3600, 4600) },\n    }),\n    tile_power_l_1t_set_pre_charge_ma: ({ args }) => ({\n      nextState: { precharge_ma: pick(args, 0, 10) },\n    }),\n    tile_power_l_1t_set_termination_percent: ({ args }) => ({\n      nextState: { term_pct: pick(args, 0, 10) },\n    }),\n    tile_power_l_1t_set_input_current_limit_ma: ({ args }) => ({\n      nextState: { input_limit_ma: clamp(pick(args, 0, 500), 50, 500) },\n    }),\n\n    // ── ADC readbacks ──\n    tile_power_l_1t_get_vbat_mv: ({ state }) => ({ scalar: state.batt_mv }),\n    tile_power_l_1t_get_vin_mv: ({ state }) => ({ scalar: vinPresent(state) ? state.vin_mv : 0 }),\n    tile_power_l_1t_get_pmid_mv: ({ state }) => ({\n      scalar: vinPresent(state) ? state.vin_mv : state.battery_present ? state.batt_mv : 0,\n    }),\n    tile_power_l_1t_get_charge_current_ma: ({ state }) => ({\n      scalar: charging(state) ? state.charge_current_ma : 0,\n    }),\n    tile_power_l_1t_get_input_current_ma: ({ state }) => ({\n      scalar: vinPresent(state)\n        ? (charging(state) ? state.charge_current_ma : 0) + Math.round(IIN_QUIESCENT_UA / 1000)\n        : 0,\n    }),\n    tile_power_l_1t_get_ts_mv: ({ state }) => ({ scalar: state.ts_mv }),\n    tile_power_l_1t_get_adcin_mv: ({ state }) => ({ scalar: state.adcin_mv }),\n    tile_power_l_1t_get_percent: ({ state }) => ({ scalar: percent(state) }),\n\n    // ── TS thresholds ──\n    tile_power_l_1t_set_ts_cold: ({ args }) => ({ nextState: { ts_cold: pick(args, 0, 0) } }),\n    tile_power_l_1t_set_ts_cool: ({ args }) => ({ nextState: { ts_cool: pick(args, 0, 0) } }),\n    tile_power_l_1t_set_ts_warm: ({ args }) => ({ nextState: { ts_warm: pick(args, 0, 0) } }),\n    tile_power_l_1t_set_ts_hot: ({ args }) => ({ nextState: { ts_hot: pick(args, 0, 0) } }),\n    tile_power_l_1t_set_ts_enabled: ({ args }) => ({\n      nextState: { ts_enabled: pick(args, 0, 1) ? 1 : 0 },\n    }),\n\n    // ── LDO ──\n    tile_power_l_1t_set_ldo_voltage_mv: () => ({ nextState: {} }), // fixed 1.8 V on this tile\n    tile_power_l_1t_set_ldo_mode: ({ args }) => ({\n      nextState: { ldo_mode: pick(args, 0, LDO_MODE_LDO) ? LDO_MODE_LOAD_SWITCH : LDO_MODE_LDO },\n    }),\n    tile_power_l_1t_set_ldo_enabled: ({ args }) => ({\n      nextState: { ldo_enabled: pick(args, 0, 1) ? 1 : 0 },\n    }),\n\n    // ── status ──\n    tile_power_l_1t_get_charge_status: ({ state }) => ({ scalar: statusByte(state) }),\n    tile_power_l_1t_read_status: ({ state }) => ({ scalar: statusByte(state) }),\n    tile_power_l_1t_is_charging: ({ state }) => ({ scalar: charging(state) ? 1 : 0 }),\n    tile_power_l_1t_is_charge_done: ({ state }) => ({ scalar: chargeDone(state) ? 1 : 0 }),\n    tile_power_l_1t_is_battery_low: ({ state, args }) => ({\n      scalar: percent(state) < pick(args, 0, 20) ? 1 : 0,\n    }),\n    tile_power_l_1t_is_powered: ({ state }) => ({ scalar: vinPresent(state) ? 1 : 0 }),\n    tile_power_l_1t_wait_for_charge_done: ({ state }) => ({ scalar: chargeDone(state) ? 1 : 0 }),\n\n    // ── power management / raw ──\n    tile_power_l_1t_enter_ship_mode: () => ({ nextState: { ship: 1 } }),\n    tile_power_l_1t_write_reg: () => ({ nextState: {} }),\n  },\n\n  provenance: {\n    // canonical — datasheet/driver-accurate\n    tile_power_l_1t_find: 'canonical', // I2C 0x6B\n    tile_power_l_1t_get_vbat_mv: 'canonical', // raw·6V/2^16\n    tile_power_l_1t_get_vin_mv: 'canonical',\n    tile_power_l_1t_get_pmid_mv: 'canonical',\n    tile_power_l_1t_get_percent: 'canonical', // (VBAT-3000)·100/1200\n    tile_power_l_1t_get_charge_status: 'canonical', // STAT0/1 bits\n    tile_power_l_1t_is_charging: 'canonical',\n    tile_power_l_1t_is_charge_done: 'canonical',\n    tile_power_l_1t_is_powered: 'canonical', // VIN PGOOD\n    tile_power_l_1t_set_charge_current_ma: 'canonical', // 5-500 mA\n    tile_power_l_1t_set_charge_voltage_mv: 'canonical', // 3.6-4.6 V\n    tile_power_l_1t_set_ldo_mode: 'canonical', // LDO vs load-switch\n    tile_power_l_1t_enter_ship_mode: 'canonical', // ICCTRL0 ship bit\n    // inferred — modeled charge/LDO behavior\n    tile_power_l_1t_init: 'inferred',\n    tile_power_l_1t_set_pre_charge_ma: 'inferred',\n    tile_power_l_1t_set_termination_percent: 'inferred',\n    tile_power_l_1t_set_input_current_limit_ma: 'inferred',\n    tile_power_l_1t_get_charge_current_ma: 'inferred',\n    tile_power_l_1t_get_input_current_ma: 'inferred',\n    tile_power_l_1t_get_ts_mv: 'inferred',\n    tile_power_l_1t_get_adcin_mv: 'inferred',\n    tile_power_l_1t_set_ts_cold: 'inferred',\n    tile_power_l_1t_set_ts_cool: 'inferred',\n    tile_power_l_1t_set_ts_warm: 'inferred',\n    tile_power_l_1t_set_ts_hot: 'inferred',\n    tile_power_l_1t_set_ts_enabled: 'inferred',\n    tile_power_l_1t_set_ldo_enabled: 'inferred',\n    tile_power_l_1t_read_status: 'inferred',\n    tile_power_l_1t_is_battery_low: 'inferred',\n    tile_power_l_1t_wait_for_charge_done: 'inferred',\n    // hallucinated — not modeled on this tile\n    tile_power_l_1t_set_ldo_voltage_mv: 'hallucinated', // LDO is hardware-fixed at 1.8 V here\n    tile_power_l_1t_write_reg: 'hallucinated',\n    power: 'inferred', // chip Iq canonical; charge/LDO load currents modeled\n  },\n\n  // V+ (LDO, pad 10) + the SWITCHED ground (pad 1, gated by the SI8806 off the LDO).\n  padOutputs(state) {\n    return {\n      'V+(1.8V)': ldoOn(state) ? 1 : 0,\n      'GND(sw)': gndConnected(state) ? 1 : 0,\n    };\n  },\n\n  // Electrical. Three distinct grounds: SUPPLY- (9), BATT-/BGND (6), switched\n  // GND (1). On VIN the input supplies charge + system; on battery the cell does\n  // (down to ship-mode 10 nA). The LDO sources V+ (pad 10, returns to switched\n  // GND pad 1). Chip quiescents are datasheet; the charge/LDO loads are modeled.\n  power(state) {\n    const onVin = vinPresent(state);\n    const charge_ua = charging(state) ? state.charge_current_ma * 1000 : 0;\n    const rails: NonNullable<ReturnType<NonNullable<TileSim<State>['power']>>['rails']> = [];\n\n    if (onVin) {\n      rails.push({\n        name: 'SUPPLY',\n        role: 'supply',\n        v_mv: state.vin_mv,\n        i_ua: charge_ua + IIN_QUIESCENT_UA,\n        pads: ['8'],\n        note: charging(state) ? 'input — charging + system' : 'input',\n      });\n      rails.push({\n        name: 'BATT',\n        role: 'supply',\n        v_mv: state.batt_mv,\n        i_ua: 0,\n        pads: ['7'],\n        note: 'battery receiving charge',\n      });\n    } else {\n      // On battery: the cell sources everything; quiescent depends on mode.\n      const battUa =\n        state.ship === 1 ? IBAT_SHIP_UA : state.lp_mode === 1 ? IBAT_LP_LDO_UA : IBAT_ACTIVE_LDO_UA;\n      rails.push({\n        name: 'BATT',\n        role: 'supply',\n        v_mv: state.battery_present ? state.batt_mv : 0,\n        i_ua: state.battery_present ? battUa : 0,\n        pads: ['7'],\n        note:\n          state.ship === 1 ? 'battery — ship mode (disconnected)' : 'battery input (discharging)',\n      });\n    }\n\n    rails.push({\n      name: 'V+',\n      role: 'output',\n      v_mv: ldoOn(state) ? LDO_MV : 0,\n      pads: ['10'],\n      note: ldoOn(state)\n        ? '1.8 V LDO (ground via pad 1 switch)'\n        : 'LDO off — pad 1 ground also open',\n    });\n\n    const draw = onVin\n      ? charge_ua + IIN_QUIESCENT_UA\n      : state.battery_present\n        ? state.ship === 1\n          ? IBAT_SHIP_UA\n          : state.lp_mode === 1\n            ? IBAT_LP_LDO_UA\n            : IBAT_ACTIVE_LDO_UA\n        : 0;\n    return { draw_ua: Math.round(draw), rails };\n  },\n};\n\nexport default sim;\n",
    "status": "validated",
    "updated_at": "2026-06-22 02:38:28"
  },
  "config": {
    "ldoEnable": {
      "kind": "boolean",
      "group": "Outputs",
      "label": "LDO output enabled",
      "binding": {
        "pad": "3",
        "kind": "strap",
        "states": {
          "low": "LDO off",
          "high": "LDO on (forced)",
          "open": "LDO on (default)"
        }
      },
      "default": true,
      "options": [
        {
          "value": true,
          "states": {
            "3": "open"
          }
        },
        {
          "value": false,
          "states": {
            "3": "low"
          },
          "netlist": {
            "requires": [
              {
                "to": {
                  "kind": "rail",
                  "rail": "GND"
                },
                "tag": "ldoEnable.disabled.connection",
                "from": {
                  "pad": "3",
                  "kind": "tile"
                },
                "role": "power"
              }
            ]
          }
        }
      ],
      "description": "On-tile LDO output. When true (default), pad 3 (SW) is left floating and the LDO is on. To disable, tie pad 3 to GND."
    },
    "lowPowerMode": {
      "kind": "boolean",
      "group": "Mode",
      "label": "Low-power mode",
      "binding": {
        "pad": "2",
        "kind": "strap",
        "states": {
          "low": "low-power mode (forced)",
          "high": "active mode (I2C enabled)",
          "open": "low-power mode (default; I2C disabled)"
        }
      },
      "default": true,
      "options": [
        {
          "value": true,
          "states": {
            "2": "open"
          }
        },
        {
          "value": false,
          "states": {
            "2": "high"
          },
          "netlist": {
            "expects": [
              {
                "to": {
                  "kind": "matchFunction",
                  "function": "GPIO",
                  "capabilities": [
                    "output"
                  ]
                },
                "tag": "lowPowerMode.disabled.attached",
                "from": {
                  "pad": "2",
                  "kind": "tile"
                },
                "role": "control"
              }
            ]
          }
        }
      ],
      "description": "When enabled (default), pad 2 (LP) is left low and the chip stays in ultra-low-power mode with the I2C interface disabled. To use I2C, set false: pad 2 must be driven > 1.35V (e.g., wired to V+ rail or a Core GPIO output held high)."
    }
  }
}