odyssey(1) PIC serial microcontroller programming utility


odyssey [options] init
odyssey [options] chiptype command [command arguments]


odyssey is a serial device programming utility designed for use under Linux and other alternative operating systems. At the moment, it only supports programming PIC microcontrollers but it is designed to support many different types of devices and many different types of programming hardware.


Print the Odyssey version
Quiet mode. Don't display the progress counters during an operation.
-f filename
Specify an alternate configuration file in ~/.odyssey/ to use. The default value for this option is "config".
-v section.variable=value
Set the value of a configuration variable, overriding the previous value. For example, to temporarily change the I/O driver to direct hardware access, the option would be -v io.driver=directpp
Lists the supported values for the chiptype parameter. Device names prefixed with a * have not yet been tested. You should not include the * character when specifying an untested device.


Initializes the PIC programmer hardware and turns off all the power and data lines. You should do this before inserting a PIC into the programming socket. A chiptype does not need to be specified for this command.
write filename
Programs the data in filename to a PIC. Odyssey autodetects the file type and currently supports Intel 8, 16, and 32-bit hex files.
read filename
Reads the memory contents of a PIC and writes it to filename. The default output file format is Intel 32-bit hex.
verify filename
Compares the contents of a PIC's memory against filename and reports the first location that doesn't match.
Checks that the PIC is connected and of the correct type, and reports the device ID. (This is not yet implemented for all PIC families; on other families it will succeed, but print a warning.)
Erases an electrically erasable PIC.
Checks if a PIC is blank. This is especially useful when using EPROM based PICs.


On startup, odyssey will load its hardware configuration from two places. The system-wide configuration file /usr/local/etc/odyssey.conf will be read first. After that, the user-specific configuration file, $HOME/.odyssey/config, is read. The variables in the user configuration override any settings in the system-wide configuration.

For your convienence, if the $CONFIG environment variable is set, the user configuration will be read from $CONFIG/odyssey/config. This is a futile attempt to reduce the number of dotfiles in $HOME.


The configuration file is a plain ASCII text file that is divided into sections, each which contain variable/value pairs. Comments can be included by starting a line with a pound sign (#).

A section is started with a line containing only the section name enclosed in square brackets. After a section is started, variables can be assigned values. Section and variable names must only contain characters from the set [0-9A-Za-z _-]. Values can contain any characters. Variable assignment is accomplished by text lines of the form variable=value.

Here is a sample section definition



Values given to variables must match the type of the variable being assigned. The following types are defined
An integer can be in standard decimal form ("123") or in hexadecimal form ("0x7B"). Integers in standard decimal form are signed and can be positive or negative.
A boolean indicates either true or false. To indicate a true boolean value, the value should be one of "1", "true", "yes", or "on". To indicate a false boolean value, the value should be one of "0", "false", "no", or "off".
The value of a string variable will be used verbatim. There are no constraints on string variables.


odyssey is distributed under the terms of the GNU General Public License version 2.


Mark Aikens <[email protected]>