Does My Car Have OBD2?
Does My Car Have OBD2?

Decoding EV OBD2 PID Formula Functions: A Comprehensive Guide for Modern Diagnostics

Understanding your vehicle’s health has become increasingly crucial in the age of advanced automotive technology. On-Board Diagnostics II (OBD2) is a standardized system that provides access to a wealth of data about your vehicle’s performance and status. While originally designed for combustion engine vehicles, the principles of OBD2, particularly Parameter IDs (PIDs) and their underlying formulas, are becoming relevant even in the realm of Electric Vehicles (EVs).

This guide delves into the world of OBD2, focusing on Ev Obd2 Pid Formula Functions, to provide you with a comprehensive understanding of how these elements work together for vehicle diagnostics. Whether you’re a seasoned mechanic or a curious car owner, this article will equip you with the knowledge to navigate the complexities of OBD2 and its application in modern vehicles.

Understanding the Basics of OBD2

OBD2 is essentially your car’s internal health monitoring system. It’s a standardized protocol that allows you to retrieve diagnostic trouble codes (DTCs) and real-time data through a standardized OBD2 connector.

Have you ever seen the check engine light illuminate on your dashboard? That’s OBD2 at work, signaling a potential issue. Mechanics use OBD2 scanners to interface with your vehicle’s computer, plugging into the 16-pin OBD2 connector, typically located near the steering wheel. These scanners send ‘OBD2 requests’ to the car, and the car responds with ‘OBD2 responses’ containing valuable information such as speed, engine temperature, and diagnostic codes. This streamlined communication drastically simplifies troubleshooting and repair processes.

Understanding OBD2: On-Board Diagnostics and the Malfunction Indicator Light (MIL) for vehicle issue detection.

OBD2 Compatibility: Is Your Vehicle Supported?

The likelihood is high that your car supports OBD2, especially if it’s a newer, non-electric model. Most modern vehicles adhere to the OBD2 standard, often utilizing the CAN bus communication protocol. However, older vehicles might have a 16-pin connector without full OBD2 compliance. The vehicle’s manufacturing origin and purchase date can offer clues about its OBD2 compatibility:


OBD2 Compliance Guide: Determine if your car is OBD2 compliant based on region and manufacturing year.

A Brief History of OBD2

OBD2’s origins can be traced back to California, where the California Air Resources Board (CARB) mandated OBD for all new vehicles from 1991 onwards, primarily for emission control.

The Society of Automotive Engineers (SAE) played a pivotal role in standardizing OBD2, defining DTCs and the universal OBD connector (SAE J1962). The OBD2 standard adoption unfolded gradually:

  • 1996: OBD2 becomes mandatory in the USA for cars and light trucks.
  • 2001: Required in the EU for gasoline vehicles.
  • 2003: EU mandates OBD2 for diesel vehicles as well (EOBD).
  • 2005: OBD2 becomes necessary for medium-duty vehicles in the US.
  • 2008: US vehicles must adopt ISO 15765-4 (CAN) as the OBD2 foundation.
  • 2010: OBD2 requirement extends to heavy-duty vehicles in the US.

OBD2 Historical Timeline: Evolution of On-Board Diagnostics for emission control and vehicle data access.

OBD2 Timeline: A visual overview of the development and implementation milestones of On-Board Diagnostics.

OBD3 and Future Trends: Exploring remote diagnostics, emissions testing, cloud integration, and IoT in the evolution of OBD.

The Future of OBD2 and the Rise of EV Diagnostics

While OBD2’s original purpose was emissions testing for combustion engines, its role is evolving. Interestingly, electric vehicles are not legally bound to support OBD2 in its traditional form. In practice, many modern EVs deviate from standard OBD2 requests, often employing OEM-specific UDS communication protocols. This makes accessing data from EVs challenging without specific reverse engineering efforts. However, resources are emerging, including case studies for electric cars like Tesla, Hyundai/Kia, Nissan, and VW/Skoda EVs, which explore data access methods.

Modern alternatives are emerging to address OBD2’s limitations, such as WWH-OBD (World Wide Harmonized OBD) and OBDonUDS (OBD on UDS). These protocols aim to enhance OBD communication using the UDS protocol as a base. For deeper insights, refer to introductions to UDS.

