Skip to content

Commit 2c72b37

Browse files
committed
Fix PICkit4/Snap mode= processing and documetation
1 parent d430809 commit 2c72b37

File tree

3 files changed

+57
-35
lines changed

3 files changed

+57
-35
lines changed

src/avrdude.1

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,15 +1665,18 @@ Show help menu and exit.
16651665
.It Ar PICkit 4
16661666
.It Ar MPLAB SNAP
16671667
.Bl -tag -offset indent -width indent
1668-
.It Ar mode=avr,pic
1669-
Switch programmer to AVR or PIC mode, then exit: the PICkit 4 and MPLAB SNAP
1670-
programmer can only be utilised by
1668+
.It Ar mode=avr
1669+
Switch programmer to AVR mode, then exit if not already in AVR mode
1670+
.It Ar mode=<mplab|pic>
1671+
Switch programmer to MPLAB aka PIC mode, then exit
1672+
.Pp
1673+
The PICkit 4 and MPLAB SNAP programmer can only be utilised by
16711674
.Nm
16721675
when in AVR mode. Use
16731676
.Ar -x mode=avr
16741677
for switching to AVR mode, or
1675-
.Ar -x mode=pic
1676-
for switching to PIC mode.
1678+
.Ar -x mode=mplab
1679+
for switching (back) to MPLAB mode.
16771680
.It Ar help
16781681
Show help menu and exit.
16791682
.El

src/doc/avrdude.texi

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,13 +1422,16 @@ The current set-voltage can be read by @code{-x vtarg} alone.
14221422

14231423
The PICkit 4 and MPLAB(R) SNAP programmers accept the following extended parameters:
14241424
@table @code
1425-
@item mode=avr,mplab/pic
1426-
Switch programmer to AVR or MPLAB mode, then exit: the PICkit 4 and MPLAB(R) SNAP
1427-
programmer can only be utilised by Avrdude when in AVR mode.
1428-
Use @code{-x mode=avr} for switching to AVR mode, or @code{-x mode=mplab}
1429-
for switching to MPLAB mode.
1425+
@item mode=avr
1426+
Switch programmer to AVR mode, then exit unless it was already in AVR mode
1427+
@item mode=<mplab|pic>
1428+
Switch programmer to MPLAB aka PIC mode, then exit
14301429
@end table
14311430

1431+
The PICkit 4 and MPLAB(R) SNAP programmer can only be utilised by AVRDUDE
1432+
when in AVR mode. Use @code{-x mode=avr} for switching to AVR mode, or
1433+
@code{-x mode=mplab} for switching (back) to MPLAB mode.
1434+
14321435
@cindex Option @code{-x} PICkit 5
14331436
@cindex @code{-x} PICkit 5
14341437
@cindex MPLAB(R) PICkit 4

src/jtag3.c

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,25 +1606,27 @@ static int jtag3_parseextparms(const PROGRAMMER *pgm, const LISTID extparms) {
16061606
msg_error("%s -c %s extended options:\n", progname, pgmid);
16071607
if(str_eq(pgm->type, "JTAGICE3")) {
16081608
msg_error(" -x jtagchain=UB,UA,BB,BA Setup the JTAG scan chain order\n");
1609-
msg_error(" UB/UA = units before/after, BB/BA = bits before/after\n");
1609+
msg_error(" UB/UA = units before/after, BB/BA = bits before/after\n");
16101610
}
16111611
if(lsize(pgm->hvupdi_support) > 1)
1612-
msg_error(" -x hvupdi Enable high-voltage UPDI initialization\n");
1612+
msg_error(" -x hvupdi Enable high-voltage UPDI initialization\n");
16131613
if(pgm->extra_features & HAS_SUFFER) {
1614-
msg_error(" -x suffer Read SUFFER register value\n");
1615-
msg_error(" -x suffer=<n> Set SUFFER register to <n> (0x.. hex, 0.. oct or dec)\n");
1614+
msg_error(" -x suffer Read SUFFER register value\n");
1615+
msg_error(" -x suffer=<n> Set SUFFER register to <n> (0x.. hex, 0.. oct or dec)\n");
16161616
}
16171617
if(pgm->extra_features & HAS_VTARG_SWITCH) {
1618-
msg_error(" -x vtarg_switch Read on-board target voltage switch state\n");
1619-
msg_error(" -x vtarg_switch=<0..1> Set on-board target voltage switch state\n");
1618+
msg_error(" -x vtarg_switch Read on-board target voltage switch state\n");
1619+
msg_error(" -x vtarg_switch=<0|1> Set on-board target voltage switch state\n");
16201620
}
16211621
if(pgm->extra_features & HAS_VTARG_ADJ) {
1622-
msg_error(" -x vtarg Read on-board target supply voltage\n");
1623-
msg_error(" -x vtarg=<dbl> Set on-board target supply voltage to <dbl> V\n");
1622+
msg_error(" -x vtarg Read on-board target supply voltage\n");
1623+
msg_error(" -x vtarg=<dbl> Set on-board target supply voltage to <dbl> V\n");
16241624
}
1625-
if(str_starts(pgmid, "pickit4") || str_starts(pgmid, "snap"))
1626-
msg_error(" -x mode=avr|[pic|mplab] Set programmer to AVR or MPLAB (PIC) mode, then exit\n");
1627-
msg_error(" -x help Show this help menu and exit\n");
1625+
if(str_starts(pgmid, "pickit4") || str_starts(pgmid, "snap")) {
1626+
msg_error(" -x mode=avr Set programmer to AVR mode and exit if it was not\n");
1627+
msg_error(" -x mode=<mplab|pic> Set programmer to MPLAB aka PIC mode and exit\n");
1628+
}
1629+
msg_error(" -x help Show this help menu and exit\n");
16281630
return rv;
16291631
}
16301632

