
************************************************************************
************************************************************************
**                                                                    **
**    Application notes for STMicroelectronics FLASH memory devices   **
**                                                                    **
**                       (Informal Document)                          **
**                                                                    **
**    To find the application notes for your device search for the    **
**    'core' part name.  As an example using the 25P20 8 pin SOIC you **
**    would search on '25P20'                                         **
**                                                                    **
************************************************************************
************************************************************************

************************************************************************

M28W320CB/T
----------
M28W160CB/T
----------
M28W800CB/T
----------

User Programmable OTP Bits are represented in the last 4 words of device
data. User ram is increased to reflect this, For Ex. on a 16MEGx16 device,
user ram is resized to 100004H locations; address 100000H through
100003H will contain user programmable OTP data. To enable programming,
verifying and Blankcheck on user programmable OTP data,set the "Program" switch
to "Y" and while Erasing, set the "Erase" switch to "N"  for the last sector
represented in the "Device Configure" screen. 
Programming the "Protection Register Bit2" is accomplished by setting
the "Program security fuse2" switch to "Y" in the Program device screen,
this will Lock "Parameter Block #0" of the device.
Programming the "Protection Register Bit1" is accomplished by setting
the "Program security fuse1" switch to "Y" in the Program device screen.
This will protect the status of "Protection Register Bit2" and
"User Programmable OTP Bits" of the device.
Once the "Parameter Block #0" is protected set the "Erase" switch to "N" for
that sector in the "Device Configure" screen while erasing or else you may 
get a "Non-Blank device" error while erasing.

************************************************************************

25P05
----------
25P05A
----------
25P10
----------
25P10A
----------
25P20
----------

1.Four levels of "BLOCK PROTECT" can be implemented
for these device as follows:

Security Fuse     Block Protect Start Addresses  

 SF2     SF1      25P05/A      25P10/A       25P20
-------------     ------------ ------------  -----------  
  0       0       None         None          None         
  0       1       None         $18000-1FFFF  $30000-3FFFF 
  1       0       None         $10000-1FFFF  $20000-3FFFF 
  1       1       $0-FFFF      $00000-1FFFF  $00000-3FFFF     

2.Enabling the "Erase EE device" option will remove all block protection.

NOTE: Devices require "Erase EE device" option to be enabled when re-programming.

3. Status Register Format:  

      7       6        5        4        3        2        1        0     
 |--------|--------|--------|--------|--------|--------|--------|--------|
 |        |        |        |        |        |        |        |        |
 |  SRWD  |   0    |   0    |   0    |  BP1   |  BP0   |  WEL   |  WIP   |
 |        |        |        |        |        |        |        |        |
 |--------|--------|--------|--------|--------|--------|--------|--------| 

Address of status register:

25P05/05A : $10000
25P10/10A : $20000
25P20     : $40000

4.Setting the "Program Protect Register" to Yes allows programming of   
the 'Status Register Write Disable' (SRWD) bit.                              
                                                                      
For enabling "Program Protect Register" in TaskLink for windows(TLwin)
or TaskLink for DOS(TLdos) you must set the Enable Special Data #2    
option.                                                               

***********************************************************************
                                
25P40
----------
25P80
----------

1.Eight levels of "BLOCK PROTECT" can be implemented
for following devices:

 SF3    SF2     SF1      25P40              25P80
---------------------   ----------------   ----------------
  0      0       0       none               none           
  0      0       1       $70000 - $7FFFF    $F0000 - $FFFFF 
  0      1       0       $60000 - $7FFFF    $E0000 - $FFFFF 
  0      1       1       $40000 - $7FFFF    $C0000 - $FFFFF 
  1      0       0       $00000 - $7FFFF    $80000 - $FFFFF 

  1      0       1       $00000 - $7FFFF    $00000 - $FFFFF 
  1      1       0       $00000 - $7FFFF    $00000 - $FFFFF 
  1      1       1       $00000 - $7FFFF    $00000 - $FFFFF 

