TLE92466ED Driver 0.1.0-preview
Modern C++23 driver for Infineon TLE92466ED Six-Channel Low-Side Solenoid Driver
Loading...
Searching...
No Matches
TLE92466ED_Registers.hpp
Go to the documentation of this file.
1
37#ifndef TLE92466ED_REGISTERS_HPP
38#define TLE92466ED_REGISTERS_HPP
39
40#include <cstdint>
41
42namespace TLE92466ED {
43
44//==============================================================================
45// SPI FRAME STRUCTURES (32-BIT)
46//==============================================================================
47
68union SPIFrame {
69 uint32_t word;
70
72 struct {
73 uint32_t data : 16;
74 uint32_t rw : 1;
75 uint32_t address : 7;
76 uint32_t crc : 8;
78
80 struct {
81 uint32_t data : 16;
82 uint32_t rw_echo : 1;
83 uint32_t status : 5;
84 uint32_t reply_mode : 2;
85 uint32_t crc : 8;
87
93 [[nodiscard]] static constexpr SPIFrame make_read(uint16_t addr) noexcept {
94 SPIFrame frame{};
95 frame.tx_fields.rw = 0; // Read
96 frame.tx_fields.address = (addr >> 3) & 0x7F; // Upper 7 bits
97 frame.tx_fields.data = addr & 0x07; // Lower 3 bits in data
98 frame.tx_fields.crc = 0; // CRC calculated separately
99 return frame;
100 }
101
108 [[nodiscard]] static constexpr SPIFrame make_write(uint16_t addr, uint16_t data) noexcept {
109 SPIFrame frame{};
110 frame.tx_fields.rw = 1; // Write
111 frame.tx_fields.address = (addr >> 3) & 0x7F; // Upper 7 bits
112 frame.tx_fields.data = data;
113 frame.tx_fields.crc = 0; // CRC calculated separately
114 return frame;
115 }
116};
117
118static_assert(sizeof(SPIFrame) == 4, "SPIFrame must be exactly 4 bytes");
119
123enum class ReplyMode : uint8_t {
124 REPLY_16BIT = 0b00,
125 REPLY_22BIT = 0b01,
126 CRITICAL_FAULT = 0b10,
127 RESERVED = 0b11
128};
129
133enum class SPIStatus : uint8_t {
134 NO_ERROR = 0b00000,
135 SPI_FRAME_ERROR = 0b00001,
136 CRC_ERROR = 0b00010,
137 WRITE_RO_REG = 0b00011,
138 INTERNAL_BUS_FAULT = 0b00100
139};
140
141//==============================================================================
142// REGISTER ADDRESSES - CENTRAL/GLOBAL REGISTERS
143//==============================================================================
144
152namespace CentralReg {
153 constexpr uint16_t CH_CTRL = 0x0000;
154 constexpr uint16_t GLOBAL_CONFIG = 0x0002;
155 constexpr uint16_t GLOBAL_DIAG0 = 0x0003;
156 constexpr uint16_t GLOBAL_DIAG1 = 0x0004;
157 constexpr uint16_t GLOBAL_DIAG2 = 0x0005;
158 constexpr uint16_t VBAT_TH = 0x0006;
159 constexpr uint16_t FB_FRZ = 0x0007;
160 constexpr uint16_t FB_UPD = 0x0008;
161 constexpr uint16_t WD_RELOAD = 0x0009;
162
163 // Channel Group Diagnosis (0x000A + channel_group)
164 constexpr uint16_t DIAG_ERR_CHGR0 = 0x000A;
165 constexpr uint16_t DIAG_ERR_CHGR1 = 0x000B;
166 constexpr uint16_t DIAG_ERR_CHGR2 = 0x000C;
167 constexpr uint16_t DIAG_ERR_CHGR3 = 0x000D;
168 constexpr uint16_t DIAG_ERR_CHGR4 = 0x000E;
169 constexpr uint16_t DIAG_ERR_CHGR5 = 0x000F;
170
171 constexpr uint16_t DIAG_WARN_CHGR0 = 0x0010;
172 constexpr uint16_t DIAG_WARN_CHGR1 = 0x0011;
173 constexpr uint16_t DIAG_WARN_CHGR2 = 0x0012;
174 constexpr uint16_t DIAG_WARN_CHGR3 = 0x0013;
175 constexpr uint16_t DIAG_WARN_CHGR4 = 0x0014;
176 constexpr uint16_t DIAG_WARN_CHGR5 = 0x0015;
177
178 constexpr uint16_t FAULT_MASK0 = 0x0016;
179 constexpr uint16_t FAULT_MASK1 = 0x0017;
180 constexpr uint16_t FAULT_MASK2 = 0x0018;
181 constexpr uint16_t CLK_DIV = 0x0019;
182 constexpr uint16_t SFF_BIST = 0x003F;
183
184 // Feedback/Status Registers
185 constexpr uint16_t ICVID = 0x0200;
186 constexpr uint16_t PIN_STAT = 0x0201;
187 constexpr uint16_t FB_STAT = 0x0202;
188 constexpr uint16_t FB_VOLTAGE1 = 0x0203;
189 constexpr uint16_t FB_VOLTAGE2 = 0x0204;
190 constexpr uint16_t CHIPID0 = 0x0205;
191 constexpr uint16_t CHIPID1 = 0x0206;
192 constexpr uint16_t CHIPID2 = 0x0207;
193}
194
195//==============================================================================
196// DEVICE IDENTIFICATION CONSTANTS
197//==============================================================================
198
209namespace DeviceID {
210 constexpr uint16_t DEVICE_TYPE_MASK = 0xFF00;
211 constexpr uint16_t REVISION_MASK = 0x00FF;
212
213 // Expected device type code for TLE92466ED (upper byte of ICVID)
214 // Note: This should be confirmed from datasheet or actual device
215 constexpr uint8_t EXPECTED_TYPE_92466ED = 0x92;
216
217 // Minimum supported silicon revision
218 constexpr uint8_t MIN_REVISION = 0x00;
219
225 [[nodiscard]] constexpr bool is_valid_device(uint16_t icvid) noexcept {
226 [[maybe_unused]] uint8_t device_type = (icvid >> 8) & 0xFF;
227 // Accept device if communication is working (non-zero response)
228 // Strict type checking can be enabled if exact ID is known
229 return icvid != 0x0000 && icvid != 0xFFFF;
230 }
231
235 [[nodiscard]] constexpr uint8_t get_device_type(uint16_t icvid) noexcept {
236 return (icvid >> 8) & 0xFF;
237 }
238
242 [[nodiscard]] constexpr uint8_t get_revision(uint16_t icvid) noexcept {
243 return icvid & 0xFF;
244 }
245}
246
247//==============================================================================
248// CHANNEL REGISTER OFFSETS
249//==============================================================================
250
258namespace ChannelBase {
259 constexpr uint16_t CH0 = 0x0100;
260 constexpr uint16_t CH1 = 0x0120;
261 constexpr uint16_t CH2 = 0x0140;
262 constexpr uint16_t CH3 = 0x0160;
263 constexpr uint16_t CH4 = 0x0180;
264 constexpr uint16_t CH5 = 0x01A0;
265
266 constexpr uint16_t SPACING = 0x0020;
267}
268
272namespace ChannelReg {
273 constexpr uint16_t SETPOINT = 0x0000;
274 constexpr uint16_t CTRL = 0x0001;
275 constexpr uint16_t PERIOD = 0x0002;
276 constexpr uint16_t INTEGRATOR_LIMIT = 0x0003;
277 constexpr uint16_t DITHER_CLK_DIV = 0x0004;
278 constexpr uint16_t DITHER_STEP = 0x0005;
279 constexpr uint16_t DITHER_CTRL = 0x0006;
280 constexpr uint16_t CH_CONFIG = 0x0007;
281 constexpr uint16_t MODE = 0x000C;
282 constexpr uint16_t TON = 0x000D;
283 constexpr uint16_t CTRL_INT_THRESH = 0x000E;
284 constexpr uint16_t FB_DC = 0x0200;
285 constexpr uint16_t FB_VBAT = 0x0201;
286 constexpr uint16_t FB_I_AVG = 0x0202;
287 constexpr uint16_t FB_IMIN_IMAX = 0x0203;
288 constexpr uint16_t FB_INT_THRESH = 0x0205;
289}
290
291//==============================================================================
292// CH_CTRL REGISTER (0x0000) - Channel Control
293//==============================================================================
294
320namespace CH_CTRL {
321 constexpr uint16_t EN_CH0 = (1 << 0);
322 constexpr uint16_t EN_CH1 = (1 << 1);
323 constexpr uint16_t EN_CH2 = (1 << 2);
324 constexpr uint16_t EN_CH3 = (1 << 3);
325 constexpr uint16_t EN_CH4 = (1 << 4);
326 constexpr uint16_t EN_CH5 = (1 << 5);
327 constexpr uint16_t CH_PAR_4_5 = (1 << 12);
328 constexpr uint16_t CH_PAR_0_3 = (1 << 13);
329 constexpr uint16_t CH_PAR_1_2 = (1 << 14);
330 constexpr uint16_t OP_MODE = (1 << 15);
331
332 constexpr uint16_t ALL_CH_MASK = 0x003F;
333 constexpr uint16_t ALL_PAR_MASK = 0x7000;
334
335 constexpr uint16_t DEFAULT = 0x0000;
336
338 constexpr uint16_t CONFIG_MODE = 0x0000;
340 constexpr uint16_t MISSION_MODE = OP_MODE;
341
345 [[nodiscard]] constexpr uint16_t channel_mask(uint8_t channel) noexcept {
346 return (channel < 6) ? static_cast<uint16_t>(1 << channel) : 0;
347 }
348}
349
350//==============================================================================
351// GLOBAL_CONFIG REGISTER (0x0002) - Global Configuration
352//==============================================================================
353
374namespace GLOBAL_CONFIG {
375 constexpr uint16_t CLK_WD_EN = (1 << 0);
376 constexpr uint16_t SPI_WD_EN = (1 << 1);
377 constexpr uint16_t CRC_EN = (1 << 2);
378 constexpr uint16_t V1V5_UV_TEST = (1 << 4);
379 constexpr uint16_t V1V5_OV_TEST = (1 << 5);
380 constexpr uint16_t OT_TEST = (1 << 12);
381 constexpr uint16_t UV_OV_SWAP = (1 << 13);
382 constexpr uint16_t VIO_SEL = (1 << 14);
383
384 constexpr uint16_t DEFAULT = 0x4005;
385}
386
387//==============================================================================
388// GLOBAL_DIAG0 REGISTER (0x0003) - Global Diagnosis Register 0
389//==============================================================================
390
415namespace GLOBAL_DIAG0 {
416 constexpr uint16_t VBAT_UV = (1 << 0);
417 constexpr uint16_t VBAT_OV = (1 << 1);
418 constexpr uint16_t VIO_UV = (1 << 2);
419 constexpr uint16_t VIO_OV = (1 << 3);
420 constexpr uint16_t VDD_UV = (1 << 4);
421 constexpr uint16_t VDD_OV = (1 << 5);
422 constexpr uint16_t CLK_NOK = (1 << 6);
423 constexpr uint16_t COTERR = (1 << 7);
424 constexpr uint16_t COTWARN = (1 << 8);
425 constexpr uint16_t RES_EVENT = (1 << 9);
426 constexpr uint16_t POR_EVENT = (1 << 10);
427 constexpr uint16_t SPI_WD_ERR = (1 << 14);
428
429 constexpr uint16_t DEFAULT = 0x0600;
430 constexpr uint16_t FAULT_MASK = 0x47FF;
431}
432
433//==============================================================================
434// GLOBAL_DIAG1 REGISTER (0x0004) - Global Diagnosis Register 1
435//==============================================================================
436
457namespace GLOBAL_DIAG1 {
458 constexpr uint16_t VR_IREF_UV = (1 << 0);
459 constexpr uint16_t VR_IREF_OV = (1 << 1);
460 constexpr uint16_t VDD2V5_UV = (1 << 2);
461 constexpr uint16_t VDD2V5_OV = (1 << 3);
462 constexpr uint16_t REF_UV = (1 << 4);
463 constexpr uint16_t REF_OV = (1 << 5);
464 constexpr uint16_t VPRE_OV = (1 << 6);
465 constexpr uint16_t HVADC_ERR = (1 << 15);
466
467 constexpr uint16_t DEFAULT = 0x0000;
468}
469
470//==============================================================================
471// GLOBAL_DIAG2 REGISTER (0x0005) - Global Diagnosis Register 2
472//==============================================================================
473
477namespace GLOBAL_DIAG2 {
478 constexpr uint16_t REG_ECC_ERR = (1 << 1);
479 constexpr uint16_t OTP_ECC_ERR = (1 << 3);
480 constexpr uint16_t OTP_VIRGIN = (1 << 4);
481
482 constexpr uint16_t DEFAULT = 0x0000;
483}
484
485//==============================================================================
486// FB_STAT REGISTER (0x0202) - Feedback Status
487//==============================================================================
488
495namespace FB_STAT {
496 constexpr uint16_t SUP_NOK_INT = (1 << 0);
497 constexpr uint16_t SUP_NOK_EXT = (1 << 1);
498 constexpr uint16_t EN_PROT = (1 << 2);
499 constexpr uint16_t INIT_DONE = (1 << 3);
500 constexpr uint16_t CLK_NOK_STAT = (1 << 6);
501}
502
503//==============================================================================
504// CHANNEL SETPOINT REGISTER - Per Channel
505//==============================================================================
506
536namespace SETPOINT {
537 constexpr uint16_t TARGET_MASK = 0x7FFF;
538 constexpr uint16_t AUTO_LIMIT_DIS = (1 << 15);
539
540 constexpr uint16_t DEFAULT = 0x0000;
541
543 constexpr uint16_t MAX_TARGET = 0x6000;
544
551 [[nodiscard]] constexpr uint16_t calculate_target(uint16_t current_ma, bool parallel_mode = false) noexcept {
552 uint32_t max_current = parallel_mode ? 4000 : 2000;
553 uint32_t target = (static_cast<uint32_t>(current_ma) * 32767UL) / max_current;
554 // Saturate at MAX_TARGET
555 if (target > MAX_TARGET) target = MAX_TARGET;
556 return static_cast<uint16_t>(target);
557 }
558
565 [[nodiscard]] constexpr uint16_t calculate_current(uint16_t target, bool parallel_mode = false) noexcept {
566 uint32_t max_current = parallel_mode ? 4000 : 2000;
567 uint32_t current = (static_cast<uint32_t>(target & TARGET_MASK) * max_current) / 32767UL;
568 return static_cast<uint16_t>(current);
569 }
570}
571
572//==============================================================================
573// CHANNEL CTRL REGISTER - Per Channel
574//==============================================================================
575
587namespace CH_CTRL_REG {
588 constexpr uint16_t MIN_INT_THRESH_MASK = 0x00FF;
589 constexpr uint16_t PWM_PERIOD_CALC_MODE = (1 << 8);
590 constexpr uint16_t OLSG_WARN_WINDOW_MASK = 0x3E00;
591 constexpr uint16_t OLSG_WARN_WINDOW_SHIFT = 9;
592 constexpr uint16_t OLSG_WARN_EN = (1 << 14);
593
594 constexpr uint16_t DEFAULT = 0x4600;
595}
596
597//==============================================================================
598// CH_CONFIG REGISTER - Per Channel Configuration
599//==============================================================================
600
619namespace CH_CONFIG {
620 // Slew rate control [1:0]
621 constexpr uint16_t SLEWR_1V0_US = 0b00;
622 constexpr uint16_t SLEWR_2V5_US = 0b01;
623 constexpr uint16_t SLEWR_5V0_US = 0b10;
624 constexpr uint16_t SLEWR_10V0_US = 0b11;
625 constexpr uint16_t SLEWR_MASK = 0x0003;
626
627 // OFF-state diagnostic current [3:2]
628 constexpr uint16_t I_DIAG_80UA = (0 << 2);
629 constexpr uint16_t I_DIAG_190UA = (1 << 2);
630 constexpr uint16_t I_DIAG_720UA = (2 << 2);
631 constexpr uint16_t I_DIAG_1250UA = (3 << 2);
632 constexpr uint16_t I_DIAG_MASK = 0x000C;
633
634 // Open load threshold relative to setpoint [6:4]
635 constexpr uint16_t OL_TH_DISABLED = (0 << 4);
636 constexpr uint16_t OL_TH_1_8 = (1 << 4);
637 constexpr uint16_t OL_TH_2_8 = (2 << 4);
638 constexpr uint16_t OL_TH_3_8 = (3 << 4);
639 constexpr uint16_t OL_TH_4_8 = (4 << 4);
640 constexpr uint16_t OL_TH_5_8 = (5 << 4);
641 constexpr uint16_t OL_TH_6_8 = (6 << 4);
642 constexpr uint16_t OL_TH_7_8 = (7 << 4);
643 constexpr uint16_t OL_TH_MASK = 0x0070;
644
645 // Fixed open load threshold [12:7]
646 constexpr uint16_t OL_TH_FIXED_SHIFT = 7;
647 constexpr uint16_t OL_TH_FIXED_MASK = 0x1F80;
648
649 constexpr uint16_t OC_DIAG_EN = (1 << 13);
650
651 // OFF-state diagnostic control [15:14]
652 constexpr uint16_t OFF_DIAG_ENABLED = (0 << 14);
653 constexpr uint16_t OFF_DIAG_LS_ONLY = (1 << 14);
654 constexpr uint16_t OFF_DIAG_HS_ONLY = (2 << 14);
655 constexpr uint16_t OFF_DIAG_MASK = 0xC000;
656
657 constexpr uint16_t DEFAULT = 0x0003;
658}
659
660//==============================================================================
661// MODE REGISTER - Channel Mode
662//==============================================================================
663
675namespace CH_MODE {
676 constexpr uint16_t OFF = 0x0000;
677 constexpr uint16_t ICC_CURRENT_CTRL = 0x0001;
678 constexpr uint16_t DIRECT_DRIVE_SPI = 0x0002;
679 constexpr uint16_t DIRECT_DRIVE_DRV0= 0x0003;
680 constexpr uint16_t DIRECT_DRIVE_DRV1= 0x0004;
681 constexpr uint16_t FREE_RUN_MEAS = 0x000C;
682 constexpr uint16_t MODE_MASK = 0x000F;
683
684 constexpr uint16_t DEFAULT = OFF;
685}
686
687//==============================================================================
688// DITHER CONTROL REGISTER - Per Channel
689//==============================================================================
690
701namespace DITHER_CTRL {
702 constexpr uint16_t STEP_SIZE_MASK = 0x0FFF;
703 constexpr uint16_t DEEP_DITHER = (1 << 13);
704 constexpr uint16_t FAST_MEAS_DITH = (0 << 14);
705 constexpr uint16_t FAST_MEAS_HALF = (1 << 14);
706 constexpr uint16_t FAST_MEAS_QUAD = (2 << 14);
707 constexpr uint16_t FAST_MEAS_MASK = 0xC000;
708
709 constexpr uint16_t DEFAULT = 0x0000;
710}
711
712//==============================================================================
713// DITHER STEP REGISTER - Per Channel
714//==============================================================================
715
725namespace DITHER_STEP {
726 constexpr uint16_t FLAT_MASK = 0x00FF;
727 constexpr uint16_t STEPS_SHIFT = 8;
728 constexpr uint16_t STEPS_MASK = 0xFF00;
729
730 constexpr uint16_t DEFAULT = 0x0000;
731}
732
733//==============================================================================
734// HELPER ENUMERATIONS
735//==============================================================================
736
740enum class Channel : uint8_t {
741 CH0 = 0,
742 CH1 = 1,
743 CH2 = 2,
744 CH3 = 3,
745 CH4 = 4,
746 CH5 = 5,
747
748 COUNT = 6
749};
750
754enum class ChannelMode : uint8_t {
755 OFF = 0x0,
756 ICC = 0x1,
757 DIRECT_DRIVE_SPI = 0x2,
758 DIRECT_DRIVE_DRV0 = 0x3,
759 DIRECT_DRIVE_DRV1 = 0x4,
760 FREE_RUN_MEAS = 0xC
761};
762
766enum class SlewRate : uint8_t {
767 SLOW_1V0_US = 0,
768 MEDIUM_2V5_US = 1,
769 FAST_5V0_US = 2,
770 FASTEST_10V0_US = 3
771};
772
776enum class DiagCurrent : uint8_t {
777 I_80UA = 0,
778 I_190UA = 1,
779 I_720UA = 2,
780 I_1250UA = 3
781};
782
786enum class ParallelPair : uint8_t {
787 NONE = 0,
788 CH0_CH3 = 1,
789 CH1_CH2 = 2,
790 CH4_CH5 = 3
791};
792
793//==============================================================================
794// ADDRESS CALCULATION HELPERS
795//==============================================================================
796
802[[nodiscard]] constexpr uint16_t get_channel_base(Channel channel) noexcept {
803 return ChannelBase::CH0 + (static_cast<uint16_t>(channel) * ChannelBase::SPACING);
804}
805
812[[nodiscard]] constexpr uint16_t get_channel_register(Channel channel, uint16_t offset) noexcept {
813 return get_channel_base(channel) + offset;
814}
815
819[[nodiscard]] constexpr uint8_t to_index(Channel ch) noexcept {
820 return static_cast<uint8_t>(ch);
821}
822
826[[nodiscard]] constexpr bool is_valid_channel(Channel ch) noexcept {
827 return to_index(ch) < static_cast<uint8_t>(Channel::COUNT);
828}
829
830//==============================================================================
831// CRC CALCULATION (SAE J1850)
832//==============================================================================
833
846[[nodiscard]] constexpr uint8_t calculate_crc8_j1850(const uint8_t* data, size_t length) noexcept {
847 constexpr uint8_t POLY = 0x1D;
848 uint8_t crc = 0xFF;
849
850 for (size_t i = 0; i < length; ++i) {
851 crc ^= data[i];
852 for (uint8_t bit = 0; bit < 8; ++bit) {
853 if (crc & 0x80) {
854 crc = (crc << 1) ^ POLY;
855 } else {
856 crc = (crc << 1);
857 }
858 }
859 }
860
861 return crc ^ 0xFF;
862}
863
869[[nodiscard]] inline uint8_t calculate_frame_crc(const SPIFrame& frame) noexcept {
870 const uint8_t* bytes = reinterpret_cast<const uint8_t*>(&frame);
871 // Calculate CRC on bytes 0-2 (excluding CRC byte itself at position 3)
872 return calculate_crc8_j1850(bytes, 3);
873}
874
880[[nodiscard]] inline bool verify_frame_crc(const SPIFrame& frame) noexcept {
881 SPIFrame temp = frame;
882 uint8_t received_crc = temp.tx_fields.crc;
883 temp.tx_fields.crc = 0;
884 uint8_t calculated_crc = calculate_frame_crc(temp);
885 return (received_crc == calculated_crc);
886}
887
888} // namespace TLE92466ED
889
890#endif // TLE92466ED_REGISTERS_HPP
constexpr uint16_t OL_TH_MASK
OL threshold mask.
Definition TLE92466ED_Registers.hpp:643
constexpr uint16_t OL_TH_DISABLED
OL detection disabled.
Definition TLE92466ED_Registers.hpp:635
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:657
constexpr uint16_t OFF_DIAG_MASK
OFF diag mask.
Definition TLE92466ED_Registers.hpp:655
constexpr uint16_t OC_DIAG_EN
OC diag in OFF state.
Definition TLE92466ED_Registers.hpp:649
constexpr uint16_t OL_TH_7_8
7/8 of setpoint
Definition TLE92466ED_Registers.hpp:642
constexpr uint16_t OL_TH_5_8
5/8 of setpoint
Definition TLE92466ED_Registers.hpp:640
constexpr uint16_t OFF_DIAG_LS_ONLY
Low side current only.
Definition TLE92466ED_Registers.hpp:653
constexpr uint16_t SLEWR_5V0_US
5.0 V/µs
Definition TLE92466ED_Registers.hpp:623
constexpr uint16_t SLEWR_MASK
Slew rate mask.
Definition TLE92466ED_Registers.hpp:625
constexpr uint16_t OL_TH_2_8
2/8 of setpoint
Definition TLE92466ED_Registers.hpp:637
constexpr uint16_t OFF_DIAG_ENABLED
OFF diag enabled.
Definition TLE92466ED_Registers.hpp:652
constexpr uint16_t SLEWR_10V0_US
10.0 V/µs
Definition TLE92466ED_Registers.hpp:624
constexpr uint16_t I_DIAG_80UA
80 µA
Definition TLE92466ED_Registers.hpp:628
constexpr uint16_t OL_TH_4_8
4/8 of setpoint
Definition TLE92466ED_Registers.hpp:639
constexpr uint16_t SLEWR_2V5_US
2.5 V/µs
Definition TLE92466ED_Registers.hpp:622
constexpr uint16_t OL_TH_1_8
1/8 of setpoint
Definition TLE92466ED_Registers.hpp:636
constexpr uint16_t OFF_DIAG_HS_ONLY
High side current only.
Definition TLE92466ED_Registers.hpp:654
constexpr uint16_t OL_TH_6_8
6/8 of setpoint
Definition TLE92466ED_Registers.hpp:641
constexpr uint16_t OL_TH_FIXED_MASK
Definition TLE92466ED_Registers.hpp:647
constexpr uint16_t SLEWR_1V0_US
1.0 V/µs
Definition TLE92466ED_Registers.hpp:621
constexpr uint16_t I_DIAG_720UA
720 µA
Definition TLE92466ED_Registers.hpp:630
constexpr uint16_t OL_TH_FIXED_SHIFT
Definition TLE92466ED_Registers.hpp:646
constexpr uint16_t I_DIAG_MASK
I_DIAG mask.
Definition TLE92466ED_Registers.hpp:632
constexpr uint16_t I_DIAG_190UA
190 µA
Definition TLE92466ED_Registers.hpp:629
constexpr uint16_t OL_TH_3_8
3/8 of setpoint
Definition TLE92466ED_Registers.hpp:638
constexpr uint16_t I_DIAG_1250UA
1250 µA
Definition TLE92466ED_Registers.hpp:631
constexpr uint16_t OLSG_WARN_EN
OLSG warn enable.
Definition TLE92466ED_Registers.hpp:592
constexpr uint16_t OLSG_WARN_WINDOW_MASK
OLSG window mask.
Definition TLE92466ED_Registers.hpp:590
constexpr uint16_t MIN_INT_THRESH_MASK
Min threshold mask.
Definition TLE92466ED_Registers.hpp:588
constexpr uint16_t OLSG_WARN_WINDOW_SHIFT
OLSG window shift.
Definition TLE92466ED_Registers.hpp:591
constexpr uint16_t PWM_PERIOD_CALC_MODE
PWM calc mode.
Definition TLE92466ED_Registers.hpp:589
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:594
constexpr uint16_t ALL_CH_MASK
All channel bits.
Definition TLE92466ED_Registers.hpp:332
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:335
constexpr uint16_t CH_PAR_1_2
Parallel CH1/CH2.
Definition TLE92466ED_Registers.hpp:329
constexpr uint16_t EN_CH5
Enable Channel 5.
Definition TLE92466ED_Registers.hpp:326
constexpr uint16_t CONFIG_MODE
Config Mode (OP_MODE=0)
Definition TLE92466ED_Registers.hpp:338
constexpr uint16_t MISSION_MODE
Mission Mode (OP_MODE=1)
Definition TLE92466ED_Registers.hpp:340
constexpr uint16_t OP_MODE
Operation Mode.
Definition TLE92466ED_Registers.hpp:330
constexpr uint16_t ALL_PAR_MASK
All parallel bits.
Definition TLE92466ED_Registers.hpp:333
constexpr uint16_t EN_CH0
Enable Channel 0.
Definition TLE92466ED_Registers.hpp:321
constexpr uint16_t EN_CH1
Enable Channel 1.
Definition TLE92466ED_Registers.hpp:322
constexpr uint16_t CH_PAR_4_5
Parallel CH4/CH5.
Definition TLE92466ED_Registers.hpp:327
constexpr uint16_t EN_CH3
Enable Channel 3.
Definition TLE92466ED_Registers.hpp:324
constexpr uint16_t CH_PAR_0_3
Parallel CH0/CH3.
Definition TLE92466ED_Registers.hpp:328
constexpr uint16_t EN_CH4
Enable Channel 4.
Definition TLE92466ED_Registers.hpp:325
constexpr uint16_t channel_mask(uint8_t channel) noexcept
Get channel enable bit mask.
Definition TLE92466ED_Registers.hpp:345
constexpr uint16_t EN_CH2
Enable Channel 2.
Definition TLE92466ED_Registers.hpp:323
constexpr uint16_t DIRECT_DRIVE_DRV0
Direct drive via DRV0 pin.
Definition TLE92466ED_Registers.hpp:679
constexpr uint16_t FREE_RUN_MEAS
Free running measurement.
Definition TLE92466ED_Registers.hpp:681
constexpr uint16_t DEFAULT
Default (off)
Definition TLE92466ED_Registers.hpp:684
constexpr uint16_t ICC_CURRENT_CTRL
ICC current control.
Definition TLE92466ED_Registers.hpp:677
constexpr uint16_t OFF
Channel off.
Definition TLE92466ED_Registers.hpp:676
constexpr uint16_t DIRECT_DRIVE_DRV1
Direct drive via DRV1 pin.
Definition TLE92466ED_Registers.hpp:680
constexpr uint16_t MODE_MASK
Mode mask.
Definition TLE92466ED_Registers.hpp:682
constexpr uint16_t DIRECT_DRIVE_SPI
Direct drive via SPI.
Definition TLE92466ED_Registers.hpp:678
constexpr uint16_t FB_FRZ
Feedback Freeze Register.
Definition TLE92466ED_Registers.hpp:159
constexpr uint16_t DIAG_ERR_CHGR2
Diagnosis Error CH Group 2.
Definition TLE92466ED_Registers.hpp:166
constexpr uint16_t FB_VOLTAGE2
Feedback Voltage Register 2.
Definition TLE92466ED_Registers.hpp:189
constexpr uint16_t DIAG_ERR_CHGR3
Diagnosis Error CH Group 3.
Definition TLE92466ED_Registers.hpp:167
constexpr uint16_t DIAG_ERR_CHGR5
Diagnosis Error CH Group 5.
Definition TLE92466ED_Registers.hpp:169
constexpr uint16_t GLOBAL_DIAG2
Global Diagnosis Register 2.
Definition TLE92466ED_Registers.hpp:157
constexpr uint16_t GLOBAL_DIAG1
Global Diagnosis Register 1.
Definition TLE92466ED_Registers.hpp:156
constexpr uint16_t FAULT_MASK2
Fault Mask Register 2.
Definition TLE92466ED_Registers.hpp:180
constexpr uint16_t DIAG_WARN_CHGR0
Diagnosis Warning CH Group 0.
Definition TLE92466ED_Registers.hpp:171
constexpr uint16_t FB_VOLTAGE1
Feedback Voltage Register 1.
Definition TLE92466ED_Registers.hpp:188
constexpr uint16_t DIAG_WARN_CHGR1
Diagnosis Warning CH Group 1.
Definition TLE92466ED_Registers.hpp:172
constexpr uint16_t FB_STAT
Feedback Status Register.
Definition TLE92466ED_Registers.hpp:187
constexpr uint16_t DIAG_ERR_CHGR0
Diagnosis Error CH Group 0.
Definition TLE92466ED_Registers.hpp:164
constexpr uint16_t DIAG_WARN_CHGR2
Diagnosis Warning CH Group 2.
Definition TLE92466ED_Registers.hpp:173
constexpr uint16_t DIAG_ERR_CHGR4
Diagnosis Error CH Group 4.
Definition TLE92466ED_Registers.hpp:168
constexpr uint16_t CHIPID2
Unique Chip ID Register 2.
Definition TLE92466ED_Registers.hpp:192
constexpr uint16_t CHIPID0
Unique Chip ID Register 0.
Definition TLE92466ED_Registers.hpp:190
constexpr uint16_t DIAG_WARN_CHGR4
Diagnosis Warning CH Group 4.
Definition TLE92466ED_Registers.hpp:175
constexpr uint16_t FAULT_MASK1
Fault Mask Register 1.
Definition TLE92466ED_Registers.hpp:179
constexpr uint16_t ICVID
IC Version and ID.
Definition TLE92466ED_Registers.hpp:185
constexpr uint16_t VBAT_TH
VBAT Threshold Register.
Definition TLE92466ED_Registers.hpp:158
constexpr uint16_t PIN_STAT
Pin Status Register.
Definition TLE92466ED_Registers.hpp:186
constexpr uint16_t DIAG_WARN_CHGR5
Diagnosis Warning CH Group 5.
Definition TLE92466ED_Registers.hpp:176
constexpr uint16_t WD_RELOAD
SPI Watchdog Reload Register.
Definition TLE92466ED_Registers.hpp:161
constexpr uint16_t DIAG_ERR_CHGR1
Diagnosis Error CH Group 1.
Definition TLE92466ED_Registers.hpp:165
constexpr uint16_t CLK_DIV
Clock Control Register.
Definition TLE92466ED_Registers.hpp:181
constexpr uint16_t FB_UPD
Feedback Update Register.
Definition TLE92466ED_Registers.hpp:160
constexpr uint16_t DIAG_WARN_CHGR3
Diagnosis Warning CH Group 3.
Definition TLE92466ED_Registers.hpp:174
constexpr uint16_t CHIPID1
Unique Chip ID Register 1.
Definition TLE92466ED_Registers.hpp:191
constexpr uint16_t GLOBAL_CONFIG
Global Configuration Register.
Definition TLE92466ED_Registers.hpp:154
constexpr uint16_t GLOBAL_DIAG0
Global Diagnosis Register 0.
Definition TLE92466ED_Registers.hpp:155
constexpr uint16_t SFF_BIST
BIST Register.
Definition TLE92466ED_Registers.hpp:182
constexpr uint16_t CH_CTRL
Channel Control Register.
Definition TLE92466ED_Registers.hpp:153
constexpr uint16_t FAULT_MASK0
Fault Mask Register 0.
Definition TLE92466ED_Registers.hpp:178
constexpr uint16_t SPACING
Address spacing between channels.
Definition TLE92466ED_Registers.hpp:266
constexpr uint16_t CH0
Channel 0 base address.
Definition TLE92466ED_Registers.hpp:259
constexpr uint16_t CH2
Channel 2 base address.
Definition TLE92466ED_Registers.hpp:261
constexpr uint16_t CH3
Channel 3 base address.
Definition TLE92466ED_Registers.hpp:262
constexpr uint16_t CH1
Channel 1 base address.
Definition TLE92466ED_Registers.hpp:260
constexpr uint16_t CH5
Channel 5 base address.
Definition TLE92466ED_Registers.hpp:264
constexpr uint16_t CH4
Channel 4 base address.
Definition TLE92466ED_Registers.hpp:263
constexpr uint16_t FB_INT_THRESH
Feedback Integrator Threshold.
Definition TLE92466ED_Registers.hpp:288
constexpr uint16_t SETPOINT
Current Setpoint Register.
Definition TLE92466ED_Registers.hpp:273
constexpr uint16_t PERIOD
ICC PWM Frequency Controller.
Definition TLE92466ED_Registers.hpp:275
constexpr uint16_t FB_IMIN_IMAX
Feedback Min/Max Current.
Definition TLE92466ED_Registers.hpp:287
constexpr uint16_t DITHER_STEP
Dither Step Register.
Definition TLE92466ED_Registers.hpp:278
constexpr uint16_t CTRL_INT_THRESH
ICC Integrator Threshold.
Definition TLE92466ED_Registers.hpp:283
constexpr uint16_t CTRL
Control Register.
Definition TLE92466ED_Registers.hpp:274
constexpr uint16_t DITHER_CTRL
Dither Control Register.
Definition TLE92466ED_Registers.hpp:279
constexpr uint16_t FB_I_AVG
Feedback Average Current.
Definition TLE92466ED_Registers.hpp:286
constexpr uint16_t MODE
Channel Mode Register.
Definition TLE92466ED_Registers.hpp:281
constexpr uint16_t INTEGRATOR_LIMIT
ICC Integrator Limitation.
Definition TLE92466ED_Registers.hpp:276
constexpr uint16_t TON
On-Time Register.
Definition TLE92466ED_Registers.hpp:282
constexpr uint16_t CH_CONFIG
Channel Configuration.
Definition TLE92466ED_Registers.hpp:280
constexpr uint16_t DITHER_CLK_DIV
Dither Clock Register.
Definition TLE92466ED_Registers.hpp:277
constexpr uint16_t FB_VBAT
Feedback Average VBAT.
Definition TLE92466ED_Registers.hpp:285
constexpr uint16_t FB_DC
Feedback Duty Cycle.
Definition TLE92466ED_Registers.hpp:284
constexpr uint16_t DEEP_DITHER
Deep dither enable.
Definition TLE92466ED_Registers.hpp:703
constexpr uint16_t FAST_MEAS_QUAD
Quarter dither period.
Definition TLE92466ED_Registers.hpp:706
constexpr uint16_t FAST_MEAS_HALF
Half dither period.
Definition TLE92466ED_Registers.hpp:705
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:709
constexpr uint16_t STEP_SIZE_MASK
Step size mask.
Definition TLE92466ED_Registers.hpp:702
constexpr uint16_t FAST_MEAS_MASK
Fast meas mask.
Definition TLE92466ED_Registers.hpp:707
constexpr uint16_t FAST_MEAS_DITH
Dither period.
Definition TLE92466ED_Registers.hpp:704
constexpr uint16_t FLAT_MASK
Flat period mask.
Definition TLE92466ED_Registers.hpp:726
constexpr uint16_t STEPS_SHIFT
Steps shift.
Definition TLE92466ED_Registers.hpp:727
constexpr uint16_t STEPS_MASK
Steps mask.
Definition TLE92466ED_Registers.hpp:728
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:730
constexpr bool is_valid_device(uint16_t icvid) noexcept
Check if ICVID value is valid for TLE92466ED.
Definition TLE92466ED_Registers.hpp:225
constexpr uint8_t MIN_REVISION
Minimum silicon revision.
Definition TLE92466ED_Registers.hpp:218
constexpr uint16_t REVISION_MASK
Silicon revision mask [7:0].
Definition TLE92466ED_Registers.hpp:211
constexpr uint8_t EXPECTED_TYPE_92466ED
Expected device type code.
Definition TLE92466ED_Registers.hpp:215
constexpr uint16_t DEVICE_TYPE_MASK
Device type mask [15:8].
Definition TLE92466ED_Registers.hpp:210
constexpr uint8_t get_revision(uint16_t icvid) noexcept
Extract silicon revision from ICVID.
Definition TLE92466ED_Registers.hpp:242
constexpr uint8_t get_device_type(uint16_t icvid) noexcept
Extract device type from ICVID.
Definition TLE92466ED_Registers.hpp:235
constexpr uint16_t EN_PROT
Enable protection active.
Definition TLE92466ED_Registers.hpp:498
constexpr uint16_t INIT_DONE
Initialization done.
Definition TLE92466ED_Registers.hpp:499
constexpr uint16_t SUP_NOK_INT
Internal supply fault.
Definition TLE92466ED_Registers.hpp:496
constexpr uint16_t CLK_NOK_STAT
Clock fault status.
Definition TLE92466ED_Registers.hpp:500
constexpr uint16_t SUP_NOK_EXT
External supply fault.
Definition TLE92466ED_Registers.hpp:497
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:384
constexpr uint16_t V1V5_OV_TEST
1.5V OV test
Definition TLE92466ED_Registers.hpp:379
constexpr uint16_t VIO_SEL
VIO select (0=3.3V, 1=5V)
Definition TLE92466ED_Registers.hpp:382
constexpr uint16_t SPI_WD_EN
SPI watchdog enable.
Definition TLE92466ED_Registers.hpp:376
constexpr uint16_t UV_OV_SWAP
UV/OV swap test.
Definition TLE92466ED_Registers.hpp:381
constexpr uint16_t CRC_EN
CRC check enable.
Definition TLE92466ED_Registers.hpp:377
constexpr uint16_t OT_TEST
Over-temp test.
Definition TLE92466ED_Registers.hpp:380
constexpr uint16_t CLK_WD_EN
Clock watchdog enable.
Definition TLE92466ED_Registers.hpp:375
constexpr uint16_t V1V5_UV_TEST
1.5V UV test
Definition TLE92466ED_Registers.hpp:378
constexpr uint16_t COTERR
Central OT error.
Definition TLE92466ED_Registers.hpp:423
constexpr uint16_t FAULT_MASK
All fault bits.
Definition TLE92466ED_Registers.hpp:430
constexpr uint16_t VDD_UV
VDD undervoltage.
Definition TLE92466ED_Registers.hpp:420
constexpr uint16_t SPI_WD_ERR
SPI watchdog error.
Definition TLE92466ED_Registers.hpp:427
constexpr uint16_t VBAT_OV
VBAT overvoltage.
Definition TLE92466ED_Registers.hpp:417
constexpr uint16_t VBAT_UV
VBAT undervoltage.
Definition TLE92466ED_Registers.hpp:416
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:429
constexpr uint16_t POR_EVENT
Power-on reset.
Definition TLE92466ED_Registers.hpp:426
constexpr uint16_t CLK_NOK
Clock fault.
Definition TLE92466ED_Registers.hpp:422
constexpr uint16_t VDD_OV
VDD overvoltage.
Definition TLE92466ED_Registers.hpp:421
constexpr uint16_t VIO_UV
VIO undervoltage.
Definition TLE92466ED_Registers.hpp:418
constexpr uint16_t COTWARN
Central OT warning.
Definition TLE92466ED_Registers.hpp:424
constexpr uint16_t VIO_OV
VIO overvoltage.
Definition TLE92466ED_Registers.hpp:419
constexpr uint16_t RES_EVENT
Reset event.
Definition TLE92466ED_Registers.hpp:425
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:467
constexpr uint16_t VR_IREF_OV
Bias current OV.
Definition TLE92466ED_Registers.hpp:459
constexpr uint16_t VDD2V5_UV
2.5V supply UV
Definition TLE92466ED_Registers.hpp:460
constexpr uint16_t VPRE_OV
Pre-reg OV.
Definition TLE92466ED_Registers.hpp:464
constexpr uint16_t VDD2V5_OV
2.5V supply OV
Definition TLE92466ED_Registers.hpp:461
constexpr uint16_t REF_UV
Reference UV.
Definition TLE92466ED_Registers.hpp:462
constexpr uint16_t HVADC_ERR
HV ADC error.
Definition TLE92466ED_Registers.hpp:465
constexpr uint16_t REF_OV
Reference OV.
Definition TLE92466ED_Registers.hpp:463
constexpr uint16_t VR_IREF_UV
Bias current UV.
Definition TLE92466ED_Registers.hpp:458
constexpr uint16_t OTP_VIRGIN
OTP virgin/unconfigured.
Definition TLE92466ED_Registers.hpp:480
constexpr uint16_t DEFAULT
Default value.
Definition TLE92466ED_Registers.hpp:482
constexpr uint16_t REG_ECC_ERR
Register ECC error.
Definition TLE92466ED_Registers.hpp:478
constexpr uint16_t OTP_ECC_ERR
OTP ECC error.
Definition TLE92466ED_Registers.hpp:479
constexpr uint16_t AUTO_LIMIT_DIS
Disable auto-limit.
Definition TLE92466ED_Registers.hpp:538
constexpr uint16_t MAX_TARGET
Maximum safe target value (datasheet saturates above 0x6000)
Definition TLE92466ED_Registers.hpp:543
constexpr uint16_t calculate_current(uint16_t target, bool parallel_mode=false) noexcept
Calculate current from setpoint value.
Definition TLE92466ED_Registers.hpp:565
constexpr uint16_t TARGET_MASK
Target current mask.
Definition TLE92466ED_Registers.hpp:537
constexpr uint16_t calculate_target(uint16_t current_ma, bool parallel_mode=false) noexcept
Calculate setpoint value for desired current.
Definition TLE92466ED_Registers.hpp:551
constexpr uint16_t DEFAULT
Default (0A)
Definition TLE92466ED_Registers.hpp:540
Definition TLE92466ED.hpp:80
ChannelMode
Channel operation mode.
Definition TLE92466ED_Registers.hpp:754
@ DIRECT_DRIVE_DRV0
Direct drive via DRV0 pin.
@ DIRECT_DRIVE_DRV1
Direct drive via DRV1 pin.
@ FREE_RUN_MEAS
Free running measurement mode.
@ DIRECT_DRIVE_SPI
Direct drive via SPI TON register.
@ ICC
Integrated Current Control.
bool verify_frame_crc(const SPIFrame &frame) noexcept
Verify CRC in received frame.
Definition TLE92466ED_Registers.hpp:880
constexpr bool is_valid_channel(Channel ch) noexcept
Validate channel number.
Definition TLE92466ED_Registers.hpp:826
constexpr uint8_t to_index(Channel ch) noexcept
Convert channel to index.
Definition TLE92466ED_Registers.hpp:819
ReplyMode
SPI Reply Mode enumeration.
Definition TLE92466ED_Registers.hpp:123
@ REPLY_16BIT
16-bit reply frame
@ REPLY_22BIT
22-bit reply frame (extended data)
@ CRITICAL_FAULT
Critical fault frame.
Channel
Channel enumeration.
Definition TLE92466ED_Registers.hpp:740
@ COUNT
Total number of channels.
constexpr uint8_t calculate_crc8_j1850(const uint8_t *data, size_t length) noexcept
Calculate SAE J1850 CRC-8.
Definition TLE92466ED_Registers.hpp:846
ParallelPair
Parallel operation pairs.
Definition TLE92466ED_Registers.hpp:786
@ CH4_CH5
Channels 4 and 5 paralleled.
@ CH1_CH2
Channels 1 and 2 paralleled.
@ NONE
No parallel operation.
@ CH0_CH3
Channels 0 and 3 paralleled.
SPIStatus
SPI Status codes.
Definition TLE92466ED_Registers.hpp:133
@ SPI_FRAME_ERROR
SPI frame error.
@ INTERNAL_BUS_FAULT
Internal bus fault.
@ WRITE_RO_REG
Write to read-only register.
@ CRC_ERROR
Parity/CRC error.
SlewRate
Slew rate enumeration.
Definition TLE92466ED_Registers.hpp:766
@ FAST_5V0_US
5.0 V/µs
@ SLOW_1V0_US
1.0 V/µs
@ FASTEST_10V0_US
10.0 V/µs
@ MEDIUM_2V5_US
2.5 V/µs
uint8_t calculate_frame_crc(const SPIFrame &frame) noexcept
Calculate CRC for SPI frame.
Definition TLE92466ED_Registers.hpp:869
DiagCurrent
OFF-state diagnostic current.
Definition TLE92466ED_Registers.hpp:776
constexpr uint16_t get_channel_register(Channel channel, uint16_t offset) noexcept
Get channel register address.
Definition TLE92466ED_Registers.hpp:812
constexpr uint16_t get_channel_base(Channel channel) noexcept
Get channel base address.
Definition TLE92466ED_Registers.hpp:802
32-bit SPI frame structure for TLE92466ED communication
Definition TLE92466ED_Registers.hpp:68
uint32_t reply_mode
Reply mode [23:22].
Definition TLE92466ED_Registers.hpp:84
static constexpr SPIFrame make_read(uint16_t addr) noexcept
Construct read frame (without CRC - must be calculated separately)
Definition TLE92466ED_Registers.hpp:93
uint32_t rw
Read/Write bit [16] (1=Write, 0=Read)
Definition TLE92466ED_Registers.hpp:74
struct TLE92466ED::SPIFrame::@1 rx_fields
MISO (Receive) frame structure.
static constexpr SPIFrame make_write(uint16_t addr, uint16_t data) noexcept
Construct write frame (without CRC - must be calculated separately)
Definition TLE92466ED_Registers.hpp:108
uint32_t rw_echo
R/W bit echoed [16].
Definition TLE92466ED_Registers.hpp:82
uint32_t address
Register address [23:17].
Definition TLE92466ED_Registers.hpp:75
uint32_t status
Status bits [21:17].
Definition TLE92466ED_Registers.hpp:83
uint32_t word
Complete 32-bit frame.
Definition TLE92466ED_Registers.hpp:69
struct TLE92466ED::SPIFrame::@0 tx_fields
MOSI (Transmit) frame structure.
uint32_t crc
CRC-8 SAE J1850 [31:24].
Definition TLE92466ED_Registers.hpp:76
uint32_t data
Data field [15:0].
Definition TLE92466ED_Registers.hpp:73