A CAN Bootloader for PIC18F CAN Microcontrollers
Author: Ross M. Fosler
Microchip Technology Inc.
The drawback to this is a lack of efficiency, as directly
manipulating the target memory and manually verifying
data takes significant time on the CAN bus.
To make the operation more efficient, the programming
target could be given some intelligence, like self-
Among the many features built into Microchip’s
Enhanced FLASH Microcontroller devices is the capa-
bility of the program memory to self-program. This very
verification. This would make communications
unidirectional, essentially cutting the time on the CAN
bus in half.
useful feature has been deliberately included to give
Overall, the best savings is to design all the nodes in
the user the ability to perform bootloading operations.
the system with similar, modular firmware. Each node
Devices like the PIC18F458 are designed with a desig-
could then use only those modules required for its task,
nated “boot block”, a small section of protectable pro-
but the entire group of nodes could be updated simul-
gram memory allocated specifically for bootload
taneously. The sacrifice here is program memory over-
head, since some nodes may have resident firmware
This application note demonstrates a simple boot-
that is not used.
loader implementation for the PIC18F families of micro-
controllers with a CAN module. The goals of this
Programming a Running System
implementation are to stress maximum performance
An interesting situation is bootloading in an active and
and functionality, while requiring a minimum of code
functioning system. In this instance, one or more of the
space. For users developing CAN enabled systems, it
nodes are taken off-line to update their firmware, yet
provides a low level framework that can be used withwww.DataSheet4U.com the functionality of the entire system is not completely
higher level network protocols to develop more
disabled. This, of course, requires that the target node
complex and custom-tailored systems.
or nodes have some functional independence from
CONSIDERATIONS FOR FIELD
PROGRAMMING OVER THE CAN BUS
other parts of the networked system.
There are priority issues to contend with when pro-
gramming in an active system. For example, what pri-
The combination of FLASH technology and robust net-
work communication capability in a single device
makes over-the-network programmability a very desir-
able option. However, this makes bootloading on a
CAN bus network a very different challenge from more
typical uses, such as using a bootloader to program a
single FLASH device in isolation. Let’s consider some
of the key issues in over-the-network programming.
ority can be given to the bootloader without affecting
the critical communications in the system? If higher pri-
ority is given to nodes running the bootloader than
other nodes running their normal application, then it
may take time for data to be received when data is
being streamed to the programming target. Thus, criti-
cal systems that require relatively low latency for data
transmission or reception may fail to function as
expected. In the opposite situation, assigning the pro-
Single or Group Programming
gramming target with a priority that is too low could lead
to extremely long programming times, simply because
Providing bootloading capability over a CAN bus net-
the programming source and target are continually
work takes some forethought. For example, a system
waiting for an IDLE bus to pass data.
with a number of nodes may have identical firmware in
several nodes. Since every node on a CAN bus can
see all passing data, it may be more efficient to
program these identical nodes in a single pass.
In an active network, planning is necessary to provide
sufficient bus time for programming. One solution is
simply to give relatively high priority to bootloader pro-
gramming operations, then design the programming
However, in other cases where a node or many nodes
source to “inject” time for other applications while
are unique, it may only be necessary to open
streaming data on the CAN bus. Thus, bus time is
peer-to-peer communications to program the device.
always available and controlled by the programming
This can be the simplest programming system,
because the programming source could contain all the
intelligence and freely manipulate the target memory.
2003 Microchip Technology Inc.