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.
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:
- Engine Position & Speed Tracking: Monitoring raw distributor signals (TDC, CYP, CKP) to calculate RPM and trigger timing interrupts.
- Vehicle Speed Processing: Reading speed sensor pulses (VSS) to calculate vehicle speed.
- Injector Timing Output (Pre-drivers): Controlling the gate/base signals for the high-power fuel injector transistors (
Q18–Q21). - Ignition Timing Output: Directing the igniter trigger pulse (ignition coil trigger) to control spark timing.
- Auxiliary Output Driving: Driving auxiliary relays and solenoids (A/C clutch, main relay, EVAP purge, fast idle, Check Engine Light, etc.).
- 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
0x2000hwith bits 4 and 5 set to 0 configures or resets these RPM/VSS counters and the internal Pulse Width Modulator (PWM) controllers. Address0x200Fhbehaves 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.