summaryrefslogtreecommitdiff
path: root/changes.txt
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2010-01-06 17:55:16 +0000
committerDimitri Sokolyuk <demon@dim13.org>2010-01-06 17:55:16 +0000
commit09381c6097773b08622c810428a84840b5b08070 (patch)
treef62afce58620ebbffe6abcf1b8e1d8df6a09a5b8 /changes.txt
AVR SP12 programmer
Diffstat (limited to 'changes.txt')
-rw-r--r--changes.txt1085
1 files changed, 1085 insertions, 0 deletions
diff --git a/changes.txt b/changes.txt
new file mode 100644
index 0000000..2a380d9
--- /dev/null
+++ b/changes.txt
@@ -0,0 +1,1085 @@
+ CHANGES FROM VERSION 2.1.0 TO 2.1.1
+
+ Artur Pundsack added support for the extended addressing
+ demanded by big AVR uCs like the Mega2561. The new "load
+ extended address byte" command is `hard-wired' (not part
+ of _sp12dev), so the change should be transparent even to
+ those who write their own _sp12dev entries.
+
+
+ CHANGES FROM VERSION 2.0.7 TO 2.1.0
+
+ Corrected a minor bug which prevented sp12 from dealing with the
+ ATtiny2313 - the hexadecimal part of the device code (0A91)
+ wasn't recognised.
+ Added the new programming command `poll rdy/bsy', introduced in
+ the Tiny2313. When this command is part of an _sp12dev entry (see
+ sp12dev.txt), the -o option is ignored. And for devices which obey
+ this new programming command, -o must be ignored, as -o1 would cause
+ programming errors.
+
+ Btw, you'll find that programming the Tiny2313 is a zippy process.
+ It took about 14 seconds to completely fill the flash of the old
+ AT90S2313, or nearly half a minute without optimization. Uploading the
+ same stuff to the Tiny takes just a little more than 1 second! (Or 5
+ seconds without optimization.)
+
+ A few other improvements were made:
+
+ 1) When they can't find a working parallel port, previous versions
+ tend to segfault and leave a corrupt _sp12rc behind.
+ Version 2.1 exits gracefully.
+
+ 2) Speedier blank check, thanks to Petr Slansky.
+
+ 3) Because several users put things like -rc2 and -rc3 on the
+ command line (instead of -rc10 -rc11), and were flummoxed by
+ the result, sp12 now accepts decimal calibration byte addresses.
+
+
+ CHANGES FROM VERSION 2.0.6 TO 2.0.7
+
+ Added support for Windows NT/XP. Note, the MingW (www.mingw.org)
+ compiler is used to build the Windows version.
+
+
+ CHANGES FROM VERSION 2.0.5 TO 2.0.6
+
+ Timing optimization is now available when programming page mode
+ uCs (ATmega's). In previous versions, pages were allowed to
+ settle for 64ms, as demanded by the old Mega103. Optimization
+ allows you to fully program a Mega8 in about 3 seconds instead
+ of 11 seconds.
+ However, there are combinations of target and program cable
+ (without `dongle') which cause optimization to fail; a few
+ locations which have been programmed and verified may revert to
+ 0xff while programming another page. So it was decided to keep
+ `no optimization' as the default behaviour. To increase speed,
+ use -o1. For example:
+
+ sp12 -M4 -o1 -wpf foo.hex
+
+ To make sure that optimization is alright for your hardware,
+ it should be tested with QUERY=1 in _sp12rc, or a command like
+
+ sp12 -M4 -o1 -wpfC foo.hex -Cpf foo.hex
+
+ The checksums should be equal.
+
+
+ CHANGES FROM VERSION 2.0.4 TO 2.0.5
+
+ The `read calibration byte' command is now addressable,
+ so you can read the four bytes inside for instance the ATmega8.
+ Byte 0: sp12 -rc or sp12 -rc00
+ Byte 1: sp12 -rc01
+ Byte 2: sp12 -rc10
+ Byte 3: sp12 -rc11
+
+ `CALIB_MESSAGE' has been added to _sp12dev
+
+ In the -i[nnn] command line option, nnn may now be equal to
+ either the device code (with or without leading zeroes) or the
+ device name, which can be something like AT90S1200, AT90LS1200,
+ AT90LS1200A or abbreviations like S1200, Mega128 and M8L. See
+ sp12dev.txt for more information about device names.
+
+
+ CHANGES FROM VERSION 2.0.3 TO 2.0.4
+
+ Steve broke -T and -P; repaired.
+ Increased buffer space for locks and fuses messages in _sp12dev;
+ Check on buffer overrun for same;
+ Trailing spaces quietly removed from commands in _sp12dev,
+ before checking string length.
+
+
+ CHANGES FROM VERSION 2.0.2 TO 2.0.3
+
+ Page mode now properly deals with overlays.
+ Timing now less dependent on compiler optimization setting.
+
+
+ CHANGES FROM VERSION 1.0.3 TO 2.0.2
+
+ The entire locks and fuses command set has been replaced;
+ a compatibility jump made inevitable by the proliferation of
+ fuses in the AVR family.
+
+ A plain text runtime configuration file (_sp12dev) now contains
+ the locks and fuses command definitions as well as parameters
+ like flash and eeprom size. Maintenance will hopefully be a
+ matter of adding entries to and editing this file. Have a look
+ at sp12dev.txt.
+
+ The -H is now reserved for reading and writing the `high
+ fuses'. Its old function (hex dump with ascii translation
+ modifier for the -r(ead) option) is available as -h.
+
+ Other new commands are -rc (to read the calibration byte of uCs
+ like the Tiny15, Mega8 and Mega163, command defined in _sp12dev),
+ -s (reads the list of supported uCs from _sp12dev and shows
+ them on screen) and -t, which shows a progress bar lasting
+ about ten seconds, for checking the autocalibrated timing.
+
+ The -i[nnn] option now uses the device codes:
+
+ AT90S1200(A) -i190
+ AT90S2313 -i191
+ AT90S8515 -i193
+ AT90S4414 -i192
+ AT90S2323 -i291
+ AT90S4434 -i292
+ AT90S8535 -i393
+ AT90S2343 or Tiny22 -i391
+ Tiny22L -i691
+ AT90S2333 -i591
+ AT90S4433 -i392
+ ATtiny15L -i690
+ ATmega103 -i197
+ ATmega603 -i196
+ ATmega161 -i194
+ ATmega163 -i294
+ ATmega8 -i793
+ ATmega128 -i297
+
+ And when 'KANDA' in _sp12rc is removed or set to 3, sp12 will look
+ at the name by which the program is called (sp12 or sp12.kanda,
+ sp12.exe or sp12k.exe in Dos/Windows), and adapt its parallel
+ port pinout accordingly.
+
+ No version 2.0 younger than patch level 2 has been published;
+ 1.0.3 is the final instance of version 1.0.
+
+
+ CHANGES FROM VERSION 1.0.2 TO 1.0.3
+
+ Were made according to a patch mailed to us by Eric Norum.
+ His way of dealing with root permissions is safer, because
+ sp12 now drops root permissions before accessing the file
+ system.
+
+ CHANGES FROM VERSION 1.0.1 TO 1.0.2
+
+ While making sp12 compatible with both the sp12 cable/dongle
+ and the cable/dongles supplied with the Kanda STK200/300 starter
+ kits, Steve partly broke the `port control' option (-P[nnn]).
+ Corrected.
+
+ CHANGES FROM VERSION 1.0 TO 1.0.1
+
+ A few bugs were squashed in the Intel Hex code, which caused
+ records type 2 to be misinterpreted.
+
+ CHANGES FROM VERSION 0.9 TO 1.0
+
+ The improved Intel Hex file support and multiple uC programming
+ were conceived by Kevin Towers, who also provided a large part of
+ the new code.
+ NOTE: Be sure to erase any previous runtime configuration file
+ (_sp12rc) and let this version make a new one.
+
+ NEW _sp12rc SETTINGS
+
+ You can set KANDA=1 (default is 0). SP12 1.0 is compatible with
+ three programming cables; the one as used with previous
+ versions - with or without Ken Huntington's `dongle' - and the
+ cable/dongles supplied with the Kanda STK200/300 starter kits.
+ The latter two are functionally equivalent. When `Kanda' is
+ set, the parallel port pin usage is then adapted to Kanda's,
+ which means that the port control option (see below) is of
+ limited use.
+
+ You can set a log path/file, where SP12 will log its write and
+ lock operations. The default is "sp12log.txt" in the current
+ directory.
+
+ You can set LOGGING=1 (Default is 0.) When `logging' is set,
+ every write and lock operation will cause a single line to be
+ appended to the log.
+
+ You can also set QUERY=1 (Default is 0). SP12 normally checks
+ each location (or ATmega page) right after writing; if the
+ content doesn't match what was written, SP12 retries a couple
+ of times before giving up. This procedure achieves correct
+ programming when conditions or memory cells are marginal, and
+ also catches the large majority of hard errors. But defects and
+ averse conditions may sometimes cause the content of one
+ address to change, while another is being written to. You can
+ catch these (extremely rare) errors by setting both `logging'
+ and `query'. After writing a file content into the designated
+ memory area, the flash or eeprom will then be read back and
+ compared with the file, address by address. When all is well, a
+ checksum is calculated and added to the log; else "readback
+ ERROR" is reported. For instance:
+
+AT90S2313 -wpf diz_2.hex checksum cb46 Sat Sep 23 18:43:49 2000
+AT90S2313 -wef diz_2.eep checksum 0f37 Sat Sep 23 18:43:53 2000
+AT90S2313 -wea 00000052:0xaa verified Sat Sep 23 18:43:54 2000
+AT90S2313 -wpa 00000006:0x5679 readback ERROR Sat Sep 23 19:30:24 2000
+AT90S2313 -wpf diz_2.hex readback ERROR Fri Sep 23 19:33:02 2000
+
+ NOTE: The overlay option modifies the `query' behaviour; see
+ below.
+ Lock operations are preceded by memory checksum calculations,
+ and results are logged like this:
+
+AT90S1200(A) -L3 flash cb46 eeprom 11cf Sat Sep 23 18:47:08 2000
+
+ When logging is set but query is not, the address by address
+ comparison is not performed, and writes are logged like this:
+
+AT90S2313 -wpf diz_2.hex not queried Fri Sep 29 14:42:21 2000
+AT90S2313 -wef diz_2.eep not queried Fri Sep 29 14:42:22 2000
+
+ ERROR CODES RETURNED ON PROGRAM EXIT
+
+ 0 - accomplished writing/reading task - "life is wonderful :)"
+ 1 - no device present - "nothing to do"
+ 2 - bad command line options, corrupt _sp12rc, file not found,
+ unable to write to file - "don't know what to do"
+ 3 - verification or blank check error - "device doesn't respond
+ as expected"
+
+ PROGRESS BARS
+
+ During area read and write operations, you will see a
+ progress bar like this:
+ oooooooooooooooooooooooo.......................................
+
+ NEW AND CHANGED OPTIONS
+
+ -A EESAVE fuse bit
+ The command -A0 programs the EESAVE fuse on an ATmega103
+ or 603, causing the eeprom NOT to be erased when a `chip
+ erase' is executed (by -E or -wpf). Command -A1 unprograms
+ the fuse.
+ This option can be used on its own or in combination with
+ option U, forming a word like -A0U10.
+ NOTE: When a device is locked, this fuse bit can't be
+ programmed or unprogrammed.
+
+ -H Hex dump with ascii translation modifier for the -r (read)
+ option, see below.
+
+ -I Intel Hex modifier for the -r (read) option, see below.
+
+ -i[NNN] init
+ As before, except for a few additions to the list:
+
+ Force recognition
+ with:
+ AT90S1200 -i12
+ AT90S2313 -i13
+ AT90S2323 -i23
+ AT90S2333 -i233
+ AT90S2343 -i43
+ AT90S4414 -i14
+ AT90S4433 -i433
+ AT90S4434 -i34
+ AT90S8515 -i15
+ AT90S8535 -i35
+ ATTiny22 -i22
+ ATmega103 -i103
+ ATmega603 -i603
+
+ -M[n.n] uC clock frequency
+ n.n is the uCs clock speed in MHz, not lower than 0.1.
+ _sp12rc contains autocalibrated timing data (delay caused
+ by outportb(), loop count/s), from which an Sck frequency is
+ calculated, fitting the uC's clock speed as indicated by
+ -Mn.n. You can safely set -Mn.n lower than the default (also
+ in _sp12rc), but only if the command precedes all others
+ except -i<nn>. For instance:
+
+ sp12 -M4 -wpf foo.hex
+ sp12 -i103 -M4 -wpf foo.hex
+
+ When this option is not on the command line, the default
+ is used. Unless you change it (in _sp12rc), the default
+ makes sp12 version 1.0 behave like previous versions, which
+ means that the Sck frequency and wave form will be suitable
+ for uCs running on an internal RC clock, at fairly low Vcc.
+ WARNING: When -Mn.n is set too high, the uC will misread
+ commands and fill its memory with garbage.
+ NOTE: In practice, the outportb() function needs a certain
+ amount of time to actually change a parallel port data bit.
+ Depending on the hardware, this is likely to limit the
+ shortest timing to about 1.3us for an Sck half cycle. Most
+ AVR uCs need the Sck low and high phases to be at least two
+ clock cycles long; the AT89S1200 is an exception, needing an
+ Sck high phase of at least four clock cycles.
+ So while SP12 works correctly with very fast uCs, the time
+ needed to execute a command line is not likely to decrease
+ for Mnn settings above 3MHz for the 1200, and 1.5MHz for
+ the other family members. SP12 reports the timing achieved.
+
+ -O overlay
+ The commands -wpf and -wef cause SP12 to read files into
+ 0xFFFF or 0xFF padded buffers, and to make sure that the
+ flash or eeprom area contains the buffer image after
+ programming is done. -wpf is automatically preceded by a
+ `chip erase', and -wef writes 0xFF into all addresses which
+ don't have their content specified by the file (addresses
+ which already contain 0xFF are skipped). This guarantees
+ that programming is actually possible (new uploads to
+ flash could easily conflict with `leftovers' from previous
+ work). It also results in equal checksums for uC content
+ and file.
+ However, You may sometimes want to add calibration
+ constants, configuration data and/or serial numbers to
+ what's already in flash or eeprom. To overlay files on
+ data already in the uC's memory, you'd do:
+
+ sp12 -Owpf foo.hex -Owef foo.eep
+
+ In combination with -wpf, the -O precludes chip erase.
+ If there is a conflict, the flash overlay will stop with an
+ error report - it isn't possible to write a 1 over a 0 in an
+ AVR flash location. However, foo.eep is always written, even
+ if it (partially) replaces earlier data.
+ Both -Owpf and -Owef only upload the file (as opposed to
+ the buffer) and cause a query (performed when `logging' and
+ `query' are set in _sp12rc) to also be limited to the
+ file, or where the flash area is concerned, to addresses
+ which according to the file should contain something other
+ than 0xffff.
+ Checksums are always calculated for the entire area, as the
+ commands -Cp and -Ce refer to the entire uC areas. So
+ after an -Owpf or -Owef, the log will show a checksum
+ which only matches area content. The overlayed files each
+ have their own checksum.
+
+ -P[nnn] Port control
+ When used as the final option on the command line, this
+ option leaves the parallel port data pins in the state
+ determined by NNN, which can be a decimal or hexadecimal
+ number: For instance, -P124 and -P0x7C both leave the
+ port in 01111100 state. When used like this:
+
+ SP12 -P4 -wpf uC1.hex -P8 -wpf uC2.hex -P2
+
+ The first two -P's are limited to controlling pins 2-6
+ (those not used for the programming interface itself).
+ Kevin invented this usage for programming two AVR uCs
+ on a single board, using a single connector and a single
+ command. There is a 10ms delay after each -P, to give
+ analog switches on the target board some time to do their
+ job.
+ NOTE: You can't use Ken Huntington's `dongle' together
+ with option -P, since buffers inside it are powered as well
+ as high-Z/enabled using the data 2-6 pins. So only the exit
+ state of the parallel port can be set, as with the old -T
+ option (see below).
+ NOTE: it is possible to set different communication speeds
+ for each uC, using the -Mn.n command, but you have to put
+ the -P first on the command line:
+
+ SP12 -P4 -M0.2 -wpf uC1.hex -P8 -M4 -wpf uC2.hex -P2
+
+ NOTE: -P has immediate control over data pins 2-6 only
+ when it's the first option on the command line. In this
+ case:
+ SP12 -iNNN -P4 -wpf ...
+
+ Pins 2-6 will all be high during init, which takes about a
+ quarter of a second, depending on settings in _sp12rc and
+ the possible need for resynchronization of the uC's
+ programming interface.
+
+ NOTE: When sp12 is used with the Kanda STK200 cable/dongle,
+ a -P which is not the final option on the command line will
+ control only data bits 0, 1 and 6. Bits 2 and 3 have to be
+ used to high-Z/enable buffers inside the Kanda dongle; bits
+ 4 and 7 are programming lines, and bit 7 handles reset.
+
+ -r read
+ To read from either program or eeprom area, a single address
+ (-rpa address, or -rea address) or the whole area. In the
+ latter case output can be directed to a file using the -f
+ option: -rpf foo.rom reads the program area and writes an
+ image into foo.rom. Use of the `I' modifier (-rpfI foo.hex)
+ changes the format from `native' avrasm to Intel Hex, while
+ use of `H' (-rpH to screen or -rpfH foo.dmp to file)
+ results in a hex dump with ascii translation, ending with
+ a checksum:
+
+ 000078 95 08 24 ee 24 ff 27 cc 77 d7 ..$.$.'.w.......
+ 000080 bf 02 2f 4d 70 47 30 45 f0 10 ../MpG0E..=...h.
+ 000088 e0 00 16 e0 f0 89 16 f0 f0 79 .........y...i..
+ 000090 f4 18 16 fc f4 08 c0 04 14 fe ...........0...
+ Checksum: cb46
+
+ The above is just a sample of (shortened) lines taken from
+ actual output.
+ NOTE: 16-bit word addresses are used when displaying the
+ program space, and words are shown hi byte first.
+ By default, data read from the eeprom area is presented in
+ this format:
+
+ Address: Data in hex, dec, oct, bin
+ 0000: 0xc0 192 0300 11000000
+ 0x01: 0x99 153 0231 10011001
+
+ Or in this format when a single address is read to the screen
+ (stdout):
+
+ The byte 0x99 (153, 0231, B10011001) was read from
+ eeprom address 0x0001
+
+ But you can also use the commands -reH, -refH or -refI
+ with appropriate effect. Byte addressing is used for the
+ hex dump display.
+
+
+ -T This option was retained to remain compatible with older
+ versions, but option -P offers much more control over the
+ parallel port.
+ By default, SP12 will leave the Centronics parallel port
+ databits all zero on exit. Command -T1 leaves the reset
+ pin high, so a connected device will start running immediately
+ after SP12 has finished, assuming it uses an external power
+ source. Command -T2 also leaves the `powerbits' (2-6, as
+ shown by progrmmr.gif) high, to run a device without external
+ power.
+
+ -U[nn] SUT fuse bits
+ The command -U[nn] programs the SUT fuses on an ATmega103
+ or 603, thus enabling various reset delays as detailed in
+ the datasheet (page 23/24, tables 5 and 6, 11/1999).
+ This option can be used on its own or in combination with
+ option A, forming words like -A0U10 (see `examples' below).
+
+ EXAMPLES OF THE NEW OPTIONS
+
+ When an ATmega103 or 603 is connected, the command
+ SP12 -rF
+ Will result in something like:
+
+ The following information was read from the
+ lock and fuse bits:
+ Start-up time code selected is 3 (16K WDT cycles)
+ EEPROM is NOT preserved thru chip erase
+ Device is not protected
+
+ When an AT90S2333 or 4433 is connected, the command
+ SP12 -rF
+ Will result in something like:
+
+ The following information was read from the
+ lock and fuse bits:
+ Brown-out detection enabled.
+ Brown-out trigger set at 4.0V.
+ CKSEL = 100 (datasheet page 20, table 5)
+ Device is not protected
+ Writing 0 to all Centronics data bits.
+
+ But when an AT90S2343 is connected, you might see
+
+ The following information was read from the
+ lock and fuse bits:
+ Internal RC clock enabled.
+ Device is write-protected.
+
+ And when an AT90S4434 or 8535 is connected, the report might be:
+
+ The following information was read from the
+ lock and fuse bits:
+ Short start-up time selected.
+ Device is write-protected.
+
+ The command:
+ SP12 -A0U10
+ Will cause the eeprom NOT to be erased when a `chip erase' is
+ executed (by -E or -wpf). The reset delay is set at 4K WDT
+ cycles. SP12 will report:
+
+ The following information was read back from
+ the fuse bits:
+ Start-up time code selected is 2 (4K WDT cycles)
+ EEPROM is preserved thru chip erase
+
+ The command:
+ SP12 -M4 -wpf foo.hex
+ Will attempt to set communication timing to match a device
+ clock speed of 4MHz. Hardware will usually limit the achievable
+ com speed, so while SP12 works correctly with very fast uCs, the
+ time needed to execute a command line is not likely to decrease
+ for Mnn settings above 1.5MHz. SP12 will report the speed
+ actually achieved. For instance:
+
+ Sck timing set for 1.5MHz or higher.
+
+ The command:
+ SP12 -Owpf foo.hex -Owef foo.eep
+ Will NOT erase the device before writing in the new data.
+ The files foo.hex and foo.eep are added to what is already in the
+ flash and eeprom area's. If there is a conflict, the flash
+ overlay will stop with an error report - it isn't possible to
+ write a 1 over a 0 in an AVR flash location. However, foo.eep is
+ always written, even if it (partially) replaces earlier data.
+
+ With suitable hardware, this command:
+ SP12 -P4 -wpf uC1.hex -P8 -wpf uC2.hex -P2
+ will program two uCs on a single target board, using a single
+ command line. The first -P would make parallel port data bit 3
+ high, making a set of analog switches route the programming lines
+ to the first uC. The second -P disconnects the first and connects
+ the second uC. Finally, the third -P leaves reset high when SP12
+ exits, allowing the new software to run. There is a 10ms delay
+ after each -P, to give analog switches on the target board some
+ time to do their job.
+
+ The command:
+ SP12 -rpfH foo.dmp
+ Reads the program area and writes a `hex dump with ascii
+ translation' into the file foo.dmp. If you type just -rpH, the
+ output is directed to the screen (stdout). You can dump the
+ eeprom area using -refH.
+
+ The command:
+ SP12 -rpfI foo.hex
+ Reads the program area and writes it into the Intel HEX file
+ foo.hex. -rpI (without the f) is not a valid command. You can
+ dump the eeprom area using -refI.
+
+
+ CHANGES FROM VERSION 0.8 TO 0.9
+
+ NOTE: Be sure to erase any previous runtime conifiguration file
+ (_sp12rc) and let this version make a new one.
+
+ SP12 0.8 works reliably with most AVR uCs, parallel ports and
+ target boards. But some hardware combinations can be
+ recalcitrant. To deal with start-up transients, SP12 0.9
+ implements the automatic SPI resynchronization procedure as
+ recommended by Atmel. And to increase programming speed as well
+ as reliability at marginal voltages, the Bytewrite time constant
+ is dynamically adjusted (details below).
+ The signal provided by some parallel ports just isn't good
+ enough, no matter what the software does. The new `dongle'
+ designed by Ken Huntington (dongle.gif) takes care of that.
+ It also has the advantage of being high-Z except when SP12
+ is active, and you don't need Sck termination (as shown in
+ progrmmr.gif and icp_intr.gif) when using it.
+
+ NOTE: The dongle is perfectly transparent to the software, so
+ you can still use a plain cable without any changes whatsoever.
+ Power for the dongle is provided by the parallel port, which is
+ still able to provide power for a small target board as well
+ (Icc up to about 5mA).
+ NOTE: when using the dongle, your target board should have a
+ reset circuit - at the very least a 10K resistor between the
+ uC's reset pin and Vcc.
+
+ The software changes in detail:
+
+ 1) All supported AVR uCs except the AT90S1200(A) should answer
+ the programming enable command by echoing 0x53 on Miso, while
+ the third byte of the command is being transmitted. If they
+ don't, the SPI shift register may be desynchronized. This
+ version of SP12 will try to resynchronize in such cases.
+
+ 2) The high pulse on the reset line (part of the power-on sequence)
+ now has a width which can be altered by editing the RESETPULS
+ value in _sp12rc. The default is long enough (100us) to make
+ SP12 live with a 100N cap on the reset line, as shown in
+ icp_intr.gif.
+
+ NEW AND CHANGED OPTIONS
+
+ -o optimization
+ Default (option not on command line): the Bytewrite time
+ constant - which determines how much time a flash or eeprom
+ address gets to settle, after it has been written to - is
+ dynamically adjusted, with the value in _sp12rc as upper limit.
+ This makes SP12 0.9 program significantly faster than the older
+ versions when conditions allow, and should cause less trouble
+ at low Vcc. As older versions of the AT90S1200 were found to
+ react unreliably when a flash address is polled during
+ programming, default behaviour is to not optimize when a
+ 1200(A) is detected, or when its recognition is forced using
+ option -i12.
+ Level 0 (-o0): No optimization for any uC.
+ Level 1 (-o1): forces optimization for all uCs, including the
+ 1200(A).
+ NOTE: If used, this option must be the first option on the
+ command line, or the first after -i[NNN]
+ NOTE: Allow this version to make a new _sp12rc, because it
+ should have 12ms as default.
+
+ Faster performance is achieved only when the program and/or
+ eeprom data file being uploaded to the uC have a certain
+ length, as the algorithm adjusts towards shorter values in
+ steps of default/12, one step per address. Once the time
+ constant appears too short, the algorithm backs up a step and
+ sets a flag. If a survivable verify error occurs after this,
+ the adjustment is restarted at the default value.
+
+ Polling (as mentioned in the AVR datasheets) is used to
+ determine whether the time constant is long enough. So why not
+ just use polling? Because there are values for which polling
+ can't be used, which vary with the uC. An adjusted time
+ constant also prevents quite a bit of PC/uC communication.
+
+ As you can see below, the wait period required before a value
+ written to flash or eeprom `settles' is closely related to Vcc.
+ I tried programming at 2.5 < Vcc < 5V on two 2313-10PCs, a
+ 2313-4PC and a 4433-8PC. Here are the results (fixed pitch font
+ table):
+
+ 2313-10PC 2313-4PC 4433-8PC
+ % of 12ms % of 12ms % of 12ms
+ Vcc -wpf -wef -wpf -wef -wpf -wef
+
+ 5.0 16 16 16 16 16 16
+ 4.5 16 16 16 16 16 16
+ 4.0 25 25 25 25 25 25
+ 3.5 33 33 33 33 33 33
+ 3.0 50 50 50 50 41 41
+ 2.5 83 83 75 75 75 75
+
+ NOTE: All programming runs were perfect; no verify errors,
+ always the same checksums. Nevertheless, 2.5V should be
+ considered to be too low for comfort.
+
+ EXAMPLES OF THE NEW OPTION
+
+ To force byteWrite optimization for a 1200:
+ SP12 -o1 -wpfC foo.hex -Cpf foo.hex
+ Or:
+ SP12 -i12 -o1 -wpfC foo.hex -Cpf foo.hex
+ Compare the two checksums to make sure that the upload was
+ correct.
+ To force a fixed byteWrite equal to the value in _sp12rc
+ (behaviour equal to previous versions):
+ SP12 -o0 -wpf foo.hex
+
+
+ CHANGES FROM VERSION 0.7 TO 0.8
+
+ 1) Support for the AT90S2333 and 4433 has been added, and the
+ FSTRT-bit of the 2323 is now accessible:
+
+ Read, set/clear:
+ Lock RCEN FSTRT BODEN BODLEVEL CKSEL
+ AT90S1200
+ AT90S2313
+ AT90S2323 YES YES
+ AT90S2333 YES YES YES YES
+ AT90S2343 YES YES(*)
+ AT90S4414
+ AT90S4433 YES YES YES YES
+ AT90S4434 YES YES
+ AT90S8515
+ AT90S8535 YES YES
+ ATTiny22 YES YES(*)
+
+ (*) The 2343 is still treated as if it has an RCEN-bit, which
+ may not be true for the series now being sold - the 02/2000
+ errata sheet for the Tiny22 says "If external oscillator is
+ required, use the 100% pin- and code-compatible
+ AT90S/LS2343 which has external clock option only."
+ It appears that the RCEN fuse proved recalcitrant in some
+ cases, and Atmel felt this to be the quick and safe
+ solution.
+ (**) The same errata sheet says that only the Tiny22L is now
+ available, with the internal RC oscillator as the single
+ clock option. However, I have several Tiny22s with a
+ switchable RCEN fuse, making them fully compatible with a
+ number of clock-switchable 2343s I have lying around.
+ Moreover, my Tiny22 (8PC) chips even have the same
+ signature bytes (device code) as my 2343s...
+ To make all versions as useful as possible, it was decided
+ to make SP12 version 0.8 treat all Tiny22s and 2343s as if
+ they are identical, and have a switchable RCEN fuse. It's
+ up to the user to determine or find out the use of of the
+ -R0/R1 option.
+
+ -K[NNN] CKSEL fuse bits
+ The command -Knnn programs the CKSEL fuses on an AT90S2333
+ or 4433, thus enabling various reset delays as detailed in
+ the datasheet (page 20, table 5, 04/1999). This option can
+ be used on its own or in combination with options D and V.
+ NOTE: This option must be the final one on your command
+ line. If options -D and/or -V are also used, you must
+ combine them with -K to form a single command word. (See
+ `examples' below.)
+
+ -D BODEN fuse bit
+ The command -D0 programs the BODEN fuse on an AT90S2333
+ or 4433, enabling brown-out detection. Command -D1
+ unprograms the fuse, switching brown-out detection off.
+ This option can be used on its own or in combination with
+ options K and V.
+ NOTE: This option must be the final one on your command
+ line. If options -K and/or -V are also used, you must
+ combine them with -D to form a single command word. (See
+ `examples' below.)
+
+ -V BODLEVEL fuse bit
+ The command -V0 programs the BODLEVEL fuse on an AT90S2333
+ or 4433, setting the brown-out detection level to 4.0V.
+ Command -V1 unprograms the fuse, setting the lever to 2.7V.
+ This option can be used on its own or in combination with
+ options K and D.
+ NOTE: This option must be the final one on your command
+ line. If options -K and/or -D are also used, you must
+ combine them with -V to form a single command word. (See
+ `examples' below.)
+
+ -i[NNN] init
+ As before, except for a few additions to the list:
+
+ Force recognition
+ with:
+ AT90S1200 -i12
+ AT90S2313 -i13
+ AT90S2323 -i23
+ AT90S2333 -i233
+ AT90S2343 -i43
+ AT90S4414 -i14
+ AT90S4433 -i433
+ AT90S4434 -i34
+ AT90S8515 -i15
+ AT90S8535 -i35
+ ATTiny22 -i22
+
+ EXAMPLES OF THE (NEW) OPTIONS
+
+ When an AT90S2333 or 4433 is connected, the command
+ SP12 -rF
+ Will result in something like:
+
+ The following information was read from the
+ lock and fuse bits:
+ Brown-out detection enabled.
+ Brown-out trigger set at 4.0V.
+ CKSEL = 100 (datasheet page 20, table 5)
+ Device is not protected
+ Writing 0 to all Centronics data bits.
+
+ But when an AT90S2343 is connected, you might see
+
+ The following information was read from the
+ lock and fuse bits:
+ Internal RC clock enabled.
+ Device is write-protected.
+
+ And when an AT90S4434 or 8535 is connected, the report might be:
+
+ The following information was read from the
+ lock and fuse bits:
+ Short start-up time selected.
+ Device is write-protected.
+
+ The command:
+ SP12 -D0V0K100
+ Will switch on the brown-out detection of an AT90S2333 or 4433,
+ set the detection level to 4.0V and provides a start-up delay
+ of 16K CK (datasheet 04/1999, page 20, table 5). SP12 will
+ report:
+
+ Brown-out detection enabled.
+ Brown-out trigger set at 4.0V.
+ CKSEL = 100 (datasheet page 20, table 5)
+ (Re)enabling brown-out detection usually causes the
+ AT90(L)S2333/4433 to hang, so there is nothing further
+ to do for SP12. Before programming can continue, power
+ to the 2333/4433 must be switched off and back on again.
+ Writing 0 to all Centronics data bits.
+
+ Atmel had this to say about the `hangup' mentioned above:
+
+ "This is a known problem with the current revision of the
+ AT90S4433. There is no other workaround than to program the
+ BODEN bit after you have programmed the flash and the EEPROM."
+ (Communication via Mark Korsloot of Alcom, the Dutch
+ distributor of Atmel products, on 27 Apr 2000.)
+
+ When this version of SP12 was prepared, the AT90(L)S2333 was
+ not available. (Re)enabling BOD may or may not cause this uC to
+ hang, but it seems best to make fuse programming the final
+ word on your command line. So if you want to write to eeprom
+ and flash, lock the device and program the fuses in one go,
+ this is the correct order of the command words:
+
+ SP12 -wpf prog.hex -wef data.epr -L3 -D0V0K100
+
+ The flash must be written to first, because that command first
+ erases the device. The fuses can be programmed after locking
+ the device, because in serial programming mode, you have access
+ to the fuse bits even when a device is locked mode 3.
+
+ Using one of the fuse programming options on its own is of
+ course possible. The command:
+ SP12 -V1
+ Sets the brown-out detection level of an AT90S2333 or 4433 to
+ 2.7V.
+
+
+ CHANGES FROM VERSION 0.6 TO 0.7
+
+ 1) Kevin Towers reported:
+ --------------------------------------------------------------------
+ I just downloaded your SP12 programmer source the other day and
+ tried to get it to work. After a few hours, I figured out the
+ timing was inaccurate. I'm running a 400Mhz Celeron A processor.
+ I read your doc files and noted that someone had bumped the numbers
+ by 40%. I found this was not enough.
+ --------------------------------------------------------------------
+
+ The autocalibration of the timing loops has been rewritten and
+ tested in cooperation with Kevin Towers and Ken Huntington. It is
+ now more accurate as well as faster than it used to be.
+
+ NOTE: The timing has been split into autocalibrated loops for the
+ constants which should be shorter than 10 milliseconds (sckLO,
+ sckHI and byteWrite) and delay() calls for the other three. So when
+ upgrading from a previous SP12 version, you MUST erase your old
+ _sp12rc(s), to let version 0.7 write new ones.
+
+ 2) Kevin Towers improved the code for reading Intel HEX files, to be
+ compatible with flash data as generated by the IAR C compiler.
+
+ 3) Atmels AT90S2323 datasheet specifies the wrong signature bytes,
+ which caused SP12 version 0.6 not to recognize this device. Atmel
+ has since confirmed the correct signature, which been compiled into
+ version 0.7.
+
+ 4) An option like this has been demanded by many. It has the
+ disadvantage of leaving the Centronics parallel port in a state
+ other than zero, which may conflict with the next device you
+ connect. Use with care.
+
+ -T By default, SP12 will leave the Centronics parallel port
+ databits all zero on exit. Command -T1 leaves the reset
+ pin high, so a connected device will start running immediately
+ after SP12 has finished, assuming it uses an external power
+ source. Command -T2 also leaves the `powerbits' (2-6, as
+ shown by progrmmr.gif) high, to run a device without external
+ power.
+
+ 5) There is now a single source for the Dos and Linux versions of
+ SP12, as initiated by Jean-Jacques Michel (see linux.doc in the
+ SP12v0_7-linux.tgz or SP12v0_7-linux-static.tgz).
+
+
+ CHANGES FROM VERSION 0.5 TO 0.6
+
+ Chris Jackson reported:
+ --------------------------------------------------------------------
+ I've recently built your SP12 programmer for the Atmel AVR
+ microcontroller. In the documentation you mention that the
+ software apparently doesn't work in a Windows98 DOS box. I'm happy
+ to report that this isn't the case, as it works quite happily in
+ both WIndows95 and Windows98 for me.
+
+ I have had a couple of problems though:
+
+ 1. One of the machines that I tried it on had a Parallel Port
+ PCMCIA adapter installed. Unless the machine was powered up with
+ this device fully disconnected, the driver for it was loaded by
+ Windows. This meant that whenever SP12 set the port lines high,
+ the driver would kick in and set them back low again. Depending on
+ the speed of the driver's response, the programmer would sometimes
+ work, and sometimes not - which caused a bit of confusion at first.
+
+ 2. The software doesn't work reliably on any computer with a
+ PentiumII processor running at >=350MHz. The problem is in the
+ initialization of the timing loop, which doesn't have the
+ resolution to cope with such high speed processors. You can work
+ around this by manually editing the _sp12rc file until the values
+ are large enough to make it work.
+
+ I have recompiled the software using MS VisualC++, using the
+ system's high resolution timer. This gives me reliable software
+ without tweaking the _sp12rc file, but it is more tied to Windows
+ than it was before. Also, Microsoft have removed support for the
+ outportb() and inportb() functions, so I had to use inline
+ assembler for those. It looks as though it will be impossible to
+ access the parallel port in this way when WindowsNT takes over,
+ which will be unfortunate.
+ --------------------------------------------------------------------
+
+ Chris later recompiled SP12 using Borland C++ 4.5 with no changes
+ to the source code. It worked without problems on all machines he
+ tried it on up to a processor speed of 400MHz. When he tried
+ it on a 450MHz machine, it didn't work but increasing the SCKLO and
+ SCKHI values in _sp12rc by just 40% made it work OK. He supposes
+ that this could be accounted for by inaccuracies in the timing
+ initialisation. It now looks as if programs compiled with Turbo C
+ may have problems with newer high speed Pentiums.
+
+ The present 32-bit protected mode version 0.6 was compiled with gcc
+ (Free Software Foundation, as found in the djgpp package). It does
+ a better job of calibrating its timing, which takes care of problem
+ number 2 above, as Chris confirmed. His other remarks remain valid;
+ SP12 has no way to deal with MS Windows related port conflicts and
+ access problems. It isn't Windows software and probably never will
+ be. And Windows-NT does not provide the parallel port access
+ required by SP12.
+
+
+CHANGES FROM VERSION 0.4 TO 0.5
+
+ Support has been added for seven other AVR uCs. On all of them,
+ you have read and write access to the flash and eeprom memory
+ (from/to file or single address), and you can set the lock bits.
+ Some of them offer extra functions as shown in the table:
+
+ Read access to set/clear set/clear
+ lock & fuse bits RCEN FSTRT
+ AT90S1200
+ AT90S2313
+ AT90S2323 YES
+ AT90S2343 YES YES
+ AT90S4414
+ AT90S4434 YES YES
+ AT90S8515
+ AT90S8535 YES YES
+
+ Note that on `YES' marked devices, you have access to the fuse
+ bits even if the device is locked. For instance, you can switch
+ the 2343 from internal to external clock oscillator and back
+ even if you can't read the program inside.
+
+ NEW AND CHANGED OPTIONS
+
+ -C calculate checksum
+ Unchanged, but note the support for files in Intel HEX format:
+ Using files in Intel HEX format makes no difference to the
+ checksum. If foo.rom is the same program as foo.hex, then -Cpf
+ foo.rom and -Cpf foo.hex result in the same checksum.
+ And mark the following note:
+ NOTE: The checksum value depends on what's in the buffer and
+ also on the total size of the buffer. So if you move a file
+ from an AT90S2313 to an AT90S8515, the checksum changes.
+ -i12 -Cpf foo.rom and -i15 -Cpf foo.rom show different
+ checksums for the same file, matching those calculated when
+ doing -Cp with a 1200 or an 8515 connected.
+
+ -E chip erase
+ A blank check no longer follows automatically. Imho there is
+ something to be said for checking results if they can be
+ checked, but it does take time and is in this case necessary
+ only if you suspect trouble.
+ Using options -w, -p and -f together (to write a file
+ from disk to program area) is still automatically preceded by
+ an erase, but not by a blank check. So -wpf foo.rom is now
+ equivalent to -Ewpf foo.rom. -Bwpf foo.rom causes a blank
+ check between the automatic erase and the upload of foo.rom.
+ -E merely does an erase, -EB means erase and blank check.
+
+ -f filename next
+ The upload of files in Intel HEX format is now supported:
+ Program files must be either in the Atmel `generic' format or
+ in Intel HEX format, both as provided by the Atmel assembler
+ (w)avrasm.exe version 1.03 or higher. SP12 recognizes the file
+ by content, so you don't need to use specific extensions;
+ but .rom and .hex do seem logical.
+ The generic format contains only lines like 00000c:99e1 (both
+ address and data in hexadecimal notation without prefix; six
+ digits for the address, four for the data).
+ Eeprom files must be either in SP12 `native' format, or Intel
+ HEX format as provided by (w)avrasm.exe version 1.21 or
+ higher. To conform to SP12 format, the file must contain only
+ lines like 0x0d:0xcf (Address in hexadecimal, decimal or octal
+ notation, data in hexadecimal, decimal, octal or binary
+ notation, all with appropriate prefix. So the lines 0x0d:153,
+ 13:0231 and 015:B10011001 have the same meaning.)
+
+ -F Lock and fuse bits
+ Use in combination with -r to make the command -rF, for
+ reading the lock and fuse bits. Valid only if an AT90S2323,
+ 2343, 4434 or 8535 is connected.
+
+ -i[NN] init
+ As before, except the following:
+ ...Next the device code of your device (contained in the
+ signature bytes) will be read to determine which member of
+ the AVR family has been connected. This enables SP12 to use
+ the correct programming command subset and to know the size
+ of the flash and eeprom memory. When a device has been
+ locked mode 3, the device code (signature bits) will be
+ unreadable. To regain access, you must put a two-ddigit number
+ behind the -i, thus forcing SP12 to assume that a certain
+ device is connected. Here is a table of supported uCs and init
+ numbers:
+ Force recognition
+ with:
+ AT90S1200 -i12
+ AT90S2313 -i13
+ AT90S2323 -i23
+ AT90S2343 -i43
+ AT90S4414 -i14
+ AT90S4434 -i34
+ AT90S8515 -i15
+ AT90S8535 -i35
+
+ -i0, -i or no use of this option (when there are others on
+ the command line) results in automatic init and device check.
+ NOTE: option -iNN must be the first on the command line.
+ NOTE: init is the only valid option if no device is connected,
+ though you might for instance check a file checksum using
+ -i15 -Cpf foo.hex, if foo.hex is intended for the 8515.
+
+ -R RCEN fuse bit
+ The command -R0 programs the RCEN bit on an AT90S2343, thus
+ enabling the internal RC clock oscillator. Command -R1
+ unprograms the bit, switching the internal clock off.
+ While RCEN is available on other AT90S uCs, it can only be
+ accessed by a serial programmer (like SP12) on the 2343.
+
+ -S FSTRT fuse bit
+ The command -S0 programs the FSTRT bit on the AT90S4434 and
+ 8535, thus selecting the fast start-up time. Command -S1
+ unprograms the bit, selecting the default (long) start-up
+ time.
+
+ -w write
+ As before, except:
+ NOTE: All writes are automatically verified; SP12 immediately
+ reads back from the current address and compares the response
+ with the data that was written. If the response is not
+ correct, SP12 tries to write to the same address two more
+ times before coming back with "ERROR: Verify has failed."
+
+ EXAMPLES OF THE NEW OPTIONS
+
+ When an AT90S2343 is connected, the command
+ SP12 -rF
+ Will result in something like:
+ The following information was read from the
+ lock and fuse bits:
+ Internal RC clock enabled.
+ Device is write-protected.
+ But when an AT90S4434 or 8535 is connected, you might see:
+ The following information was read from the
+ lock and fuse bits:
+ Short start-up time selected.
+ Device is write-protected.
+
+ The command:
+ SP12 -R0
+ Will program the RCEN fuse bit on an AT90S2343, enabling the
+ internal RC clock oscillator.
+ On an AT90S4434 or 8535, the command:
+ SP12 -S0
+ programs the FSTRT fuse bit, to select the short start-up time.
+
+INTERACTIVE USE
+ The interactive human interface is still on the `to do' list.
+ It will probably appear in version 0.7.
+
+
+CHANGES FROM EARLIER VERSIONS:
+
+ Version 0.3 and before needed free access to the Reset pin as well
+ as MOSI, MISO and SCK. As of 0.4, the timing has been altered to
+ cater for the use of a 10K resistor and a 100N (100 nano-farad)
+ capacitor, which make power-on reset more reliable. That
+ combination allows SP12 sufficient access to Reset. Check
+ icp_intr.gif for details.
+
+ No operational changes before this.