Established 22 years
Last Updated on June 13 2020

Adding the ECU Master CAN switch board V3

My car has three calibration switches which are used to select the calibration map, launch rpm and traction control settings. These are all wired in to the X10 expander, in three analogue inputs. They all work fine, but I wanted to move the switches on to the steering wheel, to allow me to safely make changes whilst driving. So I could just extend the analogue wiring to the steering wheel, but there is a better solution.

Polish company ECU Master produce a CAN Switch board, which provides 8 analogue inputs, 8 digital inputs, and four digital outputs. The board is designed to be affixed to a steering wheel, and the wiring between the board and the ECU is simplified since it only needs 12V, 0V and CAN Hi and Lo.

Setting up the CAN Switch board

Connect the Switch board to the Life ECU's CAN1 bus.


The Switch board box transmits three frames, on to the 1Mbps CAN BUS. Each frame is 8 bytes in size. Each frame has a hexadecimal address which identifies the frame to the ECU. For the Switch board on my car, the first frame has an address of 640h, and the second frame 641h, and the third frame 642h. We are using Receive A frames. Receive A frames consist of four 16-bit signed quantities sent high byte first. The Switch board is already setup to send High byte first.



Msg1 with an ID of 640h, consists of 8 bytes; the first pair of bytes (16 bits in total) are for Analogue channel #1, the second pair of bytes are for channel #2, then channel #3 and finally channel #4.

Msg2 with an ID of 641h, consists of 8 bytes; the first pair of bytes (16 bits in total) are for Analogue channel #5, the second pair of bytes are for channel #6, then channel #7 and finally channel #8.

Msg3 with an ID of 642h, consists of 8 bytes; the first pair of bytes (16 bits in total) are for the rotary switch positions 1 to 4, the second pair of bytes are for rotary switch positions 5 to 8, then SW_MASK which represents the position of all 8 switches (each switch is represented by 1 bit) and AS_MASK which represents the state of the analogue inputs, then LS_MASK which represents the Low side outputs (8 bits) and the final byte which is a heartbeat counter which increments every time a message is sent.

When you add a device to the CAN-BUS it needs to have a unique address.

Setup the ECU to read the frames from the Switch board over CAN-BUS

With the CAN Switch board connected to the two wire ECU CAN interface, run LifeCal and in Datastreams, configure the Generic CAN Receive as follows


Assuming we already have an EGT-to-CAN board using A01..A04 and A05..A08, we need to set the next three frames at slots A09..A13 and A13..A16 and A17..A20 to YES


Set the address of frame A09..A12 to 640h
Set the address of frame A13..A16 to 641h
Set the address of frame A17..A20 to 642h

Now we need to go to the IO Config section in LifeCAL, to Pin Assignments and assign the data from the CAN Switch board, to the Inputs R09 to R13 for analogue inputs A1 to A4

Once the Pin Assignments have been made, and the ECU has been reprogrammed, you can add a gauge to show the RX09_R09 input and then test the operation of the rotary switches.