@@ -1713,31 +1715,46 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port, int mode_switch) {
17131715
pic_mode = serial_open(port, pinfo, &pgm->fd);
17141716
}
17151717
if(pic_mode >= 0) {
1716-
msg_error("\n");
17171718
cx->usb_access_error = 0;
1718-
pmsg_error("%s in %s mode detected\n", pgmstr, pinfo.usbinfo.pid == bl_pid? "bootloader": "mplab");
1719-
if(mode_switch == PK4_SNAP_MODE_AVR) {
1720-
imsg_error("switching to AVR mode; ");
1719+
switch(mode_switch) {
1720+
case PK4_SNAP_MODE_AVR:
1721+
msg_info("\n");
1722+
pmsg_info("%s in %s mode detected\n", pgmstr,
1723+
pinfo.usbinfo.pid == bl_pid? "bootloader": "mplab");
1724+
pmsg_info("switching to AVR mode; ");
17211725
if(pinfo.usbinfo.pid == bl_pid)
17221726
serial_send(&pgm->fd, exit_bl_cmd, sizeof(exit_bl_cmd));
17231727
else {
17241728
serial_send(&pgm->fd, enter_avr_mode_cmd, sizeof(enter_avr_mode_cmd));
17251729
usleep(250*1000);
17261730
serial_send(&pgm->fd, reset_cmd, sizeof(reset_cmd));
17271731
}
1728-
imsg_error("run %s again to continue the session\n\n", progname);
1729-
} else {
1732+
imsg_info("run %s again to continue the session\n", progname);
1733+
serial_close(&pgm->fd);
1734+
return LIBAVRDUDE_EXIT_OK;
1735+
1736+
case PK4_SNAP_MODE_PIC:
1737+
pmsg_info("%s in %s mode detected; exiting\n", pgmstr,
1738+
pinfo.usbinfo.pid == bl_pid? "bootloader": "mplab");
1739+
serial_close(&pgm->fd);
1740+
return LIBAVRDUDE_EXIT_OK;
17301741

1742+
default:
17311743
const char *partsdesc_flag = partdesc? " -p ": "";
17321744
const char *partsdesc_str = partdesc? partdesc: "";
17331745
const char *pgm_suffix = strchr(pgmid, '_')? strchr(pgmid, '_'): "";
1746+
msg_error("\n");
1747+
pmsg_error("%s in %s mode detected\n", pgmstr,
1748+
pinfo.usbinfo.pid == bl_pid? "bootloader": "mplab");
17341749
imsg_error("to switch into AVR mode try\n");
1735-
imsg_error("$ %s -c %s%s%s -P %s -x mode=avr\n\n", progname, pgmid, partsdesc_flag, partsdesc_str, port);
1736-
imsg_error("or use MPLAB mode by using the pickit4_mplab%s programmer option:\n", pgm_suffix);
1737-
imsg_error("$ %s -c pickit4_mplab%s%s%s -P %s\n", progname, pgm_suffix, partsdesc_flag, partsdesc_str, port);
1750+
imsg_error("$ %s -c %s%s%s -P %s -x mode=avr\n\n", progname,
1751+
pgmid, partsdesc_flag, partsdesc_str, port);
1752+
imsg_error("or use MPLAB mode with the pickit4_mplab%s programmer:\n", pgm_suffix);
1753+
imsg_error("$ %s -c pickit4_mplab%s%s%s -P %s\n", progname,
1754+
pgm_suffix, partsdesc_flag, partsdesc_str, port);
1755+
serial_close(&pgm->fd);
1756+
return LIBAVRDUDE_EXIT_FAIL;
17381757
}
1739-
serial_close(&pgm->fd);
1740-
return LIBAVRDUDE_EXIT_FAIL;
17411758
}
17421759
}
17431760
}
@@ -1778,13 +1795,12 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port, int mode_switch) {
17781795

17791796
// Switch from AVR to PIC mode
17801797
if(mode_switch == PK4_SNAP_MODE_PIC) {
1781-
imsg_error("switching to MPLAB mode: ");
17821798
unsigned char *resp, buf[] = { SCOPE_GENERAL, CMD3_FW_UPGRADE, 0x00, 0x00, 0x70, 0x6d, 0x6a };
17831799
if(jtag3_command(pgm, buf, sizeof(buf), &resp, "enter MPLAB mode") < 0) {
1784-
msg_error("entering MPLAB mode failed\n");
1800+
pmsg_error("switching to MPLAB mode failed\n");
17851801
return -1;
17861802
}
1787-
msg_error("MPLAB mode switch successful\n");
1803+
msg_info("switched successfully to MPLAB mode\n");
17881804
serial_close(&pgm->fd);
17891805
return LIBAVRDUDE_EXIT_OK;
17901806
}

0 commit comments

Comments
 (0)