---
name: "odyssey"
section: "1"
platform: "linux"
package: "odyssey"
version: "0.4-2.2"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/odyssey"
---

# odyssey(1)

PIC serial microcontroller programming utility

## NAME

odyssey - PIC serial microcontroller programming utility

## SYNOPSIS

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

## DESCRIPTION

**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.

## OPTIONS

- **-V**

  Print the Odyssey version

- **-q**

  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**

- **-l**

  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.

## COMMANDS

- **init**

  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.

- **check**

  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.)

- **erase**

  Erases an electrically erasable PIC.

- **blankcheck**

  Checks if a PIC is blank. This is especially useful when using EPROM based PICs.

## CONFIGURATION FILES

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.**

### CONFIGURATION FILE FORMAT

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

**\[***section***\]**

*variable1***=***value1*

*variable2***=***value2*

*foo***=***true*

### VALUE SYNTAX

Values given to variables must match the type of the variable being assigned. The following types are defined

- **integer**

  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.

- **boolean**

  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".

- **string**

  The value of a string variable will be used verbatim. There are no constraints on string variables.

## LICENSE

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

## AUTHOR

Mark Aikens \<marka@desert.cx\>

## SEE ALSO

[**pic.conf**(5)](/pic.conf/5.md)