The trend towards connected cars is also shaping OBD2’s future. Manual emission checks are becoming inefficient. OBD3 envisions integrating telematics into all vehicles, potentially using a radio transponder to transmit VIN and DTCs wirelessly to a central server for automated checks. Devices like the CANedge2 WiFi CAN logger and CANedge3 3G/4G CAN logger already facilitate data transfer via WiFi/cellular networks. However, privacy concerns present a hurdle to widespread OBD3 adoption.

There’s also a push from some automotive sectors to restrict third-party access to OBD2 data while driving, centralizing data collection with manufacturers. This shift could reshape the landscape for third-party OBD2 services, raising questions about data access and control in the future automotive ecosystem.

EV Data Access: The evolving landscape of OBD2 and data accessibility in Electric Vehicles.

Deep Dive into EV OBD2 PID Formula Functions

While standard OBD2 might not be universally adopted in EVs, the concept of PIDs and their associated formulas remains highly relevant for EV diagnostics. EV systems still rely on a multitude of sensors and controllers that generate data points crucial for monitoring performance, battery health, and overall system integrity.

PID Formula Functions in EVs:

Even if EVs don’t strictly adhere to the traditional OBD2 PID structure, the underlying principle of using formulas to convert raw sensor data into meaningful parameters is still essential. EV control systems use complex algorithms and formulas to calculate values like:

  • Battery State of Charge (SOC): Formulas involving voltage, current, and temperature readings are used to estimate the battery’s charge level.
  • Battery State of Health (SOH): More complex formulas analyze battery degradation over time, considering factors like charge cycles, temperature history, and internal resistance.
  • Motor Torque and Power: Formulas based on motor current, voltage, and speed are used to calculate real-time motor performance.
  • Energy Consumption (Wh/km or miles/kWh): Formulas track energy flow from the battery to the motor and factor in distance traveled to calculate efficiency metrics.
  • Regenerative Braking Efficiency: Formulas assess the amount of energy recovered during braking and its contribution to overall efficiency.

These formulas, while potentially proprietary to each manufacturer, serve the same fundamental purpose as OBD2 PID formulas: to translate raw sensor readings into interpretable data for diagnostics, performance monitoring, and system optimization. Understanding these ev obd2 pid formula functions, even in a general sense, provides valuable insight into the data being generated and used within an EV’s complex systems.

Get Our ‘Ultimate CAN Guide’

Eager to become a CAN bus expert?

Access our 12 ‘simple intros’ in a comprehensive 160+ page PDF:

Download now

OBD2 Standards: The Framework for Communication

On-board diagnostics, OBD2, functions as a higher layer protocol, similar to a language, built upon communication methods like CAN (Controller Area Network), which is comparable to a phone line. OBD2 shares similarities with other CAN-based higher-layer protocols like J1939, CANopen, and NMEA 2000.

OBD2 standards define critical aspects, including the OBD2 connector, lower-layer communication protocols, OBD2 Parameter IDs (PIDs), and more. These standards are often categorized within a 7-layer OSI model, with SAE standards generally originating from the US and ISO standards reflecting EU specifications. Notably, SAE J1979 and ISO 15031-5, as well as SAE J1962 and ISO 15031-3, are technically very similar.

OBD2 and CAN Bus OSI Model: Illustrating the 7-layer OSI model with corresponding ISO and SAE standards for OBD2 and CAN bus communication.

OBD2 Connector Pinout: Diagram of a Type A OBD2 connector socket, detailing pin assignments for automotive diagnostics.

The OBD2 Connector: SAE J1962 Standard

The 16-pin OBD2 connector, standardized by SAE J1962 / ISO 15031-3, is your gateway to accessing vehicle data. The illustration shows a typical Type A OBD2 pin connector (Data Link Connector, DLC).

Key points about the OBD2 connector:

  • Usually located near the steering wheel, potentially hidden from plain sight.
  • Pin 16 provides battery power, often active even when the ignition is off.
  • The OBD2 pinout configuration varies based on the communication protocol used.
  • CAN bus, the most prevalent lower-layer protocol, typically utilizes pins 6 (CAN-H) and 14 (CAN-L).

OBD2 Connector Types: A vs. B

You might encounter both Type A and Type B OBD2 connectors. Type A is common in cars, while Type B is often found in medium and heavy-duty vehicles.

