TMF8829 Universal Driver 0.1.0
Loading...
Searching...
No Matches
tmf8829_regs.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright (c) 2026 tmf8829_universal_driver contributors
5 * Derived from ams-OSRAM TMF8829 reference drivers (MIT); adapted for portable multi-instance use.
6 */
7
14
15#ifndef TMF8829_REGS_H
16#define TMF8829_REGS_H
17
18#include <stdint.h>
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24/* ------------------------------------------------------------------ */
29/* ------------------------------------------------------------------ */
30
32#define TMF8829_DEFAULT_I2C_ADDR 0x41u
33
35#define TMF8829_SPI_WR_CMD 0x02u
37#define TMF8829_SPI_RD_CMD 0x03u
39
40/* ------------------------------------------------------------------ */
45/* ------------------------------------------------------------------ */
46
47#define TMF8829_REG_APP_ID 0x00u
48#define TMF8829_REG_CMD_STAT 0x08u
49#define TMF8829_REG_PREV_CMD 0x09u
50
51#define TMF8829_APP_ID__BOOTLOADER 0x80u
52#define TMF8829_APP_ID__APPLICATION 0x01u
54
55/* ------------------------------------------------------------------ */
60/* ------------------------------------------------------------------ */
61
62#define TMF8829_REG_I2C_DEVADDR 0xE0u
63#define TMF8829_REG_INT_STATUS 0xE1u
64#define TMF8829_REG_INT_ENAB 0xE2u
65#define TMF8829_REG_ID 0xE3u
66#define TMF8829_REG_REVID 0xE4u
67#define TMF8829_REG_INTERFACE 0xE9u
68#define TMF8829_REG_GPIO01CFG 0xF1u
69#define TMF8829_REG_GPIO23CFG 0xF2u
70#define TMF8829_REG_GPIO45CFG 0xF3u
71#define TMF8829_REG_GPIO6CFG 0xF4u
72#define TMF8829_REG_RESET 0xF7u
73#define TMF8829_REG_ENABLE 0xF8u
74
75/* EXPECTED chip id of the TMF8829 sensor */
76#define TMF8829_CHIP_ID 0x9Eu
77
78/* RESET register bit masks (write 1 to trigger). */
79#define TMF8829_RESET_SOFT_MASK 0x40u
80#define TMF8829_RESET_HARD_MASK 0x80u
81
82/* ENABLE register bit masks (matches ams-OSRAM register map). */
83#define TMF8829_ENABLE_STANDBY_MASK 0x01u
84#define TMF8829_ENABLE_TIMED_STBY_MASK 0x02u
85#define TMF8829_ENABLE_PON_MASK 0x04u
86#define TMF8829_ENABLE_POFF_MASK 0x08u
87#define TMF8829_ENABLE_POWERUP_SHIFT 4u
88#define TMF8829_ENABLE_POWERUP_MASK (0x03u << TMF8829_ENABLE_POWERUP_SHIFT)
89#define TMF8829_ENABLE_BOOT_NO_PLL_MASK 0x40u
90#define TMF8829_ENABLE_CPU_READY_MASK 0x80u
91
92/* GPIOxCFG function-field offsets */
93#define TMF8829_GPIO0_FUNC_OFFSET 0u /* TMF8829_REG_GPIO01CFG[3:0] */
94#define TMF8829_GPIO1_FUNC_OFFSET 4u /* TMF8829_REG_GPIO01CFG[7:4] */
95#define TMF8829_GPIO2_FUNC_OFFSET 0u /* TMF8829_REG_GPIO23CFG[3:0] */
96#define TMF8829_GPIO3_FUNC_OFFSET 4u /* TMF8829_REG_GPIO23CFG[7:4] */
97#define TMF8829_GPIO4_FUNC_OFFSET 0u /* TMF8829_REG_GPIO45CFG[3:0] */
98#define TMF8829_GPIO5_FUNC_OFFSET 4u /* TMF8829_REG_GPIO45CFG[7:4] */
99#define TMF8829_GPIO6_FUNC_OFFSET 0u /* TMF8829_REG_GPIO6CFG[3:0] */
100
101/* GPIOxCFG function values (before shift/mask into field) */
102#define TMF8829_GPIO_FUNC_GPIO 0x00u
103#define TMF8829_GPIO_FUNC_PERIPHERAL 0x01u
104
105#define TMF8829_GPIO0_FUNC_SPI_MOSI TMF8829_GPIO_FUNC_PERIPHERAL
106#define TMF8829_GPIO1_FUNC_SPI_CSN TMF8829_GPIO_FUNC_PERIPHERAL
107#define TMF8829_GPIO2_FUNC_SPI_SCLK TMF8829_GPIO_FUNC_PERIPHERAL
108#define TMF8829_GPIO3_FUNC_SPI_MISO TMF8829_GPIO_FUNC_PERIPHERAL
109#define TMF8829_GPIO4_FUNC_IxC_SCL TMF8829_GPIO_FUNC_PERIPHERAL
110#define TMF8829_GPIO5_FUNC_IxC_SDA TMF8829_GPIO_FUNC_PERIPHERAL
111#define TMF8829_GPIO6_FUNC_INT TMF8829_GPIO_FUNC_PERIPHERAL
112
113/* ENABLE.powerup_select values (placed at @ref TMF8829_ENABLE_POWERUP_SHIFT). */
114#define TMF8829_POWERUP_NO_OVERRIDE 0u
115#define TMF8829_POWERUP_FORCE_BOOTMON 1u
116#define TMF8829_POWERUP_RAM 2u
118
119/* ------------------------------------------------------------------ */
124/* ------------------------------------------------------------------ */
125
126#define TMF8829_REG_APP_VER_MAJOR 0x01u
127#define TMF8829_REG_APP_VER_MINOR 0x02u
128#define TMF8829_REG_APP_VER_PATCH 0x04u
129#define TMF8829_REG_MEASURE_STATUS 0x05u
130#define TMF8829_REG_GPIO_VALUE 0x10u
131#define TMF8829_REG_LIVE_BEAT_0 0x1Au
132#define TMF8829_REG_LIVE_BEAT_1 0x1Bu
133#define TMF8829_REG_SERIAL_NUMBER_0 0x1Cu
134#define TMF8829_REG_SERIAL_NUMBER_1 0x1Du
135#define TMF8829_REG_SERIAL_NUMBER_2 0x1Eu
136#define TMF8829_REG_SERIAL_NUMBER_3 0x1Fu
137#define TMF8829_REG_CID_RID 0x20u
138#define TMF8829_REG_PAYLOAD 0x21u
139
140/* Configuration page (visible after CMD_LOAD_CONFIG_PAGE) */
141#define TMF8829_REG_CFG_PERIOD_MS_LSB 0x22u
142#define TMF8829_REG_CFG_PERIOD_MS_MSB 0x23u
143#define TMF8829_REG_CFG_KILO_ITER_LSB 0x24u
144#define TMF8829_REG_CFG_KILO_ITER_MSB 0x25u
145#define TMF8829_REG_CFG_FP_MODE 0x26u
146#define TMF8829_REG_CFG_SPAD_SELECT 0x27u
147#define TMF8829_REG_CFG_REF_SPAD_SELECT 0x28u
148#define TMF8829_REG_CFG_SPAD_DEADTIME 0x29u
149#define TMF8829_REG_CFG_RESULT_FORMAT 0x2Au
150#define TMF8829_REG_CFG_DUMP_HISTOGRAMS 0x2Bu
151#define TMF8829_REG_CFG_POWER_MODES 0x2Eu
152#define TMF8829_REG_CFG_VCSEL_ON 0x30u
153#define TMF8829_REG_CFG_DITHER 0x31u
154#define TMF8829_REG_CFG_VCDRV 0x32u
155#define TMF8829_REG_CFG_VCDRV_2 0x33u
156#define TMF8829_REG_CFG_VCDRV_3 0x34u
157#define TMF8829_REG_CFG_VCSEL_PERIOD_LSB 0x36u
158#define TMF8829_REG_CFG_VCSEL_PERIOD_MSB 0x37u
159#define TMF8829_REG_CFG_VCDRV_OFFSET_LSB 0x38u
160#define TMF8829_REG_CFG_VCDRV_OFFSET_MSB 0x39u
161#define TMF8829_REG_CFG_VCDRV_CP 0x3Au
162#define TMF8829_REG_CFG_HISTOGRAM_BINS_LSB 0x40u
163#define TMF8829_REG_CFG_HISTOGRAM_BINS_MSB 0x41u
164#define TMF8829_REG_CFG_BIN_SHIFT 0x42u
165#define TMF8829_REG_CFG_REF_BIN_SHIFT 0x43u
166#define TMF8829_REG_CFG_TDC_OFFSET_LSB 0x44u
167#define TMF8829_REG_CFG_TDC_OFFSET_MSB 0x45u
168#define TMF8829_REG_CFG_TDC_PRE_PERIODS_LSB 0x46u
169#define TMF8829_REG_CFG_TDC_PRE_PERIODS_MSB 0x47u
170#define TMF8829_REG_CFG_HV_CP 0x48u
171#define TMF8829_REG_CFG_HA_KILO_ITER_LSB 0x4Au
172#define TMF8829_REG_CFG_HA_KILO_ITER_MSB 0x4Bu
173#define TMF8829_REG_CFG_ENABLE_DUAL_MODE 0x4Cu
174#define TMF8829_REG_CFG_HV_CP_OVERLOAD_DETECT 0x4Du
175#define TMF8829_REG_CFG_ALG_PEAK_BINS 0x50u
176#define TMF8829_REG_CFG_ALG_REF_PEAK_BINS 0x51u
177#define TMF8829_REG_CFG_ALG_DISTANCE 0x52u
178#define TMF8829_REG_CFG_ALG_CONFIDENCE_THRESHOLD 0x53u
179#define TMF8829_REG_CFG_ALG_HW_PEAK_START 0x57u
180#define TMF8829_REG_CFG_ALG_CALIBRATION 0x5Fu
181#define TMF8829_REG_CFG_INT_ZONE_MASK_0 0x60u
182#define TMF8829_REG_CFG_INT_ZONE_MASK_1 0x61u
183#define TMF8829_REG_CFG_INT_ZONE_MASK_2 0x62u
184#define TMF8829_REG_CFG_INT_ZONE_MASK_3 0x63u
185#define TMF8829_REG_CFG_INT_ZONE_MASK_4 0x64u
186#define TMF8829_REG_CFG_INT_ZONE_MASK_5 0x65u
187#define TMF8829_REG_CFG_INT_ZONE_MASK_6 0x66u
188#define TMF8829_REG_CFG_INT_ZONE_MASK_7 0x67u
189#define TMF8829_REG_CFG_INT_LOW_LSB 0x68u
190#define TMF8829_REG_CFG_INT_LOW_MSB 0x69u
191#define TMF8829_REG_CFG_INT_HIGH_LSB 0x6Au
192#define TMF8829_REG_CFG_INT_HIGH_MSB 0x6Bu
193#define TMF8829_REG_CFG_INT_PERSISTENCE 0x6Cu
194#define TMF8829_REG_CFG_POST_PROCESSING 0x6Du
195#define TMF8829_REG_CFG_PROX_DISTANCE 0x6Eu
196#define TMF8829_REG_CFG_CROP_TOP_X 0x70u
197#define TMF8829_REG_CFG_CROP_TOP_Y 0x71u
198#define TMF8829_REG_CFG_CROP_BOTTOM_X 0x72u
199#define TMF8829_REG_CFG_CROP_BOTTOM_Y 0x73u
200#define TMF8829_REG_CFG_INFO_FOV_CORR 0x78u
201#define TMF8829_REG_CFG_GPIO_0 0x80u
202#define TMF8829_REG_CFG_GPIO_1 0x81u
203#define TMF8829_REG_CFG_GPIO_2 0x82u
204#define TMF8829_REG_CFG_GPIO_3 0x83u
205#define TMF8829_REG_CFG_GPIO_4 0x84u
206#define TMF8829_REG_CFG_GPIO_5 0x85u
207#define TMF8829_REG_CFG_GPIO_6 0x86u
208#define TMF8829_REG_CFG_GPIO 0x87u
209#define TMF8829_REG_CFG_I2C_ADDRESS 0x90u
210#define TMF8829_REG_CFG_MOTION_DETECT_DISTANCE_LSB 0xB0u
211#define TMF8829_REG_CFG_MOTION_DETECT_DISTANCE_MSB 0xB1u
212#define TMF8829_REG_CFG_MOTION_DETECT_SNR 0xB2u
213#define TMF8829_REG_CFG_MOTION_RELEASE_SNR 0xB3u
214#define TMF8829_REG_CFG_MOTION_ADJACENT_PIXEL 0xB4u
215#define TMF8829_REG_CFG_LAST_AVAILABLE 0xDFu
216
217#define TMF8829_CFG_PAGE_SIZE ((unsigned)(TMF8829_REG_CFG_LAST_AVAILABLE - TMF8829_REG_CFG_PERIOD_MS_LSB + 1u))
218
219/* Result format values for TMF8829_REG_CFG_RESULT_FORMAT */
220#define TMF8829_RESULT_FULL_NOISE_MASK 7u
221#define TMF8829_RESULT_SUB_RESULT_MASK 6u
222#define TMF8829_RESULT_XTALK_MASK 5u
223#define TMF8829_RESULT_NOISE_STRENGTH_MASK 4u
224#define TMF8829_RESULT_SIGNAL_STRENGTH_MASK 3u
225#define TMF8829_RESULT_NR_PEAKS_MASK 0u
226
227/* GPIO output-control values for TMF8829_REG_CFG_GPIO_0 ... _GPIO_6 */
228#define TMF8829_GPIO_CTRL_TRISTATE 0u
229#define TMF8829_GPIO_CTRL_INPUT_IR 1u
230#define TMF8829_GPIO_CTRL_INPUT_ACTIVE_HIGH 2u
231#define TMF8829_GPIO_CTRL_INPUT_ACTIVE_LOW 3u
232#define TMF8829_GPIO_CTRL_OUTPUT_LOW_VCSEL_PULSING 4u
233#define TMF8829_GPIO_CTRL_OUTPUT_HIGH_VCSEL_PULSING 5u
234#define TMF8829_GPIO_CTRL_OUTPUT_HIGH 6u
235#define TMF8829_GPIO_CTRL_OUTPUT_LOW 7u
236
237/* TMF8829_REG_CFG_GPIO pre-delay values */
238#define TMF8829_GPIO_PRE_DELAY_NONE 0u
239#define TMF8829_GPIO_PRE_DELAY_100_US 1u
240#define TMF8829_GPIO_PRE_DELAY_200_US 2u
241
242/* Result-page ancillary registers */
243#define TMF8829_REG_FIFO_STATUS 0xFAu
244#define TMF8829_REG_SYS_TICK_0 0xFBu
245#define TMF8829_REG_SYS_TICK_1 0xFCu
246#define TMF8829_REG_SYS_TICK_2 0xFDu
247#define TMF8829_REG_SYS_TICK_3 0xFEu
249
250/* ------------------------------------------------------------------ */
255/* ------------------------------------------------------------------ */
256
257#define TMF8829_CMD_MEASURE 0x10u
258#define TMF8829_CMD_CLEAR_STATUS 0x11u
259#define TMF8829_CMD_WRITE_PAGE 0x15u
260#define TMF8829_CMD_LOAD_CONFIG_PAGE 0x16u
261#define TMF8829_CMD_LOAD_CFG_8X8 0x40u
262#define TMF8829_CMD_LOAD_CFG_8X8_LONG_RANGE 0x41u
263#define TMF8829_CMD_LOAD_CFG_8X8_HIGH_ACC 0x42u
264#define TMF8829_CMD_LOAD_CFG_16X16 0x43u
265#define TMF8829_CMD_LOAD_CFG_16X16_HIGH_ACC 0x44u
266#define TMF8829_CMD_LOAD_CFG_32X32 0x45u
267#define TMF8829_CMD_LOAD_CFG_32X32_HIGH_ACC 0x46u
268#define TMF8829_CMD_LOAD_CFG_48X32 0x47u
269#define TMF8829_CMD_LOAD_CFG_48X32_HIGH_ACC 0x48u
270#define TMF8829_CMD_STOP 0xFFu
271
272/* Application status (response in TMF8829_REG_CMD_STAT) */
273#define TMF8829_STAT_OK 0x00u
274#define TMF8829_STAT_ACCEPTED 0x01u
276
277/* ------------------------------------------------------------------ */
282/* ------------------------------------------------------------------ */
283
284#define TMF8829_INT_RESULTS 0x01u
285#define TMF8829_INT_MOTION 0x02u
286#define TMF8829_INT_PROXIMITY 0x04u
287#define TMF8829_INT_HISTOGRAMS 0x08u
288
289#define TMF8829_INT_ALL (TMF8829_INT_RESULTS | TMF8829_INT_MOTION | TMF8829_INT_PROXIMITY | TMF8829_INT_HISTOGRAMS)
291
292/* ------------------------------------------------------------------ */
297/* ------------------------------------------------------------------ */
298
299#define TMF8829_PRE_HEADER_SIZE 5u
300#define TMF8829_FRAME_HEADER_SIZE 16u
302#define TMF8829_FRAME_HEADER_OFFSET 4u
303#define TMF8829_FRAME_FOOTER_SIZE 12u
304#define TMF8829_FRAME_EOF_SIZE 2u
305
307#define TMF8829_FRAME_EOF 0xE0F7u
308
309#define TMF8829_FID_MASK 0xF0u
310#define TMF8829_FID_RESULTS 0x10u
311#define TMF8829_FID_HISTOGRAMS 0x20u
312
313#define TMF8829_FPM_MASK 0x0Fu
314
316#define TMF8829_RESULT_FRAME_SUBIDX_MASK 0x40u
317
318/* Frame identifier values delivered to the host */
319#define TMF8829_RESULT_ID_MEAS_RES 0xAAu
320#define TMF8829_RESULT_ID_MEAS_HIST 0xBBu
321#define TMF8829_RESULT_ID_MEAS_HEADER 0xFDu
322#define TMF8829_RESULT_ID_ERROR 0xFEu
323#define TMF8829_RESULT_ID_NONE 0xFFu
324
325#define TMF8829_RESULT_ERR_EOF 0x01u
326#define TMF8829_RESULT_ERR_UNKNOWN 0x00u
327
328/* Result-format mask bits (TMF8829_REG_CFG_RESULT_FORMAT) */
329#define TMF8829_RESULT_FORMAT_NR_PEAKS_MASK 0x07u
330#define TMF8829_RESULT_FORMAT_SIG_STRENGTH_MASK 0x08u
331#define TMF8829_RESULT_FORMAT_NOISE_MASK 0x10u
332#define TMF8829_RESULT_FORMAT_XTALK_MASK 0x20u
334
335/* ------------------------------------------------------------------ */
340/* ------------------------------------------------------------------ */
341
342#define TMF8829_FP_MODE_8X8A 0u
343#define TMF8829_FP_MODE_8X8B 1u
344#define TMF8829_FP_MODE_16X16 2u
345#define TMF8829_FP_MODE_32X32 3u
346#define TMF8829_FP_MODE_32X32S 4u
347#define TMF8829_FP_MODE_48X32 5u
349
350/* ------------------------------------------------------------------ */
355/* ------------------------------------------------------------------ */
356
358#define TMF8829_FIFO_SIZE 8192u
359
361#define TMF8829_TICKS_PER_1000_US 125u
362
363/* Guard: clock-correction division relies on this being non-zero. */
364#ifdef __cplusplus
365static_assert(TMF8829_TICKS_PER_1000_US != 0u, "TMF8829_TICKS_PER_1000_US must be non-zero");
366#else
367_Static_assert(TMF8829_TICKS_PER_1000_US != 0u, "TMF8829_TICKS_PER_1000_US must be non-zero");
368#endif
370
371/* ------------------------------------------------------------------ */
376/* ------------------------------------------------------------------ */
377
378#define TMF8829_REG_FIFO 0xFFu
379
380/* Bootloader-only header registers (valid when TMF8829_REG_APP_ID == TMF8829_APP_ID__BOOTLOADER) */
381#define TMF8829_REG_BL_PAYLOAD 0x09u
382#define TMF8829_REG_BL_ADDRESS0 0x0Au
383#define TMF8829_REG_BL_ADDRESS1 0x0Bu
384#define TMF8829_REG_BL_ADDRESS2 0x0Cu
385#define TMF8829_REG_BL_ADDRESS3 0x0Du
386#define TMF8829_REG_BL_WORD_SIZE0 0x0Eu
387#define TMF8829_REG_BL_WORD_SIZE1 0x0Fu
388
389#define TMF8829_BL_CMD_STAT_SPI_OFF 0x20u
390#define TMF8829_BL_CMD_STAT_I2C_OFF 0x22u
391#define TMF8829_BL_CMD_STAT_ADDR_RAM 0x43u
392#define TMF8829_BL_CMD_STAT_W_RAM_BOTH 0x42u
393#define TMF8829_BL_CMD_STAT_FIFO_BOTH 0x45u
394#define TMF8829_BL_CMD_STAT_START_RAM_APP 0x16u
395
396#define TMF8829_BL_STAT_READY 0x00u
397
399#define TMF8829_BL_WR_HEADER 2u
401#define TMF8829_BL_MAX_PAYLOAD 128u
402
404#define TMF8829_FW_IMAGE_LOAD_ADDR_DEFAULT 0x00010000u
406
411
412#ifndef TMF8829_BL_CMD_TIMEOUT_MS
413#define TMF8829_BL_CMD_TIMEOUT_MS 3u
414#endif
415#ifndef TMF8829_BL_SET_ADDR_TIMEOUT_MS
416#define TMF8829_BL_SET_ADDR_TIMEOUT_MS 3u
417#endif
418#ifndef TMF8829_BL_W_RAM_TIMEOUT_MS
419#define TMF8829_BL_W_RAM_TIMEOUT_MS 3u
420#endif
421#ifndef TMF8829_BL_W_FIFO_TIMEOUT_MS
422#define TMF8829_BL_W_FIFO_TIMEOUT_MS 3u
423#endif
424#ifndef TMF8829_BL_START_APP_TIMEOUT_MS
425#define TMF8829_BL_START_APP_TIMEOUT_MS 3u
426#endif
427
428#ifndef TMF8829_APP_CMD_LOAD_CONFIG_TIMEOUT_MS
429#define TMF8829_APP_CMD_LOAD_CONFIG_TIMEOUT_MS 3u
430#endif
431#ifndef TMF8829_APP_CMD_WRITE_CONFIG_TIMEOUT_MS
432#define TMF8829_APP_CMD_WRITE_CONFIG_TIMEOUT_MS 3u
433#endif
434#ifndef TMF8829_APP_CMD_MEASURE_TIMEOUT_MS
435#define TMF8829_APP_CMD_MEASURE_TIMEOUT_MS 5u
436#endif
437#ifndef TMF8829_APP_CMD_STOP_TIMEOUT_MS
438#define TMF8829_APP_CMD_STOP_TIMEOUT_MS 25u
439#endif
441
442#ifdef __cplusplus
443} /* extern "C" */
444#endif
445
446#endif /* TMF8829_REGS_H */
#define TMF8829_TICKS_PER_1000_US
Definition tmf8829_regs.h:361