MINIPRO(1)

NAME
minipro - free and open command-line program for controlling chip programmers by Xgecu

DESCRIPTION
minipro is an Open Source tool intended to become a complete cross-platform replacement for the proprietary utility from Xgecu. Currently it supports more than 13000 target devices — including AVRs, PICs as well as a huge number of other microcontrollers and various memory chips. minipro currently supports the TL866A/CS, TL866II+, and T48. Support for the T56 is very experimental.

GENERAL OPTIONS

-l, --list
    List all supported devices.

-L, --search <search>
    List devices like this.

-q, --programmer <version>
    Force a programmer version when listing devices.
    Possible values (case insensitive): TL866A TL866II T48 T56.

-Q, --query_supported
    Query supported programmers.

-k, --presence_check
    Query the programmer version currently connected.

-d, --get_info <device>
    Show device information.

-D, --read_id
    Just read the chip ID and do nothing else (like reading the whole chip contents). This is for use in scripts where you have for example several similar chips with different IDs and want to check if the currently inserted chip is one in your list of allowed ones. Also useful to detect if a chip is inserted at all when using the -y option.

-r, --read <filename>
    Read from the device and write the contents to this file. See NOTES ON MEMORY TYPES below.

-w, --write <filename>
    Write to the device using this file.

-m, --verify <filename>
    Verify memory in the device against this file.

-c, --page <type>
    Specify memory type (optional).
    Possible values: code, data, config, user, calibration.
    The calibration byte(s) are Atmel AVR family specific and are read-only. User memory type is implemented as user row or encryption table on some devices like Atmel AT89S8253. Use -c user to read or write this page. See NOTES ON MEMORY TYPES below.

-f, --format <format>
    Specify file format. Possible values: ihex, srec. See NOTES ON FILE FORMATS below.

-b, --blank_check
    Blank check.
    Optionally, you can use -c to specify a memory type.

-a <type>, --auto_detect
    Auto-detect SPI 25xx devices.
    Possible values: 8, 16.

-z, --pin_check
    Check for bad pin contact.

-e, --skip_erase
    Do NOT erase device.

-E, --erase
    Just erase device.

-o <option>
    Specify various options. For multiple options, use -o multiple times. For example: -o vpp=12 -o vcc=5.5 or long options: --vpp=12 --vcc=5.5
    Valid options are:

    -o vpp=<value>, --vpp <value>
        Set the programming voltage.
        For TL866A/CS: 10, 12.5, 13.5, 14, 15.5, 16, 17, 18, 21.
        For TL866II+: 9, 9.5, 10, 11, 11.5, 12, 12.5, 13, 13.5, 14, 14.5, 15.5, 16, 16.5, 17, 19.

    -o vdd=<value>, --vdd <value>
        Set the VDD write voltage (3.3, 4, 4.5, 5, 5.5, 6.5).

    -o vcc=<value>, --vcc <value>
        For setting the VCC verify voltage (3.3, 4, 4.5, 5, 5.5, 6.5).
        For setting the VCC logic test voltage (1.8, 2.5, 3.3, 5).

    -o pulse=<value>, --pulse <value>
        Programming pulse delay (0–65535 usec).

    -o speed=<value>, --speed <value>
        Set T48 SPI clock frequency in MHz (3, 7.5, 15, 30).

-u, --unprotect
    Disable protection before programming.

-P, --protect
    Enable protection after programming.

-v, --skip_verify
    Do NOT verify after write.

-p, --device <device>
    Specify device (use quotes to avoid mangling by the shell).

-T, --logic_test
    Logic IC test. Erroneous states are reported with a "-" (minus) sign next to the expected pin state.

-i, --icsp_vcc
    Use ICSP. Not useful for TL866CS.

-I, --icsp_no_vcc
    Use ICSP (without enabling Vcc). Not useful for TL866CS.

-s, --no_size_error
    Do NOT error on file size mismatch (only a warning).