Both types share similar pinouts but differ in power supply outputs (12V for Type A, 24V for Type B). Baud rates can also vary, with cars typically at 500K and heavy-duty vehicles often at 250K (with increasing 500K support).

Type B connectors have a distinguishing interrupted groove in the middle. Type B OBD2 adapter cables are compatible with both Type A and B sockets, while Type A adapters will not fit Type B sockets.

OBD2 Connector Types A and B: Comparing SAE J1962 connector types for cars, vans, and trucks, highlighting voltage differences.

OBD2 vs. CAN Bus ISO15765: Contrasting OBD2 diagnostic protocol with CAN bus communication standards under ISO15765.

OBD2 and CAN Bus: ISO 15765-4 Standard

Since 2008, CAN bus (ISO 15765) has been the mandatory lower-layer protocol for OBD2 in US vehicles.

ISO 15765-4 (Diagnostics over CAN or DoCAN) is a set of specifications applied to the CAN standard (ISO 11898), standardizing the CAN interface for diagnostic equipment, particularly focusing on the physical, data link, and network layers:

  • CAN bus bit-rate must be 250K or 500K.
  • CAN IDs can be 11-bit or 29-bit.
  • Specific CAN IDs are designated for OBD requests and responses.
  • Diagnostic CAN frame data length is fixed at 8 bytes.
  • OBD2 adapter cable length must not exceed 5 meters.

OBD2 CAN Identifiers: 11-bit and 29-bit

OBD2 communication relies on request/response message exchanges.

In most cars, 11-bit CAN IDs are used for OBD2. The ‘Functional Addressing’ ID 0x7DF is used to query all OBD2-compatible ECUs for data on a requested parameter (ISO 15765-4). CAN IDs 0x7E0-0x7E7 are for ‘Physical Addressing’ requests to specific ECUs (less common).

ECUs respond with 11-bit IDs 0x7E8-0x7EF. The most common response ID is 0x7E8 (ECM, Engine Control Module), and to a lesser extent 0x7E9 (TCM, Transmission Control Module).

Some vehicles, like vans and medium/heavy-duty vehicles, may use 29-bit CAN identifiers for OBD2 communication.

The ‘Functional Addressing’ CAN ID in this case is 0x18DB33F1. Responses are typically in the CAN ID range 0x18DAF100 to 0x18DAF1FF (often 18DAF110 and 18DAF11E). This response ID is also represented as the J1939 PGN 0xDA00 (55808), which is reserved for ISO 15765-2 in the J1939-71 standard.

OBD2 Request and Response Frames: Illustrating the structure of OBD2 communication frames for parameter data exchange.

OBD2 vs. Proprietary CAN Bus: Contrasting standardized OBD2 protocol with OEM-specific CAN bus data communication.

OBD2 vs. Proprietary CAN Protocols

Vehicle ECUs primarily rely on OEM-specific CAN protocols for their core functions, not OBD2. These proprietary CAN protocols are unique to vehicle brands, models, and years. Interpreting this OEM-specific data is generally not possible without reverse engineering.

Connecting a CAN bus data logger to your OBD2 connector might capture OEM-specific CAN data, often broadcast at 1000-2000 frames/second. However, newer vehicles often employ a ‘gateway’ that restricts OBD2 connector access to OBD2 communication only, blocking OEM data.

Think of OBD2 as a supplementary higher-layer protocol existing alongside the OEM-specific protocol.

Bit-rate and ID Validation

OBD2 can operate at 250K or 500K bit-rates and use 11-bit or 29-bit CAN IDs, resulting in four possible combinations. Modern cars commonly use 500K and 11-bit IDs, but diagnostic tools should systematically verify this.

ISO 15765-4 outlines a systematic initialization sequence to determine the correct combination. This method leverages the mandatory OBD2 response to a specific request (detailed in the OBD2 PID section) and the fact that incorrect bit-rates cause CAN error frames.

Newer ISO 15765-4 versions account for OBD communication via OBDonUDS versus OBDonEDS. This article primarily focuses on OBD2/OBDonEDS (OBD on emission diagnostic service per ISO 15031-5/SAE J1979) as opposed to WWH-OBD/OBDonUDS (OBD on Unified Diagnostic Service per ISO 14229, ISO 27145-3/SAE J1979-2).

