Computers
are modules
Modern EFI vehicles are equipped
with a variety of environmental, safety and luxury features that require some
form of computer control. All EFI vehicles have at least one computer that
controls the fuel injectors and usually the spark timing. Other features such as
electronic transmissions, antilock braking systems and air bags require
additional computers for monitoring and control. Throughout this documentation
these computers are referred to as electronic modules or simply modules.
Modules
are connected by a bus
Modules communicate
information electronically between themselves via a bus. A bus is just a
computer term for a wire (or set of wires) that carries electronic messages from
one part of a computer-controlled system to another. The bus in most EFI
vehicles consists of a single wire that carries a 5-volt serial data stream.
Each module that is connected to the bus may broadcast and receive discrete packets of
information via the bus. Throughout this document
discrete packets of information that are broadcast on the bus are referred to as
frames. A frame is a sequence of bytes that adheres to the following format.
General
frame format (where 0<=N<=170) |
Mnemonic |
Byte |
Description |
ID
|
1
|
Frame
ID
|
LENGTH
|
2
|
Number of
data bytes $55+N
|
DATA BYTE
N
|
N+2
|
N data
bytes
|
CHECKSUM
|
N+3
|
Checksum
|
ID
All frames must begin with a frame ID.
LENGTH
The length byte is the number of data bytes in the message plus $55. A valid
length must be in the range $55..$FF (85..255).
Many messages contain no data and would therefore have a length byte of $55
(85). This value appears to have been selected because its binary representation
is 0101 0101, which is a pattern that is highly unlikely to be generated by
interference in an noisy, electronic environment.
DATA
The data bytes contain data that is specific to the frame ID. The receiving
module (including EFILive V4 - which is just an other module on the bus) must be
pre-programmed to understand the data, its format and scaling so that it is able
to correctly interpret the data.
CHECKSUM
The last byte is the checksum of the entire frame. The checksum is
determined so that the sum of all the bytes in the frame - including the frame
ID, the length byte and the checksum byte itself - is zero, ignoring any carry
bits.
For example the frame $F5,$57,$01,$00,$B3
- Has a frame ID of $F7.
- Has a length of $57-$55=$02 data bytes.
- Contains two data bytes: $01,$00.
- Has a checksum of $B3.
To calculate the checksum in hex:
-
Sum the bytes
$F5+$57+$01+$00=$14D.
-
Find the remainder when the sum is
divided by $100 which in this case is $4D.
-
The checksum will be $100-$4D=$B3.
To calculate the checksum in decimal:
-
Sum the bytes 245+87+1+0=333.
-
Find the remainder when the sum is
divided by 256 which in this case is 77.
-
The checksum will be 256-77=179 (179
is $B3 in hexadecimal).
Chatter frames
Some modules may,
without being requested, broadcast frames according to their message schedule. A
message schedule is a list of pre-configured frames contained within the module.
These frames will be broadcast automatically at certain time intervals - usually
at sub-second intervals. EFILive V4 calls these
spontaneous frames, chatter frames.
Some vehicles have one
or more modules with message schedules which means that there will be chatter
frames being broadcast on the bus all the time. Some modules even broadcast when
the ignition is turned off, although usually only a subset of their message
schedule.
Some vehicles do not
have any modules with message schedules which means that there will be no
chatter on the bus.
Communicating
with frames
When a module broadcasts a
frame it identifies the frame by setting the
frame's ID to a pre-assigned value. Any module is able to listen to any frame
and access the data in that frame.
Modules are programmed to listen
and respond to frames with particular ID's. The module's response is usually
determined by the frame's mode.
Unfortunately the same type of
module in different vehicles may respond to different frame IDs.
For example the ECM in a 1996 VS Holden Commodore V8
will respond to frames with a frame ID of $F4 while the ECM in a1998
VT Holden
Commodore V8 will respond to frames with a frame ID of $F5. (The difference has more to do with a
change in ECM rather than the change in
vehicle models).
Command frames
General
command frame format (where 0<=N<=169) |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame
ID |
LENGTH |
2 |
Number
of data bytes $55+1+N |
MODE
(command) |
3 |
$00 |
Normal communications |
$01 |
Request for ALDL data |
$02 |
Request a block of 64 bytes of addressed memory |
$03 |
Request up to 8 individually addressed memory bytes |
$04 |
Change
module settings |
$08 |
Suppress chatter |
$09 |
Resume chatter |
$0A |
Clear diagnostic trouble codes |
|
PARAMETER
N |
N+3 |
N
parameter bytes |
CHECKSUM |
N+4 |
Checksum |
Command frames are issued by
EFILive V4 in order to extract data or to override the normal functioning of the
vehicle's modules.
Specific
command frame formats
Request a particular table of data from a module
Request
frame - mode $01 |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame ID |
LENGTH |
2 |
Number of data
bytes $55+1+1=$57 |
MODE |
3 |
Mode $01 |
TABLE |
4 |
Table number
($00..$09) |
CHECKSUM |
5 |
Checksum |
Request a block of 64 bytes of addressed memory
Request
frame - mode $02 |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame ID |
LENGTH |
2 |
Number of data
bytes $55+1+2=$58 |
MODE |
3 |
Mode $02 |
MSB |
4 |
Most
significant byte of address |
LSB |
5 |
Least
significant byte of address |
CHECKSUM |
6 |
Checksum |
Request 1<=n<=8 bytes of memory
Request
frame - mode $03 (where 0<=N<=8) |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame ID |
LENGTH |
2 |
Number of data
bytes $55+1+(N*2) |
MODE |
3 |
Mode $03 |
MSB N |
N*2+4 |
Most
significant byte of address N |
LSB N |
N*2+5 |
Least
significant byte of address N |
CHECKSUM |
N*2+6 |
Checksum |
Send parameters to module
Request
frame - mode $04 |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame ID |
LENGTH |
2 |
Number of data
bytes $55+1+N |
MODE |
3 |
Mode $04 |
PARAMETER N |
N+4 |
Parameter
bytes 0<=N<=64 |
CHECKSUM |
N+5 |
Checksum |
Stop chatter
Request frame - mode $08 |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame ID |
LENGTH |
2 |
Number of data
bytes $55+1+0=$56 |
MODE |
3 |
Mode $08 |
CHECKSUM |
4 |
Checksum |
Resume chatter
Request
frame - mode $09 |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame ID |
LENGTH |
2 |
Number of data
bytes $55+1+0=$56 |
MODE |
3 |
Mode $09 |
CHECKSUM |
4 |
Checksum |
Clear malfunction flags
Request
frame - mode $0A |
Mnemonic |
Byte |
Description |
ID |
1 |
Frame ID |
LENGTH |
2 |
Number of data
bytes $55+1+0=$56 |
MODE |
3 |
Mode $0A |
CHECKSUM |
4 |
Checksum |
|