Cars · Electronics

OKI M6260A Engine Control Counter IC

Technical reference for the OKI M6260A Engine Control Counter IC, a custom timing and I/O coprocessor used in Honda OBD0 and OBD1 ECUs.

Advanced

Adapted from pgmfi.org wiki

The OKI M6260A (often marked as M6260A or 6260A) is a custom integrated circuit manufactured by OKI Semiconductor specifically for Honda Engine Control Units (ECUs). Officially designated as the Engine Control Counter IC, this chip was discontinued in the mid-1990s but remains a cornerstone of OBD0 and OBD1 ECU architectures.

Because official manufacturer documentation was never publicly released, the details here are the result of extensive hardware reverse-engineering by the Honda tuning community (notably J. Wong, Javier, Mark Lamond, and lestard).

Role and Core Functions

The OKI M6260A acts as a multi-purpose I/O coprocessor and timing manager. It offloads real-time, high-frequency operations from the main MCU (such as the OKI 66207). Its primary duties include:

  1. Engine Position & Speed Tracking: Monitoring raw distributor signals (TDC, CYP, CKP) to calculate RPM and trigger timing interrupts.
  2. Vehicle Speed Processing: Reading speed sensor pulses (VSS) to calculate vehicle speed.
  3. Injector Timing Output (Pre-drivers): Controlling the gate/base signals for the high-power fuel injector transistors (Q18Q21).
  4. Ignition Timing Output: Directing the igniter trigger pulse (ignition coil trigger) to control spark timing.
  5. Auxiliary Output Driving: Driving auxiliary relays and solenoids (A/C clutch, main relay, EVAP purge, fast idle, Check Engine Light, etc.).
  6. Hardware Feedback Loop Monitoring: Verifying output states by reading loop-back diagnostic inputs.

Software Interface & Memory Registers

The main MCU communicates with the M6260A via its external data bus using memory-mapped I/O instructions (MOVX in 8051-style assembly). The M6260A occupies the address space from 0x2000h to 0x200Fh.

Write Operations to 0x2000h (Port Outputs)

Writing a byte to address 0x2000h directly toggles digital output lines on the M6260A.

  • Logic State: Active-Low control. If the high bit (Bit 7) is 0, the corresponding output is turned ON (enabled). If Bit 7 is 1, the output is turned OFF (disabled).
  • Port Address: The lower 7 bits serve as an address or pin identifier.
Port Value (ON) Port Value (OFF) Output Pin Controlled Circuit / Component
0x10 0x90 Pin 24? Function Unknown
0x11 0x91 Pin ? Function Unknown
0x12 0x92 Pin 24 Function Unknown
0x13 0x93 Pin 22 Igniter Trigger Output (IC14)
0x14 0x94 Pin 32 / 34 Main Relay Driver
0x15 0x95 Pin 33 A/C Clutch Relay Driver
0x16 0x96 Pin 45 Q35 - Error LED on ECU board
0x17 0x97 Pin 44 Transistor Q33 Driver
0x20 0xA0 Pin 43 Fast Idle Valve / Solenoid
0x21 0xA1 Pin 42 Transistors Q31, Q45, CN1 Pin 11
0x22 0xA2 Pin 41 Dash Check Engine Light (CEL/MIL)
0x23 0xA3 Pin 40 IC17 - Automatic Transmission Lockup
0x24 0xA4 Pin 39 Multipurpose auxiliary output
0x25 0xA5 Pin 15 TDC Sensor Input Logic Control
0x27 0xA7 Pin ? Function Unknown

Read Operations (Digital Inputs)

Reading addresses 0x2001h and 0x2002h returns the live logic status of digital inputs wired to the M6260A.

Memory Address Bit Pin Connected Input Signal
0x2001h Bit 1 Pin 60 A/C Switch Status
0x2001h Bit 3 Pin 59 Ignition Switch Start/Run Signal
0x2001h Bit 4 Pin 58 Heater Fan Switch
0x2001h Bit 5 Pin 57 Reverse Switch (Manual Trans models)
0x2001h Bit 6 Pin 56 Clutch Interlock Switch / JDM SiR Fuse Box
0x2001h Bit 7 Pin 55 Brake Switch Input
0x2002h Bit 0 Pin 54 General Digital Input
0x2002h Bit 1 Pin 53 General Digital Input
0x2002h Bit 2 Pin 52 General Digital Input
0x2002h Bit 3 Pin 51 General Digital Input
0x2002h Bit 4 Pin 50 General Digital Input
0x2002h Bit 5 Pin 49 General Digital Input
0x2002h Bit 6 Pin 48 General Digital Input
0x2002h Bit 7 Pin 47 General Digital Input

Counter & Pulse Accumulator Registers

Reading registers 0x2004 through 0x2007 retrieves hardware counters populated directly by the M6260A's distributor and VSS pulse-reading inputs.