To test for OBDonEDS vs OBDonUDS, tools may send UDS requests with 11-bit/29-bit functional address IDs for service 0x22 and data identifier (DID) 0xF810 (protocol identification). OBDonUDS-compatible vehicles should have ECUs that respond to this DID.

OBDonEDS (aka OBD2, SAE OBD, EOBD, or ISO OBD) is prevalent in non-EV cars, while WWH-OBD is mainly used in EU trucks/buses.

OBD2 Bit-rate and CAN ID Validation Flowchart: ISO 15765-4 validation process for determining correct communication parameters.

OBD2 Five Lower-Layer Protocols: Diagram illustrating the five key communication protocols used in OBD2 standards.

Five Lower-Layer OBD2 Protocols

While CAN (ISO 15765) is dominant for OBD2 today, particularly in vehicles post-2008, older cars may utilize other protocols. Understanding these protocols and their pinouts is helpful for diagnosing older systems:

  • ISO 15765 (CAN bus): Mandatory in US cars since 2008 and widely used now.
  • ISO14230-4 (KWP2000): Keyword Protocol 2000, common in 2003+ Asian cars.
  • ISO 9141-2: Used in EU, Chrysler, and Asian cars (2000-04).
  • SAE J1850 (VPW): Primarily in older GM vehicles.
  • SAE J1850 (PWM): Primarily in older Ford vehicles.

ISO-TP: Transporting OBD2 Messages Beyond 8 Bytes [ISO 15765-2]

OBD2 data transmission over CAN bus relies on ISO-TP (ISO 15765-2), a transport protocol enabling payloads exceeding 8 bytes. This is essential for OBD2 functions like retrieving VIN or DTCs. ISO 15765-2 handles segmentation, flow control, and reassembly. See introductions to UDS for more detail.

For data fitting within a single CAN frame, ISO 15765-2 specifies ‘Single Frame’ (SF) usage. The first data byte (PCI field) denotes payload length (excluding padding), leaving 7 bytes for OBD2 communication.

ISO-TP OBD2 Frame Types: Diagram showing different frame types in ISO 15765-2 for OBD2 communication.

The OBD2 Diagnostic Message: Structure and Function [SAE J1979, ISO 15031-5]

Dissecting a ‘Single Frame’ OBD2 CAN message reveals its structure: identifier, data length (PCI field), and data. The data field is further broken down into Mode, Parameter ID (PID), and data bytes.

OBD2 Message Structure: Breakdown of an OBD2 message frame, detailing Mode, PID, ID, and data bytes.

Example: OBD2 Request and Response in Action

Consider a request for ‘Vehicle Speed’. An external tool sends a request to the car (CAN ID 0x7DF) with 2 payload bytes: Mode 0x01 and PID 0x0D. The car responds (CAN ID 0x7E8) with 3 payload bytes, including the speed value in the 4th byte, 0x32 (decimal 50).

Using OBD2 PID 0x0D decoding rules, we determine the physical value is 50 km/h.

Next, we’ll explore OBD2 modes and PIDs in more detail.

OBD2 Request and Response Example: Illustration of a request frame (7DF) and response frame (7E8) for Vehicle Speed PID.

OBD2 PID Example – Vehicle Speed 0D: Demonstrating the PID 0D for Vehicle Speed and its data representation.

OBD2 Services and Modes: Overview of the 10 standardized OBD2 service modes for diagnostics.

The 10 OBD2 Services (Modes)

OBD2 defines 10 diagnostic services, or modes. Mode 0x01 provides real-time data, while others handle DTCs or freeze frame data.

Vehicles aren’t required to support all 10 modes and may include OEM-specific modes beyond these. In OBD2 messages, the mode is the 2nd byte. In requests, the mode is direct (e.g., 0x01), while responses add 0x40 to the mode value (e.g., 0x41).

OBD2 Parameter IDs (PIDs) and Formula Functions

Each OBD2 mode incorporates Parameter IDs (PIDs). For example, mode 0x01 contains approximately 200 standardized PIDs for real-time data like speed, RPM, and fuel level. However, vehicles typically support only a subset of PIDs within each mode.

PID 0x00 in mode 0x01 is special. If an emissions-related ECU supports OBD2, it must support mode 0x01 PID 0x00. Responding to this PID, the ECU indicates support for PIDs 0x01-0x20. PID 0x00 is therefore a fundamental OBD2 compatibility test. PIDs 0x20, 0x40, …, 0xC0 can be used to determine support for remaining mode 0x01 PIDs.

