Buy(Cart) Contact NSDSP Home

Programming Speed

In March 2016, we have tested programming speed of NSDSP and Microchip programmers PICkit 3® and MPLAB ICD 3®. We have used 32 different PIC devices. The results of the tests show than NSDSP is several times faster than PICkit 3 and 1.5 times faster than ICD 3. You can find the detailed description of the tests below.

Results of the Speed Test

 

Programmers

The three programmers used in the tests were:

  • NSDSP-1-U 100
  • Microchip ICD 3 10-00421-R4 with firmware 01.47.07
  • Microchip PICkit 3 10-00424-R7 with firmware 01.47.07

 

Target Devices

It is impossible to test all the PIC devices. We wanted the set of the PICs to be a representative sample. We decided to include the following device families:

  • PIC16F
  • PIC18F
  • PIC18FxxJ
  • PIC18FxxK
  • PIC24F
  • dsPIC33FJ
  • dsPIC33EP
  • PIC32MX
  • PIC32MZ

From each family, we have selected devices with approximate flash memory size of 32K, 64K, 128K, 256K, 512K, 1024K, 2048K. We decided not to include devices with smaller ROM sizes because they're fast to program and exact programming speed is not important. For each device family, we included one device of each memory size. None of the families includes the full range of memory sizes. For example, PIC16F family only had devices with 32K ROM size. We also were not able to source PIC24F family devices with 512K flash size which do exit (e.g. PIC24FJ512GA606), but were not available from Microchip at the time of test.

Using the above criteria, we have selected 32 different PIC devices.

 

HEX files

We prepared HEX files which would require the programmers to progam the entire chip including all memory areas on the chip - program memory, user id memory, configuration, and boot memory.

We did not include data EEPROM in the test for a number of reasons - most PIC devices do not have it, it is very slow to program, and it isn't usually programmed through ICSP.

We didn't want to program purely random content because this could damage target devices. Therefore, for each device, we started from a small HEX file for LED blinking C program compiled in MPLAB X. We then expanded this small HEX file to cover the entire chip memory by filling unused areas with random content.

Each device had its own HEX file, which was built specifically for the device. All programmers used the same HEX file when programming the device.

 

Hardware and Software

The tests were performed on a single computer:

  • CPU: Intel Core i5-2500 3.30GHz
  • Memory: 16.0 GB
  • OS: Windows 7 Professional Service Pack 1 64-bit
  • Standard Enhanced PCI to USB Host Controller

We used command line utilities - nsprog 100 for NSDSP and ipecmd v3.26 for Microchip programmers. They were the latest versions of the software at the moment of testing.

 

Measurements

Our orignal intention was to measure total time used by the command line utility to program the device. However, we have noticed that Microchip ipecmd software adds substantial overhead to the programming times. Typical ipecmd output looks like this:

 2153 *****************************************************
 3495 Connecting to MPLAB ICD 3...
 3495 Currently loaded firmware on ICD 3
 3495 Firmware Suite Version.....01.41.07
 3495 Firmware type..............PIC32MX
 5507 Target voltage detected
 5601 Target device PIC32MX270F256D found.
 5601 Device ID Revision = A2
 6677 The following memory area(s) will be programmed:
 6677 program memory: start address = 0x0, end address = 0x3ffff
 6677 boot config memory
 6677 configuration memory
 6677 Device Erased...
 6677 Programming...
12106 Programming/Verify complete
12106 ICD3 Program Report
12122 18-Mar-2016, 12:25:22
12122 Device Type:PIC32MX270F256D
12122 Program Succeeded.
12995 Operation Succeeded
13416 -- process exit

The numbers in front of the lines is the number of milliseconds since the start of the program. Looks like the whole programming process, which probably starts at the "Target voltage detected" line end ends at the "Programming/Verify complete" line, takes 6.6s, but there is also 5.5s overhead before the programming starts and also 1.3s after the programming stops which increases the total time to 13.4s.

We decided to base our assesments on the time measured between the "Target voltage detected" and "Programming/Verify complete", which we called "pure" programming time. We also report the total programming time for reference.

If you are doing production programming with ipecmd, you will have to endure total programming times. But if you use batch mode, graphical user interface IPE, or doing development programming, then part of the overhead may be absorbed and you will experience programming times anywhere between "pure" and total. It is also possible that the overhead may be reduced by using faster processor.

nsprog doesn't produce any overhead. We report the total time only.

While conducting tests, we tried to create the most favorable conditions for the selected programmers. For example, for PIC24/dsPIC33 families we ran the test twice for each programmer to give them an opportunity to re-use programming executives, and then we only measured the second run.

We made one measurement for every combination of a target device and a programmer.

 

Raw Results

The results of the measurements are reported below. For Microchip programmers, the first number refers to the "pure" programming time, while the number in paratheses is the total programming time.

