PICP Users Manual
Linux (and Windows) Interface to PICSTART Plus, Warp-13, and JuPic programmers

Copyright 2004-2005 by Jeffery L. Post
Version 0.6.7 - July, 2005
GNU General Public License

### TABLE OF CONTENTS

- Introduction
- Command Line Interface
- Comm Protocol
- Known Issues

#### Introduction

Picp is a Linux (and Windows) command line interface to Microchip's PICSTART Plus, Newfound Electronic's Warp-13, and JuPic PIC programmers. Originally written by Andrew Pines, picp is now maintained by Jeff Post. The latest version can be downloaded from my picmicro website.
Thanks to Jim Robertson of Newfound Electronics, who generously donated a Warp-13a programmer and technical advice so that picp would work with both the Warp-13 and PICSTART Plus programmers.
Thanks also to Adam Jurkiewicz, who donated a JuPic programmer for testing. JuPic is an excellent replacement for the Warp-13 programmer (which is no longer being sold).
Picp is licensed under the GNU General Public License.

#### Command Line Interface

Usage:
picp [-c] [-d] [-v] ttyname devtype [-i] [-h] [-q] [-v] [-s [size]] [-b|-r|-w|-e][pcidof]
where:
ttyname is the serial (or USB) device the PICSTART or Warp-13 is attached to
(e.g. /dev/ttyS0 or com1)
devtype is the pic device to be used (12C508, 16C505, etc.)
-b blank checks the requested region or regions
-c enable comm line debug output to picpcomm.log (must be before ttyname)
-d (if only parameter) show device list
-e erases the requested region (flash parts only)
-f ignores verify errors while writing
-h show this help
-i use ISP protocol (must be first option after devtype)
-q sets quiet mode (excess messages supressed)
-r initiates a read (Intel Hex record format)
-s [size] shows a hash mark status bar of length [size] while erasing/writing
-w writes to the requested region
-wpx will suppress actual writing to program space (for debugging picp)
-v shows PICSTART Plus version number
-v (if only parameter) show picp version number
Read/Write/Erase parameters:
p [filename] = program memory, optionally reading/writing filename
c [val] = configuration bits (val is a numeric word value when writing)
i [val] = ID locations
d [filename] = data memory, optionally reading/writing filename
o [val] = oscillator calibration space
f = entire flash device (only applies to -e, erase)
filename is an optional input or output file (default is stdin/stdout)
Example:
picp -c /dev/ttyS1 16f84 -wp widget.hex
Programs a 16F84 device with the program in the file widget.hex using the ttyS1 serial port, and writes comm line debug information in the file picpcomm.log.
*The -i option causes picp to use a slightly different protocol for communicating with the Warp-13 programmer when programming 18fxxx chips connected to the ISP port of the Warp-13. This appears to be necessary only when using BluePole firmware version 1.5. Use this option only if you experience problems without it.
Back to top

#### Comm Protocol

This is a summary of the Picstart Plus (Warp-13) protocol known as of July, 2004. This information is the result of tests performed by Andrew Pines, Gabor Kiss, and Jeff Post. It is believed to be accurate, but there are no guarantees.
-> shows data from the computer to the PIC programmer.
<- shows data from the PIC programmer to the computer.
... means a repetition.
-------------------------------------------------------------------------------
Picstart Plus commands in numerical order:
(Only those with a name, eg CMD_BLANK_CHECK, are used by picp)

CMD_BLANK_CHECK 'B'
0x42 | -> | Blank check full
| <- | 0x42
| <- | status

0x43 | -> | Diagnostics
| <- | 0xdd
subcode | -> |
| <- | echo

0x44 | -> | Blank check partial
| <- | 0x44
| <- | status

CMD_WRITE_PGM 'Q'
0x51 | -> | Write program
| <- | 0x51
word to write | -> |
| <- | word read back
| ... |
| <- | status

CMD_READ_PGM 'T'
0x54 | -> | Read program
| <- | 0x54
| <- | word read
| ... |
| <- | status