The real power of PIDs lies in their associated formula functions. These formulas, detailed in SAE J1979 and ISO 15031-5, define how the raw data bytes within an OBD2 response are converted into meaningful physical values. For example, the formula for PID 0x0D (Vehicle Speed) might be a simple linear conversion where each unit of data byte value corresponds to 1 km/h. More complex PIDs, especially those related to emissions or engine load, can involve more intricate formulas incorporating scaling factors, offsets, and even non-linear functions.

Understanding these ev obd2 pid formula functions is crucial for accurately interpreting OBD2 data and using it for diagnostics, performance analysis, or custom applications. While standardized PIDs have well-documented formulas, OEM-specific PIDs in extended OBD2 modes or EV diagnostic interfaces may require reverse engineering or manufacturer documentation to decipher their formula functions.

OBD2 Request and Response Frames: Detailing PID data parameters within OBD2 communication frames.


OBD2 PID Overview Tool: Screenshot of a tool interface for exploring OBD2 PIDs and service 01 parameters.

Tip: Utilizing an OBD2 PID Overview Tool

SAE J1979 and ISO 15031-5 appendices provide scaling information for standard OBD2 PIDs, enabling data decoding into physical values.

For quick PID lookups, use OBD2 PID overview tools. These tools aid in constructing OBD2 requests and dynamically decoding responses.

OBD2 PID overview tool

Practical Guide: Logging and Decoding OBD2 Data

Let’s walk through logging OBD2 data with a CANedge CAN bus data logger. The CANedge allows custom CAN frame transmission, making it suitable for OBD2 logging. Connect it to your vehicle using an OBD2-DB9 adapter cable.

OBD2 Data Logger Setup: Illustrating the connection for OBD2 data logging using request IDs 7df and 7e8.

Supported PIDs Test Responses: Reviewing responses to ‘Supported PIDs’ requests in asammdf for OBD2 validation.

Step #1: Bit-rate, ID, and Supported PID Testing

ISO 15765-4 outlines how to determine the bit-rate and IDs for a specific vehicle. Test this using CANedge:

  1. Send a CAN frame at 500K and check for success (if not, try 250K).
  2. Use the verified bit-rate for further communication.
  3. Send ‘Supported PIDs’ requests and analyze the responses.
  4. Determine 11-bit or 29-bit IDs based on response IDs.
  5. Identify supported PIDs from response data.

Plug-and-play configurations for these tests are available. Most 2008+ non-EV cars support 40-80 PIDs using 500K bit-rate, 11-bit CAN IDs, and the OBD2/OBDonEDS protocol.

As shown in the asammdf GUI screenshot, multiple responses to a single OBD request are common due to the 0x7DF request ID polling all ECUs. Since all OBD2/OBDonEDS-compliant ECUs must support service 0x01 PID 0x00, many responses occur for this PID. Subsequent ‘Supported PIDs’ requests receive fewer responses. The ECM ECU (0x7E8) often supports all PIDs supported by other ECUs, reducing busload by directly addressing it using ‘Physical Addressing’ CAN ID 0x7E0.

Step #2: Configuring OBD2 PID Requests

Once you know your vehicle’s supported PIDs, bit-rate, and CAN IDs, configure your transmit list with relevant PIDs.

Consider these points:

  • CAN IDs: Use ‘Physical Addressing’ request IDs (e.g., 0x7E0) to avoid multiple responses.
  • Spacing: Add 300-500 ms intervals between requests to prevent ECU overload.
  • Battery Drain: Use triggers to stop transmissions when inactive to prevent ECU ‘wake-up’.
  • Filters: Filter for OBD2 responses if OEM-specific CAN data is also present.

With this configuration, your device is ready to log raw OBD2 data.


CANedge OBD2 PID Request List: Example configuration of OBD2 PID requests for CANedge data logging.


OBD2 Data Visualization in asammdf: Decoded OBD2 data plotted in asammdf using a CAN bus DBC file.

Step #3: DBC Decoding of Raw OBD2 Data

To analyze and visualize logged data, decode raw OBD2 data into physical values. Decoding information is in ISO 15031-5/SAE J1979 and online resources like Wikipedia. A free OBD2 DBC file simplifies DBC decoding in CAN bus software.

