CAN Bus — The Deets


I recently wrote an article regarding some work I did with CAN Bus and left out low level detail to keep messaging concise. This article discusses at a very high level what CAN Bus is.

CAN Bus is an automotive communication specification developed by Robert Bosch in 1984 that quickly gained acceptance and standardization in the automotive, manufacturing, and aerospace industries. CAN which stands for Controller Area Network, is a 2 wire (shielded and twisted) serial bus protocol to connect individual systems and sensors as an alternative to conventional multi-wire looms.

Data is traversed in two modes: a high speed reliable channel called CAN High, and a low speed fault tolerant mode called CAN Low.

“The use of CAN Bus reduced the vehicles wiring by a whopping 1.25 miles, which netted a 110 pound weight decrease”

In 1986, the BMW 850 coupe was the first vehicle to enter the market using CAN Bus. The use of CAN Bus reduced the vehicles wiring by a whopping 1.25 miles, which netted a 110 pound weight decrease of predecessor models. By 2006, over 70% of all automobiles sold in North America utilize CAN Bus technology. In 2008, the Society of Automotive Engineers (SAE) required that 100% of vehicles sold in the USA use the CAN Bus protocol, and Europe and many other countries have similar mandates.


The CAN Bus is a messaging bus or pipe where messages comprised of a series of “envelopes” designated by address (e.g. envelope ID 111, 222, etc.) are traversed, each envelope contains up to 8 data points which are designated by a unique ID as well.

sample message with 3 envelopes (more envelopes are allowed)

Each data point sent is converted for transport to a byte value represented anywhere from 0–255 bits. So say you wanted to send throttle percent in a CAN message in envelope ID 111, and you placed throttle data in slot ID 8, in order to send 33% throttle, the value would be 85 bits because 33% of 1 byte(255 bits) is 85.

a single envelope contains 8 channels on data

In some cases a byte value can be either signed or unsigned. An unsigned byte represents a negative capacity, for instance — air temperature is an unsigned byte: 0 –128 bits represents -127 degrees to 0 degrees centigrade, while 128–255 bits represents 1–128 degrees. Without a proper encode/decode specification, deciphering CAN Bus messages can be a challenge. More complex data types use Big Endian, Little Endian byte ordering, which takes up 2 slots in a channel to send 2 bytes that combine to make a complex number such as RPM. If you are a nuts and bolts person or just want to know more check out the latest full CAN Specification at