MICROCHIP PIC32MX795F512L

PIC32
PIC32 Flash Programming Specification
1.0
DEVICE OVERVIEW
This document defines the programming specification
for the PIC32 families of 32-bit microcontrollers. This
programming specification is designed to guide
developers of external programmer tools. Customers
who are developing applications for PIC32 devices
should use development tools that already provide
support for device programming.
An external tool programming setup consists of an
external programmer tool and a target PIC32 device.
Figure 2-1 illustrates the block diagram view of the
typical programming setup. The programmer tool is
responsible for executing necessary programming
steps and completing the programming operation.
FIGURE 2-1:
The major topics of discussion include:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Section 1.0 “Device Overview”
Section 2.0 “Programming Overview”
Section 3.0 “Programming Steps”
Section 4.0 “Connecting to the Device”
Section 5.0 “EJTAG vs. ICSP”
Section 6.0 “Pseudo Operations”
Section 7.0 “Entering 2-Wire Enhanced ICSP Mode”
Section 8.0 “Check Device Status”
Section 9.0 “Erasing the Device”
Section 10.0 “Entering Serial Execution Mode”
Section 11.0 “Downloading the Programming Executive (PE)”
Section 12.0 “Downloading a Data Block”
Section 13.0 “Initiating a Flash Row Write”
Section 14.0 “Verify Device Memory”
Section 15.0 “Exiting Programming Mode”
Section 16.0 “The Programming Executive”
Section 17.0 “Checksum”
Section 18.0 “Configuration Memory and Device ID”
Section 19.0 “TAP Controllers”
Section 20.0 “AC/DC Characteristics and Timing Requirements”
Appendix A: “PIC32 Flash Memory Map”
Appendix B: “Hex File Format”
Appendix C: “Revision History”
PROGRAMMING SYSTEM
SETUP
Target PIC32 Device
External
Programmer
CPU
On-Chip Memory
2.1
Devices with Dual Flash Panel and
Dual Boot Regions
• Self-programming
• External tool programming
The PIC32MZ Embedded Connectivity (EC) family of
devices incorporate several features useful for field
(self) programming of the device. These features
include dual Flash panels with dual Boot regions, an
aliasing scheme for the Boot regions allowing automatic selection of Boot code at start-up and a panel
swap feature for program Flash. The two Flash panels
and their associated Boot regions can be erased and
programmed separately. Refer to Section 3. “Memory
Organization” (DS61115) in the “PIC32 Family
Reference Manual” for a detailed explanation of these
features.
The self-programming method requires that the target
device already contains executable code with the logic
necessary to complete the programming sequence.
A development tool used for production programming
will not be concerned about most of these features with
the following exceptions:
The external tool programming method does not
require any code in the target device – it can program
all target devices with or without any executable code.
• Insuring that the SWAP bit (NVMCON<7>) is in the
proper setting. The default setting is ‘0’ for no swap
of panels. The development tool should assume the
default setting when generating source files for the
programming tool.
• Proper handling of the aliasing of the Boot memory
in the checksum calculation. The aliased sections
will be duplicates of the fixed sections. See
Section 17.0 “Checksum” for more information on
checksum calculations with aliased regions.
2.0
PROGRAMMING OVERVIEW
All PIC32 devices can be programmed through two
primary methods:
This document describes the external tool
programming method. Refer to the individual sections
of the “PIC32 Family Reference Manual” and the
specific device data sheet for more information about
using the self-programming method.
 2007-2013 Microchip Technology Inc.
DS61145L-page 1
PIC32
2.2
Programming Interfaces
All PIC32 devices provide two physical interfaces to the
external programmer tool:
• 2-wire In-Circuit Serial Programming™ (ICSP™)
• 4-wire Joint Test Action Group (JTAG)
See Section 4.0 “Connecting to the Device” for
more information.
Either of these methods may use a downloadable
Programming Executive (PE). The PE executes from
the target device RAM and hides device programming
details from the programmer. It also removes overhead
associated with data transfer and improves overall data
throughput. Microchip has developed a PE that is
available for use with any external programmer (see
Section 16.0 “The Programming Executive” for
more information).
2.3
Enhanced JTAG (EJTAG)
The 2-wire and 4-wire interfaces use the EJTAG
protocol to exchange data with the programmer. While
this document provides a working description of this
protocol as needed, advanced users are advised to
refer to the “EJTAG Specification” (MD00047), which is
available
from
MIPS
Technologies,
Inc.
(www.mips.com).
2.4
Data Sizes
Per the EJTAG Specification, data sizes are defined as
follows:
•
•
•
•
One Word: 32 bits
One-half Word: 16 bits
One-quarter Word: 8 bits
One Byte: 8 bits
Section 3.0 “Programming Steps” describes highlevel programming steps, followed by a brief
explanation of each step. Detailed explanations are
available in corresponding sections of this document.
More information on programming commands, EJTAG,
and DC specifications are available in the following
sections:
• Section 18.0 “Configuration Memory and
Device ID”
• Section 19.0 “TAP Controllers”
• Section 20.0 “AC/DC Characteristics and
Timing Requirements”
DS61145L-page 2
 2007-2013 Microchip Technology Inc.
PIC32
3.0
PROGRAMMING STEPS
All tool programmers must perform a common set of
steps, regardless of the actual method being used.
Figure 3-1 shows the set of steps to program PIC32
devices.
FIGURE 3-1:
The following sequence lists the steps, with a brief
explanation of each step. More detailed information
about the steps is available in the following sections.
1.
Connect to the Target Device.
To ensure successful programming, all required
pins must be connected to appropriate signals.
See Section 4.0 “Connecting to the Device”
in this document for more information.
PROGRAMMING FLOW
2.
Start
Place the Target Device in Programming Mode.
For 2-wire programming methods, the target
device must be placed in a special programming
mode (Enhanced ICSP™) before executing any
other steps.
Enter Enhanced ICSP™
(Only required for 2-wire)
Note:
For the 4-wire programming methods,
Step 2 is not required.
See Section 7.0 “Entering 2-Wire Enhanced
ICSP Mode” for more information.
Check Device Status
3.
Check the Status of the Device.
Step 3 checks the status of the device to ensure
it is ready to receive information from the
programmer.
Erase Device
See Section 8.0 “Check Device Status” for
more information.
Enter Serial Exec Mode
4.
If the target memory block in the device is not
blank, or if the device is code-protected, an
erase step must be performed before
programming any new data.
Download the PE
(Optional)
See Section 9.0 “Erasing the Device” for
more information.
5.
Download a Data Block
See Section 10.0 “Entering Serial Execution
Mode” for more information.
6.
Done
Enter Programming Mode.
Step 5 verifies that the device is not codeprotected and boots the TAP controller to start
sending and receiving data to and from the
PIC32 CPU.
Initiate Flash Write
No
Erase the Target Device.
Download the Programming Executive (PE).
The PE is a small block of executable code that
is downloaded into the RAM of the target device.
It will receive and program the actual data.
Yes
Note:
Verify Device
Exit Programming Mode
If the programming method being used
does not require the PE, Step 6 is not
required.
See
Section 11.0
“Downloading
the
Programming Executive (PE)” for more
information.
Done
 2007-2013 Microchip Technology Inc.
DS61145L-page 3
PIC32
7.
Download the Block of Data to Program.
All methods, with or without the PE, must download the desired programming data into a block
of memory in RAM.
See Section 12.0 “Downloading a Data
Block” for more information.
8.
Initiate Flash Write.
After downloading each block of data into RAM,
the programming sequence must be started to
program it into the target device’s Flash
memory.
See Section 13.0 “Initiating a Flash Row
Write” for more information.
9.
Repeat Steps 7 and 8 until all data blocks are
downloaded and programmed.
DS61145L-page 4
10. Verify the program memory.
After all programming data and Configuration
bits are programmed, the target device memory
should be read back and verified for the
matching content.
See Section 14.0 “Verify Device Memory” for
more information.
11. Exit the Programming mode.
The newly programmed data is not effective until
either power is removed and reapplied to the
target device or an exit programming sequence
is performed.
See Section 15.0 “Exiting
Mode” for more information.
Programming
 2007-2013 Microchip Technology Inc.
PIC32
4.0
CONNECTING TO THE DEVICE
The PIC32 family provides two possible physical
interfaces for connecting to and programming the
memory contents (Figure 4-1). For all programming
interfaces, the target device must be properly powered
and all required signals must be connected. In addition,
the interface must be enabled, either through its
Configuration bit, as in the case of the JTAG 4-wire
interface, or though a special initialization sequence, as
is the case for the 2-wire ICSP interface.
The JTAG interface is enabled by default in blank
devices shipped from the factory.
Enabling ICSP is described in Section 7.0 “Entering
2-Wire Enhanced ICSP Mode”.
FIGURE 4-1:
•
•
•
•
TCK – Test Clock Input
TMS – Test Mode Select Input
TDI – Test Data Input
TDO – Test Data Output
These signals are described in the following four
sections. Refer to the specific device data sheet for the
connection of the signals to the device pins.
TEST CLOCK INPUT (TCK)
TCK is the clock that controls the updating of the TAP
controller and the shifting of data through the Instruction or selected Data register(s). TCK is independent of
the processor clock with respect to both frequency and
phase.
2-wire
ICSP™
Programmer
4-wire Interface
One possible interface is the 4-wire JTAG (IEEE
1149.1) port. Table 4-1 lists the required pin
connections. This interface uses the following four
communication lines to transfer data to and from the
PIC32 device being programmed:
4.1.1
PROGRAMMING
INTERFACES
PIC32
OR
4.1
4-wire
JTAG
4.1.2
TEST MODE SELECT INPUT (TMS)
TMS is the control signal for the TAP controller. This
signal is sampled on the rising edge of TCK.
+ MCLR, VDD, VSS
4.1.3
TEST DATA INPUT (TDI)
TDI is the test data input to the Instruction or selected
Data register(s). This signal is sampled on the rising
edge of TCK for some TAP controller states.
4.1.4
TEST DATA OUTPUT (TDO)
TDO is the test data output from the Instruction or Data
register(s). This signal changes on the falling edge of
TCK. TDO is only driven when data is shifted out,
otherwise the TDO is tri-stated.
TABLE 4-1:
4-WIRE INTERFACE PINS
Device Pin Name
Pin Type
Pin Description
MCLR
I
Programming Enable
ENVREG(2)
I
Enable for On-Chip Voltage Regulator
P
Power Supply
VDD and AVDD(1)
P
Ground
VSS and AVSS(1)
VCAP
P
CPU logic filter capacitor connection
TDI
I
Test Data In
TDO
O
Test Data Out
TCK
I
Test Clock
TMS
I
Test Mode State
Legend: I = Input
O = Output
P = Power
Note 1: All power supply and ground pins must be connected, including analog supplies (AVDD) and ground
(AVSS).
2: The ENVREG pin is not available on all devices. Please refer to the “Pin Diagrams” section in the
specific device data sheet to determine availability.
 2007-2013 Microchip Technology Inc.
DS61145L-page 5
PIC32
4.2
2-wire Interface
4.2.1
Another possible interface is the 2-wire ICSP port.
Table 4-2 lists the required pin connections. This
interface uses the following two communication lines to
transfer data to and from the PIC32 device being
programmed:
• PGECx – Serial Program Clock
• PGEDx – Serial Program Data
TABLE 4-2:
Device
Pin Name
PGECx is the clock that controls the updating of the
TAP controller and the shifting of data through the
Instruction or selected Data register(s). PGECx is
independent of the processor clock, with respect to
both frequency and phase.
4.2.2
These signals are described in the following two
sections. Refer to the specific device data sheet for the
connection of the signals to the chip pins.
SERIAL PROGRAM CLOCK
(PGECX)
SERIAL PROGRAM DATA (PGEDX)
PGEDx is the data input/output to the Instruction or
selected Data Register(s), it is also the control signal
for the TAP controller. This signal is sampled on the
falling edge of PGECx for some TAP controller states.
2-WIRE INTERFACE PINS
Programmer
Pin Name
Pin Type
Pin Description
MCLR
MCLR
P
Programming Enable
N/A
I
Enable for On-Chip Voltage Regulator
ENVREG(2)
VDD and AVDD(1) VDD
P
Power Supply
P
Ground
VSS and AVSS(1) VSS
N/A
P
CPU logic filter capacitor connection
VCAP
PGEC1
PGEC
I
Primary Programming Pin Pair: Serial Clock
PGED1
PGED
I/O
Primary Programming Pin Pair: Serial Data
PGEC2
PGEC
I
Secondary Programming Pin Pair: Serial Clock
PGED2
PGED
I/O
Secondary Programming Pin Pair: Serial Data
Legend: I = Input
O = Output
P = Power
Note 1: All power supply and ground pins must be connected, including analog supplies (AVDD) and ground (AVSS).
2: The ENVREG pin is not available on all devices. Please refer to either the “Pin Diagrams” or “Pin
Tables” section in the specific device data sheet to determine availability.
DS61145L-page 6
 2007-2013 Microchip Technology Inc.
PIC32
4.3
Power Requirements
FIGURE 4-2:
Devices in the PIC32 family are dual voltage supply
designs. There is one supply for the core and
another for peripherals and I/O pins. All devices
contain an on-chip regulator for the lower voltage
core supply to eliminate the need for an additional
external regulator. There are three implementations
of the on board regulator:
• The first version has an internal regulator that can
be disabled using the ENVREG pin. When disabled,
an external power supply must be used to power the
core. If enabled, a low-ESR filter capacitor must be
connected to the VCAP pin (see Figure 4-2).
• The second version has an internal regulator that
cannot be disabled. A low-ESR filter capacitor must
always be connected to the VCAP pin.
• The third version has an internal regulator that
cannot be disabled and does not require a filter
capacitor
INTERNAL REGULATOR
ENABLE/DISABLE
OPTIONS
Regulator Enabled(2)
(ENVREG tied to VDD)
3.3V
PIC32
VDD
ENVREG
VCAP
CEFC
(10 F typical)
VSS
Regulator Disabled(2)
(ENVREG tied to ground)
1.8V(1)
3.3V(1)
PIC32
VDD
Please refer to Section 20.0 “AC/DC Characteristics
and Timing Requirements” and the “Electrical
Characteristics” chapters in the specific device data
sheet for the power requirements for your device.
ENVREG
VCAP
VSS
 2007-2013 Microchip Technology Inc.
Note 1:
These are typical operating voltages. Refer
to Section 20.0 “AC/DC Characteristics and
Timing Requirements” for the full operating
ranges of VDD and VCAP.
2:
Regulator Enabled and Regulator Disabled
mode are not available on all devices.
Please refer to the specific device data
sheet to determine availability.
DS61145L-page 7
PIC32
5.0
EJTAG vs. ICSP
Programming is accomplished through the EJTAG
module in the CPU core. EJTAG is connected to either
the full set of JTAG pins, or a reduced 2-wire to 4-wire
EJTAG interface for ICSP mode. In both modes,
programming of the PIC32 Flash memory is
accomplished through the ETAP controller. The TAP
Controller uses the TMS pin to determine if Instruction
or Data registers should be accessed in the shift path
between TDI and TDO (see Figure 5-1).
FIGURE 5-1:
The basic concept of EJTAG that is used for
programming is the use of a special memory area
called DMSEG (0xFF200000 to 0xFF2FFFFF), which
is only available when the processor is running in
Debug mode. All instructions are serially shifted into an
internal buffer, and then loaded into the Instruction
register and executed by the CPU. Instructions are fed
through the ETAP state machine in 32-bit groups.
TAP CONTROLLER
Tap Controller
TMS
TCK
TDO
TDI
Instruction, Data and Control Registers
DS61145L-page 8
 2007-2013 Microchip Technology Inc.
PIC32
5.1
Programming Interface
Figure 5-2 shows the basic programming interface in
PIC32 devices. Descriptions of each interface block are
provided in subsequent sections.
FIGURE 5-2:
BASIC PIC32 PROGRAMMING INTERFACE BLOCK DIAGRAM
TMS
TCK
Common
ETAP
VDD
CPU
TDI
TDO
VSS
MTAP
Flash
Controller
MCLR
or
PGECx
PGEDx
5.1.1
2-wire
to
4-wire
ETAP
Flash
Memory
5.1.4
CPU
This block serially feeds instructions and data into the
CPU.
The CPU executes instructions at 8 MHz through the
internal oscillator.
5.1.2
5.1.5
MTAP
In addition to the EJTAG TAP (ETAP) controller, the
PIC32 device uses a second proprietary TAP controller
for additional operations. The Microchip TAP (MTAP)
controller supports two instructions relevant to
programming: MTAP_COMMAND and TAP switch
Instructions. See Table 19-1 for a complete list of
Instructions. The MTAP_COMMAND instruction provides
a mechanism for a JTAG probe to send commands to
the device through its Data register.
The programmer sends commands by shifting in the
MTAP_COMMAND instruction through the SendCommand
pseudo operation, and then sending MTAP_COMMAND
DR commands through XferData pseudo operation
(see Table 19-2 for specific commands).
The probe does not need to issue a MTAP_COMMAND
instruction for every command shifted into the Data
register.
5.1.3
2-WIRE TO 4-WIRE
This block converts the 2-wire ICSP interface to the
4-wire JTAG interface.
 2007-2013 Microchip Technology Inc.
