Usage is: %%sname%% <command or option> ...

  Commands and options can be:

      [ --identify ]

          Print processor and flash identification information.
 
      [ (--block-erase[=<block-range>]) 
       | (--erase[=<addr-range>]) ]

          Erase a range of blocks or a range of addresses. It's OK
          to leave the range unspecified if you also give a
          '--program' command. In this case the range will be
          determined from the size of the file to be programmed and
          the initial programming address.

      [ --program=<fname> [--verify] [--start-address=<address>] ]

          Program the device starting from the give address (or from
          0x0), with the contents of the specified file. If '--verify'
          is given, also verify (read back and compare) while
          programming.
      
      [ --read=<addr-range>:<fname> ]

          Read a range of bytes from the device and save it in a file.

      [ --cnf-mem-base=<address> ] [ --cnf-mem-size=<# of bytes> ]

          Set the device base address and the device size.

      [ --quiet ] 

          Print nothing other than errors.

      [ --help ]

          Display this text.
	
  Where:

      <block-range> is given as <first-block>:<num-of-blocks>.
      <addr-range> is given as <first-addr>:<length>.
      <fname> is the file-name to program or read.
      <address> is the address to start programming at.

  Shorthands:

      '-b' stands for '--block-erase'
      '-e' stands for '--erase'
      '-p' stands for '--program'
      '-r' stands for '--read'
      '-v' stands for '--verify'
      '-a' stands for '--start-address'
      '-q' stands for '--quiet'
      '-h' stands for '--help'

  Notes:

      - All numeric values can be given in hexadecimal, decimal, or 
        octal, using the C syntax.

      - if block or address ranges for erases are missing, they are
        calculated from the file-size and the start-address whenever
        possible.

      - '--erase' allows you to partially erase blocks, but it is 
        much slower than '--block-erase' which only erases whole
        blocks.

      - There are usually safe default values for the '--cnf-*'
        parameters so you can probably ignore them.

  Examples:

      %%sname%% -b -v -pfoo.bin

        block-erase (range automatically calculated from file-size and 
        program the flash memory device with data from the file
        'foo.bin'. Verify while programming.

      %%sname%% -e -pfoo.bin

        erase only the absolutely necessary locations (bytes) and 
        program the flash memory device with data from the file
        'foo.bin'. Do not verify while programming.

      %%sname%% -e0x00facd12:1500 -pfoo.bin 
       
        erase 1500 bytes starting from '0x00facd12', and then program 
        the flash memory device with the file 'foo.bin'.

      %%sname%% -b0:12 -pfoo.bin -v

        erase 12 blocks starting from 0 and then program the flash 
        memory device device with data from the file 'foo.bin'. 
        Verify while programming.

      %%sname%% --block-erase=0:12

        erase 12 blocks starting from 0.

      %%sname%% -r0x00facd12:1500:bar.bin

        read 1500 bytes starting from 0x00facd12 and save them in
        the file "bar.bin". If the file doesn't exists, create it,
        if it exists overwrite it.
