MAX22200 Driver
API reference
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
85constexpr uint32_t ENABLE_TIME_US_ = 500;
86
93constexpr uint32_t WAKE_UP_TIME_US_ = 2500;
94
95// ============================================================================
96// Register Bank Addresses (A_BNK field in Command Register, bits [4:1])
97// ============================================================================
98
109namespace RegBank {
110constexpr uint8_t STATUS = 0x00;
111constexpr uint8_t CFG_CH0 = 0x01;
112constexpr uint8_t CFG_CH1 = 0x02;
113constexpr uint8_t CFG_CH2 = 0x03;
114constexpr uint8_t CFG_CH3 = 0x04;
115constexpr uint8_t CFG_CH4 = 0x05;
116constexpr uint8_t CFG_CH5 = 0x06;
117constexpr uint8_t CFG_CH6 = 0x07;
118constexpr uint8_t CFG_CH7 = 0x08;
119constexpr uint8_t FAULT = 0x09;
120constexpr uint8_t CFG_DPM = 0x0A;
121} // namespace RegBank
122
123// ============================================================================
124// Command Register (8-bit, Write Only)
125// ============================================================================
126
154namespace CommandReg {
155constexpr uint8_t RBW_POS = 7;
156constexpr uint8_t RBW_READ = 0x00;
157constexpr uint8_t RBW_WRITE = 0x80;
158
159constexpr uint8_t A_BNK_POS = 1;
160constexpr uint8_t A_BNK_MASK = 0x1E;
161
162constexpr uint8_t MODE_8BIT = 0x01;
163constexpr uint8_t MODE_32BIT = 0x00;
164
187constexpr uint8_t build(uint8_t bank, bool write, bool mode8 = false) {
188 return static_cast<uint8_t>(
189 (write ? RBW_WRITE : RBW_READ) |
190 ((bank & 0x0F) << A_BNK_POS) |
191 (mode8 ? MODE_8BIT : MODE_32BIT));
192}
193} // namespace CommandReg
194
195// ============================================================================
196// STATUS Register (0x00) — 32-bit
197// ============================================================================
198
233namespace StatusReg {
234// Byte 3 (bits 31:24) — Channel activation
235constexpr uint32_t ONCH_SHIFT = 24;
236constexpr uint32_t ONCH_MASK = 0xFF000000u;
237
238// Byte 2 (bits 23:16) — Fault masks + FREQM
239constexpr uint32_t M_OVT_BIT = (1u << 23);
240constexpr uint32_t M_OCP_BIT = (1u << 22);
241constexpr uint32_t M_OLF_BIT = (1u << 21);
242constexpr uint32_t M_HHF_BIT = (1u << 20);
243constexpr uint32_t M_DPM_BIT = (1u << 19);
244constexpr uint32_t M_COMF_BIT = (1u << 18);
245constexpr uint32_t M_UVM_BIT = (1u << 17);
246constexpr uint32_t FREQM_BIT = (1u << 16);
247
248// Byte 1 (bits 15:8) — Channel-pair mode configuration
249constexpr uint32_t CM76_SHIFT = 14;
250constexpr uint32_t CM76_MASK = (0x03u << 14);
251constexpr uint32_t CM54_SHIFT = 12;
252constexpr uint32_t CM54_MASK = (0x03u << 12);
253constexpr uint32_t CM32_SHIFT = 10;
254constexpr uint32_t CM32_MASK = (0x03u << 10);
255constexpr uint32_t CM10_SHIFT = 8;
256constexpr uint32_t CM10_MASK = (0x03u << 8);
257
258// Byte 0 (bits 7:0) — Fault flags (read-only except ACTIVE)
259constexpr uint32_t OVT_BIT = (1u << 7);
260constexpr uint32_t OCP_BIT = (1u << 6);
261constexpr uint32_t OLF_BIT = (1u << 5);
262constexpr uint32_t HHF_BIT = (1u << 4);
263constexpr uint32_t DPM_BIT = (1u << 3);
264constexpr uint32_t COMER_BIT = (1u << 2);
266constexpr uint8_t FAULT_BYTE_COMER = 0x04u;
267constexpr uint32_t UVM_BIT = (1u << 1);
268constexpr uint32_t ACTIVE_BIT = (1u << 0);
269
271constexpr uint32_t FAULT_FLAGS_MASK = 0xFEu;
272
274constexpr uint8_t CM_INDEPENDENT = 0x00;
276constexpr uint8_t CM_PARALLEL = 0x01;
278constexpr uint8_t CM_HBRIDGE = 0x02;
280constexpr uint8_t CM_RESERVED = 0x03;
281} // namespace StatusReg
282
283// ============================================================================
284// Channel Configuration Register (CFG_CHx, 0x01-0x08) — 32-bit
285// ============================================================================
286
372namespace CfgChReg {
373// Bit 31: HFS (Half Full-Scale)
374constexpr uint32_t HFS_BIT = (1u << 31);
375
376// Bits 30:24: HOLD current (7-bit)
377constexpr uint32_t HOLD_SHIFT = 24;
378constexpr uint32_t HOLD_MASK = (0x7Fu << 24);
379
380// Bit 23: TRGnSPI (Trigger source)
381constexpr uint32_t TRGNSPI_BIT = (1u << 23);
382
383// Bits 22:16: HIT current (7-bit)
384constexpr uint32_t HIT_SHIFT = 16;
385constexpr uint32_t HIT_MASK = (0x7Fu << 16);
386
387// Bits 15:8: HIT time (8-bit)
388constexpr uint32_t HITT_SHIFT = 8;
389constexpr uint32_t HITT_MASK = (0xFFu << 8);
390
391// Bit 7: VDRnCDR (Drive mode)
392constexpr uint32_t VDRNCDR_BIT = (1u << 7);
393
394// Bit 6: HSnLS (High-side/Low-side)
395constexpr uint32_t HSNLS_BIT = (1u << 6);
396
397// Bits 5:4: FREQ_CFG (Chopping frequency)
398constexpr uint32_t FREQ_CFG_SHIFT = 4;
399constexpr uint32_t FREQ_CFG_MASK = (0x03u << 4);
400
401// Bit 3: SRC (Slew rate control)
402constexpr uint32_t SRC_BIT = (1u << 3);
403
404// Bit 2: OL_EN (Open load detect enable)
405constexpr uint32_t OL_EN_BIT = (1u << 2);
406
407// Bit 1: DPM_EN (DPM detection enable)
408constexpr uint32_t DPM_EN_BIT = (1u << 1);
409
410// Bit 0: HHF_EN (HIT current check enable)
411constexpr uint32_t HHF_EN_BIT = (1u << 0);
412
414constexpr uint8_t MAX_HOLD = 127;
416constexpr uint8_t MAX_HIT = 127;
418constexpr uint8_t MAX_HIT_TIME = 255;
420constexpr uint8_t CONTINUOUS_HIT = 255;
421} // namespace CfgChReg
422
423// ============================================================================
424// FAULT Register (0x09) — 32-bit, Read Only
425// ============================================================================
426
454namespace FaultReg {
455constexpr uint32_t OCP_SHIFT = 24;
456constexpr uint32_t OCP_MASK = 0xFF000000u;
457constexpr uint32_t HHF_SHIFT = 16;
458constexpr uint32_t HHF_MASK = 0x00FF0000u;
459constexpr uint32_t OLF_SHIFT = 8;
460constexpr uint32_t OLF_MASK = 0x0000FF00u;
461constexpr uint32_t DPM_SHIFT = 0;
462constexpr uint32_t DPM_MASK = 0x000000FFu;
463} // namespace FaultReg
464
465// ============================================================================
466// CFG_DPM Register (0x0A) — 32-bit, DPM Algorithm Configuration
467// ============================================================================
468
523namespace CfgDpmReg {
524constexpr uint32_t DPM_ISTART_SHIFT = 8;
525constexpr uint32_t DPM_ISTART_MASK = (0x7Fu << 8);
526constexpr uint32_t DPM_TDEB_SHIFT = 4;
527constexpr uint32_t DPM_TDEB_MASK = (0x0Fu << 4);
528constexpr uint32_t DPM_IPTH_SHIFT = 0;
529constexpr uint32_t DPM_IPTH_MASK = 0x0Fu;
530} // namespace CfgDpmReg
531
532// ============================================================================
533// Helper functions
534// ============================================================================
535
550constexpr uint8_t getChannelCfgBank(uint8_t channel) {
551 return static_cast<uint8_t>(RegBank::CFG_CH0 + channel);
552}
553
554// Forward declarations
555enum class DriveMode : uint8_t;
556enum class ChannelMode : uint8_t;
557
558} // namespace max22200
constexpr uint32_t HITT_MASK
HIT time mask (8-bit, 0-255)
Definition max22200_registers.hpp:389
constexpr uint8_t CONTINUOUS_HIT
HIT time value for continuous IHIT (tHIT = ∞)
Definition max22200_registers.hpp:420
constexpr uint32_t DPM_EN_BIT
DPM_EN bit (0=disabled, 1=enabled)
Definition max22200_registers.hpp:408
constexpr uint32_t HIT_MASK
HIT current mask (7-bit, 0-127)
Definition max22200_registers.hpp:385
constexpr uint32_t HITT_SHIFT
HIT time bit shift.
Definition max22200_registers.hpp:388
constexpr uint32_t HOLD_SHIFT
HOLD current bit shift.
Definition max22200_registers.hpp:377
constexpr uint8_t MAX_HOLD
Maximum HOLD current register value (7-bit)
Definition max22200_registers.hpp:414
constexpr uint8_t MAX_HIT_TIME
Maximum HIT time register value (8-bit)
Definition max22200_registers.hpp:418
constexpr uint32_t OL_EN_BIT
OL_EN bit (0=disabled, 1=enabled)
Definition max22200_registers.hpp:405
constexpr uint32_t SRC_BIT
SRC bit (0=fast, 1=slew-rate controlled)
Definition max22200_registers.hpp:402
constexpr uint32_t FREQ_CFG_SHIFT
FREQ_CFG bit shift.
Definition max22200_registers.hpp:398
constexpr uint32_t HIT_SHIFT
HIT current bit shift.
Definition max22200_registers.hpp:384
constexpr uint32_t VDRNCDR_BIT
VDRnCDR bit (0=CDR, 1=VDR)
Definition max22200_registers.hpp:392
constexpr uint32_t HOLD_MASK
HOLD current mask (7-bit, 0-127)
Definition max22200_registers.hpp:378
constexpr uint32_t TRGNSPI_BIT
TRGnSPI bit (0=SPI ONCH, 1=TRIG pin)
Definition max22200_registers.hpp:381
constexpr uint32_t FREQ_CFG_MASK
FREQ_CFG mask (2-bit)
Definition max22200_registers.hpp:399
constexpr uint32_t HHF_EN_BIT
HHF_EN bit (0=disabled, 1=enabled)
Definition max22200_registers.hpp:411
constexpr uint32_t HFS_BIT
HFS bit (0=1x full-scale, 1=0.5x half-scale)
Definition max22200_registers.hpp:374
constexpr uint32_t HSNLS_BIT
HSnLS bit (0=low-side, 1=high-side)
Definition max22200_registers.hpp:395
constexpr uint8_t MAX_HIT
Maximum HIT current register value (7-bit)
Definition max22200_registers.hpp:416
constexpr uint32_t DPM_TDEB_SHIFT
DPM_TDEB bit shift (bits 7:4)
Definition max22200_registers.hpp:526
constexpr uint32_t DPM_TDEB_MASK
DPM_TDEB mask (4-bit)
Definition max22200_registers.hpp:527
constexpr uint32_t DPM_ISTART_SHIFT
DPM_ISTART bit shift (bits 14:8)
Definition max22200_registers.hpp:524
constexpr uint32_t DPM_ISTART_MASK
DPM_ISTART mask (7-bit)
Definition max22200_registers.hpp:525
constexpr uint32_t DPM_IPTH_SHIFT
DPM_IPTH bit shift (bits 3:0)
Definition max22200_registers.hpp:528
constexpr uint32_t DPM_IPTH_MASK
DPM_IPTH mask (4-bit)
Definition max22200_registers.hpp:529
constexpr uint8_t RBW_WRITE
Write operation (bit 7 = 1)
Definition max22200_registers.hpp:157
constexpr uint8_t A_BNK_POS
Bank address bit position (bits 4:1)
Definition max22200_registers.hpp:159
constexpr uint8_t MODE_8BIT
8-bit MSB only access (bit 0 = 1)
Definition max22200_registers.hpp:162
constexpr uint8_t build(uint8_t bank, bool write, bool mode8=false)
Build a Command Register value.
Definition max22200_registers.hpp:187
constexpr uint8_t RBW_POS
Read/Write bit position.
Definition max22200_registers.hpp:155
constexpr uint8_t MODE_32BIT
32-bit full access (bit 0 = 0)
Definition max22200_registers.hpp:163
constexpr uint8_t RBW_READ
Read operation (bit 7 = 0)
Definition max22200_registers.hpp:156
constexpr uint8_t A_BNK_MASK
Bank address mask (bits 4:1)
Definition max22200_registers.hpp:160
constexpr uint32_t OLF_MASK
OLF bitmask.
Definition max22200_registers.hpp:460
constexpr uint32_t OCP_SHIFT
OCP bit shift (bits 31:24)
Definition max22200_registers.hpp:455
constexpr uint32_t OCP_MASK
OCP bitmask.
Definition max22200_registers.hpp:456
constexpr uint32_t DPM_SHIFT
DPM bit shift (bits 7:0)
Definition max22200_registers.hpp:461
constexpr uint32_t OLF_SHIFT
OLF bit shift (bits 15:8)
Definition max22200_registers.hpp:459
constexpr uint32_t DPM_MASK
DPM bitmask.
Definition max22200_registers.hpp:462
constexpr uint32_t HHF_SHIFT
HHF bit shift (bits 23:16)
Definition max22200_registers.hpp:457
constexpr uint32_t HHF_MASK
HHF bitmask.
Definition max22200_registers.hpp:458
constexpr uint8_t STATUS
Status register (32-bit) — channel on/off, HW config, faults, ACTIVE.
Definition max22200_registers.hpp:110
constexpr uint8_t CFG_CH3
Channel 3 configuration register (32-bit)
Definition max22200_registers.hpp:114
constexpr uint8_t FAULT
Fault register (32-bit, read-only) — per-channel fault flags.
Definition max22200_registers.hpp:119
constexpr uint8_t CFG_CH7
Channel 7 configuration register (32-bit)
Definition max22200_registers.hpp:118
constexpr uint8_t CFG_CH4
Channel 4 configuration register (32-bit)
Definition max22200_registers.hpp:115
constexpr uint8_t CFG_DPM
DPM configuration register (32-bit) — global DPM algorithm settings.
Definition max22200_registers.hpp:120
constexpr uint8_t CFG_CH5
Channel 5 configuration register (32-bit)
Definition max22200_registers.hpp:116
constexpr uint8_t CFG_CH1
Channel 1 configuration register (32-bit)
Definition max22200_registers.hpp:112
constexpr uint8_t CFG_CH2
Channel 2 configuration register (32-bit)
Definition max22200_registers.hpp:113
constexpr uint8_t CFG_CH6
Channel 6 configuration register (32-bit)
Definition max22200_registers.hpp:117
constexpr uint8_t CFG_CH0
Channel 0 configuration register (32-bit)
Definition max22200_registers.hpp:111
constexpr uint8_t CM_HBRIDGE
Channel-pair mode: H-bridge mode (full-bridge)
Definition max22200_registers.hpp:278
constexpr uint32_t M_UVM_BIT
UVM fault mask.
Definition max22200_registers.hpp:245
constexpr uint32_t OVT_BIT
Overtemperature fault flag (read-only)
Definition max22200_registers.hpp:259
constexpr uint32_t M_OVT_BIT
OVT fault mask (1=masked, 0=signaled)
Definition max22200_registers.hpp:239
constexpr uint32_t FAULT_FLAGS_MASK
Fault flags byte mask (bits 7:1, read-only)
Definition max22200_registers.hpp:271
constexpr uint32_t CM32_SHIFT
CM32 bit shift (bits 11:10)
Definition max22200_registers.hpp:253
constexpr uint8_t CM_INDEPENDENT
Channel-pair mode: independent operation.
Definition max22200_registers.hpp:274
constexpr uint32_t M_DPM_BIT
DPM fault mask.
Definition max22200_registers.hpp:243
constexpr uint32_t CM54_SHIFT
CM54 bit shift (bits 13:12)
Definition max22200_registers.hpp:251
constexpr uint32_t HHF_BIT
HIT current not reached flag (read-only)
Definition max22200_registers.hpp:262
constexpr uint32_t M_HHF_BIT
HHF fault mask.
Definition max22200_registers.hpp:242
constexpr uint32_t CM76_MASK
CM76 bitmask.
Definition max22200_registers.hpp:250
constexpr uint32_t OCP_BIT
Overcurrent fault flag (read-only)
Definition max22200_registers.hpp:260
constexpr uint32_t M_COMF_BIT
Communication fault mask (reset value = 1, masked by default)
Definition max22200_registers.hpp:244
constexpr uint32_t OLF_BIT
Open-load fault flag (read-only)
Definition max22200_registers.hpp:261
constexpr uint8_t CM_PARALLEL
Channel-pair mode: parallel mode (double current)
Definition max22200_registers.hpp:276
constexpr uint32_t CM76_SHIFT
CM76 bit shift (bits 15:14)
Definition max22200_registers.hpp:249
constexpr uint32_t M_OCP_BIT
OCP fault mask.
Definition max22200_registers.hpp:240
constexpr uint32_t ACTIVE_BIT
Global enable bit (write: 0=low-power, 1=normal operation)
Definition max22200_registers.hpp:268
constexpr uint32_t FREQM_BIT
Master frequency (0=100kHz, 1=80kHz)
Definition max22200_registers.hpp:246
constexpr uint32_t CM10_SHIFT
CM10 bit shift (bits 9:8)
Definition max22200_registers.hpp:255
constexpr uint32_t DPM_BIT
Plunger movement detection flag (read-only)
Definition max22200_registers.hpp:263
constexpr uint32_t UVM_BIT
Undervoltage flag (read-only, set at POR, cleared by read)
Definition max22200_registers.hpp:267
constexpr uint32_t CM54_MASK
CM54 bitmask.
Definition max22200_registers.hpp:252
constexpr uint8_t CM_RESERVED
Channel-pair mode: reserved (do not use)
Definition max22200_registers.hpp:280
constexpr uint8_t FAULT_BYTE_COMER
Fault byte value returned on SDO when COMER is set (per datasheet Figure 6)
Definition max22200_registers.hpp:266
constexpr uint32_t CM32_MASK
CM32 bitmask.
Definition max22200_registers.hpp:254
constexpr uint32_t ONCH_MASK
ONCH bitmask.
Definition max22200_registers.hpp:236
constexpr uint32_t CM10_MASK
CM10 bitmask.
Definition max22200_registers.hpp:256
constexpr uint32_t COMER_BIT
Definition max22200_registers.hpp:264
constexpr uint32_t ONCH_SHIFT
ONCH bit shift (bits 31:24)
Definition max22200_registers.hpp:235
constexpr uint32_t M_OLF_BIT
OLF fault mask.
Definition max22200_registers.hpp:241
Definition max22200.hpp:78
constexpr uint32_t MAX_SPI_FREQ_DAISY_CHAIN_
Maximum SPI clock frequency with daisy chaining (Hz)
Definition max22200_registers.hpp:78
constexpr uint32_t ENABLE_TIME_US_
Enable time tEN: ENABLE rising edge to SPI ready (us)
Definition max22200_registers.hpp:85
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 WAKE_UP_TIME_US_
Wake-up time tWU: ACTIVE = 1 to normal operation, outputs active (us)
Definition max22200_registers.hpp:93
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)
Get channel configuration register bank address.
Definition max22200_registers.hpp:550
constexpr uint8_t NUM_CHANNELS_
Number of channels on the MAX22200.
Definition max22200_registers.hpp:60