Target Device NSDSP-1-UICD 3 PICkit 3
Devices with approximately 32K flash
PIC16LF1519 1.7s 5.1s
(11.9s)
15.3s
(23.4s)
PIC18F4550 1.8s 4.5s
(11.2s)
9.1s
(17.6s)
PIC18LF25J11 1.7s 3.1s
(9.9s)
5.0s
(12.9s)
PIC18F45K50 1.3s 3.8s
(11.2s)
8.2s
(16.5s)
PIC24F32KA302 1.9s 7.6s
(14.4s)
12.4s
(19.1s)
dsPIC33FJ32MC202 1.4s 4.3s
(11.2s)
6.0s
(13.2s)
dsPIC33EP32GP502 1.0s 3.9s
(10.9s)
5.8s
(14.4s)
PIC32MX120F032D 0.9s 2.3s
(9.0s)
4.9s
(13.1s)
Devices with approximately 64K flash
PIC18F4682 2.8s 6.9s
(14.0s)
18.1s
(26.5s)
PIC18F26J50 2.7s 4.6s
(11.5s)
7.7s
(15.7s)
PIC18F66K22 2.3s 5.8s
(12.6s)
15.3s
(22.4s)
PIC24FJ64GA102 1.7s 5.0s
(11.9s)
7.8s
(15.0s)
dsPIC33FJ64MC802 2.1s 5.6s
(12.7s)
8.9s
(15.7s)
dsPIC33EP64GS506 1.5s 6.3s
(13.3s)
9.1s
(17.7s)
PIC32MX664F064L 1.8s 3.0s
(9.8s)
7.5s
(16.0s)
Devices with approximately 128K flash
PIC18F6723 4.4s 22.9s
(29.6s)
42.5s
(50.1s)
PIC18F67J94 4.9s 6.2s
(13.1s)
13.2s
(20.8s)
PIC18F67K22 3.3s 8.7s
(15.5s)
26.0s
(34.3s)
PIC24FJ128GA202 3.4s 6.4s
(13.6s)
12.5s
(20.8s)
dsPIC33FJ128GP802 3.4s 7.6s
(15.0s)
14.4s
(21.8s)
dsPIC33EP128GM304 2.7s 7.6s
(15.0s)
14.6s
(22.6s)
PIC32MX564F128L 3.1s 4.4s
(11.3s)
11.7s
(20.0s)
Devices with approximately 256K flash
PIC24FJ256GA110 5.8s 11.1s
(18.2s)
24.0s
(30.8s)
dsPIC33FJ256GP710A 6.1s 10.9s
(18.5s)
22.7s
(31.1s)
dsPIC33EP256GP504 5.8s 13.8s
(20.8s)
26.8s
(35.5s)
PIC32MX270F256D 5.7s 6.6s
(13.3s)
22.9s
(31.0s)
Devices with approximately 512K flash
dsPIC33EP512MC502 11.3s 27.7s
(35.3s)
50.1s
(58.7s)
PIC32MX570F512L 11.2s 11.5s
(18.5s)
43.4s
(52.1s)
PIC32MZ0512EFE144 15.4s 13.2s
(20.7s)
50.4s
(59.2s)
Devices with approximately 1024K flash
PIC24FJ1024GB610 21.8s 29.3s
(36.6s)
735.3s
(743.4s)
PIC32MZ1024EFG100 26.9s 20.4s
(28.2s)
85.2s
(94.6s)
Devices with approximately 2048K flash
PIC32MZ2048EFH100 50.0s 35.1s
(43.0s)
154.4s
(163.7s)
Target Device NSDSP-1-UICD 3 PICkit 3

 

Outliers

For some reason, PICkit 3 spent more than 12 minutes programming PIC24FJ1024GB610. This could be because PICkit 3 had only beta support for this chip at the time of the test - the chip was released only four months prior to the test. We felt, using this number would portray PICkit 3 as much slower programmer than it really is. Therefore, we replaced this number with much smaller number which we derived from tests done with PIC24FJ256GA110. Since PIC24FJ1024GB610 has four times more memory than PIC24FJ256GA110, we multipled the result by 4. In short, instead of 735.3s (743.4s), we used much smaller 96.0s (104.1s) number in all further calculations.

 

Aggregated Results

To compare overall performance, and performance for PIC families, we aggregated the test results by summing up the programming times for every given family. These sums are presented below.

Device FamilyN NSDSP-1-UICD 3 PICkit 3
All Devices 32 212s 315s
(542s)
852s
(1110s)
PIC16 1 1.7s 5.1s
(11.9s)
15.3s
(23.4s)
PIC18F 3 9.1s 34.4s
(54.8s)
69.7s
(94.1s)
PIC18FxxJ 3 9.4s 13.9s
(34.5s)
25.9s
(49.4s)
PIC18FxxK 3 6.9s 18.3s
(39.3s)
49.4s
(73.2s)
PIC24F 5 34.6s 59.5s
(94.7s)
152.7s
(189.8s)
dsPIC33FJ 4 13.0s 28.4s
(57.3s)
51.9s
(81.8s)
dsPIC33EP 5 22.3s 59.2s
(95.3s)
106.4s
(148.9s)
PIC32MX 5 22.7s 27.8s
(61.9s)
90.4s
(132.2s)
PIC32MZ 3 92.3s 68.7s
(91.8s)
290.1s
(317.5s)

According to the test results, NSDSP is the fastest programmer overall. Even judging by "pure" programming times, it is 1.5 times faster than ICD 3 and four times faster than PICkit 3.

NSDSP is also the fastest programmer for each of the PIC families, except PIC32MZ. ICD 3 programs PIC32MZ chips faster. NSDSP is limited to 6MHz communication speeds, 64KB/sec USB HID transfer rates and also its CPU falls behind when it comes to complicated JTAG-over-ICSP interface. We may consider to design a faster programmer which surpasses these limitations and produces faster programming speeds for high end chips. If you are interested in such design, please let us know.

Northern Software Home NSDSP Contact Us Purchase/Vew Cart

© 2007-2023 Northern Software Inc. All Rights Reserved.