To program the flash memory:
- Select the command in the CMDTYPE
register:
- Set the COMMAND field in
the CMDTYPE register to PROGRAM.
- Set the SIZE field in the
CMDTYPE register to the desired size (1, 2, 4, or 8 flash words). If a
device does not support multi-word programming, select ONEWORD. If a
device supports multi-word programming, and multi-word programming is
desired, select the desired size which is less than or equal to the max
size supported by the target device. The hardware will not check for
invalid configuration of the SIZE field; software must ensure that the
selection option is supported by the device. Note that SECTOR and BANK
sizes are not valid sizes for PROGRAM operations. These sizes only apply
to erase operations.
- Configure the program command in
the CMDCTL register:
- On devices with ECC, the
flash controller by default will generate the needed ECC bits from the
data during the PROGRAM operation. Optionally, software can override the
hardware ECC code generation and manually provide the ECC code to be
programmed by setting the ECCGENOVR bit in CMDCTL register.
- Select the target programming
address in the CMDADDR and CMDBYTEN register:
- Load the target system
address into the CMDADDR register to indicate the base address from
which programming will start. The target address must be a flash word
address (128-bit aligned). The flash controller will translate the
system address into the applicable flash region, bank ID, and bank
address. If desired, after the operation completes the flash region,
bank ID, and bank address can be read from the STATADDR register. In a
multi-word program, STATADDR will indicate the bank ID and the final
address which was programmed.
- If subword programming
(programming of less than the full 128 bit flash word) is desired,
configure the CMDBYTEN register to set the bytes within the addressed
flash word which are to be programmed. Each bit in CMDBYTEN corresponds
to a byte in the addressed flash word to be programmed, including the
ECC bytes. For example, programming of the ECC code can be masked by
clearing bit 8 in CMDBYTEN while programming the data bytes of the flash
word. Note that there is a maximum number of program operations allowed
per word line before a sector erase must be applied (see the device
specific data sheet for the maximum).
- Load the data to program into the
CMDDATAx registers:
- For a single flash word
programming operation (128 or 144 bits depending on the presence of
ECC), load the data into the CMDDATAx registers consistent with the
alignment requirements (for devices which only support single-word
programming, CMDDATA0 and CMDDATA1 are always used regardless of the
target address).
- For multi-word
programming (if available and selected), load data into the CMDDATAx
registers consistent with the alignment rules and the size of the
multi-word program operation specified in step 1.
- If ECCGENOVR in the
CMDCTL register was set above (disabling hardware ECC code generation),
then write the ECC data in the CMDDATAECC0 register (for single word
programming) and optionally additional CMDDATAECCx registers as
applicable for multi-word programming.
- Note that the CMDDATA
registers are used as bit masking registers by the flash controller
during the program operation; after the operation completes, the values
written to these registers will have been overwritten by the flash
controller.
- Ensure the write protection
scheme is configured to allow writes to the target addresses (see the write
protection section of this guide for additional information on configuring write
protection).
- Execute the program operation by
writing 0x1 to the CMDEXEC register.
- Monitor for completion of the
program operation:
- The STATCMD register can
be polled to determine the status of the program operation. The
CMDINPROGRESS bit will be set by hardware as soon as the command is
initiated. The CMDDONE bit will be set when the operation
terminates.
- When CMDDONE is set, the
CMDPASS bit will be reset or set at the same time to indicate whether
the operation completed successfully or failed. If a program was
attempted on a protected region, the FAILWEPROT or FAILILLADDR bit is
asserted depend on dynamic or static write protection. If the program
operation cannot be completed successfully within the maximum program
pulse count limit FAILVERIFY will be asserted. See the device-specific
data sheet for maximum program times.
- After completion of a program
operation, the flash controller will configure several settings:
- All dynamic write
protection registers are set to a protected state (to protect against
inadvertent programming)
- All data registers are
set to 1.
- All program byte enables
are cleared to 0.
- Following programming of the
flash memory, it is possible that there may be stale data in the processor's
cache. Before reading locations which were programmed, it is recommended to
first flush the cache in the CPU subsystem.