Skip to main content
EVerest includes a comprehensive collection of hardware drivers that enable integration with various charging station components. These drivers provide standardized interfaces for board support packages (BSPs), power meters, power supplies, isolation monitors, and authentication readers.
Hardware driver modules are located in modules/HardwareDrivers/ with subdirectories for each device category.

Hardware Driver Categories

EVSE BSPs

Board support packages for charging hardware control

Power Meters

Energy measurement and billing devices

Power Supplies

DC power supply modules for DC charging

Isolation Monitors

Insulation monitoring for DC safety

NFC Readers

RFID/NFC authentication devices

Payment Terminals

Payment processing hardware

EVSE Board Support Packages

BSP modules implement the evse_board_support interface for low-level hardware control:

Yeti Driver

The YetiDriver is the reference BSP for Pionix YETI hardware. Location: modules/HardwareDrivers/EVSE/YetiDriver/
serial_port
string
default:"/dev/ttyUSB0"
Serial port the Yeti hardware is connected to
baud_rate
integer
default:"115200"
Serial baud rate (9600-230400)
reset_gpio_chip
string
default:"gpiochip0"
GPIO chip for hardware reset. Empty string disables reset.
reset_gpio
integer
default:"27"
GPIO line number for Yeti reset
caps_min_current_A
integer
default:"-1"
Override minimum current. -1 = use hardware-reported limit.
caps_max_current_A
integer
default:"-1"
Override maximum current. -1 = use hardware-reported limit.
Provides:
  • powermeter - Internal power meter
  • board_support - BSP interface (CP, relays, lock)
  • rcd - Onboard RCD interface
  • connector_lock - Motor lock interface
Example Configuration:
yeti_driver:
  module: YetiDriver
  config:
    serial_port: /dev/ttyUSB0
    baud_rate: 115200
    caps_max_current_A: 32
  connections: {}

Other BSP Modules

Board support for MicroMegaWatt charging hardwarePath: modules/HardwareDrivers/EVSE/MicroMegaWattBSP/
BSP for PhyVerso development platformPath: modules/HardwareDrivers/EVSE/PhyVersoBSP/
Analog Devices AC EVSE reference designPath: modules/HardwareDrivers/EVSE/AdAcEvse22KwzKitBSP/
Texas Instruments EVSE reference designPath: modules/HardwareDrivers/EVSE/TIDA010939/

Power Meters

Power meter modules implement the powermeter interface for energy measurement.

Generic Powermeter

The GenericPowermeter supports various Modbus power meters through configuration files. Location: modules/HardwareDrivers/PowerMeters/GenericPowermeter/
model
string
default:"test_dummy"
Powermeter configuration file selectorAvailable models:
  • test_dummy - Simulated meter for testing
  • Various manufacturer-specific configs
powermeter_device_id
integer
default:"1"
Modbus device address (1-247)
modbus_base_address
integer
default:"30001"
Base address for Modbus register access (0-65535)
Requires: serial_communication_hub interface Example:
powermeter:
  module: GenericPowermeter
  config:
    model: ABB_B23
    powermeter_device_id: 1
    modbus_base_address: 30001
  connections:
    serial_comm_hub: modbus_rtu

Supported Power Meters

ABB B23 series energy meterPath: modules/HardwareDrivers/PowerMeters/ABB_B23/
Carlo Gavazzi EM580 seriesPath: modules/HardwareDrivers/PowerMeters/CarloGavazzi_EM580/
Acrel DJSF1352-RN DC meterPath: modules/HardwareDrivers/PowerMeters/Acrel_DJSF1352_RN/
DZG GSH01 grid meterPath: modules/HardwareDrivers/PowerMeters/DZG_GSH01/
AST DC650 DC power meterPath: modules/HardwareDrivers/PowerMeters/AST_DC650/

DC Power Supplies

DC power supply modules implement the power_supply_DC interface for DC fast charging.

Supported DC Power Supplies

Huawei R100040Gx DC module (40kW)Path: modules/HardwareDrivers/PowerSupplies/Huawei_R100040Gx/Features:
  • Up to 1000V output
  • 40kW continuous power
  • CAN bus communication
Huawei V100R023C10 seriesPath: modules/HardwareDrivers/PowerSupplies/Huawei_V100R023C10/
DPM1000 DC power modulePath: modules/HardwareDrivers/PowerSupplies/DPM1000/
InfyPower DC charging modulesPath: modules/HardwareDrivers/PowerSupplies/InfyPower/

Power Supply Configuration Example

dc_power_supply:
  module: Huawei_R100040Gx
  config:
    can_interface: can0
    max_voltage_V: 1000
    max_current_A: 100
    max_power_W: 40000
  connections: {}

Isolation Monitors

Isolation monitoring devices (IMDs) are required for DC charging per IEC 61851-23.

Bender isoCHA425HV

Bender isolation monitor for high-voltage DC charging. Location: modules/HardwareDrivers/IsolationMonitors/Bender_isoCHA425HV/ Features:
  • Isolation resistance measurement
  • Self-test capability
  • Required for DC cable check
  • Typically needs 10s for stable reading
Integration with EvseManager:
evse_manager:
  config:
    cable_check_wait_number_of_imd_measurements: 10  # 10 samples at 1Hz = 10s
    cable_check_enable_imd_self_test: true
  connections:
    imd: bender_imd
    
bender_imd:
  module: Bender_isoCHA425HV
  config:
    serial_port: /dev/ttyUSB1

DoldRN5893

Dold RN5893 isolation monitoring device. Location: modules/HardwareDrivers/IsolationMonitors/DoldRN5893/

NFC/RFID Readers

NFC reader modules implement the auth_token_provider interface for contactless authentication.

PN532 Token Provider

PN532-based NFC/RFID reader for ISO14443A cards. Location: modules/HardwareDrivers/NfcReaders/PN532TokenProvider/ Features:
  • Mifare Classic/Ultralight
  • ISO14443A Type 1-4 cards
  • UID reading for authorization
Example:
nfc_reader:
  module: PN532TokenProvider
  config:
    device: /dev/ttyUSB2
    baud_rate: 115200
  connections: {}

NXP NFC Frontend

NXP-based NFC frontend token provider. Location: modules/HardwareDrivers/NfcReaders/NxpNfcFrontendTokenProvider/

Complete Hardware Stack Example

AC Charging Station

active_modules:
  # EVSE Board Support
  yeti:
    module: YetiDriver
    config:
      serial_port: /dev/ttyUSB0
      baud_rate: 115200
      caps_max_current_A: 32
      
  # Grid-side Power Meter
  pm_grid:
    module: GenericPowermeter
    config:
      model: CarloGavazzi_EM580
      powermeter_device_id: 1
    connections:
      serial_comm_hub: modbus_rtu
      
  # NFC Reader for Authentication
  nfc:
    module: PN532TokenProvider
    config:
      device: /dev/ttyUSB1
      
  # EVSE Manager
  evse_manager:
    module: EvseManager
    config:
      connector_id: 1
      charge_mode: AC
    connections:
      bsp: yeti
      powermeter_grid_side: pm_grid
      ac_rcd: yeti
      connector_lock: yeti

DC Charging Station

active_modules:
  # EVSE BSP
  bsp:
    module: MicroMegaWattBSP
    config:
      device: /dev/ttyUSB0
      
  # DC Power Supply
  dc_supply:
    module: Huawei_R100040Gx
    config:
      can_interface: can0
      max_voltage_V: 1000
      max_current_A: 100
      
  # Isolation Monitor
  imd:
    module: Bender_isoCHA425HV
    config:
      serial_port: /dev/ttyUSB1
      
  # DC Power Meter
  pm_dc:
    module: AST_DC650
    config:
      powermeter_device_id: 1
    connections:
      serial_comm_hub: modbus_rtu
      
  # EVSE Manager
  evse_manager:
    module: EvseManager
    config:
      connector_id: 1
      charge_mode: DC
    connections:
      bsp: bsp
      powersupply_DC: dc_supply
      imd: imd
      powermeter_car_side: pm_dc

Serial Communication Hub

Many hardware drivers require serial communication. Use the SerialCommHub module:
modbus_rtu:
  module: SerialCommHub
  config:
    serial_port: /dev/ttyUSB3
    baud_rate: 9600
    parity: none
    data_bits: 8
    stop_bits: 1

Hardware Interface Reference

evse_board_support

Provides:
  • setup() - Initialize hardware
  • set_pwm() - Control CP PWM duty cycle
  • set_relais() - Control contactors
  • get_capabilities() - Report hardware limits
  • get_voltages() - Read voltage measurements

powermeter

Provides:
  • get_powermeter() - Read power, energy, voltage, current
  • start_transaction() - Begin energy measurement session
  • stop_transaction() - End session and get total energy

power_supply_DC

Provides:
  • setMode() - Export or Import mode
  • setExportVoltageCurrent() - Set output voltage and current
  • getCapabilities() - Query min/max voltage, current, power

isolation_monitor

Provides:
  • start() - Begin isolation monitoring
  • stop() - Stop monitoring
  • self_test() - Perform self-test

Developing Custom Drivers

Creating a BSP Module

  1. Create module directory: modules/HardwareDrivers/EVSE/MyBSP/
  2. Define manifest.yaml: Specify config and interfaces
  3. Implement interface: Inherit from evse_board_supportImplBase
  4. Register module: Add to CMakeLists.txt

Template Structure

// MyBSP.hpp
class MyBSP : public evse_board_supportImplBase {
public:
    MyBSP() = default;
    void init() override;
    void ready() override;
    
    void handle_setup(bool& three_phases, bool& has_ventilation,
                      std::string& country_code) override;
    void handle_set_pwm(double& duty_cycle) override;
    // ... other handlers
private:
    // Hardware communication
};

Troubleshooting

# Add user to dialout group
sudo usermod -a -G dialout $USER

# Or set permissions
sudo chmod 666 /dev/ttyUSB0
  • Verify baud rate matches device
  • Check parity, data bits, stop bits
  • Verify device address (1-247)
  • Test with modbus polling tool
  • Check RS485 termination resistors
  • Verify serial connection and wiring
  • Check modbus_base_address configuration
  • Ensure SerialCommHub is configured correctly
  • Test device with external Modbus tool
  • Verify CAN bus termination
  • Check CAN interface is up: ip link show can0
  • Review power supply error codes
  • Verify voltage/current limits are within capabilities

Best Practices

USB Serial Devices: Use udev rules to create persistent device names instead of /dev/ttyUSB0 which can change.
Isolation Monitoring: Always configure appropriate cable_check_wait_number_of_imd_measurements for your IMD. Bender devices typically need 10 samples.
Power Meters: Use car-side power meters for billing when available - they’re more accurate than grid-side meters.
DC Safety: Isolation monitoring and over-voltage protection are mandatory for DC charging. Never bypass safety features.

EvseManager

Connects to hardware drivers

Authentication

Uses NFC reader token providers

Energy Management

Consumes power meter data

Additional Resources

Source Code Reference

  • modules/HardwareDrivers/EVSE/ - BSP implementations
  • modules/HardwareDrivers/PowerMeters/ - Power meter drivers
  • modules/HardwareDrivers/PowerSupplies/ - DC supply drivers
  • interfaces/evse_board_support.yaml - BSP interface definition
  • interfaces/powermeter.yaml - Power meter interface

Build docs developers (and LLMs) love