Skip to main content

XCP (Universal Measurement and Calibration Protocol) driver for Jumpstarter

Project description

XCP Driver

jumpstarter-driver-xcp provides XCP (Universal Measurement and Calibration Protocol) support for Jumpstarter, enabling remote measurement, calibration, DAQ (data acquisition), and programming of XCP-enabled ECUs.

It wraps the pyXCP library and supports Ethernet (TCP/UDP), CAN, USB, and Serial (SxI) transports.

Installation

pip3 install --extra-index-url https://pkg.jumpstarter.dev/simple/ jumpstarter-driver-xcp

Configuration

Ethernet (TCP)

export:
  xcp:
    type: jumpstarter_driver_xcp.driver.Xcp
    config:
      transport: ETH
      host: "192.168.1.100"
      port: 5555
      protocol: TCP

Ethernet (UDP)

export:
  xcp:
    type: jumpstarter_driver_xcp.driver.Xcp
    config:
      transport: ETH
      host: "192.168.1.100"
      port: 5555
      protocol: UDP

CAN

export:
  xcp:
    type: jumpstarter_driver_xcp.driver.Xcp
    config:
      transport: CAN
      can_interface: vector
      channel: 0
      bitrate: 500000
      can_id_master: 0x7E0
      can_id_slave: 0x7E1

Using a pyXCP Config File

For advanced configuration (seed & key, DAQ policies, etc.), provide a pyXCP configuration file:

export:
  xcp:
    type: jumpstarter_driver_xcp.driver.Xcp
    config:
      transport: ETH
      config_file: /path/to/xcp_config.py

Configuration Parameters

Parameter Type Default Description
transport str ETH Transport layer: ETH, CAN, USB, SXI
host str localhost IP address or hostname (Ethernet only)
port int 5555 Port number (Ethernet only)
protocol str TCP TCP or UDP (Ethernet only)
can_interface str None python-can interface name (CAN only)
channel str|int None CAN channel (CAN only)
bitrate int None CAN bitrate in bits/s (CAN only)
can_id_master int None CAN ID for master -> slave (CAN only)
can_id_slave int None CAN ID for slave -> master (CAN only)
config_file str None Path to a pyXCP config file (overrides individual params)

API Reference

Session Management

  • connect(mode=0) - Connect to the XCP slave, returns negotiated properties
  • disconnect() - Disconnect from the XCP slave
  • get_id(id_type=1) - Get the slave identifier
  • get_status() - Get session status and resource protection

Security

  • unlock(resources=None) - Perform seed & key unlock for protected resources

Memory Access (Measurement / Calibration)

  • upload(length, address, ext=0) - Read memory from the slave
  • download(address, data, ext=0) - Write data to the slave memory
  • set_mta(address, ext=0) - Set the Memory Transfer Address
  • build_checksum(block_size) - Compute checksum over a memory block

DAQ (Data Acquisition)

  • get_daq_info() - Get DAQ processor, resolution, and event channel info
  • free_daq() - Free all DAQ lists
  • alloc_daq(daq_count) - Allocate DAQ lists
  • alloc_odt(daq_list_number, odt_count) - Allocate ODTs
  • alloc_odt_entry(daq_list_number, odt_number, odt_entries_count) - Allocate ODT entries
  • set_daq_ptr(daq_list, odt, entry) - Set DAQ list pointer
  • write_daq(bit_offset, size, ext, address) - Configure what to measure
  • set_daq_list_mode(mode, daq_list, event, prescaler, priority) - Set DAQ list mode
  • start_stop_daq_list(mode, daq_list) - Start/stop a single DAQ list
  • start_stop_synch(mode) - Start/stop all DAQ lists synchronously

Programming (Flashing)

  • program_start() - Begin programming sequence
  • program_clear(clear_range, mode=0) - Erase memory range
  • program(data, block_length=0) - Download program data
  • program_reset() - Reset slave after programming

Example Usage

from jumpstarter.common.utils import env

with env() as client:
    xcp = client.xcp

    info = xcp.connect()
    print(f"Max CTO: {info.max_cto}, Max DTO: {info.max_dto}")

    xcp.unlock()

    data = xcp.upload(4, 0x1000)
    print(f"Memory at 0x1000: {data.hex()}")

    xcp.download(0x2000, b"\x42\x00\x00\x00")

    xcp.disconnect()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jumpstarter_driver_xcp-0.8.1.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jumpstarter_driver_xcp-0.8.1-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file jumpstarter_driver_xcp-0.8.1.tar.gz.

File metadata

File hashes

Hashes for jumpstarter_driver_xcp-0.8.1.tar.gz
Algorithm Hash digest
SHA256 7f34db4110b6cbc86cb85eb0d57aa0f28a9403b870209d8cc9618f221429a1ec
MD5 a8de2e9d66b05b904651889ca6bf49cb
BLAKE2b-256 2f9d5fac17a7c0fb4b4fcb8ba1719854059b00910004c1722f203ae83a4e97f1

See more details on using hashes here.

File details

Details for the file jumpstarter_driver_xcp-0.8.1-py3-none-any.whl.

File metadata

File hashes

Hashes for jumpstarter_driver_xcp-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6c419609e1a12cf256d4ba6e0f60e589f5728b7ae37e9590fb86167b5ac48994
MD5 98112f6ab95421d8ccaa5ad8901786db
BLAKE2b-256 54b1ae704c17a1cfcb42087bebcb712d10eb0aa256b68415be723f94a8e83454

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page