-S, --no_size_warning
    No warning message for file size mismatch (can't combine with -s).

-x, --skip_id
    Do NOT attempt to read ID (only valid in read mode).

-y, --no_id_error
    Do NOT error on ID mismatch

-V, --version
    Show version information

-t, --hardware_check
    Start hardware check

-F, --update <filename>
    Update firmware. See UPDATING FIRMWARE below.

--infoic <filename>
    Set custom infoic.xml file.

--logicic_out <filename>
    Write the results of a logic IC test to this file.

--logicic <filename>
    Set custom logicic.xml file.

--algorithms <filename>
    Set custom algorithm.xml file. See ALGORITHMS below.

-h, --help
    Show brief help and quit.

NOTES FOR READING AND WRITING
If -c is omitted and -r is specified then the code, data (if applicable) and config (if applicable) will be written to filename.$ext, filename.eeprom.bin and filename.fuses.conf correspondingly. If -c is omitted and -w is specified, then -c code is assumed.
By default, when in write mode and -c config is specified, no erase is performed to preserve the already programmed data.
However, you can force an erase in this case with the -E option.

--fuses, --uid, --lock flags will read/write/verify/blank check fuses, user id or lock config section. User ID is Microchip PIC MPU family specific. For example: minipro -p atmega32 -b --fuses will check if fuse bits are in their default state (that is, blank).

Use --pulse, --vpp, --vdd, --vcc or -o <option> to specify various programming options. These options are available only in write mode ( -w ) and only for some devices like UV erasable EPROMs and GAL/ATF PLDs.
Also you can specify --vcc or -o vcc with -T to specify the logic test voltage.
Use -d <device> to view if those options are supported.

NOTES ON FILE FORMATS
If the -f or --format options are not used when reading, the resulting file will be saved as a raw binary file. If the ihex format is chosen and the data size is 64 kilobytes or smaller, the file will be saved in ihex8 format. Just plain hex records are used — no segment/linear address records are inserted. If the data size exceeds 64 kilobytes, then the ihex32 format is used. The ihex16 format is not used when reading chips. The same strategy is used for the Motorola srecord format. When writing chips, the format is automatically detected. It is therefore not necessary to use the -f or --format options. The exact Intel hex format (ihex8, ihex16, or ihex32) are also automatically detected.

ALGORITHMS
All the Xgecu programmers contain an FPGA chip (Field Programmable Gate Array) which does most of the low-level work of reading and writing various chips. These FPGAs require bitstreams (algorithms) to be loaded before they're able to do any work. The TL866A/CS, TL866II+, and T48 keep their algorithms on a memory chip on the programmer's circuit boards and are updated whenever the programmer's firmware is updated. The T56 is different in that it requires its algorithms to be loaded from the controlling program. Those algorithms are installed by the official Xgecu software to the host computer. Because of the copyright on that package, the algorithms cannot be included in the minipro distribution. Fortunately a script for doing that is provided. To allow minipro to get needed algorithms into a T58 programmer, dump-alg-minipro.bash is provided to download a copy of the official Xgecu software, extract the algorithms, and pack those data into "algorithm.xml". If the algorithms were not installed right after minipro was installed, this script can be used directly. It should have been installed when minipro was installed by whatever means. First invoke minipro with the -V or --version option and see what directory is listed for "Share dir". Suppose it's "/usr/local/share/minipro". Invoke the script like this: dump-alg-minipro.bash /usr/local/share/minipro The script will then do its thing and install "algorithm.xml" to its proper place.

UPDATING FIRMWARE
Firmware update files can be obtained from the manufacturer's website:
http://www.xgecu.com/en/
They can also be downloaded and extracted from the following repository:
https://github.com/Kreeblah/XGecu_Software
For the TL866A/CS, use the "update.dat" file.
For the TL866IOI+, use the "updateII.dat" file.
For the T48, use the "UpdateT48.dat" file.
For the T56, use the "updateT56.dat" file.

-F <filename>
    Update firmware. minipro will verify the firmware file and ask if you wish to proceed with writing the file to the programmer.

NOTES ON MEMORY TYPES
If -c is omitted and -r is specified then the code, data (if applicable) and config (if applicable) will be written to filename.$ext, filename.eeprom.bin and filename.fuses.conf correspondingly. If -c is omitted and -w is specified, then -c code is assumed.

ADDING CUSTOM CHIPS
Custom chips can be added in the infoic.xml file, but it must be noted that the since content is generated from the infoic.dll file, the custom chips should be added in a proper section of the XML file. Add any new chip as an <ic> section in a proper <custom name="MyCustom"> section of the file. It must be also noted that the pinout is hardcoded in the device firmware, so if the chip has a custom pinout, use of a bit-banging technique is required, limiting the functionality to only reading it as a PROM type. In this case, the <protocol_id> value must be set to 0x80000001 and the <variant> value must be set to the pinout value defined in the prom_table array in the prom.c file. For example, the D2364C PROM has a slightly different pinout than any DIP24 PROM, thus the pins have been exchanged in the prom.c file. The index 0x0b has been assigned to this pinout. So the resulting XML entry is:
    <custom name="NEC">
          <ic name="D2364C@DIP24"
          type="1"
          protocol_id="0x80000001"
          variant="0x0c"
          read_buffer_size="0x10"
          write_buffer_size="0x00"
          code_memory_size="0x2000"
          data_memory_size="0x00"
          data_memory2_size="0x00"
          page_size="0x0000"
          pages_per_block="0x0000"
          chip_id="0x00000000"
          voltages="0x0900"
          pulse_delay="0x0000"
          flags="0x00000000"
          chip_info="0x0000"
          pin_map="0x0017"
          blank_value = "0x00"
          package_details="0x18000000"
          config="NULL"
      />
    </custom>

PIPES
minipro supports reading and writing to standard input and output. To do this, use a dash (-) as a filename for the -w or -r options. For example: head -c 256k < /dev/urandom | srec_cat - -bin -o - -intel -Address_Length=4 -obs=16 | minipro -p w49f002u -w- This is how the hex/srec parsers were tested for reading from stdin. 256kb of random binary data is generated then converted from binary to intel hex by the srec_cat utility. Finally the converted data is passed to our minipro which will read this data, convert it to binary by decoding the intel hex format from stdin and write it to the specified chip. Note the -r- which tells it to read from stdin instead from a regular file. This is just a test command to test the ihex/srec parsers. Don't use this in real life (convert from binary to ihex then from ihex to binary). You can also read a chip and write the data to stdout like this: minipro -p w49f002u -r- -f ihex You can then pass the output to another command line tool with | for other processing, etc.

FUSES
Fuses can be read and written with the -c config option. Fuse data is exchanged in a text format. When writing fuses all fuses on your device must be assigned a value. To see what fuses are supported by your device use -r with -c config to get your current fuse values. This also shows you what the text format looks like.

EXAMPLES
minipro -p 7404 -T
Check whether a 74(LS/HC/...)04 hex NOT gate chip works correctly. minipro -p AT29C256@DIP28 -w foobar.bin
Write the contents of foobar.bin to an AT29C256 256 kilobit (32-kilobytes) electrically-erasable Flash EPROM. Remember to put single or double quotes around the device name to prevent the shell from interpreting the "@" (at sign).

CAVEATS
The TL866A and TL866CS programmers appear to have a firmware bug such that if not quite enough current is provided to them from a USB port, then the programmer will fail to initialize itself or reset itself after an operation. This problem seems to go hand-in-hand with newer USB 3.0 / xHCI ports and can be avoided by using a powered hub.

AUTHOR
minipro was created by Valentin Dudouyt in 2014. Many others have contributed code and bug reports. Development is currently coordinated by David Griffith.

HARDWARE
The TL866A/CS, TL866II+, T48, and T56 chip programmers are distributed by Xgecu, formerly Autoelectric. Its website is
http://www.xgecu.com/en/

DISTRIBUTION
The canonical repository for minipro is at GitLab:
https://gitlab.com/DavidGriffith/minipro/
It is distributed under the GNU General Public License version 3 or (at your option) any later version.
https://www.gnu.org/licenses/gpl-3.0.en.html
This software is offered as-is with no warranty or liability. If you find a bug or would like minipro to do something it doesn't currently do, please visit the above GitLab website and report your concerns.