CMD_READ_OSC 'c'
0x63 | -> | Read calibration values
| <- | 0x63
| <- | word read
| ... |
| <- | status

CMD_READ_DATA 'd'
0x64 | -> | Read data
| <- | 0x64
| <- | byte read
| ... |
| <- | status

CMD_READ_ID 'e'
0x65 | -> | Read ID
| <- | 0x65
| <- | word read
| ... |
| <- | status

CMD_READ_CFG 'f'
0x66 | -> | Read config
| <- | 0x66
| <- | word read
| ... |
| <- | status

CMD_WRITE_CFG 'g'
0x67 | -> | Write config
| <- | 0x67
word to write | -> |
| <- | each word echoed back
| ... |
| <- | status

CMD_WRITE_ID 'h'
0x68 | -> | Write ID
| <- | 0x68
word to write | -> |
| <- | word read back
| ... |
| <- | status

CMD_WRITE_DATA 'i'
0x69 | -> | Write data
| <- | 0x69
byte to write | -> |
| <- | byte read back
| ... |
| <- | status

CMD_WRITE_CFG_WORD 'p'
0x70 | -> | Write one config word
| <- | 0x70
word to write | -> |
| <- | word read back
| <- | status

(For 18xxx chips only. Each word must be preceeded by 'set range'.)

CMD_WRITE_OSC 'q'
0x71 | -> | Write calibration values
| <- | 0x71
word to write | -> |
| <- | word read back
| ... |
| <- | status

0x80 | -> | Get processor info length
| <- | 0x80
| <- | 0x2c (44)

CMD_LOAD_INFO
0x81 | -> | Load processor info
| <- | 0x81
44 bytes | -> |
chksum | -> |
| <- | status

CMD_LOAD_EXT_INFO
0x82 | -> | Load extended config masks
| <- | 0x82
8+8 words | -> |
chksum | -> |
| <- | status

CMD_REQUEST_MODEL
0x88 | -> | Ping
| <- | 0xab response identifying PS+/Warp-13/JuPic

CMD_REQUEST_VERSION
0x8d | -> | Get version
| <- | 0x8d
| <- | major
| <- | middle
| <- | minor

CMD_SET_ADDR
0x8e | -> | Set range
| <- | 0x8e
5 bytes | -> | send each byte
| <- | each byte echoed
| ... |

CMD_ERASE_FLASH
0x8f | -> | Erase flash device
| <- | 0x8f
| <- | status

0x90 | -> | Compute program checksum
| <- | 0x90
| <- | checksum_h
| <- | checksum_l
| <- | status

0x91 | -> | Compute config checksum
| <- | 0x91
| <- | checksum_h
| <- | checksum_l
| <- | status

0x92 | -> | Compute ID checksum
| <- | 0x92
| <- | checksum_h
| <- | checksum_l
| <- | status

0x93 | -> | Compute data checksum
| <- | 0x93
| <- | checksum_h
| <- | checksum_l
| <- | status

0x94 | -> | Compute cal checksum
| <- | 0x94
| <- | checksum_h
| <- | checksum_l
| <- | status

Back to top

#### Known Issues

Erase program (-ep) does not work with most PIC devices. Use -ef (erase flash) instead.
Some data in picdev.c is known to be incorrect (but what the correct data should be is not known). Many entries in picdev have been sent to me by users, but I don't always have the corresponding PIC devices with which to test them. If you find a problem with a particular PIC chip, please let me know.
Support for 18Fxxx devices has been tested only with 18F458 and 18F252 chips. Bug reports regarding 18Fxxx chips will be greatly appreciated. Please email a zip or gz file with the picpcomm.log file and any other information relevant to the problems you find.
Support for some 10Fxxx devices has been added, but is only partially tested at this time.
Many functions have still not been implemented. Work is continuing on these issues.
Please send bug reports and feature wish lists to 'j_post <AT> pacbell <DOT> net'. Comments on this documentation are also appreciated.
Back to top