Decoding OBD2 data is more complex than standard CAN signals due to multiplexing. Different OBD2 PIDs use the same CAN ID (e.g., 0x7E8). Therefore, CAN ID alone isn’t enough to identify signals.

Signal identification requires considering CAN ID, OBD2 mode, and PID. This ‘extended multiplexing’ is implemented in DBC files.

CANedge: Your OBD2 Data Logging Solution

The CANedge facilitates easy OBD2 data recording to 8-32GB SD cards. Connect to your vehicle to start logging and use free software/APIs and our OBD2 DBC for decoding.

OBD2 logger intro CANedge

OBD2 Multi-Frame Communication Examples [ISO-TP]

OBD2 communication relies on ISO-TP (ISO 15765-2). While most examples are single-frame, multi-frame communication is essential for larger data sets.

Multi-frame OBD2 requires flow control frames. A static flow control frame can be transmitted ~50ms after the initial request, as shown in the CANedge configuration example.

CAN software/API tools supporting ISO-TP, like CANedge MF4 decoders, are needed for multi-frame OBD2 responses.


OBD2 Multi-Frame Request: Example of a multi-frame request message for Vehicle Identification Number (VIN) retrieval.

Example 1: Retrieving Vehicle Identification Number (VIN) via OBD2

The VIN is crucial for telematics and diagnostics. To get the VIN using OBD2, use mode 0x09 and PID 0x02:

The tool sends a Single Frame request with PCI (0x02), service ID (0x09), and PID (0x02). The vehicle responds with a First Frame containing PCI, length (0x014 = 20 bytes), mode (0x49), and PID (0x02). Byte 0x01 indicates one data item (NODI). The VIN follows in the subsequent 17 bytes, convertible from HEX to ASCII.

Example 2: OBD2 Multi-PID Request (6x)

Tools can request up to 6 mode 0x01 PIDs in a single request frame. The ECU responds with data for supported PIDs (skipping unsupported ones), potentially using multi-frame responses.

This efficient method increases data collection frequency, but signal encoding becomes request-specific, complicating generic OBD2 DBC file use. Not recommended for general use.

Multi-frame responses are similar to the VIN example, including requested PIDs and their data. PIDs are often ordered as requested. Decoding via DBC files is complex and not generally recommended unless tools have built-in support. This method presents extended multiplexing challenges, difficult to generalize across vehicles and manage at scale.

Example 3: OBD2 Diagnostic Trouble Codes (DTCs) Retrieval

Mode 0x03 (‘Show stored Diagnostic Trouble Codes’) retrieves emissions-related DTCs. No PID is included in the request. ECUs respond with the number of stored DTCs (potentially zero), with each DTC using 2 bytes, requiring multi-frame responses for more than 2 DTCs.

The 2-byte DTC value is split into category (first 2 bits) and a 4-digit hexadecimal code. Decoded DTCs can be looked up using OBD2 DTC tools like repairpal.com.

OBD2 DTC Decoding: Example of OBD2 Diagnostic Trouble Code (DTC) decoding and DBC interpretation.

OBD2 Data Logging: Practical Use Cases

OBD2 data logging from cars and light trucks has diverse applications:

Car Data Logging

OBD2 data helps reduce fuel costs, improve driving habits, test prototype parts, and optimize insurance models.

obd2 logger

Real-time Car Diagnostics

OBD2 interfaces stream human-readable data in real-time for vehicle issue diagnosis.

obd2 streaming

Predictive Maintenance

IoT OBD2 loggers monitor vehicles in the cloud for predictive maintenance and breakdown prevention.

predictive maintenance

Vehicle Black Box Logging

OBD2 loggers serve as ‘black boxes’ for vehicles, providing data for disputes or diagnostics.

can bus blackbox

Have an OBD2 data logging application in mind? Contact us for a free consultation!

Contact us

Explore our guides section for more intros or download the ‘Ultimate Guide’ PDF.

Ready to log or stream OBD2 data?

Get your OBD2 data logger today!

Buy now Contact us

Recommended Resources

OBD2 DATA LOGGER: EASILY LOG & CONVERT OBD2 DATA

CANEDGE2 – PRO CAN IoT LOGGER

[

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *