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
21
extern
"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
365
static_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 */
TMF8829_TICKS_PER_1000_US
#define TMF8829_TICKS_PER_1000_US
Definition
tmf8829_regs.h:361
include
tmf8829
tmf8829_regs.h
Generated by
1.15.0