NAME
srec_cmp - compare two eprom load files for equality
SYNOPSIS
srec_cmp [ option... ]
filename...
srec_cmp -Help
srec_cmp -VERSion
DESCRIPTION
The srec_cmp program is used to compare
two eprom load files for equality. This comparison is performed
irrespective of the load order of the data in each of the files.
INPUT FILE SPECIFICATIONS
Input files may be qualified in a
number of ways: you may specify their format and you may specify
filters to apply to them. An input file specification looks like
this:
- filename [ format ][ -ignore-checksums ][
filter ... ]
The filename The filename may be specified as a file
name, or the special name ``-'' which is understood to mean the
standard input.
File Formats
The format is specified by the argument
after the file name. The format defaults to Motorola
S-Record if not specified. The format specified are:
- -Absolute_Object_Module_Format
- This option says to use the Intel Absolute Object Module Format
(AOMF) to read the file. (See (5)
for a description of this file format.)
- -Ascii-Hex
- This option says to use the Ascii-Hex format to read the file.
See (5)
for a description of this file format.
- -Atmel_Generic
- This option says to use the Atmel Generic format to read the
file. See srec_atmel_genetic(5)
for a description of this file format.
- -Binary
- This option says the file is a raw binary file, and should be
read literally. (May also be written -Raw.)
- -COsmac
- This option says to use the RCA Cosmac Elf format to read the
file. See (5)
for a description of this file format.
- -Dec_Binary
- This option says to use the DEC Binary (XXDP) format to read
the file. See (5)
for a description of this file format.
- -Elektor_Monitor52
- This option says to use the EMON52 format to read the file. See
(5)
for a description of this file format.
- -FAIrchild
- This option says to use the Fairchild Fairbug format to read
the file. See (5)
for a description of this file format.
- -Fast_Load
- This option says to use the LSI Logic Fast Load format to read
the file. See (5)
for a description of this file format.
- -Formatted_Binary
- This option says to use the Formatted Binary format to read the
file. See (5)
for a description of this file format.
- -Four_Packed_Code
- This option says to use the FPC format to read the file. See
(5)
for a description of this file format.
- -Guess
- This option may be uased to ask srec_cmp to guess the input
format. This is slower than specifying an explicit format, as it
may open and close the file a number of times.
- -Intel
- This option says to use the Intel hex format to read the file.
See (5)
for a description of this file format.
- -INtel_HeX_16
- This option says to use the Intel hex 16 (INHX16) format to
read the file. See (5)
for a description of this file format.
- -MOS_Technologies
- This option says to use the Mos Technologies format to read the
file. See (5)
for a description of this file format.
- -Motorola [ width ]
-
- This option says to use the Motorola S-Record format to read
the file. (May also be written -S-Record.) See (5)
for a description of this file format.
The optional width argument describes the number of bytes
which form each address multiple. For normal uses the default of
one (1) byte is appropriate. Some systems with 16-bit or 32-bit
targets mutilate the addresses in the file; this option will
correct for that. Unlike most other parameters, this one cannot be
guessed.
- -Needham_Hexadecimal
- This option says to use the Needham Electronics ASCII file
format to read the file. See (5)
for a description of this file format.
- -Ohio_Scientific
- This option says to use the Ohio Scientific format. See
(5)
for a description of this file format.
- -SIGnetics
- This option says to use the Signetics format. See (5)
for a description of this file format.
- -SPAsm
- This option says to use the SPASM assembler output format
(commonly used by PIC programmers). See (5)
for a description of this file format.
- -SPAsm_LittleEndian
- This option says to use the SPASM assembler output format
(commonly used by PIC programmers). But with the data the other way
around.
- -STewie
- This option says to use the Stewie binary format to read the
file. See (5)
for a description of this file format.
- -Tektronix
- This option says to use the Tektronix hex format to read the
file. See (5)
for a description of this file format.
- -Tektronix_Extended
- This option says to use the Tektronix extended hex format to
read the file. See (5)
for a description of this file format.
- -Texas_Instruments_Tagged
- This option says to use the Texas Instruments Tagged format to
read the file. See (5)
for a description of this file format.
- -VMem
- This option says to use the Verilog VMEM format to read the
file. See (5)
for a description of this file format.
- -WILson
- This option says to use the wilson format to read the file. See
(5)
for a description of this file format.
Ignore Checksums
The -ignore-checksums option may be used
to disable checksum validation of input files, for those formats
which have checksums at all. Note that trhe checksum values are
still read in and parse (so it is still an error if they are
missing) but their values are not checked. Used after an input file
name, the option affects that file alone; used anywhere else on the
command line, it applies to all following files.
Input Filters
You may specify zero or more filters
to be applied. Filters are applied in the order the user specifies.
- -Big_Endian_Checksum_BitNot address [
nbytes [ width ]]
- This filter may be used to insert the one's complement checksum
of the data into the data, most significant byte first. The data is
literaly summed; if there are duplicate bytes, this will produce an
incorrect result, if there are holes, it will be as if they were
filled with zeros. If the data already contains bytes at the
checksum location, you need to use an exclude filter, or this will
generate errors. You need to apply and crop or fill filters before
this filter. The value will be written with the most significant
byte first. The number of bytes of resulting checksum defaults to
4. The width (the width in bytes of the values being summed)
defaults to 1.
- -Big_Endian_Checksum_Negative address [
nbytes [ width ]]
- This filter may be used to insert the two's complement
(negative) checksum of the data into the data. Otherwise similar to
the above.
- -Big_Endian_Checksum_Positive address [
nbytes [ width ]]
- This filter may be used to insert the simple checksum of the
data into the data. Otherwise similar to the above.
- -Little_Endian_Checksum_BitNot address [
nbytes [ width ]]
- This filter may be used to insert the one's complement (bitnot)
checksum of the data into the data, least significant byte first.
Otherwise similar to the above.
- -Little_Endian_Checksum_Negative address [
nbytes [ width ]]
- This filter may be used to insert the two's complement
(negative) checksum of the data into the data. Otherwise similar to
the above.
- -Little_Endian_Checksum_Negative address [
nbytes [ width ]]
- This filter may be used to insert the simple checksum of the
data into the data. Otherwise similar to the above.
- -Byte_Swap [ width ]
- This filter may be used to swap pairs of odd and even bytes. By
specifying a width (in bytes) it is possible to reverse the order
of 4 and 8 bytes, the default is 2 bytes. (Widths in excess of 8
are assumed to be number of bits.) It is not possuble to swap
non-power-of-two addresses. To change the alignment, use the offset
filter before and after.
- -Big_Endian_CRC16 address [
-Cyclic_Redundancy_Check_16_XMODEM ]
-
- This filter may be used to insert an industry standard 16-bit
CRC checksum of the data into the data. Two bytes, big-endian
order, are inserted at the address given. Holes in the input data
are ignored. Bytes are processed in ascending address order
(not in the order they appear in the input).
By default a CCITT calculation is performed. If the optional
-Cyclic_Redundancy_Check_16_XMODEM argument is present, the
alternate XMODEM calculation is performed.
Note: If you have holes in your data, you will get a
different CRC than if there were no holes. This is important
because the in-memory EEPROM image will not have holes. You almost
always want to use the -fill filter before any of the CRC
filters. You will receive a warning if the data presented for CRC
has holes.
You should also be aware that the lower and upper bounds of your
data may not be the same as the lower and upper bounds of your
EEPROM. This is another reason to use the -fill filter,
because it will establish the data across the full EEPROM address
range.
- -Little_Endian_CRC16 address
- As above, except little-endian order.
- -Big_Endian_CRC32 address
- This filter may be used to insert an industry standard 32-bit
CRC checksum of the data into the data. Four bytes, big-endian
order, are inserted at the address given. Holes in the input data
are ignored. Bytes are processed in ascending address order
(not in the order they appear in the input).
See also the note about holes, above.
- -Little_Endian_CRC32 address
- As above, except little-endian order.
- -Crop address-range
- This filter may be used to isolate a section of data, and
discard the rest.
- -Exclude address-range
- This filter may be used to exclude a section of data, and keep
the rest. The is the logical complement of the -Crop filter.
- -Fill value address-range
- This filter may be used to fill any gaps in the data with bytes
equal to value. The fill will only occur in the address
range given.
- -UnFill value [ min-run-length ]
- This filter may be used to create gaps in the data with bytes
equal to value. You can think of it as reversing the effects
of the -Fill filter. The gaps will only be created if the
are at least min-run-length bytes in a row (defaults to 1).
- -Random_Fill address-range
- This filter may be used to fill any gaps in the data with
random bytes. The fill will only occur in the address range given.
- -AND value
- This filter may be used to bit-wise AND a value to every
data byte. This is useful if you need to clear bits. Only existing
data is altered, no holes are filled.
- -eXclusive-OR value
- This filter may be used to bit-wise XOR a value to every
data byte. This is useful if you need to invert bits. Only existing
data is altered, no holes are filled.
- -OR value
- This filter may be used to bit-wise OR a value to every
data byte. This is useful if you need to set bits. Only existing
data is altered, no holes are filled.
- -NOT
- This filter may be used to bit-wise NOT the value of every data
byte. This is useful if you need to invert the data. Only existing
data is altered, no holes are filled.
- -Big_Endian_Length address [ nbytes ]
- This filter may be used to insert the length of the data (high
water minus low water) into the data. This includes the length
itself. If the data already contains bytes at the length location,
you need to use an exclude filter, or this will generate errors.
The value will be written with the most significant byte first. The
number of bytes defaults to 4.
- -Little_Endian_Length address [ nbytes ]
- As above, however the value will be written with the least
significant byte first.
- -Big_Endian_MAXimum address [ nbytes ]
- This filter may be used to insert the maximum address of the
data (high water
+ 1) into the data. This includes the maximum itself.
If the data already contains bytes at the given address, you need
to use an exclude filter, or this will generate errors. The value
will be written with the most significant byte first. The number of
bytes defaults to 4.
- -Little_Endian_MAXimum address [ nbytes ]
- As above, however the value will be written with the least
significant byte first.
- -Big_Endian_MINimum address [ nbytes ]
- This filter may be used to insert the minimum address of the
data (low water) into the data. This includes the minimum itself.
If the data already contains bytes at the given address, you need
to use an exclude filter, or this will generate errors. The value
will be written with the most significant byte first. The number of
bytes defaults to 4.
- -Little_Endian_MINimum address [ nbytes ]
- As above, however the value will be written with the least
significant byte first.
- -OFfset nbytes
- This filter may be used to offset the addresses by the given
number of bytes. No data is lost, the addresses will wrap around in
32 bits, if necessary. You may use negative numbers for the offset,
if you wish to move data lower in memory.
- -SPlit multiple [ offset [ width ]
]
- This filter may be used to split the input into a subset of the
data, and compress the address range so as to leave no gaps. This
useful for wide data buses and memory striping. The multiple
is the bytes multiple to split over, the offset is the byte
offset into this range (defaults to 0), the width is the
number of bytes to extract (defaults to 1) within the multiple. In
order to leave no gaps, the output addresses are (width /
multiple) times the input addresses.
- -Un_SPlit multiple [ offset [ width
] ]
- This filter may be used to reverse the effects of the split
filter. The arguments are identical. Note that the address range is
expanded (multiple / width) times, leaving holes
between the stripes.
Address Ranges
There are three ways to specify an address
range:
- minimum maximum
- If you specify two number on the command line (decimal, octal
and hexadecimal are understood, using the C conventions) this is an
explicit address range. The minimum is inclusive, the maximum is
exclusive (one more than the last address). If the maximum is given
as zero then the range extends to the end of the address space.
- -Within input-specification
- This says to use the specified input file as a mask. The range
includes all the places the specified input has data, and holes
where it has holes. The input specification need not be just a file
name, it may be anything any other input specification can be. (You
may need to enclose input-specification in parentheses to
make sure it can't misinterpret which arguments go with input
specification.)
- -OVER input-specification
- This says to use the specified input file as a mask. The range
extends from the minimum to the maximum address used by the input,
and ignores any holes. The input specification need not be just a
file name, it may be anything any other input specification can be.
(You may need to enclose input-specification in parentheses
to make sure it can't misinterpret which arguments go with input
specification.)
In addition, all of these methods may be used, and used more
than once, and the results will be added together.
Calculated Values
Most of the places above where a number
is expected, you may supply one of the following:
- -MINimum input-specification
- This inserts the minimum address of the specified input file.
The input specification need not be just a file name, it may be
anything any other input specification can be. (You may need to
enclose input-specification in parentheses to make sure it
can't misinterpret which arguments go with input specification.)
- -MAXimum input-specification
- This inserts the maximum address of the specified input file,
plus one. The input specification need not be just a file name, it
may be anything any other input specification can be. (You may need
to enclose input-specification in parentheses to make sure
it can't misinterpret which arguments go with input specification.)
- -Length input-specification
- This inserts the length of the address range in the specified
input file, ignoring any holes. The input specification need not be
just a file name, it may be anything any other input specification
can be. (You may need to enclose input-specification in
parentheses to make sure it can't misinterpret which arguments go
with input specification.)
For example, the -OVER file option can be thought
of a short-hand for '(' -min file -max
file ')', except that it is much easier to type, and
also more efficient.
In addition, calculated values may optionally be rounded in one
of three ways:
- value -Round_Down number
- The value is rounded down to the the largest integer
smaller than or equal to a whole multiple of the number.
- value -Round_Nearest number
- The value is rounded to the the nearest whole multiple
of the number.
- value -Round_Up number
- The value is rounded up to the the smallest integer
larger than or equal to a whole multiple of the number.
When using parentheses, they must each be a separate command
line argument, they can't be within the text of the preceeding or
following option, and you will need to quote them to get them past
the shell, as CW]'(' and CW]')'.
OPTIONS
The following options are understood:
- -Help
-
Provide some help with using the srec_cmp program.
- -IGnore_Checksums
- The -ignore-checksums option may be used to disable checksum
validation of input files, for those formats which have checksums
at all. Note that trhe checksum values are still read in and parse
(so it is still an error if they are missing) but their values are
not checked. Used after an input file name, the option affects that
file alone; used anywhere else on the command line, it applies to
all following files.
- -MULTiple
- Use this option to permit a file to contain multiple
(contradictory) values for some memory locations. A warning will be
printed. The last value in the file will be used. The default is
for this condition to be a fatal error.
- -VERSion
-
Print the version of the srec_cmp program being executed.
- -Verbose
-
This option may be used to obtain more information about how and
where the two files differ. Please note that this takes longer, and
the output can be voluminous.
All other options will produce a diagnostic error.
All options may be abbreviated; the abbreviation is documented
as the upper case letters, all lower case letters and underscores
(_) are optional. You must use consecutive sequences of optional
letters.
All options are case insensitive, you may type them in upper
case or lower case or a combination of both, case is not important.
For example: the arguments "-help", "-HEL" and "-h" are all
interpreted to mean the -Help option. The argument "-hlp"
will not be understood, because consecutive optional characters
were not supplied.
Options and other command line arguments may be mixed
arbitrarily on the command line.
The GNU long option names are understood. Since all option names
for srec_cmp are long, this means ignoring the extra leading
'-'. The "--option=value" convention is
also understood.
EXIT STATUS
The srec_cmp command will exit with a
status of 1 on any error. The srec_cmp command will only
exit with a status of 0 if there are no errors.
EXAMPLE
A common use for the srec_cmp command is to
verify that a particular signature is present in the code. In this
example, the signature is in a file called``signature'', and the
EPROM image is in a file called ``image''. We assume they are both
Motorola S-Record format, although this will work for all formats:
- srec_cmp signature image -crop -within signature
The
signature need not be at the start of memory, nor need it be one
single contiguous piece of memory. In the above example, the
portions of the image which have the same address range as the
signature are compared with the signature.
COPYRIGHT
srec_cmp version 1.26
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Peter Miller;
All rights reserved.
The srec_cmp program comes with ABSOLUTELY NO WARRANTY;
for details use the 'srec_cmp -VERSion License' command.
This is free software and you are welcome to redistribute it under
certain conditions; for details use the 'srec_cmp -VERSion
License' command.
AUTHOR
| Peter Miller
| E-Mail:
| millerp@canb.auug.org.au
|
| /\/\*
| WWW:
| http://www.canb.auug.org.au/~millerp/
|