2.Enabling the "Erase EE device" option will remove all block protection.

NOTE: Devices require "Erase EE device" option to be enabled when re-programming.

3. Status Register Format: 
                      

      7       6        5        4        3        2        1        0     
 |--------|--------|--------|--------|--------|--------|--------|--------|
 |        |        |        |        |        |        |        |        |
 |  SRWD  |   0    |   0    | BP2    |  BP1   |  BP0   |  WEL   |  WIP   |
 |        |        |        |        |        |        |        |        |
 |--------|--------|--------|--------|--------|--------|--------|--------| 

Address of status register:

25P40     : $80000
25P80     : $100000
 
4.Setting the "Program Protect Register" to Yes allows programming of   
the 'Status Register Write Disable'(SRWD) bit.                              
                                                                      
For enabling "Program Protect Register" in TaskLink for windows(TLwin)
or TaskLink for DOS(TLdos) you must set the Enable Special Data #2    
option.                                                               

************************************************************************
29W640DB / DT
-------------

Due to ram limitations on the Unisystem programmers, this 64Mbit device
had to be split into 2 equal 32Mbit Quadrants.

Note - Since this device operates with a 16 bit data bus, all the below
numbers are in word (double-bytes) values

                                         Device mapping:
                                 ----------------------  0Mbit
Unisystem RAM mapping:          | Quadrant L           |
                                | 0-1FFFFF hex         |
 --------------- 0Mbit          |                      |
| 0 hex         |               |                      |
|               |---------->    |                      |
|               |               |----------------------| 32Mbit
|               |               |                      |
|               |---------->    | Quadrant U           |
| 200000 hex    |               | 200000->3FFFFF hex   |
 --------------- 32Mbit         |                      |
                                 ----------------------  64Mbit

  Quadrant L   =  Device addresses 0 -> 1FFFFF hex

  Quadrant U   =  Device addresses 200000 -> 3FFFFF hex


--------------------------------------------------------------------------
Example of downloading a data file:

An example of downloading a 8 Megabytes (0 - 3FFFFF hex) file. You will
need to download the files in two halves. The first half is for Quadrant L.
The second half is for Quadrant U.

** NOTE:
   Quadrant L = Device addresses 000000 -> 1FFFFF hex
   Quadrant L settings:

I/O Translation Format     99
I/O addr offset            0
Memory begin address       0
User data size             200000 (word)

Steps:
1) Download the first half (0-200000 hex) of the data file into Quadrant L.
2) Program the device.

** NOTE:
   Quadrant U = Device addresses 200000 -> 3FFFFF hex
   Quadrant U settings:

I/O Translation Format     99
I/O addr offset            200000 (word)
Memory begin address       0
User data size             200000 (word)

Steps:
1)Download the second half (200000-400000)of the data file into Quadrant U.
2)Program the device.


--------------------------------------------------------------------------
Example of editing device data in the memory editor:
If data editing needs to done in the user RAM memory editor the appropriate
Quadrant Menu Selection (see table above) must first be determined. As an
example if editing data at the device address starting at location 2F8000
hex, that device address location would fall into the Upper Quadrant.
To find where location 2F8000 hex corresponds to location in the Quadrant
U subtract the beginning device address range from the location you want
to edit.
In this case the location of device address location 2F8000 hex is in the
Quadrant U, memory address is F8000 hex (2F8000 hex - 200000 hex).

--------------------------------------------------------------------------
IMPORTANT NOTE:
Sector ERASE operations may be performed within the selected quadrant and
the desired sectors. However the "Protect/Unprotect all sectors" prior to
the erase operation is performed ONLY within the lower quadrant algorithm.
Due to this, it is necessary to erase/program the lower quadrant first
prior to erasing the upper quadrant. This is ONLY needed when any sector
within the upper quadrant is previously protected.

The Sector Protection for this device is not supported at present.

************************************************************************



