HF-MAX22200 Driver 0.1.0-dev
HF-MAX22200 C++ Driver
Loading...
Searching...
No Matches
max22200_registers.hpp
Go to the documentation of this file.
1
50#pragma once
51#include <cstdint>
52
53namespace max22200 {
54
60constexpr uint8_t NUM_CHANNELS_ = 8;
61
70constexpr uint32_t MAX_SPI_FREQ_STANDALONE_ = 10000000; // 10 MHz
71
78constexpr uint32_t MAX_SPI_FREQ_DAISY_CHAIN_ = 5000000; // 5 MHz
79
80// ============================================================================
81// Register Bank Addresses (A_BNK field in Command Register, bits [4:1])
82// ============================================================================
83
94namespace RegBank {
95constexpr uint8_t STATUS = 0x00;
96constexpr uint8_t CFG_CH0 = 0x01;
97constexpr uint8_t CFG_CH1 = 0x02;
98constexpr uint8_t CFG_CH2 = 0x03;
99constexpr uint8_t CFG_CH3 = 0x04;
100constexpr uint8_t CFG_CH4 = 0x05;
101constexpr uint8_t CFG_CH5 = 0x06;
102constexpr uint8_t CFG_CH6 = 0x07;
103constexpr uint8_t CFG_CH7 = 0x08;
104constexpr uint8_t FAULT = 0x09;
105constexpr uint8_t CFG_DPM = 0x0A;
106} // namespace RegBank
107
108// ============================================================================
109// Command Register (8-bit, Write Only)
110// ============================================================================
111
139namespace CommandReg {
140constexpr uint8_t RBW_POS = 7;
141constexpr uint8_t RBW_READ = 0x00;
142constexpr uint8_t RBW_WRITE = 0x80;
143
144constexpr uint8_t A_BNK_POS = 1;
145constexpr uint8_t A_BNK_MASK = 0x1E;
146
147constexpr uint8_t MODE_8BIT = 0x01;
148constexpr uint8_t MODE_32BIT = 0x00;
149
172constexpr uint8_t build(uint8_t bank, bool write, bool mode8 = false) {
173 return static_cast<uint8_t>(
174 (write ? RBW_WRITE : RBW_READ) |
175 ((bank & 0x0F) << A_BNK_POS) |
177}
178} // namespace CommandReg
179
180// ============================================================================
181// STATUS Register (0x00) — 32-bit
182// ============================================================================
183
218namespace StatusReg {
219// Byte 3 (bits 31:24) — Channel activation
220constexpr uint32_t ONCH_SHIFT = 24;
221constexpr uint32_t ONCH_MASK = 0xFF000000u;
222
223// Byte 2 (bits 23:16) — Fault masks + FREQM
224constexpr uint32_t M_OVT_BIT = (1u << 23);
225constexpr uint32_t M_OCP_BIT = (1u << 22);
226constexpr uint32_t M_OLF_BIT = (1u << 21);
227constexpr uint32_t M_HHF_BIT = (1u << 20);
228constexpr uint32_t M_DPM_BIT = (1u << 19);
229constexpr uint32_t M_COMF_BIT = (1u << 18);
230constexpr uint32_t M_UVM_BIT = (1u << 17);
231constexpr uint32_t FREQM_BIT = (1u << 16);
232
233// Byte 1 (bits 15:8) — Channel-pair mode configuration
234constexpr uint32_t CM76_SHIFT = 14;
235constexpr uint32_t CM76_MASK = (0x03u << 14);
236constexpr uint32_t CM54_SHIFT = 12;
237constexpr uint32_t CM54_MASK = (0x03u << 12);
238constexpr uint32_t CM32_SHIFT = 10;
239constexpr uint32_t CM32_MASK = (0x03u << 10);
240constexpr uint32_t CM10_SHIFT = 8;
241constexpr uint32_t CM10_MASK = (0x03u << 8);
242
243// Byte 0 (bits 7:0) — Fault flags (read-only except ACTIVE)
244constexpr uint32_t OVT_BIT = (1u << 7);
245constexpr uint32_t OCP_BIT = (1u << 6);
246constexpr uint32_t OLF_BIT = (1u << 5);
247constexpr uint32_t HHF_BIT = (1u << 4);
248constexpr uint32_t DPM_BIT = (1u << 3);
249constexpr uint32_t COMER_BIT = (1u << 2);
251constexpr uint8_t FAULT_BYTE_COMER = 0x04u;
252constexpr uint32_t UVM_BIT = (1u << 1);
253constexpr uint32_t ACTIVE_BIT = (1u << 0);
254
256constexpr uint32_t FAULT_FLAGS_MASK = 0xFEu;
257
259constexpr uint8_t CM_INDEPENDENT = 0x00;
261constexpr uint8_t CM_PARALLEL = 0x01;
263constexpr uint8_t CM_HBRIDGE = 0x02;
265constexpr uint8_t CM_RESERVED = 0x03;
266} // namespace StatusReg
267
268// ============================================================================
269// Channel Configuration Register (CFG_CHx, 0x01-0x08) — 32-bit
270// ============================================================================
271
357namespace CfgChReg {
358// Bit 31: HFS (Half Full-Scale)
359constexpr uint32_t HFS_BIT = (1u << 31);
360
361// Bits 30:24: HOLD current (7-bit)
362constexpr uint32_t HOLD_SHIFT = 24;
363constexpr uint32_t HOLD_MASK = (0x7Fu << 24);
364
365// Bit 23: TRGnSPI (Trigger source)
366constexpr uint32_t TRGNSPI_BIT = (1u << 23);
367
368// Bits 22:16: HIT current (7-bit)
369constexpr uint32_t HIT_SHIFT = 16;
370constexpr uint32_t HIT_MASK = (0x7Fu << 16);
371
372// Bits 15:8: HIT time (8-bit)
373constexpr uint32_t HITT_SHIFT = 8;
374constexpr uint32_t HITT_MASK = (0xFFu << 8);
375
376// Bit 7: VDRnCDR (Drive mode)
377constexpr uint32_t VDRNCDR_BIT = (1u << 7);
378
379// Bit 6: HSnLS (High-side/Low-side)
380constexpr uint32_t HSNLS_BIT = (1u << 6);
381
382// Bits 5:4: FREQ_CFG (Chopping frequency)
384constexpr uint32_t FREQ_CFG_MASK = (0x03u << 4);
385
386// Bit 3: SRC (Slew rate control)
387constexpr uint32_t SRC_BIT = (1u << 3);
388
389// Bit 2: OL_EN (Open load detect enable)
390constexpr uint32_t OL_EN_BIT = (1u << 2);
391
392// Bit 1: DPM_EN (DPM detection enable)
393constexpr uint32_t DPM_EN_BIT = (1u << 1);
394
395// Bit 0: HHF_EN (HIT current check enable)
396constexpr uint32_t HHF_EN_BIT = (1u << 0);
397
399constexpr uint8_t MAX_HOLD = 127;
401constexpr uint8_t MAX_HIT = 127;
403constexpr uint8_t MAX_HIT_TIME = 255;
405constexpr uint8_t CONTINUOUS_HIT = 255;
406} // namespace CfgChReg
407
408// ============================================================================
409// FAULT Register (0x09) — 32-bit, Read Only
410// ============================================================================
411
439namespace FaultReg {
440constexpr uint32_t OCP_SHIFT = 24;
441constexpr uint32_t OCP_MASK = 0xFF000000u;
442constexpr uint32_t HHF_SHIFT = 16;
443constexpr uint32_t HHF_MASK = 0x00FF0000u;
444constexpr uint32_t OLF_SHIFT = 8;
445constexpr uint32_t OLF_MASK = 0x0000FF00u;
446constexpr uint32_t DPM_SHIFT = 0;
447constexpr uint32_t DPM_MASK = 0x000000FFu;
448} // namespace FaultReg
449
450// ============================================================================
451// CFG_DPM Register (0x0A) — 32-bit, DPM Algorithm Configuration
452// ============================================================================
453
508namespace CfgDpmReg {
510constexpr uint32_t DPM_ISTART_MASK = (0x7Fu << 8);
512constexpr uint32_t DPM_TDEB_MASK = (0x0Fu << 4);
514constexpr uint32_t DPM_IPTH_MASK = 0x0Fu;
515} // namespace CfgDpmReg
516
517// ============================================================================
518// Helper functions
519// ============================================================================
520
536 return static_cast<uint8_t>(RegBank::CFG_CH0 + channel);
537}
538
539// Forward declarations
540enum class DriveMode : uint8_t;
541enum class ChannelMode : uint8_t;
542
543} // namespace max22200
Definition max22200.hpp:133
constexpr uint32_t HITT_MASK
HIT time mask (8-bit, 0-255)
Definition max22200_registers.hpp:374
constexpr uint8_t CONTINUOUS_HIT
HIT time value for continuous IHIT (tHIT = ∞)
Definition max22200_registers.hpp:405
constexpr uint32_t DPM_EN_BIT
DPM_EN bit (0=disabled, 1=enabled)
Definition max22200_registers.hpp:393
constexpr uint32_t HIT_MASK
HIT current mask (7-bit, 0-127)
Definition max22200_registers.hpp:370
constexpr uint32_t HITT_SHIFT
HIT time bit shift.
Definition max22200_registers.hpp:373
constexpr uint32_t HOLD_SHIFT
HOLD current bit shift.
Definition max22200_registers.hpp:362
constexpr uint8_t MAX_HOLD
Maximum HOLD current register value (7-bit)
Definition max22200_registers.hpp:399
constexpr uint8_t MAX_HIT_TIME
Maximum HIT time register value (8-bit)
Definition max22200_registers.hpp:403
constexpr uint32_t OL_EN_BIT
OL_EN bit (0=disabled, 1=enabled)
Definition max22200_registers.hpp:390
constexpr uint32_t SRC_BIT
SRC bit (0=fast, 1=slew-rate controlled)
Definition max22200_registers.hpp:387
constexpr uint32_t FREQ_CFG_SHIFT
FREQ_CFG bit shift.
Definition max22200_registers.hpp:383
constexpr uint32_t HIT_SHIFT
HIT current bit shift.
Definition max22200_registers.hpp:369
constexpr uint32_t VDRNCDR_BIT
VDRnCDR bit (0=CDR, 1=VDR)
Definition max22200_registers.hpp:377
constexpr uint32_t HOLD_MASK
HOLD current mask (7-bit, 0-127)
Definition max22200_registers.hpp:363
constexpr uint32_t TRGNSPI_BIT
TRGnSPI bit (0=SPI ONCH, 1=TRIG pin)
Definition max22200_registers.hpp:366
constexpr uint32_t FREQ_CFG_MASK
FREQ_CFG mask (2-bit)
Definition max22200_registers.hpp:384
constexpr uint32_t HHF_EN_BIT
HHF_EN bit (0=disabled, 1=enabled)
Definition max22200_registers.hpp:396
constexpr uint32_t HFS_BIT
HFS bit (0=1x full-scale, 1=0.5x half-scale)
Definition max22200_registers.hpp:359
constexpr uint32_t HSNLS_BIT
HSnLS bit (0=low-side, 1=high-side)
Definition max22200_registers.hpp:380
constexpr uint8_t MAX_HIT
Maximum HIT current register value (7-bit)
Definition max22200_registers.hpp:401
constexpr uint32_t DPM_TDEB_SHIFT
DPM_TDEB bit shift (bits 7:4)
Definition max22200_registers.hpp:511
constexpr uint32_t DPM_TDEB_MASK
DPM_TDEB mask (4-bit)
Definition max22200_registers.hpp:512
constexpr uint32_t DPM_ISTART_SHIFT
DPM_ISTART bit shift (bits 14:8)
Definition max22200_registers.hpp:509
constexpr uint32_t DPM_ISTART_MASK
DPM_ISTART mask (7-bit)
Definition max22200_registers.hpp:510
constexpr uint32_t DPM_IPTH_SHIFT
DPM_IPTH bit shift (bits 3:0)
Definition max22200_registers.hpp:513
constexpr uint32_t DPM_IPTH_MASK
DPM_IPTH mask (4-bit)
Definition max22200_registers.hpp:514
constexpr uint8_t RBW_WRITE
Write operation (bit 7 = 1)
Definition max22200_registers.hpp:142
constexpr uint8_t A_BNK_POS
Bank address bit position (bits 4:1)
Definition max22200_registers.hpp:144
constexpr uint8_t MODE_8BIT
8-bit MSB only access (bit 0 = 1)
Definition max22200_registers.hpp:147
constexpr uint8_t build(uint8_t bank, bool write, bool mode8=false)
Definition max22200_registers.hpp:172
constexpr uint8_t RBW_POS
Read/Write bit position.
Definition max22200_registers.hpp:140
constexpr uint8_t MODE_32BIT
32-bit full access (bit 0 = 0)
Definition max22200_registers.hpp:148
constexpr uint8_t RBW_READ
Read operation (bit 7 = 0)
Definition max22200_registers.hpp:141
constexpr uint8_t A_BNK_MASK
Bank address mask (bits 4:1)
Definition max22200_registers.hpp:145
constexpr uint32_t OLF_MASK
OLF bitmask.
Definition max22200_registers.hpp:445
constexpr uint32_t OCP_SHIFT
OCP bit shift (bits 31:24)
Definition max22200_registers.hpp:440
constexpr uint32_t OCP_MASK
OCP bitmask.
Definition max22200_registers.hpp:441
constexpr uint32_t DPM_SHIFT
DPM bit shift (bits 7:0)
Definition max22200_registers.hpp:446
constexpr uint32_t OLF_SHIFT
OLF bit shift (bits 15:8)
Definition max22200_registers.hpp:444
constexpr uint32_t DPM_MASK
DPM bitmask.
Definition max22200_registers.hpp:447
constexpr uint32_t HHF_SHIFT
HHF bit shift (bits 23:16)
Definition max22200_registers.hpp:442
constexpr uint32_t HHF_MASK
HHF bitmask.
Definition max22200_registers.hpp:443
constexpr uint8_t STATUS
Status register (32-bit) — channel on/off, HW config, faults, ACTIVE.
Definition max22200_registers.hpp:95
constexpr uint8_t CFG_CH3
Channel 3 configuration register (32-bit)
Definition max22200_registers.hpp:99
constexpr uint8_t FAULT
Fault register (32-bit, read-only) — per-channel fault flags.
Definition max22200_registers.hpp:104
constexpr uint8_t CFG_CH7
Channel 7 configuration register (32-bit)
Definition max22200_registers.hpp:103
constexpr uint8_t CFG_CH4
Channel 4 configuration register (32-bit)
Definition max22200_registers.hpp:100
constexpr uint8_t CFG_DPM
DPM configuration register (32-bit) — global DPM algorithm settings.
Definition max22200_registers.hpp:105
constexpr uint8_t CFG_CH5
Channel 5 configuration register (32-bit)
Definition max22200_registers.hpp:101
constexpr uint8_t CFG_CH1
Channel 1 configuration register (32-bit)
Definition max22200_registers.hpp:97
constexpr uint8_t CFG_CH2
Channel 2 configuration register (32-bit)
Definition max22200_registers.hpp:98
constexpr uint8_t CFG_CH6
Channel 6 configuration register (32-bit)
Definition max22200_registers.hpp:102
constexpr uint8_t CFG_CH0
Channel 0 configuration register (32-bit)
Definition max22200_registers.hpp:96
constexpr uint8_t CM_HBRIDGE
Channel-pair mode: H-bridge mode (full-bridge)
Definition max22200_registers.hpp:263
constexpr uint32_t M_UVM_BIT
UVM fault mask.
Definition max22200_registers.hpp:230
constexpr uint32_t OVT_BIT
Overtemperature fault flag (read-only)
Definition max22200_registers.hpp:244
constexpr uint32_t M_OVT_BIT
OVT fault mask (1=masked, 0=signaled)
Definition max22200_registers.hpp:224
constexpr uint32_t FAULT_FLAGS_MASK
Fault flags byte mask (bits 7:1, read-only)
Definition max22200_registers.hpp:256
constexpr uint32_t CM32_SHIFT
CM32 bit shift (bits 11:10)
Definition max22200_registers.hpp:238
constexpr uint8_t CM_INDEPENDENT
Channel-pair mode: independent operation.
Definition max22200_registers.hpp:259
constexpr uint32_t M_DPM_BIT
DPM fault mask.
Definition max22200_registers.hpp:228
constexpr uint32_t CM54_SHIFT
CM54 bit shift (bits 13:12)
Definition max22200_registers.hpp:236
constexpr uint32_t HHF_BIT
HIT current not reached flag (read-only)
Definition max22200_registers.hpp:247
constexpr uint32_t M_HHF_BIT
HHF fault mask.
Definition max22200_registers.hpp:227
constexpr uint32_t CM76_MASK
CM76 bitmask.
Definition max22200_registers.hpp:235
constexpr uint32_t OCP_BIT
Overcurrent fault flag (read-only)
Definition max22200_registers.hpp:245
constexpr uint32_t M_COMF_BIT
Communication fault mask (reset value = 1, masked by default)
Definition max22200_registers.hpp:229
constexpr uint32_t OLF_BIT
Open-load fault flag (read-only)
Definition max22200_registers.hpp:246
constexpr uint8_t CM_PARALLEL
Channel-pair mode: parallel mode (double current)
Definition max22200_registers.hpp:261
constexpr uint32_t CM76_SHIFT
CM76 bit shift (bits 15:14)
Definition max22200_registers.hpp:234
constexpr uint32_t M_OCP_BIT
OCP fault mask.
Definition max22200_registers.hpp:225
constexpr uint32_t ACTIVE_BIT
Global enable bit (write: 0=low-power, 1=normal operation)
Definition max22200_registers.hpp:253
constexpr uint32_t FREQM_BIT
Master frequency (0=100kHz, 1=80kHz)
Definition max22200_registers.hpp:231
constexpr uint32_t CM10_SHIFT
CM10 bit shift (bits 9:8)
Definition max22200_registers.hpp:240
constexpr uint32_t DPM_BIT
Plunger movement detection flag (read-only)
Definition max22200_registers.hpp:248
constexpr uint32_t UVM_BIT
Undervoltage flag (read-only, set at POR, cleared by read)
Definition max22200_registers.hpp:252
constexpr uint32_t CM54_MASK
CM54 bitmask.
Definition max22200_registers.hpp:237
constexpr uint8_t CM_RESERVED
Channel-pair mode: reserved (do not use)
Definition max22200_registers.hpp:265
constexpr uint8_t FAULT_BYTE_COMER
Fault byte value returned on SDO when COMER is set (per datasheet Figure 6)
Definition max22200_registers.hpp:251
constexpr uint32_t CM32_MASK
CM32 bitmask.
Definition max22200_registers.hpp:239
constexpr uint32_t ONCH_MASK
ONCH bitmask.
Definition max22200_registers.hpp:221
constexpr uint32_t CM10_MASK
CM10 bitmask.
Definition max22200_registers.hpp:241
constexpr uint32_t COMER_BIT
Definition max22200_registers.hpp:249
constexpr uint32_t ONCH_SHIFT
ONCH bit shift (bits 31:24)
Definition max22200_registers.hpp:220
constexpr uint32_t M_OLF_BIT
OLF fault mask.
Definition max22200_registers.hpp:226
Definition max22200.ipp:15
constexpr uint32_t MAX_SPI_FREQ_DAISY_CHAIN_
Maximum SPI clock frequency with daisy chaining (Hz)
Definition max22200_registers.hpp:78
DriveMode
Drive mode enumeration (VDRnCDR bit in CFG_CHx[7])
Definition max22200_types.hpp:98
ChannelMode
Channel-pair mode (CMxy bits in STATUS[15:8])
Definition max22200_types.hpp:159
constexpr uint32_t MAX_SPI_FREQ_STANDALONE_
Maximum SPI clock frequency without daisy chaining (Hz)
Definition max22200_registers.hpp:70
constexpr uint8_t getChannelCfgBank(uint8_t channel)
Definition max22200_registers.hpp:535
constexpr uint8_t NUM_CHANNELS_
Number of channels on the MAX22200.
Definition max22200_registers.hpp:60