RegForge

Register maps for I²C and SPI chips

Every address, bitfield and reset value — and the same data as a C header, in one command.

pip install regforge
regforge gen BME280 --out ./src --driver --tests
13 parts275 registersno API key neededApache-2.0
I²C address map
29 conflicts found
before you wire the board
Search
registers, fields, addresses
what has a WHO_AM_I?
Comparisons
parts people confuse
register-level diffs

Parts

ADS1115
Texas Instruments
4 registers · I2C
ADXL345
Analog Devices
30 registers · I2C, SPI
BME280
Bosch Sensortec
14 registers · I2C, SPI
BMP280
Bosch Sensortec
11 registers · I2C, SPI
DS1307
Analog Devices
8 registers · I2C
DS3231
Analog Devices
19 registers · I2C
INA219
Texas Instruments
6 registers · I2C
INA226
Texas Instruments
10 registers · I2C
LIS3DH
STMicroelectronics
40 registers · I2C, SPI
MCP23008
Microchip Technology
11 registers · I2C
MCP23017
Microchip Technology
21 registers · I2C
MPU6050
InvenSense
25 registers · I2C
PCA9685
NXP Semiconductors
76 registers · I2C

The problem

Bringing up a new chip means retyping register tables out of a PDF into a header by hand. [7:5] means shift 5, width 3. Get it backwards and nothing tells you — you find out on a logic analyser, a day later.

The solution

Read the map here, or generate it as C. The generated header ships with compile-time assertions, so a wrong mask is a build failure naming the field instead of a silent hardware bug.

Missing a part?

regforge scan datasheet.pdf          # free, shows which pages it will read
regforge extract datasheet.pdf --part XYZ

Contribute it back and it is free for everyone after you. Each part gets paid for once.