DATA LOGGING TO
#PART1.TDS & #PART2.TDS
for program and overlay storage.
fast moves from extended memory
This software is intended for use with SST28SF040 chip from Silicon Storage Technology Inc. The device can be written byte by byte, but can only be erased (set to hex FF) in either sectors of 256 bytes, or by erasing the whole chip. There is protection by software, which prevents accidental erasure, or byte writes. This is enabled at power-up and must be disabled before you can write to the device. Data retention is quoted by the manufacturer as 100 years minimum and the endurance as 100,000 cycles minimum.
The 32-pin Dual In Line package is placed in the 32-pin socket of the TDS2020F. Links must be changed as follows:
with a sharp scalpel
with a fine pointed soldering iron
The key operations you can undertake are:
q To unprotect chip for write & erase SFEXPOSE
q To protect chip from write & erase SFPROTECT
q To read SST28SF040 chip use commands EC@ E@ 2E@ (unchanged)
q To write SST28SF040 chip use commands EC! E! 2E! (as redefined in #28SF040.TDS) or for fastest speed use SFC! (53�s)
q To block write from base memory SFMOVE (45�s per byte, e.g. for programs)
q To erase whole SST28SF040 chip use command SFSCRUB (takes 24 seconds)
q To erase one or more 256 byte sectors SFERASE (takes 12ms per sector)
q To check write or erase operation SFERROR @ (read variable)
Before any write or erase operation, use SFEXPOSE to allow access. Reprotect the memory with SFPROTECT . The memory is always visible for read operations, and these use the standard extended memory read words.
To collect data to 28SF040 Flash-EEPROM chips, see REGULAR DATA LOGGING, page 264 to choose a collection scheme. Then use the words shown above to do the actual writing to the chip. Binary storage is more efficient than ASCII Comma Separated Variable (CSV) format and is more likely to be needed with chips than with the larger card memories. For example the following word !WORD uses SFC! to write a 16-bit number in binary to the Flash chip, updating a 32-bit pointer ready for the next data. The subsequent word SQUIRT is for recovery of data; it will send all the Flash chip content to the serial port. Note the unusual double exit used in this word, see CONTROL STRUCTURES, page 136.
2VARIABLE POINTER \ Point to next free location,
\ initialise with
\ HEX 80000. DECIMAL POINTER 2!
\ in word executed at power-up
: !WORD ( u - ) \ Write u in binary format (250us)
DUP >< \ duplicate & swap bytes
POINTER 2@ 2DUP 2>R \ copy 32-bit memory address
SFC! \ store most significant byte
2R@ 1 M+ SFC! \ store least significant byte
2R> 2 M+ \ increment pointer
DUP $10 = \ check for hex 100000
IF 2DROP \ end of Flash chip
ELSE POINTER 2! \ store new pointer
: SQUIRT ( - ) \ Output all Flash chip bytes
\ to serial port
0 8 \ short way to put hex 80000.
DUP $10 <> \ get out at end of Flash chip
\ at hex 100000.
KEY? 0= \ get out on any key
2DUP EC@ EMIT \ read and send one byte
1 M+ \ increment Flash chip address
\ for next time
KEY DROP \ throw away exit keystroke
THEN 2DROP ; \ throw away memory address
You can put 128k or 512k byte RAM chips in the 32-pin socket. A battery can be attached to keep its data even when power is off. See NON-VOLATILE RAM, page 117.
Flash chips are generally to be preferred to RAM, but there are two situations in which you might want to use RAM chips to collect data:
q The fastest possible speed is required.
q You must have RAM in the 32-pin socket for other reasons, for example for extended variables, see ACCESSING EXTENDED MEMORY, page 115.
Use file #FASTEST.TDS as a model for very fast data logging when interrupts and Flash chips impose too big a time penalty. The word CAPTURE can collect data at the indicated speeds to RAM in the 32-pin socket.
q 81,933 8-bit samples/s, program in 28-pin
socket, internal A-D
(needs external watchdog in inner loop)
q 200,646 8-bit samples/s, program in
q 185,523 8-bit samples/s, program in 28-pin socket, external A-D
q 364,342 8-bit samples/s, program in
If the motivation for using RAM is not speed, but that it is already there, use any of the methods previously described. See REGULAR DATA LOGGING, page 264.