FLASH CONTROLLER
The Flash controller controls erasing and programming
of the Flash memory on the device.
5.1.6
FLASH MEMORY
The PIC32 device Flash memory is divided into two
logical Flash partitions consisting of the Boot Flash
Memory (BFM) and Program Flash Memory (PFM).
The BFM begins at address 0x1FC00000, and the PFM
begins at address 0x1D000000. Each Flash partition is
divided into pages, which represent the smallest block
of memory that can be erased. Depending on the
device, page sizes are 256 words (1024 bytes), 1024
words (4096 bytes), or 4096 words (16,384 bytes).
Row size indicates the number of words that are programmed with the row program command. There are
always 8 rows within a page; therefore, devices with
256, 1024, and 4096 word page sizes have 32, 128,
and 512 word row sizes, respectively. Table 5-1 shows
the PFM, BFM, Row, and Page size of each device
family.
The highest memory locations of the BFM are reserved
for the device Configuration registers (see
Section 18.0 “Configuration Memory and Device
ID” for details).
DS61145L-page 9
PIC32
TABLE 5-1:
CODE MEMORY SIZE
PIC32 Device
Row Size Page Size
(Words) (Words)
Boot Flash Memory Address
(Bytes)
Program Flash Memory Address
(Bytes)
PIC32MX110F016B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D003FFF (16 KB)
PIC32MX110F016C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D003FFF (16 KB)
PIC32MX110F016D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D003FFF (16 KB)
PIC32MX210F016B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D003FFF (16 KB)
PIC32MX210F016C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D003FFF (16 KB)
PIC32MX210F016D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D003FFF (16 KB)
PIC32MX120F032B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX120F032C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX120F032D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX220F032B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX220F032C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX220F032D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX320F032H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX420F032H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D007FFF (32 KB)
PIC32MX130F064B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX130F064C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX130F064D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX230F064B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX230F064C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX230F064D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX320F064H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX330F064H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX430F064H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX534F064H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX564F064H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX664F064H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX330F064L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX430F064L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX534F064L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX564F064L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX664F064L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D00FFFF (64 KB)
PIC32MX150F128B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX150F128C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX150F128D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX250F128B
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX250F128C
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX250F128D
32
256
0x1FC00000-0x1FC00BFF (3 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX320F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX340F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX350F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX440F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX450F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX564F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX664F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX764F128H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX320F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX340F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
DS61145L-page 10
 2007-2013 Microchip Technology Inc.
PIC32
TABLE 5-1:
CODE MEMORY SIZE (CONTINUED)
PIC32 Device
Row Size Page Size
(Words) (Words)
Boot Flash Memory Address
(Bytes)
Program Flash Memory Address
(Bytes)
PIC32MX350F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX440F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX450F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX564F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX664F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX764F128L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D01FFFF (128 KB)
PIC32MX340F256H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX350F256H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX440F256H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX450F256H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX575F256H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX675F256H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX775F256H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX350F256L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX360F256L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX450F256L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX460F256L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX575F256L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX675F256L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX775F256L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MX340F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX360F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX370F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX440F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX470F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX575F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX675F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX695F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX775F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX795F512H
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX360F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX370F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX460F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX470F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX575F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX675F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX695F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX775F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MX795F512L
128
1024
0x1FC00000-0x1FC02FFF (12 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0256ECE064
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MZ0256ECE100
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MZ0256ECE124
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MZ0256ECE144
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MZ0256ECF064
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MZ0256ECF100
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MZ0256ECF124
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
PIC32MZ0256ECF144
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D03FFFF (256 KB)
 2007-2013 Microchip Technology Inc.
DS61145L-page 11
PIC32
TABLE 5-1:
CODE MEMORY SIZE (CONTINUED)
PIC32 Device
Row Size Page Size
(Words) (Words)
Boot Flash Memory Address
(Bytes)
Program Flash Memory Address
(Bytes)
PIC32MZ0512ECE064
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0512ECE100
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0512ECE124
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0512ECE144
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0512ECF064
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0512ECF100
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0512ECF124
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ0512ECF144
512
4096
0x1FC00000-0x1FC13FFF (80 KB)
0x1D000000-0x1D07FFFF (512 KB)
PIC32MZ1024ECE064
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECE100
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECE124
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECE144
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECF064
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECF100
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECF124
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECF144
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECG064
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECG100
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECG124
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECG144
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECH064
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECH100
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECH124
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ1024ECH144
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D0FFFFF (1024 KB)
PIC32MZ2048ECG064
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
PIC32MZ2048ECG100
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
PIC32MZ2048ECG124
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
PIC32MZ2048ECG144
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
PIC32MZ2048ECH064
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
PIC32MZ2048ECH100
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
PIC32MZ2048ECH124
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
PIC32MZ2048ECH144
512
4096
0x1FC00000-0x1FC13FFF (80 KB) 0x1D000000-0x1D1FFFFF (2048 KB)
DS61145L-page 12
 2007-2013 Microchip Technology Inc.
PIC32
5.2
4-wire JTAG Details
The 4-wire interface uses standard JTAG (IEEE
1149.1-2001) interface signals.
•
•
•
•
TCK: Test Clock – drives data in/out
TMS: Test Mode Select – selects operational mode
TDI: Test Data In – data into the device
TDO: Test Data Out – data out of the device
FIGURE 5-3:
Since only one data line is available, the protocol is
necessarily serial (like SPI). The clock input is at the
TCK pin. Configuration is performed by manipulating a
state machine bit by bit through the TMS pin. One bit of
data is transferred in and out per TCK clock pulse at the
TDI and TDO pins, respectively. Different instruction
modes can be loaded to read the chip ID or manipulate
chip functions.
Data presented to TDI must be valid for a chip-specific
setup time before, and hold time, after the rising edge
of TCK. TDO data is valid for a chip-specific time after
the falling edge of TCK (refer to Figure 5-3).
4-WIRE JTAG INTERFACE
TCK
TMS
‘1’
‘1’
‘0’
‘0’
‘1’
TDI
iLSb
iMSb
TDO
oLSb
oMSb
 2007-2013 Microchip Technology Inc.
‘1’
‘0’
DS61145L-page 13
PIC32
5.3
2-wire ICSP Details
of PGECx, while TDO is driven on the falling edge of
PGECx. The 4-phase ICSP mode is used for both read
and write data transfers.
In ICSP mode, the 2-wire ICSP signals are time
multiplexed into the 2-wire to 4-wire block. The 2-wire
to 4-wire block then converts the signals to look like a
4-wire JTAG port to the TAP controller.
5.3.2
In 2-phase ICSP mode, the TMS and TDI device pins
are multiplexed into PGEDx in two clocks (see
Figure 5-5). The LSb is shifted first; and TDI and TMS
are sampled on the falling edge of PGECx. There is no
TDO output provided in this mode. The 2-phase ICSP
mode was designed to accelerate 2-wire, write-only
transactions.
There are two possible modes of operation:
• 4-phase ICSP
• 2-phase ICSP
5.3.1
4-PHASE ICSP
In 4-phase ICSP mode, the TDI, TDO and TMS device
pins are multiplexed onto PGEDx in four clocks (see
Figure 5-4). The Least Significant bit (LSb) is shifted
first; and TDI and TMS are sampled on the falling edge
FIGURE 5-4:
2-PHASE ICSP
Note:
The packet is not actually executed until the
first clock of the next packet. To enter 2-wire,
2-phase ICSP mode, the TDOEN bit
(DDPCON<0>) must be set to ‘0’.
2-WIRE, 4-PHASE
TCK
TMS
‘1’
‘1’
‘0’
‘0’
‘1’
TDI
IR0
IR4
TDO
1
X
‘1’
‘0’
‘1’
‘0’
PGECx
PGEDx
FIGURE 5-5:
pTDO = 1
TMS = 0
TDI = IR0
nTDO = 0
2-WIRE, 2-PHASE
TCK
TMS
‘1’
‘1’
‘0’
‘0’
‘1’
TDI
IR0
IR4
TDO
1
X
PGECx
PGEDx
DS61145L-page 14
TDI = IR0
TMS = 0
 2007-2013 Microchip Technology Inc.
PIC32
6.0
PSEUDO OPERATIONS
6.1
SetMode Pseudo Operation
To simplify the description of programming details, all
operations will be described using pseudo operations.
There are several functions used in the pseudocode
descriptions. These are used either to make the
pseudocode
more
readable,
to
abstract
implementation-specific behavior, or both. When
passing parameters with pseudo operation, the
following syntax will be used:
Format:
SetMode (mode)
• 5’h0x03 – send 5-bit hexadecimal value of 3
• 6’b011111 – send 6-bit binary value of 31
Restrictions:
None.
These functions are defined in this section, and include
the following operations:
•
•
•
•
•
Purpose:
To set the EJTAG state machine to a specific state.
Description:
The value of mode is clocked into the device on
signal TMS. TDI is set to a ‘0’ and TDO is ignored.
Example:
SetMode (6’b011111)
SetMode (mode)
SendCommand (command)
oData = XferData (iData)
oData = XferFastData (iData)
oData = XferInstruction (instruction)
FIGURE 6-1:
SetMode 4-WIRE
Mode = 6’b011111
TCK
TMS
‘1’
‘1’
‘1’
‘1’
‘0’
‘1’
TDI
TDO
FIGURE 6-2:
SetMode 2-WIRE
Mode = 6’b011111
PGECx
PGEDx
TDI = 0
TMS = 1
 2007-2013 Microchip Technology Inc.
TDO = 1
TDI = 0
TMS = 0
TDO = x
DS61145L-page 15
PIC32
6.2
SendCommand Pseudo Operation
Format:
SendCommand (command)
Purpose:
To send a command to select a specific TAP register.
Description (in sequence):
1.
2.
3.
4.
The TMS Header is clocked into the device to
select the Shift IR state
The command is clocked into the device on
TDI while holding signal TMS low.
The last Most Significant bit (MSb) of the
command is clocked in while setting TMS
high.
The TMS Footer is clocked in on TMS to return
the TAP controller to the Run/Test Idle state.
Restrictions:
None.
Example:
SendCommand (5’h0x07)
FIGURE 6-3:
SendCommand 4-WIRE
TMS Header = 1100
Command = 5’h0x07
Command (MSb)
+ TMS = 1
TMS Footer = 10
TCK
‘1’
TMS
‘1’
‘0’
‘0’
TDI
‘1’
x
1
FIGURE 6-4:
‘0’
iMSb
iLSb
TDO
‘1’
SendCommand 2-WIRE (4-PHASE)
TMS Header = 1100
Command (5’h0x07) + TMS = 0 Command (MSb) + TMS = 1
TMS Footer = 10
PGECx
PGEDx
TDI = 0
TMS = 1
DS61145L-page 16
TDO = x
TDI = iLSb TMS = 0
TDO = x
TDI = iMSb TMS = 1
TDO = x
TDI = 0
TMS = 1
TDO = x
 2007-2013 Microchip Technology Inc.
PIC32
6.3
XferData Pseudo Operation
Format:
oData = XferData (iData)
Purpose:
To clock data to and from the register selected by the
command.
Description (in sequence):
1. The TMS Header is clocked into the device to
select the Shift DR state.
2. The data is clocked in/out of the device on
TDI/TDO while holding signal TMS low.
3. The last MSb of the data is clocked in/out
while setting TMS high.
4. The TMS Footer is clocked in on TMS to return
the TAP controller to the Run/Test Idle state.
Restrictions:
None.
Example:
oData = XferData (32’h0x12)
FIGURE 6-5:
XferData 4-WIRE
TMS Header = 100
Data (32’h0x12) Data (MSb) + TMS =1
TMS Footer = 10
TCK
TMS
‘1’
‘0’
‘0’
TDI
iLSb
iMSb
TDO
oLSb
oMSb
FIGURE 6-6:
‘0’
‘1’
‘1’
XferData 2-WIRE (4-PHASE)
TMS Header = 100
PGEC
PGED
TDI = 0 TMS = 1
TDO = X
TDI = 0
Data (31’h0x12) + TMS = 0
TDI = iLSb TMS = 0
TMS = 0
TDI = 0
TDO = X
TMS = 0
TDO = oLSb
Data (MSb) + TMS Footer = 1
TDI = iMSb TMS = 1
TDO =...
oLSb+1
TDO = X
TMS Footer = 10
TDI = 0 TMS = 1
 2007-2013 Microchip Technology Inc.
TDO = X
TDI = 0
TMS = 0
TDO = X
DS61145L-page 17
PIC32
6.4
XferFastData Pseudo Operation
Restrictions:
The SendCommand (ETAP_FASTDATA) must be sent
first to select the Fastdata register, as shown in
Example 6-1. See Table 19-4 for a detailed descriptions
of commands.
Format:
oData = XferFastData (iData)
Purpose:
To quickly send 32 bits of data in/out of the device.
Note:
Description (in sequence):
1. The TMS Header is clocked into the device to
select the Shift DR state.
Note:
2.
EXAMPLE 6-1:
SendCommand
// Select the Fastdata Register
SendCommand(ETAP_FASTDATA)
// Send/Receive 32-bit Data
oData = XferFastData(32’h0x12)
The input value of the PrAcc bit, which is ‘0’, is
clocked in.
Note:
3.
For 2-wire (4-phase) – on the last clock,
the oPrAcc bit is shifted out on TDO while
clocking in the TMS Header. If the value of
oPrAcc is not ‘1’, the whole operation
must be repeated.
The 2-phase XferData is only used when
talking to the PE. See Section 16.0 “The
Programming Executive” for more
information.
For 2-wire (4-phase) – the TDO during this
operation will be the LSb of output data.
The rest of the 31 bits of the input data are
clocked in and the 31 bits of output data
are clocked out. For the last bit of the input
data, the TMS Footer = 1 is set.
TMS Footer = 10 is clocked in to return the TAP
controller to the Run/Test Idle state.
FIGURE 6-7:
XferFastData 4-WIRE
TMS Header = 100
PrAcc
Data (32’h0x12)
Data (MSb) + TMS = 1
TMS Footer = 10
TCK
TMS
‘1’
‘0’
‘0’
‘1’
‘1’
TDI
‘0’
iLSb
iMSb
TDO
‘1’
oLSb
oMSb
FIGURE 6-8:
‘0’
XferFastData 2-WIRE (2-phase)
TMS Header = 100
PrAcc
Data (32’h0x12)
Data (MSb) TMS = 1
TMS Footer = 10
PGECx
PGEDx
TDI = X TMS = 1
DS61145L-page 18
TDI = 0 TMS = 0 TDI =
iLSb
TMS = 0
TDI =
MSb
TMS = 1 TDI = X TMS = 1
 2007-2013 Microchip Technology Inc.
PIC32
FIGURE 6-9:
XferFastData 2-WIRE (4-PHASE)
TMS Header = 100
PGECx
PGEDx
TDI = 0 TMS = 1
TDO = X
TDI = 0 TMS = 0
TMS = 0
TDI = 0
Data (31’h12) + TMS = 0
PrAcc
TDI = 0
TDO = X
TDO = oLSb
TDI = iLSb TMS = 0
TDO = oLSb+1
TMS = 0
TDO = oPrAcc
Data (MSb) + TMS Footer = 1
TDI = iMSb
TMS = 1
TDO = X
TMS Footer = 10
TDI = 0 TMS = 1
TDO = X
 2007-2013 Microchip Technology Inc.
TDI = 0
TMS = 0
TDO = X
DS61145L-page 19
PIC32
6.5
XferInstruction Pseudo
Operation
Format:
XferInstruction (instruction)
Purpose:
To send 32 bits of data for the device to execute.
Description:
The instruction is clocked into the device and then
executed by CPU.
Restrictions:
The device must be in Debug mode.
EXAMPLE 6-2:
XferInstruction
XferInstruction (instruction)
{
// Select Control Register
SendCommand(ETAP_CONTROL);
// Wait until CPU is ready
// Check if Processor Access bit (bit 18) is set
do {
controlVal = XferData(32’h0x0004C000);
} while( PrAcc(contorlVal<18>) is not ‘1’ );
// Select Data Register
SendCommand(ETAP_DATA);
// Send the instruction
XferData(instruction);
// Tell CPU to execute instruction
SendCommand(ETAP_CONTROL);
XferData(32’h0x0000C000);
}
DS61145L-page 20
 2007-2013 Microchip Technology Inc.
PIC32
7.0
ENTERING 2-WIRE ENHANCED
ICSP MODE
The programming voltage applied to MCLR is VIH,
which is essentially VDD, in PIC32 devices. There is no
minimum time requirement for holding at VIH. After VIH
is removed, an interval of at least P18 must elapse
before presenting the key sequence on PGEDx.
To use the 2-wire PGEDx and PGECx pins for programming, they must be enabled. Note that any pair of
programming pins available on a particular device may
be used, however, they must be used as a pair. PGED1
must be used with PGEC1, and so on.
Note:
The key sequence is a specific 32-bit pattern: ‘0100
1101 0100 0011 0100 1000 0101 0000’ (the
acronym ‘MCHP’, in ASCII). The device will enter
Program/Verify mode only if the key sequence is valid.
The MSb of the Most Significant nibble must be shifted
in first.
If using the 4-wire JTAG interface, the
following procedure is not necessary.
The following steps are required to enter 2-wire
Enhanced ICSP mode:
1.
2.
3.
Once the key sequence is complete, VIH must be
applied to MCLR and held at that level for as long as
the 2-wire Enhanced ICSP interface is to be
maintained. An interval of at least time P19 and P7
must elapse before presenting data on PGEDx. Signals
appearing on PGEDx before P7 has elapsed will not be
interpreted as valid.
The MCLR pin is briefly driven high, then low.
A 32-bit key sequence is clocked into PGEDx.
MCLR is then driven high within a specified
period of time and held.
Please refer to Section 20.0 “AC/DC Characteristics
and Timing Requirements” for timing requirements.
FIGURE 7-1:
Upon successful entry, the programming operations
documented in subsequent sections can be performed.
While in 2-wire Enhanced ICSP mode, all unused I/Os
are placed in the high-impedance state.
ENTERING ENHANCED ICSP™ MODE
P20
P6
P14
MCLR
P19
P7
VIH
VIH
VDD
Program/Verify Entry Code = 0x4D434850
0
b31
PGEDx
1
b30
0
b29
0
b28
1
...
b27
0
b3
0
b2
0
b1
0
b0
PGECx
P18
 2007-2013 Microchip Technology Inc.
P1A
P1B
DS61145L-page 21
PIC32
8.0
CHECK DEVICE STATUS
Before a device can be programmed, the programmer
must check the status of the device to ensure that it is
ready to receive information.
FIGURE 8-1:
CHECK DEVICE STATUS
8.1
4-wire Interface
Four-wire JTAG programming is a Mission mode
operation and therefore the setup sequence to begin
programing should be done while asserting MCLR.
Holding the device in Reset prevents the processor
from executing instructions or driving ports.
The following steps are required to check the device
status using the 4-wire interface:
Set MCLR low
4-wire
SetMode (6’b011111)
Set MCLR pin low.
SetMode (6’b011111) to force the Chip TAP
controller into Run Test/Idle state.
SendCommand (MTAP_SW_MTAP).
SendCommand (MTAP_COMMAND).
statusVal = XferData (MCHP_STATUS).
If CFGRDY (statusVal<3>) is not ‘1’ and
FCBUSY (statusVal<2>) is not ‘0’ GOTO step 5.
1.
2.
3.
4.
5.
6.
Note:
SendCommand (MTAP_SW_MTAP)
SendCommand (MTAP_COMMAND)
statusVal = XferData (MCHP_STATUS)
No
FCBUSY = 0
CFGRDY = 1
Yes
Done
8.2
2-wire Interface
The following steps are required to check the device
status using the 2-wire interface:
1.
2.
3.
4.
5.
SetMode (6’b011111) to force the Chip TAP
controller into Run Test/Idle state.
SendCommand (MTAP_SW_MTAP).
SendCommand (MTAP_COMMAND).
statusVal = XferData (MCHP_STATUS).
If CFGRDY (statusVal<3>) is not ‘1’ and
FCBUSY (statusVal<2>) is not ‘0’, GOTO
step 4.
Note:
DS61145L-page 22
If using the 4-wire interface, the oscillator
source, as selected by the Configuration
Words, must be present to access flash
memory. In an unprogrammed device, the
oscillator source is the internal FRC allowing for flash memory access. If the Configuration Words have been reprogrammed
selecting an external oscillator source
then it must be present for flash memory
access. See the “Special Features”
chapter in the specific device data sheet
for details regarding oscillator selection
using the Configuration Word settings.
If CFGRDY and FCBUSY do not come to
the proper state within 10 ms, the
sequence may have been executed
incorrectly or the device is damaged.
 2007-2013 Microchip Technology Inc.
PIC32
9.0
ERASING THE DEVICE
Before a device can be programmed, it must be
erased. The erase operation writes all ‘1s’ to the Flash
memory and prepares it to program a new set of data.
Once a device is erased, it can be verified by
performing a “Blank Check” operation. See
Section 9.1 “Blank Check” for more information.
The procedure for erasing program memory (Program,
Boot, and Configuration memory) consists of selecting
the MTAP and sending the MCHP_ERASE command.
The programmer then must wait for the erase operation
to complete by reading and verifying bits in the
MCHP_STATUS value. Figure 9-1 illustrates the process
for performing a Chip Erase.
Note:
The Device ID memory locations are readonly and cannot be erased. Therefore,
Chip Erase has no effect on these memory
locations.
FIGURE 9-1:
ERASE DEVICE
Select MTAP
SendCommand (MTAP_SW_MTAP)
The following steps are required to erase a target
device:
SendCommand (MTAP_SW_MTAP).
SendCommand (MTAP_COMMAND).
XferData (MCHP_ERASE).
Delay 1 ms.
statusVal = XferData (MCHP_STATUS).
If CFGRDY (statusVal<3>) is not ‘1’ and
FCBUSY (statusVal<2>) is not ‘0’, GOTO to
step 4.
1.
2.
3.
4.
5.
6.
Note:
9.1
The Chip Erase operation is a self-timed
operation. If the FCBUSY and CFGRDY
bits do not become properly set within the
specified Chip Erase time, the sequence
may have been executed incorrectly or
the device is damaged.
Blank Check
The term “Blank Check” implies verifying that the
device has been successfully erased and has no
programmed memory locations. A blank or erased
memory location always reads as ‘1’.
The device Configuration registers are ignored by the
Blank Check. Additionally, all unimplemented memory
space should be ignored from the Blank Check.
Put MTAP in Command Mode
SendCommand (MTAP_COMMAND)
Issue Chip Erase Command
XferData (MCHP_ERASE)
1 millisecond Delay
Read Erase Status
statusVal = XferData (MCHP_STATUS)
No
FCBUSY = 0
CFGRDY = 1
Yes
Done
 2007-2013 Microchip Technology Inc.
DS61145L-page 23
PIC32
10.0
ENTERING SERIAL
EXECUTION MODE
10.1
Before a device can be programmed, it must be
placed in Serial Execution mode. The procedure for
entering Serial Execution mode consists of verifying
that the device is not code-protected. If the device is
code-protected, a Chip Erase must be performed.
See Section 9.0 “Erasing the Device” for details.
FIGURE 10-1:
ENTERING SERIAL
EXECUTION MODE
Select MTAP
Put MTAP in Command Mode
SendCommand (MTAP_COMMAND)
Cannot Enter
Must Erase First
Yes
Assert Reset
XferData (MCHP_ASSERT_RST)
2-wire
Select ETAP
SendCommand (MTAP_SW_ETAP)
Put CPU in Serial Exec Mode
SendCommand (ETAP_EJTAGBOOT)
Select MTAP
SendCommand (MTAP_SW_MTAP)
1.
2.
3.
4.
It is assumed that MCLR has been driven
low from the previous Check Device
Status step (see Figure 8-1).
SendCommand (MTAP_SW_MTAP).
SendCommand (MTAP_COMMAND).
statusVal = XferData (MCHP_STATUS).
If CPS (statusVal<7>) is not ‘1’, the device must
be erased first.
SendCommand (MTAP_SW_ETAP).
SendCommand (ETAP_EJTAGBOOT).
Set MCLR high.
2-wire Interface
The following steps are required to enter Serial
Execution mode:
statusVal = XferData (MCHP_STATUS)
No
Note:
10.2
Read Code-Protect Status
CPS = 1
The following steps are required to enter Serial
Execution mode:
5.
6.
7.
SendCommand (MTAP_SW_MTAP)
4-wire Interface
SendCommand (MTAP_SW_MTAP).
SendCommand (MTAP_COMMAND).
statusVal = XferData (MCHP_STATUS).
If CPS (statusVal<7>) is not ‘1’, the device must
be erased first.
5. XferData (MCHP_ASSERT_RST).
6. SendCommand (MTAP_SW_ETAP).
7. SendCommand (ETAP_EJTAGBOOT).
8. SendCommand (MTAP_SW_MTAP).
9. SendCommand (MTAP_COMMAND).
10. XferData (MCHP_DE_ASSERT_RST).
11. XferData (MCHP_FLASH_ENABLE) – This step is
not required for PIC32MZ EC family devices.
12. SendCommand (MTAP_SW_ETAP).
1.
2.
3.
4.
Set MCLR High
4-wire
Put MTAP in Command Mode
SendCommand (MTAP_COMMAND)
Release Reset
XferData (MCHP_DE_ASSERT_RST)
Enable Flash
XferData (MCHP_FLASH_EN)
Not required for PIC32MZ EC devices
Select ETAP
SendCommand (MCHP_SW_ETAP)
2-wire
DS61145L-page 24
 2007-2013 Microchip Technology Inc.
PIC32
11.0
DOWNLOADING THE
PROGRAMMING EXECUTIVE
(PE)
The PE resides in RAM memory and is executed by the
CPU to program the device. The PE provides the
mechanism for the programmer to program and verify
PIC32 devices using a simple command set and
communication protocol. There are several basic
functions provided by the PE:
•
•
•
•
•
•
Read memory
Erase memory
Program memory
Blank check
Read executive firmware revision
Get the Cyclic Redundancy Check (CRC) of Flash
memory locations
The PE performs the low-level tasks required for
programming and verifying a device. This allows the
programmer to program the device by issuing the
appropriate commands and data. A detailed
description for each command is provided in
Section 16.2 “The PE Command Set”.
The PE uses the device’s data RAM for variable
storage and program execution. After the PE has run,
no assumptions should be made about the contents of
data RAM.
After the PE is loaded into the data RAM, the PIC32
family can be programmed using the command set
shown in Table 16-1.
FIGURE 11-1:
DOWNLOADING THE PE
Write the PE Loader to RAM
Table 11-1 lists the steps that are required to download
the PE.
TABLE 11-1:
DOWNLOAD THE
PE
Operation
Operand
Step 1:
lui
ori
lui
ori
sw
Initialize BMXCON to 0x1F0040. The instruction
sequence executed by the PIC32 core is:
a0,0xbf88
a0,a0,0x2000 /* address of BMXCON */
a1,0x1f
a1,a1,0x40
/* $a1 has 0x1f0040 */
a1,0(a0)
/* BMXCON initialized */
XferInstruction 0x3c04bf88
XferInstruction 0x34842000
XferInstruction 0x3c05001f
XferInstruction 0x34a50040
XferInstruction 0xac850000
Step 2:
li
sw
Initialize BMXDKPBA to 0x800. The instruction
sequence executed by the PIC32 core is:
a1,0x800
a1,16(a0)
XferInstruction 0x34050800
XferInstruction 0xac850010
Step 3:
lw
sw
sw
Initialize BMXDUDBA and BMXDUPBA to the
value of BMXDRMSZ. The instruction sequence
executed by the PIC32 core is:
a1,64(a0)
/* load BMXDMSZ */
a1,32(a0)
a1,48(a0)
XferInstruction 0x8C850040
XferInstruction 0xac850020
XferInstruction 0xac850030
Step 4:
Set up PIC32 RAM address for PE. The instruction sequence executed by the PIC32 core is:
lui a0,0xa000
ori a0,a0,0x800
XferInstruction 0x3c04a000
XferInstruction 0x34840800
Step 5:
Load the PE
Loading the PE in the memory is a two step process:
1.
2.
Load the PE loader in the data RAM. (The PE
loader loads the PE binary file in the proper location of the data RAM, and when done, jumps to
the programming exec and starts executing it.)
Feed the PE binary to the PE loader.
lui
ori
sw
addiu
Load the PE_Loader. Repeat this step (Step 5)
until the entire PE_Loader is loaded in the PIC32
memory. In the operands field, “<PE_loader
hi++>” represents the MSbs 31 through 16 of the
PE loader op codes shown in Table 11-2. Likewise, “<PE_loader lo++>” represents the LSbs
15 through 0 of the PE loader op codes shown in
Table 11-2. The “++” sign indicates that when
these operations are performed in succession,
the new word is to be transferred from the list of
op codes of the LPE Loader shown in Table 11-2.
The instruction sequence executed by the PIC32
core is:
a2, <PE_loader hi++>
a0,a0, <PE_loader lo++>
a2,0(a0)
a0,a0,4
XferInstruction (0x3c06 <PE_loader hi++> )
XferInstruction (0x34c6 <PE_loader lo++> )
XferInstruction 0xac860000
XferInstruction 0x24840004
 2007-2013 Microchip Technology Inc.
DS61145L-page 25
PIC32
TABLE 11-1:
DOWNLOAD THE
PE (CONTINUED)
Operation
Step 6:
lui
ori
jr
nop
Operand
Jump to the PE_Loader. The instruction
sequence executed by the PIC32 core is:
t9,0xa000
t9,t9,0x800
t9
TABLE 11-2:
PE LOADER OP CODES
Op code
Instruction
0x3c07dead
lui
a3, 0xdead
0x3c06ff20
lui
a2, 0xff20
0x3c05ff20
lui
al, 0xff20
herel:
0x8cc40000
lw
XferInstruction 0x3c19a000
0x8cc30000
lw
v1, 0 (a2)
XferInstruction 0x37390800
0x1067000b
beq
v1, a3, <here3>
XferInstruction 0x03200008
0x00000000
nop
XferInstruction 0x00000000
0x1060fffb
beqz
Step 7:
0x00000000
nop
0x8ca20000
lw
v0, 0 (a1)
0x2463ffff
addiu
v1, v1, -1
0xac820000
sw
v0, 0 (a0)
0x24840004
addiu
a0, a0, 4
0x1460fffb
bnez
v1, <here2>
0x00000000
nop
0x1000fff3
b
0x00000000
nop
0x3c02a000
lui
v0, 0xa000
0x34420900
ori
v0, v0, 0x900
0x00400008
jr
v0
0x00000000
nop
Load the PE using the PE_Loader. Repeat the
last instruction of this step (Step 7) until the entire
PE is loaded into the PIC32 memory. In this step,
you are given an Intel® Hex format file of the PE
that you will parse and transfer a number of 32-bit
words at a time to the PIC32 memory (refer to
Appendix B: “Hex File Format”). The instruction
sequence executed by the PIC32 is shown in the
“Instruction” column of Table 11-2: PE Loader Op
Codes.
SendCommand
ETAP_FASTDATA
XferFastData
PE_ADDRESS (Address of PE
program block from PE Hex
file)
XferFastData
XferFastData
Step 8:
PE_SIZE (Number of 32-bit
words of the program block
from PE Hex file)
PE software op code from PE
Hex file (PE Instructions)
a0, 0 (a2)
v1, <here1>
here2:
<here1>
here3:
Jump to the PE. Magic number (0xDEAD0000)
instructs the PE_Loader that the PE is completely
loaded into the memory. When the PE_Loader
sees the magic number, it jumps to the PE.
XferFastData
0x00000000
XferFastData
0xDEAD0000
DS61145L-page 26
 2007-2013 Microchip Technology Inc.
PIC32
12.0
DOWNLOADING A DATA
BLOCK
To program a block of data to the PIC32 device, it must
first be loaded into SRAM.
12.1
Without the PE
To program a block of memory without the use of the
PE, the block of data must first be written to RAM. This
method requires the programmer to transfer the actual
machine instructions with embedded (immediate) data
for writing the block of data to the devices internal RAM
memory.
FIGURE 12-1:
DOWNLOADING DATA
WITHOUT THE PE
The following steps are required to download a block of
data:
1.
2.
XferInstruction (op code).
Repeat Step 1 until the last instruction is
transferred to CPU.
TABLE 12-1:
Op code
Step 1:
Step 3:
12.2
Write 32-bit Immediate
Data to bufAddr
Increment bufAddr
lui
$s0, 0xA000;
Write the entire row of data to be programmed
into system SRAM.
3c08<DATA>
3508<DATA>
ae08<OFFSET>
bufAddr = RAM Buffer Address
Instruction
Initialize SRAM Base Address to 0xA0000000.
3c10a000
Step 2:
DOWNLOAD DATA OP
CODES
lui
ori
sw
$t0, <DATA(31:16)>;
$t0, <DATA(15:0)>;
$t0, <OFFSET>($s0);
// OFFSET increments by 4
Repeat Step 2 until one row of data has been
loaded.
With the PE
When using the PE the steps in Section 12.0 “Downloading a Data Block” and Section 13.0 “Initiating a
Flash Row Write” are handled in two single commands:
ROW_PROGRAM and PROGRAM.
The ROW_PROGRAM command programs a single row of
Flash data, while the PROGRAM command programs
multiple rows of Flash data. Both of these commands
are documented in Section 16.0 “The Programming
Executive”.
No
Done
 2007-2013 Microchip Technology Inc.
DS61145L-page 27
PIC32
13.0
Note:
INITIATING A FLASH ROW
WRITE
Certain PIC32 devices have available
ECC memory. When the ECC feature is
used, Flash memory must be programmed in groups of four 32-bit words
using four, 32-bit word alignment. If ECC
is dynamically used, the programming
method determines when the feature is
used. ECC is not enabled for words programmed with the single word programming command. ECC is enabled for words
programmed in groups of four, either with
the quad word or row programming commands. Failure to adhere to these methods can result in ECC DED errors during
run-time. See the specific device data
sheet for details regarding ECC use and
configuration.
Once a row of data has been downloaded into the
device’s SRAM, the programming sequence must be
initiated to write the block of data to Flash memory.
See Table 13-1 for the op code and instructions for
initiating a Flash row write.
13.1
With the PE
13.2
Without the PE
Flash memory write operations are controlled by the
NVMCON register. Programming is performed by
setting NVMCON to select the type of write operation
and initiating the programming sequence by setting the
WR control bit (NVMCON<15>).
FIGURE 13-1:
INITIATING FLASH WRITE
WITHOUT THE PE
Unprotect Control Registers
Select Write Operation
Load Addresses in NVM Registers
Unlock Flash Controller
Start Operation
Done
When using the PE, the data is immediately written to
the Flash memory from the SRAM. No further action is
required.
DS61145L-page 28
 2007-2013 Microchip Technology Inc.
PIC32
The following steps are required to initiate a Flash
write:
1.
2.
XferInstruction (op code).
Repeat Step 1 until the last instruction is
transferred to the CPU.
TABLE 13-1:
Op Code
Step 1:
lui a0,0xbf80
ori a0,a0,0x0600
ori s3,$0,0x8080
sw s1,16(a0)
sw s2,16(a0)
sw s3,144(a0)
nop
All PIC32 devices: Set the NVMADDR register
with the address of the Flash row to be
programmed.
3c08<ADDR>
3508<ADDR>
ac880020
Step 5:
lui a0,0xbf80
ori a0,a0,0xf400
PIC32MZ EC devices only: Unlock and disable
Boot Flash write protection.
AC910010
AC920010
AC950090
00000000
Step 4:
a1,$0,0x4003
a2,$0,0x8000
a3,$0,0x4000
s1,0xaa99
s1,s1,0x6655
s2,0x5566
s2,s2,0x99aa
s0,0x0000
PIC32MZ EC devices only: Set register a0 to the
base address of the NVM register (0xBF80_0600).
Register s3 is set for the value used to disable
write protection in NVMBPB.
3c04bf80
34840600
34158080
Step 3:
ori
ori
ori
lui
ori
lui
ori
lui
PIC32MX devices only: Set register a0 to the
base address of the NVM register (0xBF80_F400).
3c04bf80
3484f400
Step 2:
Instruction
All PIC32 devices: Initialize constants. Registers
a1, a2, and a3 are set for WREN = 1 or
NVMOP<3:0> = 0011, WR = 1 and WREN = 1,
respectively. Registers s1 and s2 are set for the
unlock data values and S0 is initialized to ‘0’.
34054003
34068000
34074000
3c11aa99
36316655
3c125566
365299aa
3c100000
Step 2:
INITIATE FLASH ROW WRITE
OP CODES FOR PIC32
DEVICES
lui t0,<FLASH_ROW_ADDR(31:16)>
ori t0,t0,<FLASH_ROW_ADDR(15:0)>
sw t0,32(a0)
PIC32MX devices only: Set the NVMSRCADDR
register with the physical source SRAM address
(offset is 64).
3610<ADDR>
ac900040
ori s0,s0,<RAM_ADDR(15:0)>
sw s0,64(a0)
 2007-2013 Microchip Technology Inc.
TABLE 13-1:
Op Code
Step 5:
here1:
lw t0,0(a0)
andi t0,t0,0x0800
bne t0,$0,here1
nop
All PIC32 devices: Unlock the NVMCON register
and start the write operation.
ac910010
ac920010
ac860008
Step 9:
sw a1,0(a0)
delay (6 μs)
PIC32MX devices only: Poll the LVDSTAT
register.
8C880000
31080800
1500fffd
00000000
Step 8:
ori s0,s0,<RAM_ADDR(15:0)>
sw s0,112(a0)
All PIC32 devices: Set up the NVMCON register
for write operation.
ac850000
Step 7:
Instruction
PIC32MZ EC devices only: Set the
NVMSRCADDR register with the physical source
SRAM address (offset is 112).
3610<ADDR>
ac900040
Step 6:
INITIATE FLASH ROW WRITE
OP CODES FOR PIC32
DEVICES (CONTINUED)
sw s1,16(a0)
sw s2,16(a0)
sw a2,8(a0)
All PIC32 devices: Loop until the WR bit
(NVMCON<15>) is clear.
8c880000
01064024
1500fffd
00000000
here2:
lw t0,0(a0)
and t0,t0,a2
bne t0,$0,here2
nop
Step 10: All PIC32 devices: Wait at least 500 ns after
seeing a ‘0’ in the WR bit (NVMCON<15>) before
writing to any of the NVM registers. This requires
inserting a NOP in the execution. The following
example assumes that the core is executing at
8 MHz; therefore, four NOP instructions equate to
500 ns.
00000000
00000000
00000000
00000000
nop
nop
nop
nop
Step 11: All PIC32 devices: Clear the WREN bit
(NVMCONM<14>).
ac870004
sw a3,4(a0)
Step 12: All PIC32 devices: Check the WRERR bit
(NVMCON<13>) to ensure that the program
sequence has completed successfully. If an error
occurs, jump to the error processing routine.
lw t0,0(a0)
8c880000
andi t0,zero,0x2000
30082000
1500<ERR_PROC> bne t0, $0, <err_proc_offset>
nop
00000000
DS61145L-page 29
PIC32
14.0
VERIFY DEVICE MEMORY
The verify step involves reading back the code memory
space and comparing it against the copy held in the
programmer’s buffer. The Configuration registers are
verified with the rest of the code.
Note:
14.1
Because the Configuration registers
include the device code protection bit,
code memory should be verified immediately after writing (if code protection is
enabled). This is because the device will
not be readable or verifiable if a device
Reset occurs after the code-protect bit
has been cleared.
14.2
Verifying Memory without the PE
Reading from Flash memory is performed by executing
a series of read accesses from the Fastdata register.
Table 19-4 shows the EJTAG programming details,
including the address and op code data for performing
processor access operations.
FIGURE 14-2:
VERIFYING MEMORY
WITHOUT THE PE
Read Memory Location
Verifying Memory with the PE
Verify Location
Memory verify is performed using the GET_CRC
command, as shown in Table 16-2.
FIGURE 14-1:
VERIFYING MEMORY
WITH THE PE
No
Done
Issue Verify Command
The following steps are required to verify memory:
Receive Response
1.
2.
3.
The following steps are required to verify memory using
the PE:
1.
2.
3.
4.
XferFastData (GET_CRC).
XferFastData (start_Address).
XferFastData (length).
valCkSum = XferFastData (32’h0x00).
Verify that valCkSum matches the checksum of the
copy held in the programmer’s buffer.
4.
XferInstruction (op code).
Repeat Step 1 until the last instruction is
transferred to the CPU.
Verify that valRead matches the copy held in the
programmer’s buffer.
Repeat Steps 1-3 for each memory location.
TABLE 14-1:
Op code
Step 1:
Initialize some constants.
3c13ff20
Step 2:
lui $t0,<FLASH_WORD_ADDR(31:16)>
ori $t0,<FLASH_WORD_ADDR(15:0)>
Write to Fastdata location.
8d090000
ae690000
DS61145L-page 30
lui $s3, 0xFF20
Read memory Location.
3c08<ADDR>
3508<ADDR>
Step 3:
VERIFY DEVICE OP CODES
Instruction
lw $t1, 0($t0)
sw $t1, 0($s3)
Step 4:
Read data from Fastdata register 0xFF200000.
Step 5:
Repeat Steps 2-4 until all configuration locations
are read.
 2007-2013 Microchip Technology Inc.
PIC32
15.0
EXITING PROGRAMMING
MODE
Once a device has been properly programmed, the
device must be taken out of Programming mode to start
proper execution of its new program memory contents.
15.1
4-wire Interface
15.2
Exiting Programming mode is done by removing VIH
from MCLR, as illustrated in Figure 15-2. The only
requirement for exit is that an interval, P16, should
elapse between the last clock and program signals on
PGECx and PGEDx before removing VIH.
FIGURE 15-2:
Exiting Programming mode is done by removing VIH
from MCLR, as illustrated in Figure 15-1. The only
requirement for exit is that an interval, P16, should
elapse between the last clock and program signals
before removing VIH.
FIGURE 15-1:
2-wire Interface
2-WIRE EXIT
PROGRAMMING MODE
P16
P17
VIH
MCLR
VDD
4-WIRE EXIT
PROGRAMMING MODE
PGEDx
P16
VIH
PGECx
MCLR
PGEDx = Input
VDD
The following list provides the actual steps required to
exit Programming mode:
TCK
TMS
‘1’
‘1’
‘0’
TDI
TDO
1.
2.
3.
4.
SetMode (5’b11111).
Assert MCLR.
Issue a clock pulse on PGECx.
Remove power (if the device is powered).
The following steps are required to exit Programming
mode:
1.
2.
3.
SetMode (5’b11111).
Assert MCLR.
Remove power (if the device is powered).
 2007-2013 Microchip Technology Inc.
DS61145L-page 31
PIC32
16.0
THE PROGRAMMING
EXECUTIVE
Note: The Programming Executive (PE) is included
with your installation of MPLAB® IDE. To
download the appropriate PE file for your
device, please visit the related product page
on the Microchip web site.
16.1
PE Communication
The programmer and the PE have a master-slave
relationship, where the programmer is the master
programming device and the PE is the slave.
All communication is initiated by the programmer in the
form of a command. The PE is able to receive only one
command at a time. Correspondingly, after receiving
and processing a command, the PE sends a single
response to the programmer.
16.1.1
2-WIRE ICSP EJTAG RATE
In Enhanced ICSP mode, the PIC32 family devices
operate from the internal Fast RC oscillator, which has
a nominal frequency of 8 MHz.
16.1.2
COMMUNICATION OVERVIEW
The programmer and the PE communicate using the
EJTAG Address, Data and Fastdata registers. In particular, the programmer transfers the command and data
to the PE using the Fastdata register. The programmer
receives a response from the PE using the Address
and Data registers. The pseudo operation of receiving
a response is shown in the GetPEResponse pseudo
operation below:
Format:
response = GetPEResponse()
Purpose:
Enables the programmer to receive the 32-bit
response value from the PE.
EXAMPLE 16-1:
// Wait until CPU is ready
SendCommand(ETAP_CONTROL);
// Check if Proc. Access bit (bit 18) is set
do {
controlVal=XferData(32’h0x0004C000 );
} while( PrAcc(contorlVal<18>) is not ‘1’ );
// Select Data Register
SendCommand(ETAP_DATA);
// Receive Response
response = XferData(0);
// Tell CPU to execute instruction
SendCommand(ETAP_CONTROL);
XferData(32’h0x0000C000);
// return 32-bit response
return response;
}
The typical communication sequence between the
programmer and the PE is shown in Table 16-1.
The sequence begins when the programmer sends the
command and optional additional data to the PE, and
the PE carries out the command.
When the PE has finished executing the command, it
sends the response back to the programmer.
The response may contain more than one response.
For example, if the programmer sent a READ
command, the response will contain the data read.
TABLE 16-1:
COMMUNICATION
SEQUENCE FOR THE PE
Operation
Step 1:
Operand
Send command and optional data from
programmer to the PE.
XferFastData
(Command | data len)
XferFastData..
optional data..
Step 2:
DS61145L-page 32
GetPEResponse EXAMPLE
WORD GetPEResponse()
{
WORD response;
Programmer reads the response from the PE.
GetPEResponse
response
GetPEResponse...
response...
 2007-2013 Microchip Technology Inc.
PIC32
16.2
The PE Command Set
The PE command set is shown in Table 16-2. This
table contains the op code, mnemonic, and short
description for each command. Functional details on
each command are provided in Section 16.2.3
“ROW_PROGRAM
Command”
through
Section 16.2.14 “CHANGE_CFG Command”.
The PE sends a response to the programmer for each
command that it receives. The response indicates if the
command was processed correctly. It includes any
required response data or error data.
16.2.1
COMMAND FORMAT
All PE commands have a general format consisting of
a 32-bit header and any required data for the command
(see Figure 16-1). The 32-bit header consists of a
16-bit Op code field, which is used to identify the
command, and a 16-bit command Operand field. Use
of the Operand field varies by command.
Note:
Some commands have no Operand information, however, the Operand field must
be sent and the programming executive
will ignore the data.
TABLE 16-2:
Op code
FIGURE 16-1:
COMMAND FORMAT
31
16
Op code
15
0
Operand (optional)
31
16
Command Data High (if required)
15
0
Command Data Low (if required)
The command in the Op code field must match one of
the commands in the command set that is listed in
Table 16-2. Any command received that does not
match a command the list returns a NACK response,
as shown in Table 16-3.
The PE uses the command Operand field to determine
the number of bytes to read from or to write to. If the
value of this field is incorrect, the command is not be
properly received by the PE.
PE COMMAND SET
Mnemonic
Description
0x0
ROW_PROGRAM(1)
Program one row of Flash memory at the specified address.
0x1
READ
Read N 32-bit words of memory starting from the specified address (N < 65,536).
0x2
PROGRAM
Program Flash memory starting at the specified address.
(3)
0x3
WORD_PROGRAM
0x4
CHIP_ERASE
Chip Erase of entire chip.
0x5
PAGE_ERASE
Erase pages of code memory from the specified address.
0x6
BLANK_CHECK
Blank Check code.
Program one word of Flash memory at the specified address.
0x7
EXEC_VERSION
Read the PE software version.
0x8
GET_CRC
Get the CRC of Flash memory.
0x9
PROGRAM_CLUSTER
Programs the specified number of bytes to the specified address.
0xA
GET_DEVICEID
Returns the hardware ID of the device.
0xB
CHANGE_CFG
(2)
0xC
GET_CHECKSUM
0xD
QUAD_WORD_PGRM
Used by the probe to set various configuration settings for the PE.
Get the checksum of Flash memory.
(4)
Program four words of Flash memory at the specified address.
Note 1: Refer to Table 5-1 for the row size for each device.
2: This command is not available in PIC32MX1XX/2XX devices.
3: On the PIC32MZ EC family devices, which incorporate ECC, the WORD_PROGRAM command will not
generate the ECC parity bits. Reading a location programmed with the WORD_PROGRAM command with
ECC enabled will cause a DED fault.
4: This command is available on PIC32MZ EC family devices only.
 2007-2013 Microchip Technology Inc.
DS61145L-page 33
PIC32
16.2.2
RESPONSE FORMAT
16.2.3
The PE response set is shown in Table 16-3. All PE
responses have a general format consisting of a 32-bit
header and any required data for the response (see
Figure 16-2).
FIGURE 16-2:
RESPONSE FORMAT
31
16
ROW_PROGRAM COMMAND
The ROW_PROGRAM command instructs the PE to
program a row of data at a specified address.
The data to be programmed to memory, located in
command words Data_1 through Data_N, must be
arranged using the packed instruction word format
shown in Table 16-4 (this command expects an entire
row of data).
Last Command
15
0
Operand
31
31
16
16
Data_High_N
15
Addr_High
15
0
0
Data_Low_N
Addr_Low
31
16
Data_High_1
Last_Cmd Field
Last_Cmd is a 16-bit field in the first word of the
response and indicates the command that the PE
processed. It can be used to verify that the PE correctly
received the command that the programmer
transmitted.
15
0
Data_Low_1
31
16
Data_High_N
15
0
Response Code
Data_Low_N
The response code indicates whether the last
command succeeded or failed, or if the command is a
value that is not recognized. The response code values
are shown in Table 16-3.
TABLE 16-3:
RESPONSE VALUES
Mnemonic
0x0
PASS
0x2
FAIL
0x3
NACK
16.2.2.3
0
0
Data_Low_1
Op code
Op code
15
15
16.2.2.2
16
16
Data_High_1
16.2.2.1
ROW_PROGRAM COMMAND
31
Response Code
31
FIGURE 16-3:
Description
Command successfully
processed
Command unsuccessfully
processed
Command not known
Optional Data
The response header may be followed by optional data
in case of certain commands such as read. The
number of 32-bit words of optional data varies
depending on the last command operation and its
parameters.
TABLE 16-4:
ROW_PROGRAM FORMAT
Field
Description
Op code
0x0
Operand
Not used
Addr_High
High 16 bits of 32-bit destination
address
Addr_Low
Low 16 bits of 32-bit destination
address
Data_High_1 High 16 bits data word 1
Data_Low_1
Low 16 bits data word 1
Data_High_N High 16 bits data word 2 through N
Data_Low_N Low 16 bits data word 2 through N
Expected Response (1 word):
FIGURE 16-4:
ROW_PROGRAM RESPONSE
31
16
Last Command
15
0
Response Code
DS61145L-page 34
 2007-2013 Microchip Technology Inc.
PIC32
16.2.4
READ COMMAND
The READ command instructs the PE to read from
memory the number of 32-bit words specified in the
Operand field starting from the 32-bit address specified
by the Addr_Low and Addr_High fields. This command
can be used to read Flash memory, as well as
Configuration Words. All data returned in response to
this command uses the packed data format that is
shown in Table 16-5.
FIGURE 16-5:
READ COMMAND
31
16
Op code
15
0
Operand
31
16
Addr_High
15
0
Addr_Low
TABLE 16-5:
READ FORMAT
Field
Description
Op code
0x1
Operand
N number of 32-bit words to read
(maximum of 65,535)
Addr_Low
Low 16 bits of 32-bit source address
Addr_High
High 16 bits of 32-bit source
address
Expected Response:
FIGURE 16-6:
READ RESPONSE
31
16
Last Command
15
0
Response Code
31
16
Data_High_1
15
0
Data_Low_1
31
16
Data_High_N
15
0
Data_Low_N
Note:
Reading unimplemented memory will
cause the PE to reset. Please ensure that
only memory locations present on a
particular device are accessed.
 2007-2013 Microchip Technology Inc.
DS61145L-page 35
PIC32
16.2.5
PROGRAM COMMAND
There are three programming scenarios:
The PROGRAM command instructs the PE to program
Flash memory, including Configuration Words, starting
from the 32-bit address specified in the Addr_Low and
Addr_High fields. A 32-bit length field specifies the
number of bytes to program.
The address must be aligned to a Flash row size
boundary and the length must be a multiple of a Flash
row size. Flash row sizes are either 32 words (128
bytes) or 128 words (512 bytes). Please refer to
Table 5-1.
PROGRAM COMMAND
FIGURE 16-7:
31
16
Op code
15
0
Operand
31
16
Addr_High
15
0
Addr_Low
31
16
Length_High
15
0
Length_Low
31
16
Data_High_1
15
0
Data_Low_1
31
1.
The length of the data to be programmed is the
size of a single flash row.
The length of the data to be programmed is the
size of two flash rows.
The length of the data to be programmed is
larger than the size of two flash rows.
2.
3.
When the data length is equal to 512 bytes, the PE
receives the 512-byte block of data from the probe and
immediately sends the response for this command
back to the probe.
The PE will respond for each row of data that it
receives. If the data length of the command is equal to
a single row, a single PE response is generated. If the
data length is equal to two rows, the PE waits to
receive both rows of data, and then sends back-toback responses for each data row. If the data length is
greater than two rows of data, the PE will send the
response for the first row after receiving the first two
rows of data. Subsequent responses are sent after
receiving subsequent data row packets. The
responses will lag the data by one row. When the last
row of data is received the PE will respond with backto-back responses for the second-to-last data row
followed by the last row.
If the PE encounters an error in programming any of
the blocks, it sends a failure status to the probe and
aborts the PROGRAM command. On receiving the failure
status, the probe must stop sending data. The PE will
not process any other data for this command from the
probe. The process is illustrated in Figure 16-9.
Note:
16
Data_High_N
15
0
Data_Low_N
PROGRAM FORMAT
TABLE 16-6:
Field
Description
Op code
0x2
Operand
Not used
Addr_Low
Low 16 bits of 32-bit destination
address
Addr_High
High 16 bits of 32-bit destination
address
Length_Low
Low 16 bits of Length
Length_High
High 16 bits Length
Data_Low_N
Low 16 bits data word 2 through N
Data_High_N
High 16 bits data word 2 through N
If the PROGRAM command fails, the
programmer should read the failing row
using the READ command from the Flash
memory. Next, the programmer should
compare the row received from Flash
memory to its local copy, word-by-word, to
determine the address where Flash
programming fails.
The response for this command is a little different than
the response for other commands. The 16 MSbs of the
response contain the 16 LSbs of the destination
address, where the last block is programmed. This
helps the probe and the PE maintain proper
synchronization of sending, and receiving, data and
responses.
Expected Response (1 word):
FIGURE 16-8:
PROGRAM RESPONSE
31
16
LSB 16 bits of the destination address of last block
15
0
Response Code
DS61145L-page 36
 2007-2013 Microchip Technology Inc.
PIC32
FIGURE 16-9:
PROGRAM COMMAND ALGORITHM
Start
Data is
equal to a
single row
Data is
equal to
two rows
Data
is larger than
two rows
Send one row
of data
Send first row
of data
Send first row
of data
Receive status
(LSB 16 bits of
Destination Address
Status Value)
Send second row
of data
Send second row
of data
Receive status
for Row 1
Receive status
for Row 1
Receive status
for Row 2
Send third row
of data
Receive status
for Row 2
Send Nth row
of data
Receive status
for Row N-1
Receive status
for Row N
Done
 2007-2013 Microchip Technology Inc.
DS61145L-page 37
PIC32
16.2.6
WORD_PROGRAM COMMAND
16.2.7
CHIP_ERASE COMMAND
The WORD_PROGRAM command instructs the PE to
program a 32-bit word of data at the specified address.
The CHIP_ERASE command erases the entire chip,
including the configuration block.
FIGURE 16-10:
After the erase is performed, the entire Flash memory
contains 0xFFFFFFFF.
WORD_PROGRAM
COMMAND
31
16
Op code
15
0
Operand
31
16
FIGURE 16-12:
CHIP_ERASE COMMAND
31
16
Op code
15
0
Operand
Addr_High
15
0
TABLE 16-8:
Addr_Low
31
Field
16
Data_High
15
0
Data_Low
TABLE 16-7:
WORD_PROGRAM FORMAT
Field
Description
Op code
0x3
Operand
Not used
CHIP_ERASE FORMAT
Description
Op code
0x4
Operand
Not used
Addr_Low
Low 16 bits of 32-bit destination
address
Addr_High
High 16 bits of 32-bit destination
address
Expected Response (1 word):
FIGURE 16-13:
Addr_High
High 16 bits of 32-bit destination
address
31
Addr_Low
Low 16 bits of 32-bit destination
address
15
Data_High
High 16 bits data word
Data_Low
Low 16 bits data word
CHIP_ERASE RESPONSE
16
Last Command
0
Response Code
Expected Response (1 word):
FIGURE 16-11:
WORD_PROGRAM
RESPONSE
31
16
Last Command
15
0
Response Code
DS61145L-page 38
 2007-2013 Microchip Technology Inc.
PIC32
16.2.8
PAGE_ERASE COMMAND
16.2.9
BLANK_CHECK COMMAND
The PAGE_ERASE command erases the specified
number of pages of code memory from the specified
base address. Depending on the device, the specified
base address must be a multiple of 0x400 or 0x100.
The BLANK_CHECK command queries the PE to
determine whether the contents of code memory and
code-protect Configuration bits (GCP and GWRP) are
blank (contains all ‘1’s).
After the erase is performed, all targeted words of code
memory contain 0xFFFFFFFF.
FIGURE 16-16:
BLANK_CHECK COMMAND
31
FIGURE 16-14:
16
PAGE_ERASE COMMAND
31
Op code
16
15
0
31
16
15
0
31
0
Op code
15
Operand
16
Operand
31
Addr_High
0
Addr_High
15
Addr_Low
16
Addr_Low
TABLE 16-9:
Length_High
15
PAGE_ERASE FORMAT
Field
0
Length_Low
Description
TABLE 16-10: BLANK_CHECK FORMAT
Op code
0x5
Operand
Number of pages to erase
Addr_Low
Low 16 bits of 32-bit destination
address
Op code
0x6
Addr_High
High 16 bits of 32-bit destination
address
Operand
Not used
Address
Address where to start the Blank
Check
Length
Number of program memory locations
to check in terms of bytes
Field
Expected Response (1 word):
FIGURE 16-15:
PAGE_ERASE RESPONSE
31
16
Last Command
15
Description
Expected Response (1 word for blank device):
FIGURE 16-17:
0
BLANK_CHECK RESPONSE
31
Response Code
16
Last Command
15
0
Response Code
 2007-2013 Microchip Technology Inc.
DS61145L-page 39
PIC32
16.2.10
EXEC_VERSION COMMAND
GET_CRC COMMAND
16.2.11
EXEC_VERSION queries for the version of the PE
software stored in RAM.
GET_CRC calculates the CRC of the buffer from the
specified address to the specified length, using the
table look-up method. The CRC details are as follows:
FIGURE 16-18:
•
•
•
•
EXEC_VERSION
COMMAND
31
16
Op code
15
0
Operand
CRC-CCITT, 16-bit
Polynomial: X^16+X^12+X^5+1, hex 0x00011021
Seed: 0xFFFF
Most Significant Byte (MSB) shifted in first
Note 1: In the response, only the CRC Least
Significant 16 bits are valid.
2: The PE will automatically determine if the
hardware CRC is available and use it by
default. The hardware CRC is not used
on PIC32MX1XX/2XX devices.
TABLE 16-11: EXEC_VERSION FORMAT
Field
Op code
Operand
Description
FIGURE 16-20:
0x7
GET_CRC COMMAND
31
Not used
16
Op code
Expected Response (1 word):
FIGURE 16-19:
15
EXEC_VERSION
RESPONSE
31
0
Operand
31
16
Addr_High
16
15
Last Command
15
0
Addr_Low
0
Version Number
31
16
Length_High
15
0
Length_Low
TABLE 16-12: GET_CRC FORMAT
Field
Description
Op code
0x8
Operand
Not used
Address
Address where to start calculating the
CRC
Length
Length of buffer on which to calculate
the CRC, in number of bytes
Expected Response (2 words):
FIGURE 16-21:
GET_CRC RESPONSE
31
16
Last Command
15
0
Response Code
31
16
CRC_High
15
0
CRC_Low
DS61145L-page 40
 2007-2013 Microchip Technology Inc.
PIC32
16.2.12
PROGRAM_CLUSTER COMMAND
16.2.13
PROGRAM_CLUSTER programs the specified number of
bytes to the specified address. The address must be
32-bit aligned, and the number of bytes must be a
multiple of a 32-bit word.
FIGURE 16-22:
PROGRAM_CLUSTER
COMMAND
31
The GET_DEVICEID command returns the hardware
ID of the device.
FIGURE 16-24:
Op code
16
Op code
15
0
Operand
0
Operand
31
TABLE 16-14: GET_DEVICEID FORMAT
16
Addr_High
15
0
Field
16
Length_High
15
0
Length_Low
0xA
Operand
Not used
Expected Response (1 word):
FIGURE 16-25:
16
Last Command
15
Description
0
Device ID
Op code
0x9
Operand
Not used
Address
Start address for programming
Length
Length of area to program in number
of bytes
Note:
GET_DEVICEID
RESPONSE
31
TABLE 16-13: PROGRAM_CLUSTER FORMAT
Field
Description
Op code
Addr_Low
31
GET_DEVICEID
COMMAND
31
16
15
GET_DEVICEID COMMAND
If the PROGRAM_CLUSTER command fails,
the programmer should read the failing row
using the READ command from the Flash
memory. Next, the programmer should
compare the row received from Flash
memory to its local copy word-by-word to
determine the address where Flash
programming fails.
Expected Response (1 word):
FIGURE 16-23:
PROGRAM_CLUSTER
RESPONSE
31
16
Last Command
15
0
Response Code
 2007-2013 Microchip Technology Inc.
DS61145L-page 41
PIC32
16.2.14
CHANGE_CFG COMMAND
16.2.15
GET_CHECKSUM COMMAND
CHANGE_CFG is used by the probe to set various configuration settings for the PE. Currently, the single configuration setting determines which of the following
calculation methods the PE should use:
GET_CHECKSUM returns the sum of all the bytes
starting at the address argument up to the length
argument. The result is a 32-bit word.
• Software CRC calculation method
• Hardware calculation method
FIGURE 16-28:
CHANGE_CFG COMMAND
31
16
Op code
FIGURE 16-26:
CHANGE_CFG COMMAND
31
15
0
16
Op code
15
Operand
31
16
0
Operand
31
Addr_High
15
0
16
CRCFlag_High
15
Addr_Low
31
16
0
CRCFlag_Low
Length_High
15
0
Length_Low
TABLE 16-15: CHANGE_CFG FORMAT
Field
Description
Op code
0xB
Operand
Not used
CRCFlag
If the value is ‘0’, the PE uses the
software CRC calculation method.
If the value is ‘1’, the PE uses the
hardware CRC unit to calculate the
CRC.
TABLE 16-16: GET_CHECKSUM FORMAT
Field
Expected Response (1 word):
FIGURE 16-27:
CHANGE_CFG RESPONSE
31
Op code
0x0C
Operand
Not used
Addr_High
High-order 16 bits of the 32-bit starting
address of the data to calculate the
checksum for.
Addr_Low
Low-order 16 bits of the 32-bit starting
address of the data to calculate the
checksum for.
16
Length_High High-order 16 bits of the 32-bit length
of data to calculate the checksum for
in bytes.
0
Length_Low
Last Command
15
Response Code
Note:
Description
The command, CHANGE_CFG, is not
available in PIC32MX1XX/2XX devices.
Low-order 16 bits of the 32-bit length
of data to calculate the checksum for
in bytes.
Expected Response (1 word):
FIGURE 16-29:
GET_CHECKSUM
RESPONSE
31
16
Last Command
15
0
Response Code
31
16
Checksum_High
15
0
Checksum_Low
DS61145L-page 42
 2007-2013 Microchip Technology Inc.
PIC32
16.2.16
QUAD_WORD_PROGRAM COMMAND
QUAD_WORD_PROGRAM instructs the PE to program
four, 32-bit words at the specified address. The
address must be an aligned four word boundary (bits 01 must be ‘0’). If not, the command will return a FAIL
response value and no data will be programmed.
FIGURE 16-30:
Field
Op code
Not used
High-order 16 bits of the 32-bit starting
address.
16
Addr_Low
Low -order 16 bits of the 32-bit starting
address.
0
Data0_High
High-order 16 bits of Data Word 0.
Data0_Low
Low-order 16 bits of Data Word 0.
Data1_High
High-order 16 bits of Data Word 1.
Data1_Low
Low-order 16 bits of Data Word 1.
Data2_High
High-order 16 bits of Data Word 2.
Data2_Low
Low-order 16 bits of Data Word 2.
Data3_High
High-order 16 bits of Data Word 3.
Data3_Low
Low-order 16 bits of Data Word 3.
Operand
31
16
Addr_High
15
0
Addr_Low
31
16
Data0_High
15
0
Data0_Low
31
16
Data1_High
15
Expected Response (1 word):
FIGURE 16-31:
QUAD_WORD_PROGRAM
RESPONSE
31
0
Data1_Low
31
0x0C
Addr_High
Op code
15
Description
Operand
QUAD_WORD_PROGRAM
COMMAND
31
TABLE 16-17: QUAD_WORD_PROGRAM
FORMAT
16
Last Command
15
16
0
Response Code
Data2_High
15
0
Data2_Low
31
16
Data3_High
15
0
Data3_Low
 2007-2013 Microchip Technology Inc.
DS61145L-page 43
PIC32
17.0
CHECKSUM
17.2
17.1
Theory
The mask value of a device Configuration is calculated
by setting all the unimplemented bits to ‘0’ and all the
implemented bits to ‘1’.
The checksum is calculated as the 32-bit summation of
all bytes (8-bit quantities) in program Flash, boot Flash
(except device Configuration Words), the Device ID
register with applicable mask, and the device Configuration Words with applicable masks. Next, the 2’s
complement of the summation is calculated. This final
32-bit number is presented as the checksum.
REGISTER 17-1:
Bit
Range
31:24
23:16
15:8
7:0
Bit
31/23/15/7
Mask Values
For example, Register 17-1 shows the DEVCFG0 register of the PIC32MX360F512L device. The mask value
for this register is:
mask_value_devcfg0 = 0x110FF00B
Table 17-1 lists the mask values of the four device Configuration registers and Device ID registers to be used
in the checksum calculations.
DEVCFG0 REGISTER OF PIC32MX360F512L
Bit
30/22/14/6
Bit
29/21/13/5
Bit
28/20/12/4
Bit
27/19/11/3
Bit
26/18/10/2
Bit
25/17/9/1
Bit
24/16/8/0
r-0
r-1
r-1
R/P-1
r-1
r-1
r-1
R/P-1
—
—
—
CP
—
—
—
BWP
r-1
r-1
r-1
r-1
R/P-1
R/P-1
R/P-1
R/P-1
—
—
—
—
PWP19
PWP18
PWP17
PWP16
R/P-1
R/P-1
R/P-1
R/P-1
r-1
r-1
r-1
r-1
PWP15
PWP14
PWP13
PWP12
—
—
—
—
R/P-1
R/P-1
r-1
r-1
r-1
r-1
R/P-1
r-1
—
—
—
—
ICESEL
—
Legend:
R = Readable bit
-n = Value at POR
DS61145L-page 44
P = Programmable bit
W = Writable bit
‘1’ = Bit is set
DEBUG<1:0>
r = Reserved bit
U = Unimplemented bit, read as ‘0’
‘0’ = Bit is cleared
x = Bit is unknown
 2007-2013 Microchip Technology Inc.
PIC32
TABLE 17-1:
DEVICE CONFIGURATION REGISTER MASK VALUES OF CURRENTLY
SUPPORTED PIC32 DEVICES
Device
DEVCFG0
DEVCFG1
DEVCFG2
DEVCFG3
DEVID
All PIC32MX1XX Family
0x1100FC1F
0x03DFF7A7
0x0070077
0xF0000000
0x0FFFFFFF
All PIC32MX2XX Family
0x1100FC1F
0x03DFF7A7
0x0078777
0xF0000000
0x0FFFFFFF
All PIC32MX320/340/360 Family
0x110FF00B
0x009FF7A7
0x00070077
0x00000000
0x000FF000
All PIC32MX330/350/370 Family
0x110FF01F
0x03DFF7A7
0x00070077
0x30C70000
0x00FFFFFF
All PIC32MX420/440/460 Family
0x110FF00B
0x009FF7A7
0x00078777
0x00000000
0x000FF000
All PIC32MX430/450/470 Family
0x110FF01F
0x03DFF7A7
0x00078777
0xF0C70000
0x00FFFFFF
All PIC32MZ EC Family
0x7FFFFFFF
0xFFFFFFFF
0xFFFFFFFF
0xFFFF0000
0x0FFFFFFF
PIC32MX534F064H
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x0FFFF000
PIC32MX534F064L
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x0FFFF000
PIC32MX564F064H
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x0FFFF000
PIC32MX564F064L
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x0FFFF000
PIC32MX564F128H
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x0FFFF000
PIC32MX564F128L
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x0FFFF000
PIC32MX575F256H
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x000FF000
PIC32MX575F256L
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x000FF000
PIC32MX575F512H
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x000FF000
PIC32MX575F512L
0x110FF00F
0x009FF7A7
0x00078777
0xC4070000
0x000FF000
PIC32MX664F064H
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x0FFFF000
PIC32MX664F064L
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x0FFFF000
PIC32MX664F128H
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x0FFFF000
PIC32MX664F128L
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x0FFFF000
PIC32MX675F256H
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x000FF000
PIC32MX675F256L
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x000FF000
PIC32MX675F512H
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x000FF000
PIC32MX675F512L
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x000FF000
PIC32MX695F512H
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x000FF000
PIC32MX695F512L
0x110FF00F
0x009FF7A7
0x00078777
0xC3070000
0x000FF000
PIC32MX764F128H
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x0FFFF000
PIC32MX764F128L
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x0FFFF000
PIC32MX775F256H
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x000FF000
PIC32MX775F256L
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x000FF000
PIC32MX775F512H
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x000FF000
PIC32MX775F512L
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x000FF000
PIC32MX795F512H
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x000FF000
PIC32MX795F512L
0x110FF00F
0x009FF7A7
0x00078777
0xC7070000
0x000FF000
 2007-2013 Microchip Technology Inc.
DS61145L-page 45
PIC32
17.3
Algorithm
An example of a high-level algorithm for calculating the
checksum for a PIC32 device is illustrated in Figure 17-1
to demonstrate one method to derive a checksum. This
is merely an example of how the actual calculations can
be accomplished, the method that is ultimately used is
left to the discretion of the software developer.
As stated earlier, the PIC32 checksum is calculated as
the 32-bit summation of all bytes (8-bit quantities) in
program Flash, boot Flash (except device
Configuration Words), the Device ID register with
applicable mask, and the device Configuration Words
with applicable masks.
FIGURE 17-1:
Next, the 2’s complement of the summation is
calculated. This final 32-bit number is presented as the
checksum.
The mask values of the device Configuration and
Device ID registers are derived as described in the
previous section, Section 17.2 “Mask Values”.
Another noteworthy point is that the last four 32-bit
quantities in boot Flash are the device Configuration
registers. An arithmetic AND operation of these device
Configuration register values is performed with the
appropriate mask value, before adding their bytes to
the checksum.
Similarly, an arithmetic AND operation of the Device ID
register is performed with the appropriate mask value,
before adding its bytes to the checksum.
HIGH-LEVEL ALGORITHM FOR CHECKSUM CALCULATION
pic32_checksum
Read Program Flash, Boot Flash (including DEVCFG
registers) and DEVID register in tempBuffer
Apply DEVCFG and DEVID masks to appropriate
locations in tempBuffer
tmpChecksum (32-bit quantity) = 0
Finish processing all
bytes (8-bit quantities) in
tempBuffer?
No
tmpChecksum = tempChecksum + Current Byte Value
(8-bit quantity) in tmpBuffer
Yes
Checksum (32-bit quantity) = 2’s complement
of tmpChecksum
Done
DS61145L-page 46
 2007-2013 Microchip Technology Inc.
PIC32
The formula to calculate the checksum for a PIC32
device is provided in Equation 17-1.
EQUATION 17-1:
CHECKSUM FORMULA
Checksum = 2s complement  PF + BF + DCR + DIR 
Where,
PF = 32-bit summation of all bytes in Program Flash
BF = 32-bit summation of all bytes in boot Flash, except device Configuration registers
3
DCR =  32-bit summation of bytes  MASK DEVCFGX & DEVCFGx 
X = 0
DIR = 32-bit summation of bytes  MASK DEVID & DEVID 
MASKDEVCFGX = mask value from Table 17-1
MASKDEVID = mask value from Table 17-1
17.4
Example of Checksum Calculation
17.4.2
The following five sections demonstrate a checksum
calculation for the PIC32MX360F512L device using
Equation 17-1.
The size of the boot Flash is 12 KB, which equals
12288 bytes. However, the last 16 bytes are device
Configuration registers, which are treated separately.
Therefore, the number of bytes in boot Flash that we
consider in this step is 12272. Since the boot Flash is
assumed to be in erased state, the value of “BF” is
resolved through the following calculation:
The following assumptions are made for the purpose of
this checksum calculation example:
• Program Flash and boot Flash are in the erased
state (all bytes are 0xFF)
• Device Configuration is in the default state of the
device (no configuration changes are made)
BF = 0xFF + 0xFF + … 12272 times
BF = 0x002FC010 (32-bit number)
To begin, each item on the right-hand side of the equation (PF, BF, DCR, DIR) is individually calculated. After
those values have been derived, the final value of the
checksum can be determined.
17.4.1
17.4.3
CALCULATING FOR “DCR” IN THE
CHECKSUM FORMULA
Since the device Configuration registers are left in their
default state, the value of the appropriate DEVCFG
register – as read by the PIC32 core, its respective
mask value, the value derived from applying the mask,
and the 32-bit summation of bytes (all as shown in
Table 17-2) provide the total of the 32-bit summation of
bytes.
CALCULATING FOR “PF” IN THE
CHECKSUM FORMULA
The size of Program Flash is 512 KB, which equals
524288 bytes. Since the program Flash is assumed to
be in erased state, the value of “PF” is resolved through
the following calculation:
From Table 17-2, the value of “DCR” is:
PF = 0xFF + 0xFF + … 524288 times
DCR = 0x000003D6 (32-bit number)
PF = 0x7F80000 (32-bit number)
TABLE 17-2:
CALCULATING FOR “BF” IN THE
CHECKSUM FORMULA
DCR CALCULATION EXAMPLE
POR Default Value & 32-Bit Summation of
Mask
Bytes
Register
POR Default Value
Mask
DEVCFG0
0x7FFFFFFF
0x110FF00B
0x110FF00B
0x0000011B
DEVCFG1
0xFFFFFFFF
0x009FF7A7
0x009FF7A7
0x0000023D
DEVCFG2
0xFFFFFFFF
0x00070077
0x00070077
0x0000007E
DEVCFG3
0xFFFFFFFF
0x00000000
0x00000000
Total of the 32-bit Summation of Bytes =
 2007-2013 Microchip Technology Inc.
0x00000000
0x000003D6
DS61145L-page 47
PIC32
17.4.4
CALCULATING FOR “DIR” IN THE
CHECKSUM FORMULA
The value of Device ID register, its mask value, the
value derived from applying the mask, and the 32-bit
summation of bytes are shown in Table 17-3.
From Table 17-3, the value of “DIR” is:
DIR = 0x00000083 (32-bit number.)
TABLE 17-3:
17.4.5
DIR CALCULATION EXAMPLE
Register
POR Default Value
Mask
POR Default Value
& Mask
32-Bit Summation of
Bytes
DEVID
0x00938053
0x000FF000
0x00038000
0x00000083
COMPLETING THE PIC32
CHECKSUM CALCULATION
The values derived in previous sections (PF, BF, DCR,
DIR) are used to calculate the checksum value. First,
perform the 32-bit summation of the PF, BF, DCR and
DIR as derived in previous sections and store it in a
variable, called temp, as shown in Example 17-1.
EXAMPLE 17-1:
1.
CHECKSUM CALCULATION PROCESS
First, temp = PF + BF + DCR + DIR, which translates to:
temp = 0x7F80000 + 0x002FC010 + 0x000003D6 + 0x00000083
2.
3.
Adding all four values results in temp being equal to 0x0827C406
Next, the 1’s complement of temp, called temp1, is calculated:
4.
Finally, the 2’s complement of temp is the checksum:
temp1 = 1’s complement (temp), which is now equal to 0xF7D83B96
Checksum = 2’s complement (temp), which is Checksum = temp1 + 1, resulting in 0xF7D83B97
17.4.6
CHECKSUM VALUES WHILE
DEVICE IS CODE-PROTECTED
Since the device Configuration Words are not readable
while the PIC32 devices are in code-protected state,
the checksum values are zeros for all devices.
DS61145L-page 48
 2007-2013 Microchip Technology Inc.
PIC32
18.0
CONFIGURATION MEMORY
AND DEVICE ID
PIC32 devices include several features intended to
maximize application flexibility and reliability, and
minimize cost through elimination of external
components. These features are configurable through
specific Configuration bits for each device.
Refer to the “Special Features” chapter in the specific
device data sheet for a full list of available features,
Configuration bits, and the Device ID register.
See Table 18-4 for a full list of Device ID and
revision number for specific devices.
18.1
Device Configuration
In PIC32 devices, the Configuration Words select various
device configurations that are set at device Reset prior to
execution of any code. These values are located at the
highest locations of Boot Flash Memory (BFM) and since
they are part of the program memory, are included in the
programming file along with executable code and program constants. The names and locations of these Configuration Words are listed in Table 18-1 through
Table 18-3.
During programming, a Configuration Word can be
programmed a maximum of two times for PIC32MX
devices and only one time for PIC32MZ EC devices
before a page erase must be performed.
After programming the Configuration Words, a device
Reset will cause the new values to be loaded into the
Configuration registers. Because of this, the programmer
should program the Configuration Words just prior to verification of the device. The final step is programming the
code protection Configuration Word.
These Configuration Words determine the oscillator
source. If using the 2-wire Enhanced ICSP mode the
Configuration Words are ignored and the device will
always use the FRC; however, in 4-wire mode this is
not the case. If an oscillator source is selected by the
Configuration Words that is not present on the device
after reset, the programmer will not be able to perform
Flash operations on the device after it is reset. See the
“Special Features” chapter in the specific device data
sheet for details regarding oscillator selection using the
Configuration Words.
Additionally, Table 18-3 includes Configuration Words for
PIC32MZ EC family devices with dual boot and dual
panel Flash. Refer to Section 3. “Memory Organization” (DS61115) in the “PIC32 Family Reference
Manual” for a detailed description of the dual boot
regions.
TABLE 18-1:
DEVCFG LOCATIONS
Configuration Word
Physical Address
DEVCFG0
DEVCFG1
DEVCFG2
DEVCFG3
0x1FC02FFC
0x1FC02FF8
0x1FC02FF4
0x1FC02FF0
TABLE 18-2:
DEVCFG LOCATIONS FOR
PIC32MX1X0 AND
PIC32MX20X DEVICES ONLY
Configuration Word
Physical Address
DEVCFG0
DEVCFG1
DEVCFG2
DEVCFG3
0x1FC00BFC
0x1FC00BF8
0x1FC00BF4
0x1FC00BF0
On Power-on Reset (POR), or any reset, the Configuration Words are copied from the boot Flash memory to
their corresponding Configuration registers. A Configuration bit can only be programmed = 0 (unprogrammed
state = 1).
 2007-2013 Microchip Technology Inc.
DS61145L-page 49
PIC32
TABLE 18-3:
CONFIGURATION WORD LOCATIONS FOR PIC32MZ EC FAMILY DEVICES
Register Physical Address
Configuration Word
(see Note 1)
Fixed Boot
Region 1
Fixed Boot
Region 2
Active Boot
Alias Region
(see Note 2)
Inactive Boot
Alias Region
(see Note 2)
Boot Sequence Number
0x1FC4FFF0
0x1FC6FFF0
0x1FC0FFF0
0x1FC2FFF0
Code Protection
0x1FC4FFD0
0x1FC6FFD0
0x1FC0FFD0
0x1FC2FFD0
DEVCFG0
0x1FC4FFCC
0x1FC6FFCC
0x1FC0FFCC
0x1FC2FFCC
DEVCFG1
0x1FC4FFC8
0x1FC6FFC8
0x1FC0FFC8
0x1FC2FFC8
DEVCFG2
0x1FC4FFC4
0x1FC6FFC4
0x1FC0FFC4
0x1FC2FFC4
DEVCFG3
0x1FC4FFC0
0x1FC6FFC0
0x1FC0FFC0
0x1FC2FFC0
Alternate Boot Sequence Number
0x1FC4FF70
0x1FC6FF70
0x1FC0FF70
0x1FC2FF70
Alternate Code Protection
0x1FC4FF50
0x1FC6FF50
0x1FC0FF50
0x1FC2FF50
Alternate DEVCFG0
0x1FC4FF4C
0x1FC6FF4C
0x1FC0FF4C
0x1FC2FF4C
Alternate DEVCFG1
0x1FC4FF48
0x1FC6FF48
0x1FC0FF48
0x1FC2FF48
Alternate DEVCFG2
0x1FC4FF44
0x1FC6FF44
0x1FC0FF44
0x1FC2FF44
Alternate DEVCFG3
0x1FC4FF40
0x1FC6FF40
0x1FC0FF40
0x1FC2FF40
Note 1:
2:
Each of the following Configuration Word Groups should be programmed using the
QUAD_WORD_PROGRAM command to insure proper ECC configuration:
• Boot Sequence Number (single quad word programming operation)
• Code Protection (single quad word programming operation)
• DEVCFG3, DEVCFG2, DEVCFG1, and DEVCFG0 (single quad word programming operation)
• Alternate Boot Sequence Number (single Quad Word programming operation)
• Alternate Code Protection (single Quad Word programming operation)
• Alternate DEVCFG3, alternate DEVCFG2, alternate DEVCFG1, and alternate DEVCFG0 (single quad
word programming operation)
Active/Inactive boot alias selections are assumed for an unprogrammed device where Fixed Region 1 is
active and Fixed Region 2 is inactive. Refer to Section 3. “Memory Organization” (DS61115) for a
detailed description of the alias boot regions.
DS61145L-page 50
 2007-2013 Microchip Technology Inc.
PIC32
18.1.1
CONFIGURATION REGISTER
PROTECTION
To prevent inadvertent Configuration bit changes during code execution, all programmable Configuration
bits are write-once. After a bit is initially programmed
during a power cycle, it cannot be written to again.
TABLE 18-4:
Changing a device configuration requires changing the
Configuration data in the boot Flash memory, and
cycling power to the device.
To ensure integrity of the 128-bit data, a comparison is
made between each Configuration bit and its stored
complement continuously. If a mismatch is detected, a
Configuration Mismatch Reset is generated, which
causes a device Reset.
DEVICE IDs AND REVISION
Device
PIC32MX110F016B
PIC32MX110F016C
PIC32MX110F016D
PIC32MX120F032B
PIC32MX120F032C
PIC32MX120F032D
PIC32MX130F064B
PIC32MX130F064C
PIC32MX130F064D
PIC32MX150F128B
PIC32MX150F128C
PIC32MX150F128D
PIC32MX210F016B
PIC32MX210F016C
PIC32MX210F016D
PIC32MX220F032B
PIC32MX220F032C
PIC32MX220F032D
PIC32MX230F064B
PIC32MX230F064C
PIC32MX230F064D
PIC32MX250F128B
PIC32MX250F128C
PIC32MX250F128D
PIC32MX330F064H
PIC32MX330F064L
PIC32MX430F064H
PIC32MX430F064L
PIC32MX350F128H
PIC32MX350F128L
PIC32MX450F128H
PIC32MX450F128L
PIC32MX350F256H
PIC32MX350F256L
PIC32MX450F256H
PIC32MX450F256L
PIC32MX370F512H
PIC32MX370F512L
PIC32MX470F512H
PIC32MX470F512L
 2007-2013 Microchip Technology Inc.
DEVID Register Value
Revision ID and Silicon Revision
0x04A07053
0x04A09053
0x04A0B053
0x04A06053
0x04A08053
0x04A0A053
0x04D07053
0x04D09053
0x04D0B053
0x04D06053
0x04D08053
0x04D0A053
0x04A01053
0x04A03053
0x04A05053
0x04A00053
0x04A02053
0x04A04053
0x04D01053
0x04D03053
0x04D05053
0x04D00053
0x04D02053
0x04D04053
0x05600053
0x05601053
0x05602053
0x05603053
0x0570C053
0x0570D053
0x0570E053
0x0570F053
0x05704053
0x05705053
0x05706053
0x05707053
0x05808053
0x05809053
0x0580A053
0x0580B053
0x0 – A0 Revision
DS61145L-page 51
PIC32
TABLE 18-4:
DEVICE IDs AND REVISION (CONTINUED)
Device
DEVID Register Value
PIC32MX360F512L
0x0938053
PIC32MX360F256L
PIC32MX340F128L
PIC32MX320F128L
PIC32MX340F512H
PIC32MX340F256H
PIC32MX340F128H
PIC32MX320F128H
PIC32MX320F064H
PIC32MX320F032H
PIC32MX460F512L
PIC32MX460F256L
PIC32MX440F128L
PIC32MX440F256H
PIC32MX440F512H
PIC32MX440F128H
PIC32MX420F032H
PIC32MX534F064H
PIC32MX534F064L
PIC32MX564F064H
PIC32MX564F064L
PIC32MX564F128H
PIC32MX564F128L
PIC32MX575F256H
PIC32MX575F256L
PIC32MX575F512H
PIC32MX575F512L
PIC32MX664F064H
PIC32MX664F064L
PIC32MX664F128H
PIC32MX664F128L
PIC32MX675F256H
PIC32MX675F256L
PIC32MX675F512H
PIC32MX675F512L
PIC32MX695F512H
PIC32MX695F512L
PIC32MX764F128H
PIC32MX764F128L
PIC32MX775F256H
PIC32MX775F256L
PIC32MX775F512H
PIC32MX775F512L
PIC32MX795F512H
PIC32MX795F512L
0x0934053
0x092D053
0x092A053
0x0916053
0x0912053
0x090D053
0x090A053
0x0906053
0x0902053
0x0978053
0x0974053
0x096D053
0x0952053
0x0956053
0x094D053
0x0942053
0x4400053
0x440C053
0x4401053
0x440D053
0x4403053
0x440F053
0x4317053
0x4333053
0x4309053
0x430F053
0x4405053
0x4411053
0x4407053
0x4413053
0x430B053
0x4305053
0x430C053
0x4311053
0x4325053
0x4341053
0x440B053
0x4417053
0x4303053
0x4312053
0x430D053
0x4306053
0x430E053
0x4307053
DS61145L-page 52
Revision ID and Silicon Revision
0x3 – B2 Revision
0x4 – B3 Revision
0x5 – B4 Revision
0x5 – B6 Revision
0x0 – A0 Revision
0x1 – A1 Revision
 2007-2013 Microchip Technology Inc.
PIC32
TABLE 18-4:
DEVICE IDs AND REVISION (CONTINUED)
Device
PIC32MZ0256ECE064
PIC32MZ0256ECE100
PIC32MZ0256ECE124
PIC32MZ0256ECE144
PIC32MZ0256ECF064
PIC32MZ0256ECF100
PIC32MZ0256ECF124
PIC32MZ0256ECF144
PIC32MZ0512ECE064
PIC32MZ0512ECE100
PIC32MZ0512ECE124
PIC32MZ0512ECE144
PIC32MZ0512ECF064
PIC32MZ0512ECF100
PIC32MZ0512ECF124
PIC32MZ0512ECF144
PIC32MZ1024ECE064
PIC32MZ1024ECE100
PIC32MZ1024ECE124
PIC32MZ1024ECE144
PIC32MZ1024ECF064
PIC32MZ1024ECF100
PIC32MZ1024ECF124
PIC32MZ1024ECF144
PIC32MZ1024ECG064
PIC32MZ1024ECG100
PIC32MZ1024ECG124
PIC32MZ1024ECG144
PIC32MZ1024ECH064
PIC32MZ1024ECH100
PIC32MZ1024ECH124
PIC32MZ1024ECH144
PIC32MZ2048ECG064
PIC32MZ2048ECG100
PIC32MZ2048ECG124
PIC32MZ2048ECG144
PIC32MZ2048ECH064
PIC32MZ2048ECH100
PIC32MZ2048ECH124
PIC32MZ2048ECH144
 2007-2013 Microchip Technology Inc.
DEVID Register Value
0x05100053
0x0510A053
0x05114053
0x0511E053
0x05105053
0x0510F053
0x05119053
0x05123053
0x05101053
0x0510B053
0x05115053
0x0511F053
0x05106053
0x05110053
0x0511A053
0x05124053
0x05102053
0x0510C053
0x05116053
0x05120053
0x05107053
0x05111053
0x0511B053
0x05125053
0x05103053
0x0510D053
0x05117053
0x05121053
0x05108053
0x05112053
0x0511C053
0x05126053
0x05104053
0x0510E053
0x05118053
0x05122053
0x05109053
0x05113053
0x0511D053
0x05127053
Revision ID and Silicon Revision
0x0 – A0 Revision
0x0 – A0 Revision
DS61145L-page 53
PIC32
18.2 Device Code Protection bit (CP)
18.3 Program Write Protection bits (PWP)
The PIC32 family of devices feature code protection, which when enabled, prevents reading of Flash
memory by an external programming device. Once
code protection is enabled, it can only be disabled
by erasing the device with the Chip Erase command
(MCHP_ERASE).
The PIC32 families of devices include write protection
features, which prevent designated boot and program
Flash regions from being erased or written during
program execution.
When programming a device that has opted to utilize code protection, the programming device must
perform verification prior to enabling code protection. Enabling code protection should be the last step
of the programming process. Location of the code
protection enable bits vary by device. Refer to the
“Special Features” chapter in the specific device
data sheet for details.
Note:
Once code protection is enabled, the
Flash memory can no longer be read and
can only be disabled by an external programmer using the Chip Erase Command
(MCHP_ERASE).
DS61145L-page 54
In PIC32MX devices, write protection is implemented in
Configuration memory by the Device Configuration
Words, while in PIC32MZ EC devices, this feature is
implemented through Special Function Registers
(SFRs) in the Flash controller.
When write protection is implemented by Device
Configuration Words, the write protection register
should only be written when all boot and program Flash
memory has been programmed. Refer to the “Special
Features” chapter in the specific device data sheet for
details.
If write protection is implemented using SFRs, certain
steps may be required during initialization of the device
by the external programmer prior to programming
Flash regions. Refer to the “Flash Program Memory”
chapter in the specific device data sheet for details.
 2007-2013 Microchip Technology Inc.
PIC32
19.0
TAP CONTROLLERS
TABLE 19-1:
Command
MCHP TAP INSTRUCTIONS
Value
Description
MTAP_COMMAND
5’h0x07
TDI and TDO connected to MCHP Command Shift register (See Table 19-2).
MTAP_SW_MTAP
5’h0x04
Switch TAP controller to MCHP TAP controller.
MTAP_SW_ETAP
5’h0x05
Switch TAP controller to EJTAG TAP controller.
MTAP_IDCODE
5’h0x01
Select Chip Identification Data register.
19.1
Microchip TAP Controllers (MTAP)
19.1.1
MTAP_COMMAND INSTRUCTION
MTAP_COMMAND selects the MCHP Command Shift
register. See Table 19-2 for available commands.
19.1.1.1
MCHP_STATUS INSTRUCTION
MCHP_STATUS returns the 8-bit Status value of the
Microchip TAP controller. Table 19-3 shows the format
of the Status value returned.
19.1.1.2
MCHP_ASSERT_RST INSTRUCTION
MCHP_ASSERT_RST performs a persistent device
Reset. It is similar to asserting and holding MCLR. Its
associated Status bit is DEVRST.
19.1.1.3
MCHP_DE_ASSERT_RST
INSTRUCTION
MCHP_DE_ASSERT_RST removes the persistent
device Reset. It is similar to de-asserting MCLR. Its
associated Status bit is DEVRST.
19.1.1.4
MCHP_FLASH_DISABLE
INSTRUCTION
MCHP_FLASH_DISABLE clears the FAEN bit which
controls processor accesses to the Flash memory. The
FAEN bit’s state is returned in the field of the same
name. This command has no effect if CPS = 0. This
command requires a NOP to complete.
Note:
19.1.2
This command is not required
PIC32MZ EC family devices.
for
MTAP_SW_MTAP INSTRUCTION
MTAP_SW_MTAP switches the TAP instruction set to the
MCHP TAP instruction set.
19.1.3
MTAP_SW_ETAP INSTRUCTION
MTAP_SW_ETAP effectively switches the TAP
instruction set to the EJTAG TAP instruction set. It does
this by holding the EJTAG TAP controller in the Run
Test/Idle state until a MTAP_SW_ETAP instruction is
decoded by the MCHP TAP controller.
19.1.4
MCHP_ERASE INSTRUCTION
MCHP_ERASE performs a Chip Erase. The CHIP_
ERASE command sets an internal bit that requests
the Flash Controller to perform the erase. Once the
controller becomes busy, as indicated by FCBUSY
(Status bit), the internal bit is cleared.
19.1.1.5
19.1.1.6
MTAP_IDCODE INSTRUCTION
MTAP_IDCODE returns the value stored in the DEVID
register.
MCHP_FLASH_ENABLE
INSTRUCTION
MCHP_FLASH_ENABLE sets the FAEN bit, which controls processor accesses to the Flash memory. The
FAEN bit’s state is returned in the field of the same
name. This command has no effect if CPS = 0. This
command requires a NOP to complete.
Note:
This command is not required
PIC32MZ EC family devices.
 2007-2013 Microchip Technology Inc.
for
DS61145L-page 55
PIC32
TABLE 19-2:
MTAP_COMMAND DR COMMANDS
Command
Value
Description
MCHP_STATUS
8’h0x00
NOP and return Status.
MCHP_ASSERT_RST
8’h0xD1
Requests the reset controller to assert device Reset.
MCHP_DE_ASSERT_RST
8’h0xD0
Removes the request for device Reset, which causes the reset
controller to de-assert device Reset if there is no other source
requesting Reset (i.e., MCLR).
MCHP_ERASE
8’h0xFC
Cause the Flash controller to perform a Chip Erase.
MCHP_FLASH_ENABLE(1)
8’h0xFE
Enables fetches and loads to the Flash (from the processor).
MCHP_FLASH_DISABLE(1)
8’h0xFD
Disables fetches and loads to the Flash (from the processor).
Note 1:
This command is not required for PIC32MZ EC family devices.
TABLE 19-3:
MCHP STATUS VALUE
Bit
Range
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
7:0
CPS
0
NVMERR(1)
0
CFGRDY
FCBUSY
FAEN(2)
DEVRST
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Note 1:
2:
CPS: Code-Protect State bit
1 = Device is not code-protected
0 = Device is code-protected
Unimplemented: Read as ‘0’
NVMERR: NVMCON Status bit(1)
1 = An Error occurred during NVM operation
0 = An Error did not occur during NVM operation
Unimplemented: Read as ‘0’
CFGRDY: Code-Protect State bit
1 = Configuration has been read and CP is valid
0 = Configuration has not been read
FCBUSY: Flash Controller Busy bit
1 = Flash controller is busy (Erase is in progress)
0 = Flash controller is not busy (either erase has not started or it has finished)
FAEN: Flash Access Enable bit(2)
This bit reflects the state of CFGCON.FAEN.
1 = Flash access is enabled
0 = Flash access is disabled (i.e., processor accesses are blocked)
DEVRST: Device Reset State bit
1 = Device Reset is active
0 = Device Reset is not active
This bit is not implemented in PIC32MX320/340/360/420/440/460 devices.
This bit is not implemented in PIC32MZ EC family devices.
TABLE 19-4:
EJTAG TAP INSTRUCTIONS
Command
ETAP_ADDRESS
Value
5’h0x08
Description
Select Address register.
ETAP_DATA
5’h0x09
Select Data register.
ETAP_CONTROL
5’h0x0A
Select EJTAG Control register.
ETAP_EJTAGBOOT
5’h0x0C
Set EjtagBrk, ProbEn and ProbTrap to ‘1’ as the reset value.
ETAP_FASTDATA
5’h0x0E
Selects the Data and Fastdata registers.
DS61145L-page 56
 2007-2013 Microchip Technology Inc.
PIC32
19.2
19.2.1
EJTAG TAP Controller
ETAP_ADDRESS COMMAND
ETAP_ADDRESS selects the Address register. The
read-only Address register provides the address for a
processor access. The value read in the register is
valid if a processor access is pending, otherwise the
value is undefined.
The two or three Least Significant Bytes (LSBs) of the
register are used with the Psz field from the EJTAG
Control register to indicate the size and data position of
the pending processor access transfer. These bits are
not taken directly from the address referenced by the
load/store.
19.2.2
ETAP_DATA COMMAND
ETAP_DATA selects the Data register. The read/write
Data register is used for op code and data transfers
during processor accesses. The value read in the Data
register is valid only if a processor access for a write is
pending, in which case the Data register holds the store
value. The value written to the Data register is only
used if a processor access for a pending read is
finished afterwards; in which case, the data value
written is the value for the fetch or load. This behavior
implies that the Data register is not a memory location
where a previously written value can be read
afterwards.
19.2.3
ETAP_CONTROL COMMAND
ETAP_CONTROL selects the Control register. The
EJTAG Control register (ECR) handles processor Reset
and soft Reset indication, Debug mode indication,
access start, finish and size, and read/write indication.
The ECR also provides the following features:
• Controls debug vector location and indication of
serviced processor accesses
• Allows a debug interrupt request
• Indicates a processor low-power mode
• Allows implementation-dependent processor and
peripheral Resets
19.2.3.1
EJTAG Control Register (ECR)
The EJTAG Control register (see Register 19-1) is not
updated/written in the Update-DR state unless the
Reset occurred; that is ROCC (bit 31) is either already
‘0’ or is written to ‘0’ at the same time. This condition
ensures proper handling of processor accesses after a
Reset.
Reset of the processor can be indicated through the
ROCC bit in the TCK domain a number of TCK cycles
after it is removed in the processor clock domain in
order to allow for proper synchronization between the
two clock domains.
Bits that are Read/Write (R/W) in the register return
their written value on a subsequent read, unless other
behavior is defined.
Internal synchronization ensures that a written value is
updated for reading immediately afterwards, even
when the TAP controller takes the shortest path from
the Update-DR to Capture-DR state.
 2007-2013 Microchip Technology Inc.
DS61145L-page 57
PIC32
REGISTER 19-1:
Bit
Range
31:24
23:16
15:8
7:0
Bit
31/23/15/7
Bit
30/22/14/6
Bit
29/21/13/5
R/W-0
R-0
R-0
Rocc
R-0
bit 17
bit 16
bit 15
bit 14
bit 13
bit 12
bit 11-4
bit 3
bit 2-0
Note 1:
Bit
Bit
28/20/12/4 27/19/11/3
Psz<1:0>
Bit
26/18/10/2
Bit
25/17/9/1
Bit
24/16/8/0
U-0
U-0
U-0
U-0
U-0
—
—
—
—
—
U-0
R/W-0
R-0
R-0
R/W-0
R-0
R/W-0
VPED
Doze
Halt
PerRst
PrnW
PrACC
—
PrRst
R/W-0
R/W-0
U-0
R/W-0
U-0
U-0
U-0
U-0
ProbEn
ProbTrap
—
EjtagBrk
—
—
—
—
U-0
U-0
U-0
U-0
R-0
U-0
U-0
U-0
—
—
—
—
DM
—
—
—
Legend:
R = Readable bit
-n = Value at POR
bit 31-29
bit 28-24
bit 23-19
bit 18
ECR: EJTAG CONTROL REGISTER
W = Writable bit
‘1’ = Bit is set
U = Unimplemented bit, read as ‘0’
‘0’ = Bit is cleared
x = Bit is unknown
See Note 1
Unimplemented: Read as ‘0’
See Note 1
PrACC: Pending Processor Access and Control bit
This bit indicates a pending processor access and controls finishing of a pending processor access. A write
of ‘0’ finishes processor access if pending. A write of ‘1’ is ignored. A successful FASTDATA access will clear
this bit.
1 = Pending processor access
0 = No pending preprocessor access
Unimplemented: Read as ‘0’
See Note 1
ProbEn: Processor Access Service Control bit
This bit controls where the probe handles accesses to the DMSEG segment through servicing of processor
accesses.
1 = Probe services processor accesses
0 = Probe does not service processor access
ProbTrap: Debug Exception Vector Control Location bit
This bit controls the location of the debug exception vector.
1 = 0xFF200200
0 = 0xBFC00480
Unimplemented: Read as ‘0’
EjtagBrk: Debug Interrupt Exception Request bit
This bit requests a debug interrupt exception to the processor when this bit is written as ‘1’. A write of ‘0’ is
ignored.
1 = A debug interrupt exception request is pending
0 = A debug interrupt exception request is not pending
Unimplemented: Read as ‘0’
See Note 1
Unimplemented: Read as ‘0’
For descriptions of these bits, please refer to the EJTAG Control Register Field Descriptions in the “EJTAG
Specification” (MD00047), which is available from MIPS Technologies, Inc. (www.mips.com).
DS61145L-page 58
 2007-2013 Microchip Technology Inc.
PIC32
19.2.4
ETAP_EJTAGBOOT COMMAND
The ETAP_EJTAGBOOT command causes the
processor to fetch code from the debug exception
vector after a reset. This allows the programmer to
send instructions to the processor to execute, instead
of the processor fetching them from the normal reset
vector. The Reset value of the EjtagBrk, ProbTrap, and
ProbE bits follows the setting of the internal
EJTAGBOOT indication.
If the EJTAGBOOT instruction has been given, and the
internal EJTAGBOOT indication is active, then the
Reset value of the three bits is set (‘1’), otherwise the
Reset value is clear (‘0’).
The results of setting these bits are:
• Setting the EjtagBrk causes a Debug interrupt
exception to be requested right after the
processor Reset from the EJTAGBOOT instruction
• The debug handler is executed from the EJTAG
memory because ProbTrap is set to indicate
debug vector in EJTAG memory at 0xFF200200
• Service of the processor access is indicated
because ProbEn is set
With this configuration in place, an interrupt exception
will occur and the processor will fetch the handler from
the DMSEG at 0xFF200200. Since ProbEn is set, the
processor will wait for the instruction to be provided by
the probe.
19.2.5
ETAP_FASTDATA COMMAND
The ETAP_FASTDATA command provides a
mechanism for quickly transferring data between the
processor and the probe. The width of the Fastdata
register is one bit. During a fast data access, the
Fastdata register is written and read (i.e., a bit is shifted
in and a bit is shifted out). During a fast data access,
the Fastdata register value shifted in specifies whether
the fast data access should be completed or not. The
value shifted out is a flag that indicates whether the fast
data access was successful or not (if completion was
requested). The FASTDATA access is used for efficient
block transfers between the DMSEG segment (on the
probe) and target memory (on the processor). An
“upload” is defined as a sequence that the processor
loads from target memory and stores to the DMSEG
segment. A “download” is a sequence of processor
loads from the DMSEG segment and stores to target
memory. The “Fastdata area” specifies the legal range
of DMSEG segment addresses (0xFF200000 to
0xFF20000F) that can be used for uploads and
downloads. The Data and Fastdata registers (selected
with the FASTDATA instruction) allow efficient
completion of pending Fastdata area accesses.
During Fastdata uploads and downloads, the
processor will stall on accesses to the Fastdata area.
The PrAcc (processor access pending bit) will be ‘1’
indicating the probe is required to complete the access.
Both upload and download accesses are attempted by
shifting in a zero SPrAcc value (to request access
completion) and shifting out SPrAcc to see if the
attempt will be successful (i.e., there was an access
pending and a legal Fastdata area address was used).
Downloads will also shift in the data to be used to
satisfy the load from the DMSEG segment Fastdata
area, while uploads will shift out the data being stored
to the DMSEG segment Fastdata area.
As noted above, two conditions must be true for the
Fastdata access to succeed. These are:
• PrAcc must be ‘1’ (i.e., there must be a pending
processor access)
• The Fastdata operation must use a valid Fastdata
area address in the DMSEG segment
(0xFF200000 to 0xFF20000F)
 2007-2013 Microchip Technology Inc.
DS61145L-page 59
PIC32
20.0
AC/DC CHARACTERISTICS AND TIMING REQUIREMENTS
TABLE 20-1:
AC/DC CHARACTERISTICS AND TIMING REQUIREMENTS
Standard Operating Conditions
Operating Temperature: 0ºC to +70ºC. Programming at +25ºC is recommended.
Param.
Symbol
No.
D111
Characteristic
Min.
Max.
Units
Conditions
VDD
Supply Voltage During Programming
—
—
V
See Note 1
D113
IDDP
Supply Current During Programming
—
—
mA
See Note 1
D114
IPEAK
Instantaneous Peak Current During Start-up
—
—
mA
See Note 1
D031
VIL
Input Low Voltage
—
—
V
See Note 1
D041
VIH
Input High Voltage
—
—
V
See Note 1
D080
VOL
Output Low Voltage
—
—
V
See Note 1
D090
VOH
Output High Voltage
—
—
V
See Note 1
D012
CIO
Capacitive Loading on I/O pin (PGEDx)
—
—
pF
See Note 1
D013
CF
Filter Capacitor Value on VCAP
—
—
F
See Note 1
P1
TPGC
Serial Clock (PGECx) Period
100
—
ns
—
P1A
TPGCL
Serial Clock (PGECx) Low Time
40
—
ns
—
P1B
TPGCH
Serial Clock (PGECx) High Time
40
—
ns
—
P6
TSET2
VDD Setup Time to MCLR 
100
—
ns
—
P7
THLD2
Input Data Hold Time from MCLR 
500
—
ns
—
P9A
TDLY4
PE Command Processing Time
40
—
s
—
P9B
TDLY5
Delay between PGEDx by the PE to PGEDx
Released by the PE
15
—
s
—
P11
TDLY7
Chip Erase Time
—
—
ms
See Note 1
P12
TDLY8
Page Erase Time
—
—
ms
See Note 1
See Note 1
P13
TDLY9
Row Programming Time
—
—
ms
P14
TR
MCLR Rise Time to Enter ICSP™ mode
—
1.0
s
—
P15
TVALID
Data Out Valid from PGECx 
10
—
ns
—
P16
TDLY8
Delay between Last PGECx  and MCLR 
0
—
s
—
P17
THLD3
MCLR to VDD 
—
100
ns
—
P18
TKEY1
Delay from First MCLR to First PGECx for Key
Sequence on PGEDx
40
—
ns
—
P19
TKEY2
Delay from Last PGECx for Key Sequence on
PGEDx to Second MCLR 
40
—
ns
—
P20
TMCLRH MCLR High Time
—
500
µs
—
Note 1:
Refer to the “Electrical Characteristics” chapter in the specific device data sheet for the Minimum and
Maximum values for this parameter.
DS61145L-page 60
 2007-2013 Microchip Technology Inc.
PIC32
APPENDIX A:
FIGURE A-1:
PIC32 FLASH
MEMORY MAP
FLASH MEMORY MAP
0x1D000000
APPENDIX B:
HEX FILE FORMAT
Flash programmers process the standard hexadecimal
(hex) format used by the Microchip development tools.
The format supported is the Intel® HEX32 Format
(INHX32). Please refer to Section 1.75 “Hex file
Formats” in the “MPASM™ Assembler, MPLINK™
Object Linker, MPLIB™ Object Librarian User’s Guide”
(DS33014) for more information about hex file formats.
The basic format of the hex file is:
:BBAAAATTHHHH...HHHHCC
PFM
Each data record begins with a 9-character prefix and
always ends with a 2-character checksum. All records
begin with ‘:’, regardless of the format. The individual
elements are described below.
Program Flash Memory
0x1D007FFF
0x1F000000
0x1F001FFF
Because the Intel hex file format is byte-oriented, and
the 16-bit program counter is not, program memory
sections require special treatment. Each 24-bit
program word is extended to 32 bits by inserting a socalled “phantom byte”. Each program memory
address is multiplied by 2 to yield a byte address.
0x1F002FF0
As an example, a section that is located at 0x100 in
program memory will be represented in the hex file as
0x200.
BFM
Boot Page 0
Boot Page 1
Boot Page 2
Debug Page
Configuration Words
(4 x 32 bits)
Note:
• BB – is a two-digit hexadecimal byte count
representing the number of data bytes that appear
on the line. Divide this number by two to get the
number of words per line.
• AAAA – is a four-digit hexadecimal address
representing the starting address of the data
record. Format is high byte first followed by low
byte. The address is doubled because this format
only supports 8 bits. Divide the value by two to
find the real device address.
• TT – is a two-digit record type that will be ‘00’ for
data records, ‘01’ for end-of-file records and ‘04’
for extended-address record.
• HHHH – is a four-digit hexadecimal data word.
Format is low byte followed by high byte. There
will be BB/2 data words following TT.
• CC – is a two-digit hexadecimal checksum that is
the 2’s complement of the sum of all the
preceding bytes in the line record.
0x1F002FFF
The memory map shown is for reference
only. Refer to the “Memory Organization”
chapter in the specific device data sheet for
the memory map for your device.
 2007-2013 Microchip Technology Inc.
The hex file will be produced with the following
contents:
:020000040000fa
:040200003322110096
:00000001FF
Notice that the data record (line 2) has a load
address of 0200, while the source code specified
address 0x100. Note also that the data is
represented in “little-endian” format, meaning the
Least Significant Byte appears first. The phantom
byte appears last, just before the checksum.
DS61145L-page 61
PIC32
APPENDIX C:
REVISION HISTORY
Revision A (August 2007)
This is the initial released version of the document.
Revision B (February 2008)
Update records for this revision are not available.
Revision C (April 2008)
Update records for this revision are not available.
Revision D (May 2008)
Update records for this revision are not available.
Revision E (July 2009)
This version of the document includes the following
additions and updates:
• Minor changes to style and formatting have been
incorporated throughout the document
• Added the following devices:
- PIC32MX565F256H
- PIC32MX575F512H
- PIC32MX675F512H
- PIC32MX795F512H
- PIC32MX575F512L
- PIC32MX675F512L
- PIC32MX795F512L
• Updated MCLR pulse line to show active-high
(P20) in Figure 7-1
• Updated Step 7 of Table 11-1 to clarify repeat of
the last instruction in the step
• The following instructions in Table 13-1 were
updated:
- Seventh, ninth and eleventh instructions in
Step 1
- All instructions in Step 2
- First instruction in Step 3
- Third instruction in Step 4
• Added the following devices to Table 17-1:
- PIC32MX565F256H
- PIC32MX575F512H
- PIC32MX575F512L
- PIC32MX675F512H
- PIC32MX675F512L
- PIC32MX795F512H
- PIC32MX795F512L
• Updated address values in Table 17-2
DS61145L-page 62
Revision E (July 2009) (Continued)
• Added the following devices to Table 17-5:
- PIC32MX565F256H
- PIC32MX575F512H
- PIC32MX675F512H
- PIC32MX795F512H
- PIC32MX575F512L
- PIC32MX675F512L
- PIC32MX795F512L
• Added Notes 1-3 and the following bits to the
DEVCFG - Device Configuration Word Summary
and the DEVCFG3: Device Configuration Word 3
(see Table 18-1 and Register ):
- FVBUSIO
- FUSBIDIO
- FCANIO
- FETHIO
- FMIIEN
- FPBDIV<1:0>
- FJTAGEN
• Updated the DEVID Summary (see Table 18-1)
• Updated ICESEL bit description and added the
FJTAGEN bit in DEVCFG0: Device Configuration
Word 0 (see Register 16-1)
• Updated DEVID: Device and Revision ID register
• Added Device IDs and Revision table (Table 18-4)
• Added MCLR High Time (parameter P20) to
Table 20-1
• Added Appendix B: “Hex File Format” and
Appendix D: “Revision History”
Revision F (April 2010)
This version of the document includes the following
additions and updates:
• The following global bit name changes were
made:
- NVMWR renamed as WR
- NVMWREN renamed as WREN
- NVMERR renamed as WRERR
- FVBUSIO renamed as FVBUSONIO
- FUPLLEN renamed as UPLLEN
- FUPLLIDIV renamed as UPLLIDIV
- POSCMD renamed as POSCMOD
• Updated the PIC32MX family data sheet
references in the fourth paragraph of Section 2.0
“Programming Overview”
• Updated the note in Section 5.2.2 “2-Phase
ICSP”
• Updated the Initiate Flash Row Write Op Codes and
instructions (see steps 4, 5 and 6 in Table 13-1)
 2007-2013 Microchip Technology Inc.
PIC32
Revision F (April 2010) (Continued)
• Added the following devices:
- PIC32MX534F064H
- PIC32MX534F064L
- PIC32MX564F064H
- PIC32MX564F064L
- PIC32MX564F128H
- PIC32MX564F128L
- PIC32MX575F256L
- PIC32MX664F064H
- PIC32MX664F064L
- PIC32MX664F128H
- PIC32MX664F128L
- PIC32MX675F256H
- PIC32MX675F256L
- PIC32MX695F512H
- PIC32MX605F512L
- PIC32MX764F128H
- PIC32MX764F128L
- PIC32MX775F256H
- PIC32MX775F256L
- PIC32MX775F512H
- PIC32MX775F512L
Revision G (August 2010)
This revision of the document includes the following
updates:
• Updated Step 3 in Table 11-1: Download the PE
• Minor corrections to formatting and text have
been incorporated throughout the document
Revision H (April 2011)
This version of the document includes the following
additions and updates:
• Updates to formatting and minor typographical
changes have been incorporated throughout the
document
• The following devices were added:
- PIC32MX110F016B
- PIC32MX110F016C
- PIC32MX110F016D
- PIC32MX120F032B
- PIC32MX120F032C
- PIC32MX120F032D
- PIC32MX210F016B
- PIC32MX210F016C
- PIC32MX210F016D
- PIC32MX220F032B
- PIC32MX220F032C
- PIC32MX220F032D
• The following rows were added to Table 17-1:
- PIC32MX1X0
- PIC32MX2X0
• Added a new sub section Section 17.4.6
“Checksum Values While Device Is CodeProtected”
 2007-2013 Microchip Technology Inc.
• Removed Register 18-1 through Register 18-5.
• Removed Table 17-2
• Removed Section 17.5 “Checksum for PIC32
Devices” and its sub sections
• The Flash Program Memory Write-Protect
Ranges table was removed (formerly Table 18-4)
• Added DEVCFG Locations for PIC32MX1X0 and
PIC32MX20X Devices Only (see Table 18-3)
• In Section 18.0 “Configuration Memory and
Device ID”, removed Table 18-1 and updated
Table 18-2: DEVID Summary as Table 18-1
• Added the NVMERR bit to the MCHP Status
Value table (see Table 19-3)
• The following Silicon Revision and Revision ID
are added to Table 18-4:
- 0x5 - B6 Revision
- 0x1 - A1 Revision
• Added a note to the Flash Memory Map (see
Figure A-1)
• Added Appendix C: “Flash Program Memory
Data Sheet Clarification”
Revision J (August 2011)
Note:
The revision history in this document
intentionally skips from Revision H to
Revision J to avoid confusing the
uppercase letter “I” (EY) with the
lowercase letter “l” (EL).
This revision includes the following updates:
• All occurrences of VCORE/VCAP have been changed
to VCAP
• Updated the fourth paragraph of Section 2.0
“Programming Overview”
• Removed the column, Programmer Pin Name, from
the 2-Wire Interface Pins table and updated the Pin
Type for MCLR (see Table 4-2)
• Added the following new devices to the Code
Memory Size table (see Table 5-1) and the Device
IDs and Revision table (see Table 18-4):
- PIC32MX130F064B
- PIC32MX130F064C
- PIC32MX130F064D
- PIC32MX150F128B
- PIC32MX150F128C
- PIC32MX150F128D
- PIC32MX230F064B
- PIC32MX230F064C
- PIC32MX230F064D
- PIC32MX250F128B
- PIC32MX250F128C
- PIC32MX250F128D
• Added Row Size and Page Size columns to the
Code Memory Size table (see Table 5-1)
DS61145L-page 63
PIC32
Revision J (August 2011) (Continued)
• Updated the PGCx signal in Entering Enhanced
ICSP Mode (see Figure 7-1)
• Updated the Erase Device block diagram (see
Figure 9-1)
• Added a new step 4 to the process to erase a target
device in Section 9.0 “Erasing the Device”
• Updated the MCLR signal in 2-Wire Exit Test
Mode (see Figure 15-2)
• Updated the PE Command Set with the following
commands and modified Note 2 (see Table 16-2):
- PROGRAM_CLUSTER
- GET_DEVICEID
- CHANGE_CFG
• Added a second note to Section 16.2.11
“GET_CRC Command”
• Updated the Address and Length descriptions in the
PROGRAM_CLUSTER Format (see Table 16-13)
• Added a note after the CHANGE_CFG Response (see
Figure 16-27)
• Updated the DEVCFG0 and DEVCFG1 values for
All PIC32MX1XX and All PIC32MX2XX devices in
Table 17-1
• The following changes were made to the AC/DC
Characteristics and Timing Requirements
(Table 20-1):
- Updated the Min. value for parameter D111 (VDD)
- Added parameter D114 (IPEAK)
- Removed parameters P2, P3, P4, P4A, P5, P8
and P10
• Removed Appendix C: “Flash Program Memory
Data Sheet Clarification”
• Minor updates to text and formatting were
incorporated throughout the document
Revision K (July 2012)
This revision includes the following updates:
• All occurrences of PGC and PGD were changed to:
PGEC and PGED, respectively
• Updated Section 1.0 “Device Overview” with a list
of all major topics in this document
• Added Section 2.3 “Data Sizes”
• Updated Section 4.0 “Connecting to the Device”
• Added Note 2 to Connections for the On-chip
Regulator (see Figure 4-2)
• Added Note 2 to the 4-wire and 2-wire Interface Pins
tables (see Table 4-1 and Table 4-2)
• Updated Section 7.0 “Entering 2-Wire Enhanced
ICSP Mode”
• Updated Entering Serial Execution Mode (see
Figure 10-1)
• Updated step 11 in Section 10.2 “2-wire Interface”
DS61145L-page 64
• Updated Section 12.2 “With the PE”
• Updated Step 3 in Initiate Flash Row Write Op
Codes (see Table 13-1)
• Updated Step 1 in Verify Device Op Codes (see
Table 14-1)
• Updated the interval in Section 15.1 “4-wire
Interface” and Section 15.2 “2-wire Interface”
• Added a note regarding the PE location in
Section 16.0 “The Programming Executive”
• Added references to the Operand field throughout
Section 16.2 “The PE Command Set”
• Updated the PROGRAM Command Algorithm (see
Figure 16-9)
• Updated the mask values for All PIC32MX1XX
and PIC32MX2XX devices, and DEVCFG3 for all
devices (see Table 17-1)
• Updated the DCR value (see Section 17.4.3
“Calculating for “DCR” in the Checksum
Formula” and Table 17-2)
• Updated the Checksum Calculation Process (see
Example 17-1)
• Added these new devices to the Code Memory Size
table (see Table 5-1) and the Device IDs and
Revision table (see Table 18-4):
-
PIC32MX420F032H
PIC32MX330F064H
PIC32MX330F064L
PIC32MX430F064H
PIC32MX430F064L
PIC32MX340F128H
PIC32MX340F128L
PIC32MX350F128H
PIC32MX350F128L
PIC32MX350F256H
PIC32MX350F256L
PIC32MX440F128H
PIC32MX440F128L
PIC32MX450F128H
-
PIC32MX450F128L
PIC32MX440F256H
PIC32MX450F256H
PIC32MX450F256L
PIC32MX460F256L
PIC32MX340F512H
PIC32MX360F512H
PIC32MX370F512H
PIC32MX370F512L
PIC32MX440F512H
PIC32MX460F512L
PIC32MX470F512H
PIC32MX470F512L
• Added a Note to Section 18.2 “Device Code
Protection bit (CP)”
• Added the EJTAG Control Register (see
Register 19-1)
• Updated Section 19.2.4 “ETAP_EJTAGBOOT
Command”
• AC/DC Characteristics and Timing Requirements
updates (see Table 20-1):
- Removed parameter D112
- Replaced Notes 1 and 2 with a new Note 1
- Updated parameters D111, D113, D114, D031,
D041, D080, D090, D012, D013, P11, P12, and
P13
• Minor updates to text and formatting were
incorporated through the document
 2007-2013 Microchip Technology Inc.
PIC32
Revision L (January 2013)
This revision includes the following updates:
• The following sections were added or updated:
- Section 2.1 “Devices with Dual Flash
Panel and Dual Boot Regions” (new)
- Section 4.3 “Power Requirements”
- Section 13.0 “Initiating a Flash Row Write”
- Section 16.1.1 “2-wire ICSP EJTAG RATE”
• Updated the Device Configuration Register Mask
Values (see Table 17-1)
• The following devices were added to the Code
Memory Size table and the Device IDs and Revision
table (see Table 5-1 and Table 18-4):
- PIC32MZ0256ECE064
- PIC32MZ1024ECF064
- PIC32MZ0256ECE100
- PIC32MZ1024ECF100
- PIC32MZ0256ECE124
- PIC32MZ1024ECF124
- PIC32MZ0256ECE144
- PIC32MZ1024ECF144
- PIC32MZ0256ECF064
- PIC32MZ1024ECG064
- PIC32MZ0256ECF100
- PIC32MZ1024ECG100
- PIC32MZ0256ECF124
- PIC32MZ1024ECG124
- PIC32MZ0256ECF144
- PIC32MZ1024ECG144
- PIC32MZ0512ECE064
- PIC32MZ1024ECH064
- PIC32MZ0512ECE100
- PIC32MZ1024ECH100
- PIC32MZ0512ECE124
- PIC32MZ1024ECH124
- PIC32MZ0512ECE144
- PIC32MZ1024ECH144
- PIC32MZ0512ECF064
- PIC32MZ2048ECG064
- PIC32MZ0512ECF100
- PIC32MZ2048ECG100
- PIC32MZ0512ECF124
- PIC32MZ2048ECG124
- PIC32MZ0512ECF144
- PIC32MZ2048ECG144
- PIC32MZ1024ECE064
- PIC32MZ2048ECH064
- PIC32MZ1024ECE100
- PIC32MZ2048ECH100
- PIC32MZ1024ECE124
- PIC32MZ2048ECH124
- PIC32MZ1024ECE144
- PIC32MZ2048ECH144
• Note 3 and Note 4 and the GET_CHECKSUM and
QUAD_WORD_PRGM commands were added to the
PE Command Set (see Table 16-2)
• Added Section 16.2.15 “GET_CHECKSUM
Command”
• Added Section 16.2.16
“QUAD_WORD_PROGRAM Command”
• Updated all addresses in DEVCFG Locations
(see Table 18-1 and Table 18-2)
• Added Configuration Word Locations for
PIC32MZ EC Family Devices (see Table 18-3)
• Updated Section 18.2 “Device Code Protection
bit (CP)”
• Updated Section 18.3 “Program Write Protection
bits (PWP)”
• All references to Test mode were updated to
Programming mode throughout the document
• Minor updates to text and formatting were
incorporated through the document
 2007-2013 Microchip Technology Inc.
DS61145L-page 65
PIC32
NOTES:
DS61145L-page 66
 2007-2013 Microchip Technology Inc.
Note the following details of the code protection feature on Microchip devices:
•
Microchip products meet the specification contained in their particular Microchip Data Sheet.
•
Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.
•
There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
•
Microchip is willing to work with the customer who is concerned about the integrity of their code.
•
Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Information contained in this publication regarding device
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to
ensure that your application meets with your specifications.
MICROCHIP MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND WHETHER EXPRESS OR
IMPLIED, WRITTEN OR ORAL, STATUTORY OR
OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION,
QUALITY, PERFORMANCE, MERCHANTABILITY OR
FITNESS FOR PURPOSE. Microchip disclaims all liability
arising from this information and its use. Use of Microchip
devices in life support and/or safety applications is entirely at
the buyer’s risk, and the buyer agrees to defend, indemnify and
hold harmless Microchip from any and all damages, claims,
suits, or expenses resulting from such use. No licenses are
conveyed, implicitly or otherwise, under any Microchip
intellectual property rights.
Trademarks
The Microchip name and logo, the Microchip logo, dsPIC,
FlashFlex, KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro,
PICSTART, PIC32 logo, rfPIC, SST, SST Logo, SuperFlash
and UNI/O are registered trademarks of Microchip Technology
Incorporated in the U.S.A. and other countries.
FilterLab, Hampshire, HI-TECH C, Linear Active Thermistor,
MTP, SEEVAL and The Embedded Control Solutions
Company are registered trademarks of Microchip Technology
Incorporated in the U.S.A.
Silicon Storage Technology is a registered trademark of
Microchip Technology Inc. in other countries.
Analog-for-the-Digital Age, Application Maestro, BodyCom,
chipKIT, chipKIT logo, CodeGuard, dsPICDEM,
dsPICDEM.net, dsPICworks, dsSPEAK, ECAN,
ECONOMONITOR, FanSense, HI-TIDE, In-Circuit Serial
Programming, ICSP, Mindi, MiWi, MPASM, MPF, MPLAB
Certified logo, MPLIB, MPLINK, mTouch, Omniscient Code
Generation, PICC, PICC-18, PICDEM, PICDEM.net, PICkit,
PICtail, REAL ICE, rfLAB, Select Mode, SQI, Serial Quad I/O,
Total Endurance, TSHARC, UniWinDriver, WiperLock, ZENA
and Z-Scale are trademarks of Microchip Technology
Incorporated in the U.S.A. and other countries.
SQTP is a service mark of Microchip Technology Incorporated
in the U.S.A.
GestIC and ULPP are registered trademarks of Microchip
Technology Germany II GmbH & Co. & KG, a subsidiary of
Microchip Technology Inc., in other countries.
All other trademarks mentioned herein are property of their
respective companies.
© 2007-2013, Microchip Technology Incorporated, Printed in
the U.S.A., All Rights Reserved.
Printed on recycled paper.
ISBN: 978-1-62076-856-3
QUALITY MANAGEMENT SYSTEM
CERTIFIED BY DNV
== ISO/TS 16949 ==
 2007-2013 Microchip Technology Inc.
Microchip received ISO/TS-16949:2009 certification for its worldwide
headquarters, design and wafer fabrication facilities in Chandler and
Tempe, Arizona; Gresham, Oregon and design centers in California
and India. The Company’s quality system processes and procedures
are for its PIC® MCUs and dsPIC® DSCs, KEELOQ® code hopping
devices, Serial EEPROMs, microperipherals, nonvolatile memory and
analog products. In addition, Microchip’s quality system for the design
and manufacture of development systems is ISO 9001:2000 certified.
DS61145L-page 67
Worldwide Sales and Service
AMERICAS
ASIA/PACIFIC
ASIA/PACIFIC
EUROPE
Corporate Office
2355 West Chandler Blvd.
Chandler, AZ 85224-6199
Tel: 480-792-7200
Fax: 480-792-7277
Technical Support:
http://www.microchip.com/
support
Web Address:
www.microchip.com
Asia Pacific Office
Suites 3707-14, 37th Floor
Tower 6, The Gateway
Harbour City, Kowloon
Hong Kong
Tel: 852-2401-1200
Fax: 852-2401-3431
India - Bangalore
Tel: 91-80-3090-4444
Fax: 91-80-3090-4123
India - New Delhi
Tel: 91-11-4160-8631
Fax: 91-11-4160-8632
Austria - Wels
Tel: 43-7242-2244-39
Fax: 43-7242-2244-393
Denmark - Copenhagen
Tel: 45-4450-2828
Fax: 45-4485-2829
India - Pune
Tel: 91-20-2566-1512
Fax: 91-20-2566-1513
France - Paris
Tel: 33-1-69-53-63-20
Fax: 33-1-69-30-90-79
Japan - Osaka
Tel: 81-6-6152-7160
Fax: 81-6-6152-9310
Germany - Munich
Tel: 49-89-627-144-0
Fax: 49-89-627-144-44
Atlanta
Duluth, GA
Tel: 678-957-9614
Fax: 678-957-1455
Boston
Westborough, MA
Tel: 774-760-0087
Fax: 774-760-0088
Chicago
Itasca, IL
Tel: 630-285-0071
Fax: 630-285-0075
Cleveland
Independence, OH
Tel: 216-447-0464
Fax: 216-447-0643
Dallas
Addison, TX
Tel: 972-818-7423
Fax: 972-818-2924
Detroit
Farmington Hills, MI
Tel: 248-538-2250
Fax: 248-538-2260
Indianapolis
Noblesville, IN
Tel: 317-773-8323
Fax: 317-773-5453
Los Angeles
Mission Viejo, CA
Tel: 949-462-9523
Fax: 949-462-9608
Santa Clara
Santa Clara, CA
Tel: 408-961-6444
Fax: 408-961-6445
Toronto
Mississauga, Ontario,
Canada
Tel: 905-673-0699
Fax: 905-673-6509
Australia - Sydney
Tel: 61-2-9868-6733
Fax: 61-2-9868-6755
China - Beijing
Tel: 86-10-8569-7000
Fax: 86-10-8528-2104
China - Chengdu
Tel: 86-28-8665-5511
Fax: 86-28-8665-7889
China - Chongqing
Tel: 86-23-8980-9588
Fax: 86-23-8980-9500
Netherlands - Drunen
Tel: 31-416-690399
Fax: 31-416-690340
Korea - Daegu
Tel: 82-53-744-4301
Fax: 82-53-744-4302
Spain - Madrid
Tel: 34-91-708-08-90
Fax: 34-91-708-08-91
China - Hangzhou
Tel: 86-571-2819-3187
Fax: 86-571-2819-3189
Korea - Seoul
Tel: 82-2-554-7200
Fax: 82-2-558-5932 or
82-2-558-5934
China - Hong Kong SAR
Tel: 852-2943-5100
Fax: 852-2401-3431
Malaysia - Kuala Lumpur
Tel: 60-3-6201-9857
Fax: 60-3-6201-9859
China - Nanjing
Tel: 86-25-8473-2460
Fax: 86-25-8473-2470
Malaysia - Penang
Tel: 60-4-227-8870
Fax: 60-4-227-4068
China - Qingdao
Tel: 86-532-8502-7355
Fax: 86-532-8502-7205
Philippines - Manila
Tel: 63-2-634-9065
Fax: 63-2-634-9069
China - Shanghai
Tel: 86-21-5407-5533
Fax: 86-21-5407-5066
Singapore
Tel: 65-6334-8870
Fax: 65-6334-8850
China - Shenyang
Tel: 86-24-2334-2829
Fax: 86-24-2334-2393
Taiwan - Hsin Chu
Tel: 886-3-5778-366
Fax: 886-3-5770-955
China - Shenzhen
Tel: 86-755-8864-2200
Fax: 86-755-8203-1760
Taiwan - Kaohsiung
Tel: 886-7-213-7828
Fax: 886-7-330-9305
China - Wuhan
Tel: 86-27-5980-5300
Fax: 86-27-5980-5118
Taiwan - Taipei
Tel: 886-2-2508-8600
Fax: 886-2-2508-0102
China - Xian
Tel: 86-29-8833-7252
Fax: 86-29-8833-7256
Thailand - Bangkok
Tel: 66-2-694-1351
Fax: 66-2-694-1350
UK - Wokingham
Tel: 44-118-921-5869
Fax: 44-118-921-5820
China - Xiamen
Tel: 86-592-2388138
Fax: 86-592-2388130
China - Zhuhai
Tel: 86-756-3210040
Fax: 86-756-3210049
DS61145L-page 68
Italy - Milan
Tel: 39-0331-742611
Fax: 39-0331-466781
Japan - Tokyo
Tel: 81-3-6880- 3770
Fax: 81-3-6880-3771
11/29/12
 2007-2013 Microchip Technology Inc.