Register Address Bit Width Data Content Input Pin Source Sensor
0x2004h 8-bit Engine Speed (RPM) Low Byte Pin 64 Crank/RPM Sensor Input
0x2005h 8-bit Engine Speed (RPM) High Byte Pin 64 Crank/RPM Sensor Input
0x2006h 8-bit Vehicle Speed (VSS) Low Byte Pin 61 VSS (Vehicle Speed Sensor)
0x2007h 8-bit Vehicle Speed (VSS) High Byte Pin 61 VSS (Vehicle Speed Sensor)

Note

Writing to address 0x2000h with bits 4 and 5 set to 0 configures or resets these RPM/VSS counters and the internal Pulse Width Modulator (PWM) controllers. Address 0x200Fh behaves as a General Control Register for the M6260A's internal configuration.


M6260A Startup Initialization Sequence

During ECU boot-up, the software runs a precise byte-exchange routine to initialize the M6260A chip:

WRITE 0x00 -> [0x2000h]   ; Clear/initialize outputs
WRITE 0x25 -> [0x2000h]   ; Initialize TDC sensor routing
WRITE 0x96 -> [0x2000h]   ; Command Error LED OFF (high bit active)
WRITE 0xA7 -> [0x2000h]   ; Turn off auxiliary port
WRITE 0xE9 -> [0x200Fh]   ; Configure general control register
READ          [0x2003h]   ; Read status register (expects 0x80)
WRITE 0xA0 -> [0x2000h]   ; Command Fast Idle Solenoid OFF
READ          [0x2003h]   ; Read status register (expects 0x80)
WRITE 0x00 -> [0x2001h]   ; Initialize Port 1
WRITE 0x01 -> [0x2003h]   ; Enable interrupts/write control
READ          [0x2003h]   ; Read status register (expects 0x81)
WRITE 0x01 -> [0x2002h]   ; Initialize Port 2
READ          [0x2003h]   ; Read status register (expects 0x80)

64-Pin Package Pinout Mapping

The M6260A is housed in a 64-pin plastic QFP package. Below is the complete pinout configuration showing connections to the MCU and internal ECU components:

Pin Connection / Function Pin Connection / Function
1 GND 64 RPM Sensor Input
2 MCU Data Bus Bit 0 (P0.0) 63 BACK Chip Pin 33
3 MCU Data Bus Bit 1 (P0.1) 62 CID (Cylinder ID) Sensor Input
4 MCU Data Bus Bit 2 (P0.2) 61 VSS (Vehicle Speed Sensor) Input
5 MCU Data Bus Bit 3 (P0.3) 60 A/C Switch Input
6 MCU Data Bus Bit 4 (P0.4) 59 Op-Amp IC 2904 Pin 7
7 MCU Data Bus Bit 5 (P0.5) 58 Resistor Network RM4 Pin 6
8 MCU Data Bus Bit 6 (P0.6) 57 Resistor Network RM4 Pin 4
9 MCU Data Bus Bit 7 (P0.7) 56 Resistor Network RM4 Pin 3
10 MCU Chip Enable (/CE) / P2.4 55 Resistor Network RM7 Pin 2
11 MCU Address Bit 8 / P2.5 54 Transistor Q18 (Injector 1 Pre-driver)
12 MCU Address Latch Enable (ALE) 53 Transistor Q19 (Injector 2 Pre-driver)
13 MCU Write Enable (/WR) 52 Transistor Q20 (Injector 3 Pre-driver)
14 MCU Read Enable (/RD) 51 Transistor Q21 (Injector 4 Pre-driver)
15 TDC (Top Dead Center) Sensor Input 50 RM7 Pin 7 & Q16 Pin 2 (Feedback on A/T)
16 Driver IC14 Pin 7 49 RM7 Pin 8 & Q17 Pin 2 (Feedback on Purge Solenoid)
17 Custom IC BA226A Resistor R85 48 Resistor BR6 (Pulled High/Low)
18 Capacitor C61 47 Resistor BR5 (Pulled High/Low)
19 BACK Chip Pin 14 46 Logic VCC (+5V)
20 ADC (uPD7004C) Pin 3 45 Transistor Q35 (Error LED on board)
21 Resistor R48 44 Transistor Q33 Pin 3
22 Igniter Trigger Output 43 Fast Idle Solenoid Output
23 Multipurpose Output 42 Transistors Q31, Q45 (CN1 Pin 11)
24 HC04 Pin 3 / HC123 Pin 10 to R42 (Pull) 41 Dash Check Engine Light (CEL) Output
25 VCC (+5V) 40 Driver IC17 (Automatic Trans Lock Up)
26 VCC (+5V) 39 Multipurpose Output
27 GND 38 Transistor Q24 (Injector 1 Feedback Input)
28 Diode/Filter FB2 37 Transistor Q25 (Injector 2 Feedback Input)
29 Diode/Filter FB1 36 Transistor Q26 (Injector 3 Feedback Input)
30 Resistor R47 to Pin 31 35 Transistor Q27 (Injector 4 Feedback Input)
31 Resistor R47 to Pin 30, C59, C60 34 Main Relay Driver
32 GND 33 A/C Clutch Relay

Credits and source

Authors blundar, l3st4rd

Source Adapted from Oki6260A on pgmfi.org wiki. Licensed under CC BY-NC-SA 1.0.