
28
S29GL-P MirrorBit
 Flash Family
S29GL-P_00_A7 November 8, 2007
D a t a
S h e e t
( P r e l i m i n a r y )
Software Functions and Sample Code
Notes
1. Base = Base Address. 
2. Last = Last cycle of write buffer program operation; depending on number of words written, the total number of cycles may be from 6 to 
37.
3. For maximum efficiency, it is recommended that the write buffer be loaded with the highest number of words (N words) possible.
The following is a C source code example of using the write buffer program function. Refer to the 
Spansion 
Low Level Driver User’s Guide
 (available on 
www.spansion.com
) for general information on Spansion Flash 
memory software development guidelines.
/* Example: Write Buffer Programming Command            */
/* NOTES: Write buffer programming limited to 16 words. */
/*        All addresses to be written to the flash in   */
/*        one operation must be within the same flash   */
/*        page. A flash page begins at addresses       */
/*        evenly divisible by 0x20.                     */
  UINT16 *src = source_of_data;                /* address of source data          */
  UINT16 *dst = destination_of_data;          /* flash destination address       */
  UINT16 wc   = words_to_program -1;           /* word count (minus 1)            */
  *( (UINT16 *)base_addr + 0x555 ) = 0x00AA;   /* write unlock cycle 1            */
  *( (UINT16 *)base_addr + 0x2AA ) = 0x0055;   /* write unlock cycle 2            */
  *( (UINT16 *)sector_address )    = 0x0025;   /* write write buffer load command */
  *( (UINT16 *)sector_address )    = wc;       /* write word count (minus 1)      */
for (i=0;i<=wc;i++)
{
*dst++ = *src++; /* ALL dst MUST BE in same Write Buffer */
}
*( (UINT16 *)sector_address )    = 0x0029;   /* write confirm command           */
  /* poll for completion */
/* Example: Write Buffer Abort Reset */
  *( (UINT16 *)addr + 0x555 ) = 0x00AA;   /* write unlock cycle 1            */
  *( (UINT16 *)addr + 0x2AA ) = 0x0055;   /* write unlock cycle 2            */
  *( (UINT16 *)addr + 0x555 ) = 0x00F0;   /* write buffer abort reset        */
Table 7.7  
Write Buffer Program 
(LLD Functions Used = lld_WriteToBufferCmd, lld_ProgramBufferToFlashCmd)
Cycle
Description
Operation
Byte Address
Word Address
Data
1
Unlock
Write
Base + AAAh
Base + 555h
00AAh
2
Unlock
Write
Base + 555h
Base + 2AAh
0055h
3
Write Buffer Load Command
Write
Sector Address
0025h
4
Write Word Count
Write
Sector Address
Word Count (N–1)h
Number of words (N) loaded into the write buffer can be from 1 to 32 words (1 to 64 bytes).
5 to 36
Load Buffer Word N
Write
Program Address, Word N
Word N
Last
Write Buffer to Flash
Write
Sector Address
0029h