Skip to content

SX1262

Semtech SX1262 LoRa transceiver: the SPI command interface (status, modes, registers, IRQs, BUSY/DIO1). No RF air link.

Live catalog

Prefer labwired_describe with the catalog id over guessing pins or addresses.

Status at a glance

Aspect Status
Catalog id sx1262
Bus SPI (mode 0), one command per NSS-low transaction
Address — (NSS via cs_pin)
Datasheet Semtech SX1261/2 Data Sheet Rev. 1.2 (June 2019): §8.3.1 BUSY, §11 command tables, §12 Table 12-1, §13 (Tables 13-1..13-86)
Source configs/devices/sx1262.yaml (declarative, no Rust model)
Tier smoke-proven (register-level tests: crates/core/tests/parts_batch5.rs)

Pins / attachment

Pin / net Role
SCK / MOSI / MISO SPI
NSS cs_pin
BUSY Driven low when ready, high in Sleep (busy_pin)
DIO1 IRQ output (dio1_pin)
DIO2/DIO3, NRESET Not modelled

Support matrix

Behavior Status Notes
Status byte (Table 13-76), GetStatus 0xC0 ✅ 0x20 (STBY_RC) at power-on
SetStandby / SetFs / SetRx / SetTx / SetSleep ✅ TX completes at once with TxDone
Read/WriteRegister over Table 12-1 ✅ Sync word 0x0740 = 0x14 0x24, OCP 0x08E7 = 0x38 …
Set/GetPacketType, SetDioIrqParams, Get/ClearIrqStatus ✅ DIO1 = IRQ & IrqMask & DIO1Mask
GetRssiInst, GetPacketStatus (LoRa), Get/ClearDeviceErrors ✅ Whole-dB stimulus
RF air link, data buffer, timing, DIO2/DIO3 ❌

Stimulus

Host inputs: rssi_dbm, packet_rssi_dbm (dBm), snr_db (dB), whole units.

How to run

  1. Place the part and an MCU in Playground, or add it to a system YAML:
    external_devices:
      - id: "sx1262"
        type: "sx1262"
        connection: "spi1"
        config:
          cs_pin: "PA4"
          busy_pin: "PB0"
          dio1_pin: "PB1"
    
  2. Agent: labwired_list → labwired_describe id=sx1262 → wire → labwired_validate → labwired_run / labwired_verify.
  3. Register-level smoke: cargo test -p labwired-core --test parts_batch5 — GetStatus at power-on, ReadRegister of the LoRa sync word and OCP, SetStandby(XOSC), Set/GetPacketType; sx1262_tx_done_drives_dio1_and_sleep_holds_busy covers TX → DIO1, IRQ clear, RSSI, register writes and Sleep/BUSY. The same file's negative control proves the check fails against a stand-in that answers only 0x00 or only 0xFF.

Limitations

  • Nothing is ever received, and SetRx never times out.
  • BUSY never pulses (commands complete instantly); TX has no time-on-air.
  • Undocumented registers read 0x00; the FSK sync word and random-number registers have no datasheet reset value and read 0x00.

See the YAML header for the full datasheet trace and every named approximation.