Speed Test: NSDSP-3-X, NSDSP-2-X, and Microchip programmers
In August 2025, we have tested programming speed of NSDSP-3-X, NSDSP-2-X, and Microchip programmers - Snap, PICkit Basic®, PICkit 5®, and MPLAB ICD 5®. We have used 51 different PIC devices. The results of the tests show than NSDSP-3-X is 3 times faster than NSDSP-2-X and 4 times faster than Micrichip programmers. You can find the detailed description of the tests below.
Programmers
The 6 programmers used in the tests were:
Target Devices
It is impossible to test all the PIC devices. We wanted the set of the PICs under test to be a representative sample. We decided to include the following device families:
From each family, we have selected devices with approximate flash memory size of 32K, 64K, 128K, 256K, 512K, 1024K, 2048K. We have not included 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, PIC16F1 family only had devices with 32K ROM size, while the smallest PIC32MZ has 512K of flash.
Using the above criteria, we have selected 51 different PIC devices.
HEX files
We prepared HEX files which would require the programmers to program 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.
The contents of the HEX files was purely random except the configuration bits. 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:
We used command line utilities - nsprog 175 for NSDSP and ipecmd from MPLAB X 6.25 for Microchip programmers. They were the latest versions of the software at the moment of testing.
For nsprog, we used p operation which includes programming and full verification.
For ipecmd, we used -M option which also performs programming and verification, and also -OAS2 option which uses the highest speed for programming.
All tests have been done with target device powered by the board with 3.3 V.
Measurements
Our 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, approximately 10 sec, to the programming times. After further investigation, we have discovered that the overhead time depends on the CPU. When we tried programming on slow Intel Celeron N4020 CPU, the overhead time increased to 30 sec.
Microchip provides ipecmdboost utility. When it is used for the first time, it works the same as ipecmd, but it keeps the pre-loaded Microchip software and configuration. Thus, when used for the second time, the overhead is eliminated. We measured both ipecmd and ipecmdboost speeds and report here both.
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 time achieved on a second pass of ipecmdboost, while the number in parentheses is the programming time with ipecmd.
| Target Device | NSDSP-2 | NSDSP-3 | Snap | Basic | PICkit 5 | ICD 5 |
|---|---|---|---|---|---|---|
| Devices with approximately 32K flash | ||||||
| PIC16F1518 | 1.7s | 1.0s | 2.7s (12.1s) |
Fail | 3.8s (13.4s) |
4.1s (13.5s) |
| PIC16F17556 | 1.3s | 1.1s | 5.5s (15.1s) |
5.4s (14.9s) |
6.3s (16.0s) |
6.5s (16.0s) |
| PIC18F25K83 | 1.0s | 0.7s | 2.9s (12.4s) |
Fail | 4.0s (13.5s) |
4.3s (13.8s) |
| PIC18F45Q71 | 1.9s | 1.7s | 2.6s (12.2s) |
Fail | 3.8s (13.2s) |
4.2s (13.8s) |
| PIC24FJ32MC102 | 1.3s | 1.1s | 3.0s (12.4s) |
3.0s (12.5s) |
3.9s (13.4s) |
3.9s (13.4s) |
| dsPIC33EP32GP502 | 1.1s | 0.6s | 3.6s (13.2s) |
3.6s (13.0s) |
4.5s (14.0s) |
4.5s (14.0s) |
| dsPIC33CK32MC102 | 1.0s | 0.4s | 6.0s (15.3s) |
6.1s (15.3s) |
6.9s (16.2s) |
7.1s (16.4s) |
| PIC32AK3208GC41064 | 1.0s | 0.2s | 1.5s (11.3s) |
1.4s (11.2s) |
2.3s (12.0s) |
2.3s (12.0s) |
| PIC32MM0032GPL028 | 1.0s | 0.3s | 1.1s (10.8s) |
1.1s (10.8s) |
2.0s (11.5s) |
2.4s (12.2s) |
| PIC32MX120F032D | 1.0s | 0.4s | 1.2s (10.9s) |
1.2s (10.8s) |
2.0s (11.6s) |
2.1s (11.5s) |
| Devices with approximately 64K flash | ||||||
| PIC16F19197 | 1.7s | 1.2s | 3.2s (12.7s) |
Fail | 4.4s (13.9s) |
4.8s (14.2s) |
| PIC18F46K22 | 2.5s | 2.0s | 2.5s (12.0s) |
Fail | 3.5s (12.9s) |
3.7s (13.0s) |
| PIC18F16Q41 | 3.7s | 3.3s | 4.4s (13.8s) |
Fail | 5.5s (15.0s) |
5.9s (15.5s) |
| PIC24FJ64GU202 | 1.7s | 1.4s | 4.3s (13.9s) |
4.3s (13.7s) |
5.2s (14.7s) |
5.3s (14.7s) |
| dsPIC33EP64GS506 | 1.6s | 0.5s | 4.8s (14.0s) |
4.7s (14.0s) |
5.6s (15.1s) |
5.6s (15.0s) |
| dsPIC33CH64MP505 | 1.6s | 0.7s | 5.2s (14.7s) |
5.2s (14.6s) |
6.0s (15.4s) |
6.2s (15.5s) |
| dsPIC33CK64MP102 | 1.7s | 0.7s | 7.1s (16.4s) |
7.1s (16.3s) |
8.0s (17.2s) |
8.1s (17.5s) |
| dsPIC33AK64MC105 | 1.7s | 0.4s | 1.8s (11.3s) |
1.7s (11.3s) |
2.8s (12.2s) |
2.7s (12.3s) |
| PIC32MM0064GPM064 | 1.7s | 0.5s | 1.7s (11.3s) |
1.6s (11.3s) |
2.5s (12.1s) |
2.7s (12.2s) |
| PIC32MX320F064H | 1.8s | 0.7s | 1.7s (11.2s) |
1.7s (11.2s) |
2.5s (12.1s) |
2.7s (12.2s) |
| Devices with approximately 128K flash | ||||||
| PIC18F47K40 | 3.3s | 2.3s | 5.8s (15.2s) |
Fail | 7.0s (16.5s) |
7.3s (16.6s) |
| PIC18F47Q84 | 7.1s | 6.5s | 8.3s (17.8s) |
Fail | 9.4s (19.0s) |
9.7s (19.4s) |
| PIC24FJ128GL410 | 3.1s | 2.6s | 5.6s (15.0s) |
5.6s (15.1s) |
6.4s (16.0s) |
6.5s (16.6s) |
| dsPIC33EP128GM304 | 2.8s | 0.8s | 7.4s (17.0s) |
7.4s (17.1s) |
8.3s (17.8s) |
8.4s (17.9s) |
| dsPIC33CH128MP502 | 2.9s | 1.2s | 6.8s (16.0s) |
6.8s (16.2s) |
7.7s (17.2s) |
7.8s (17.1s) |
| dsPIC33CK128MP202 | 3.0s | 1.2s | 9.3s (18.7s) |
9.3s (18.8s) |
10.2s (19.6s) |
10.3s (19.8s) |
| dsPIC33AK128MC106 | 3.0s | 0.7s | 2.6s (12.3s) |
2.5s (12.2s) |
3.4s (13.2s) |
3.4s (13.2s) |
| PIC32MM0128GPM028 | 3.0s | 0.9s | 2.5s (12.0s) |
2.5s (12.1s) |
3.3s (12.8s) |
3.6s (13.3s) |
| PIC32MX564F128L | 3.3s | 1.1s | 2.1s (11.5s) |
2.0s (11.6s) |
2.9s (12.5s) |
3.3s (12.8s) |
| PIC32MK0128MCA048 | 3.3s | 0.8s | 3.1s (12.7s) |
3.1s (12.8s) |
3.9s (13.7s) |
4.3s (14.0s) |
| Devices with approximately 256K flash | ||||||
| PIC24FJ256GA702 | 5.6s | 4.7s | 6.8s (16.0s) |
6.8s (16.2s) |
7.7s (17.0s) |
7.8s (17.0s) |
| dsPIC33EP256MU806 | 6.0s | 1.7s | 12.0s (21.5s) |
12.0s (21.5s) |
12.9s (22.6s) |
13.0s (22.6s) |
| dsPIC33CH256MP205 | 5.7s | 2.2s | 11.5s (20.8s) |
11.5s (20.9s) |
12.4s (21.7s) |
12.5s (21.9s) |
| dsPIC33CK256MC506 | 5.7s | 2.2s | 13.5s (23.2s) |
13.5s (23.0s) |
14.5s (23.9s) |
14.6s (24.1s) |
| dsPIC33AK256MPS212 | 5.7s | 1.4s | 4.1s (14.0s) |
4.0s (13.9s) |
4.9s (14.8s) |
5.0s (14.8s) |
| PIC32MM0256GPM064 | 5.7s | 1.6s | 4.0s (13.4s) |
4.0s (13.7s) |
4.9s (14.3s) |
5.4s (15.0s) |
| PIC32MX270F256D | 5.8s | 2.0s | 4.2s (13.7s) |
4.3s (14.0s) |
5.1s (14.7s) |
5.7s (15.1s) |
| PIC32MK0256MCJ048 | 6.0s | 1.4s | 5.0s (15.0s) |
5.0s (14.9s) |
5.8s (15.7s) |
6.4s (16.1s) |
| Devices with approximately 512K flash | ||||||
| PIC24FJ512GL410 | 11.1s | 9.3s | 12.4s (21.9s) |
12.5s (22.0s) |
13.3s (23.0s) |
13.5s (22.9s) |
| dsPIC33EP512GM710 | 10.3s | 2.6s | 21.3s (30.7s) |
21.3s (30.9s) |
22.3s (31.9s) |
22.4s (31.9s) |
| dsPIC33CH512MP508 | 11.1s | 4.3s | 18.2s (28.0s) |
18.4s (28.0s) |
19.3s (28.9s) |
19.5s (29.2s) |
| dsPIC33CK512MP606 | 11.2s | 4.3s | 21.9s (31.8s) |
22.1s (31.8s) |
23.0s (32.8s) |
23.1s (32.8s) |
| dsPIC33AK512MC205 | 11.2s | 2.7s | 6.8s (17.0s) |
6.8s (16.9s) |
7.7s (17.7s) |
7.8s (17.7s) |
| PIC32MX570F512L | 11.2s | 3.9s | 7.9s (17.6s) |
7.9s (17.4s) |
8.8s (18.4s) |
9.8s (19.5s) |
| PIC32MK0512GPG048 | 11.3s | 2.5s | 8.1s (18.0s) |
8.2s (18.2s) |
9.0s (18.8s) |
10.1s (20.0s) |
| PIC32MZ0512EFE144 | 14.2s | 3.2s | 9.4s (19.3s) |
9.5s (19.6s) |
10.3s (20.2s) |
12.1s (21.9s) |
| Devices with approximately 1024K flash | ||||||
| PIC24FJ1024GB610 | 20.2s | 7.2s | 20.7s (30.2s) |
20.8s (30.3s) |
21.8s (31.3s) |
21.9s (31.4s) |
| dsPIC33CK1024MP708 | 22.0s | 8.7s | 38.8s (48.8s) |
38.7s (48.6s) |
40.0s (49.9s) |
40.2s (49.8s) |
| PIC32MK1024MCF100 | 22.3s | 5.1s | 15.9s (26.0s) |
16.1s (26.2s) |
16.8s (26.9s) |
19.0s (29.2s) |
| PIC32MZ1025W104132 | 22.7s | 2.9s | 26.1s (37.0s) |
27.2s (36.9s) |
28.1s (38.0s) |
30.3s (40.2s) |
| Devices with approximately 2048K flash | ||||||
| PIC32MZ2064DAS169 | 45.8s | 10.0s | 24.6s (34.6s) |
24.9s (35.7s) |
25.4s (35.5s) |
31.0s (41.3s) |
| Target Device | NSDSP-2 | NSDSP-3 | Snap | Basic | PICkit 5 | ICD 5 |
Failures
PICkit Basic failed to program the majority of PIC16 and PIC18 devices. All attempts to fix this (upgrading to latest PICkit Basic, re-installing MPLAB X, updating firmware, purchasing new PICkit Basic, using a different PC) failed. Therefore, when aggregated data, we have used Snap results for all the PIC devices where PICkit Basic failed. Such substitute should provide good approximation because PICkit Basic and Snap produce very similar results for all other PIC devices.
ICD 5 failed to program PIC32MM0032GPL028 while it had no problems with other PIC32MM chips in a similar setting. We were able to resolve the problem by lowering the programming speed from -OAS2 to -OAS1. We have used the result for PIC32MM0032GPL028 obtained with -OAS1.
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 Family | N | NSDSP-2 | NSDSP-3 | Snap | Basic | PICkit 5 | ICD 5 |
|---|---|---|---|---|---|---|---|
| All Devices | 51 | 337.7s | 120.6s | 413.2s (903.5s) |
415.4s (905.7s) |
462.0s (951.4s) |
484.6s (973.8s) |
| PIC161xxx | 1 | 1.7s | 1.0s | 2.7s (12.1s) |
2.7s (12.1s) |
3.8s (13.4s) |
4.1s (13.5s) |
| PIC161xxxx | 2 | 3.0s | 2.3s | 8.7s (27.7s) |
8.7s (27.5s) |
10.7s (29.9s) |
11.2s (30.2s) |
| PIC18FxxK | 3 | 6.8s | 5.0s | 11.2s (39.6s) |
11.2s (39.6s) |
14.5s (42.8s) |
15.3s (43.5s) |
| PIC18FxxQ | 3 | 12.7s | 11.5s | 15.3s (43.8s) |
15.3s (43.8s) |
18.8s (47.2s) |
19.8s (48.6s) |
| PIC24FJ | 6 | 43.1s | 26.3s | 52.7s (109.4s) |
53.0s (109.9s) |
58.3s (115.3s) |
58.9s (116.0s) |
| dsPIC33EP | 5 | 21.7s | 6.2s | 49.1s (96.5s) |
49.0s (96.6s) |
53.5s (101.4s) |
53.9s (101.3s) |
| dsPIC33CH | 4 | 21.4s | 8.3s | 41.6s (79.5s) |
41.9s (79.8s) |
45.5s (83.2s) |
46.0s (83.8s) |
| dsPIC33CK | 6 | 44.6s | 17.3s | 96.7s (154.1s) |
96.8s (153.9s) |
102.5s (159.6s) |
103.4s (160.3s) |
| dsPIC33AK | 5 | 22.6s | 5.4s | 16.8s (66.0s) |
16.5s (65.5s) |
21.0s (69.8s) |
21.2s (70.1s) |
| PIC32MM | 4 | 11.4s | 3.3s | 9.3s (47.5s) |
9.2s (47.8s) |
12.7s (50.7s) |
14.1s (52.7s) |
| PIC32MX | 5 | 23.1s | 8.2s | 17.0s (64.8s) |
17.1s (65.0s) |
21.3s (69.2s) |
23.5s (71.0s) |
| PIC32MK | 4 | 42.8s | 9.8s | 32.2s (71.7s) |
32.5s (72.1s) |
35.6s (75.1s) |
39.9s (79.3s) |
| PIC32MZ | 3 | 82.8s | 16.2s | 60.1s (90.9s) |
61.6s (92.2s) |
63.8s (93.8s) |
73.4s (103.4s) |
NSDSP-3
According to the test results, NSDSP-3-X is the fastest programmer for every device tested, as well as for any group of devices. On average, it is nearly 3 times faster than NSDSP-2, and about 4 times faster than Microchip programmers. It is likely the fastest PIC programmer in the world.
NSDSP-2
On average NSDSP-2 (and NSDSP-1 as well, since both have the same speeds) is still faster than Microchip programmers. The performance depends on the chip. For 32-bit PIC devices, NSDSP-2 is slightly slower than ICD 5, but for other device groups it may be 2-3 times faster.
Microchip programmers
ICD 5 is still slower than NSDSP-2 by approximately the same factor as ICD 3 was in 2016. However, PICkit 5 has improved dramatically compared to its ancestor PICkit 3. In 2016 tests PICkit 3 was much slower than ICD 3. Now the situation is reversed - PICkit 5 is even slightly faster than ICD 5.
Newer Microchip programmers - Snap and PICkit Basic are somewhat faster than ICD 5 and PICkit 5, and approach NSDSP-2 performance. On average, Snap is only 22% slower than NSDSP-2. However, even the fastest Microchip programmer - Snap - is 3.4 times slower than NSDSP-3.
Use of ipecmd, as compared to ipecmdboost, with Microchip programmers more than doubles programming times, making Microchip programmers much slower than NSDSP-2, and 7 to 8 times slower than NSDSP-3.
© 2007-2026 Northern Software Inc. All Rights Reserved.