Standard Software Driver for C55 Flash module embedded
on SPC58 B, C, E, H, G and N lines microcontroller
Introduction
The standard software driver (SSD) is a set of APIs that enable user applications to operate on the Flash module embedded on
a microcontroller. The C55 SSD contains a set of functions which allow to program/erase a single C55 Flash module.
The C55 standard software driver provides the following APIs:
•FlashInit
•FlashErase
•FlashEraseAlternate
•BlankCheck
•FlashProgram
•ProgramVerify
•CheckSum
•FlashCheckStatus
•FlashSuspend
•FlashResume
•GetLock
•SetLock
•OverPgmProtGetStatus
•FlashArrayIntegrityCheck
•FlashArrayIntegritySuspend
•FlashArrayIntegrityResume
•UserMarginReadCheck
UM2636 - Rev 1 - May 2020
For further information contact your local STMicroelectronics sales office.
www.st.com
1Overview
This document is the user manual for the standard software driver (SSD) for single C55 Flash module. The
roadmap for the document is the following.
Section 1.1 Features lists the features of the driver.
Section 2 API specifications describes the API specifications. This section includes many sub-sections which
describe the different aspects of the driver.
•Section 2.1 General overview provides a general overview of the driver.
•Section 2.2 General type definitions provides the type definitions used for the driver.
•Section 2.3 SSD configuration parameters reports the driver configuration parameters.
•Section 2.4 Context data structure and Section 2.5 Other data structures describe the data context
structure and provide some other data structures used in this driver.
•Section 2.7 Normal mode functions and Section 2.8 User Test Mode Functions provide the detailed
description of the standard software Flash driver APIs for the normal mode and the user's test mode
respectively.
Section A.1 System requirements details the system requirements for the driver development. Section
B.1 Acronyms lists the acronyms used in the present document. Section C.1 Document reference lists the
reference documents.
UM2636
Overview
1.1Features
The C55 SSD provides the following features:
•Driver binary built with Variable-Length-Encoding (VLE) instruction set.
•Driver released in binary c-array format to provide compiler-independent support for non-debug-mode
embedded applications.
•Driver released in s-record format to provide compiler-independent support for debug-mode/JTAG
programming tools.
•Each driver function is independent of each other so the end user can choose the function subset to meet
their particular needs.
•Support from word-wise to quad-page-wise programming according to specific hardware feature for fast
programming.
•Position-independent and ROM-able
•Ready-to-use demos illustrating the usage of the driver
•Concurrency support via asynchronous design.
UM2636 - Rev 1
page 2/45
2API specifications
2.1General overview
The C55 SSD has APIs to handle the erase, program, erase verify and program verify operations on the Flash.
Apart from these, it also provides the feature for locking specific blocks and calculating check sum. This SSD also
provides four User Test APIs to check the array integrity, perform the user margin read check as well as to
suspend/resume these operations. All functions work as an asynchronous model for concurrency event support
by invoking the 'FlashCheckStatus' function to track the on-going status of the targeted operation.
2.2General type definitions
Derived typeSizeC language type description
BOOL8-bitunsigned char
INT88-bitsigned char
VINT88-bitvolatile signed char
UINT88-bitunsigned char
VUINT88-bitvolatile unsigned char
INT1616-bitsigned short
VINT1616-bitvolatile signed short
UINT1616-bitunsigned short
VUINT1616-bitvolatile unsigned short
INT3232-bitsigned long
VINT3232-bitvolatile signed long
UINT3232-bitunsigned long
VUINT3232-bitvolatile unsigned long
UM2636
API specifications
Table 1. Type definitions
UM2636 - Rev 1
page 3/45
2.3SSD configuration parameters
This section explains the configuration parameters used for the SSD operation. The configuration parameters are
handled as structure. The user should correctly initialize the fields including c55RegBase, mainArrayBase,
uTestArrayBase, mainInterfaceFlag, programmableSize and BDMEnable before passing the structure to SSD
functions. The rest of parameters such as lowBlockInfo, midBlockInfo, highBlockInfo and nLargeBlockNum, are
initialized by ‘FlashInit’ automatically and can be used for other purposes of the user’s application.
Table 2. SSD configuration structure field definition
Parameter nameTypeParameter description
c55RegBaseUINT32The base address of C55 control registers.
mainArrayBaseUINT32The base address of Flash main array.
lowBlockInfoBLOCK_INFO
midBlockInfoBLOCK_INFO
highBlockInfoBLOCK_INFO
nLargeBlockNumUINT32Number of blocks of the 256 K address space.
uTestArrayBaseUINT32The base address of the UTest block.
mainInterfaceFlagBOOLThe flag to select the main interface or not.
programmableSizeUINT32The maximum programmable size of the C55 Flash according to specific interface.
BDMEnableBOOL
Block info of the low address space. It includes information of this block space based on
different block sizes.
Block info of the mid address space. It includes information of this block space based on
different block sizes.
Block info of the high address space. It includes information of this block space based on
different block sizes.
The debug mode selection. User can enable/disable the debug mode via this input
argument.
UM2636
SSD configuration parameters
2.4
The type definition for the structure is given below:
The Context data structure is used for storing the context variable values while an operation is in progress. The
operations that support asynchronous model may require caching the context data including ‘FlashProgram’,
‘ProgramVerify’, ‘BlankCheck’, ‘CheckSum’, ‘FlashArrayIntegrityCheck’, and ‘UserMarginReadCheck’. The user
needs to declare and initialize a context data structure before passing it to the SSD functions mentioned above.
Refer to ‘FlashCheckStatus’ to have a quick view of how to initialize the context data. The context data structure
contents can be reviewed at anytime during the operation progress (these information may be useful in some
cases), but they must not be changed for any reason in order to make the operation complete correctly.
UM2636 - Rev 1
page 4/45
Table 3. Context data structure field definitions
NameDescription
destThe context destination address of an operation
sizeThe context size of an operation
sourceThe context source of an operation
pFailedAddressThe context failed address of an operation
pFailedDataThe context failed data of an operation
pFailedSourceThe context failed source of an operation
pSumThe context sum of an operation
pMisrThe context MISR values of an operation
pReqCompletionFnFunction pointer to the Flash function being checked for status
The type definition for the structure is given below:
This section reports some other data structures used for the SSD operation. These are the structures used for
variables' declaration in SSD configuration and context data structures or input arguments' declaration in some
APIs.
Table 4. Block information structure field definitions
NameTypeDefinition
n16KBlockNumUINT32Number of 16K block
n32KBlockNumUINT32Number of 32K block
n64KBlockNumUINT32Number of 64K block
n128KBlockNumUINT32Number of 128K block
The type definition for the structure is given below:
Table 5. 256K block select structure field definitions
NameTypeDefinition
firstLargeBlockSelectUINT32
secondLargeBlockSelect UINT32
Bit map for the first 32-bit block select (from bit 0 to bit 31) in 256K block space; bit 0
corresponds to the least significant bit and bit 31 corresponds to the most significant bit.
Bit map for the second 32-bit block select (from bit 32 to upper bits) in 256K block space;
bit 32 corresponds to the least significant bit and bit 63 corresponds to the most significant
bit.
The type definition for the structure is given below:
Each Wn corresponds to each MISR value provided by the user. The user must provide ten MISR
values in total via this structure to perform the user’s test mode functions.
The type definition for the structure is given below:
The return code returned to the caller function notifies the success or the errors of the API execution. These are
the possible values of the return code:
NameValueDescription
C55_OK0x00000000 The requested operation is successful.
C55_ERROR_ALIGNMENT0x00000001 Alignment error.
C55_ERROR_ENABLE0x00000002 Fail to enable the operation.
C55_ERROR_BUSY0x00000004
C55_ERROR_PGOOD0x00000008 The program operation is unsuccessful.
C55_ERROR_EGOOD0x00000010 The erase operation is unsuccessful.
C55_ERROR_NOT_BLANK0x00000020
C55_ERROR_VERIFY0x00000040
C55_ERROR_BLOCK_INDICATOR 0x00000080 Invalid block space indicator.
C55_ERROR_ALTERNATE0x00000100
C55_ERROR_FACTORY_OP0x00000200 Factory erase/program is locked.
New program/erase cannot be performed while a high-voltage operation is
already in progress.
New array integrity cannot be performed while an array integrity is going
on.
There is a non-blank Flash memory location within the checked Flash
memory region.
There is a mismatch between the source data and the content in the
checked Flash memory.
The operation does not support an alternate interface for the specified
address space.
In ‘FlashArrayIntegrityCheck’ or ‘UserMarginReadCheck’, the MISR
values generated by the hardware do not match the values passed by the
user.
In ‘FlashArrayIntegrityCheck’ or ‘UserMarginReadCheck’, no block has
been enabled for array integrity check.
The operation has been done and this operation is no more requested on
FlashCheckStatus function.
The operation is in progress and the user needs to call the
FlashCheckStatus more times to finish this operation.
UM2636 - Rev 1
page 7/45
2.7Normal mode functions
2.7.1FlashInit
Description
This function initializes an individual Flash module. It accesses the Flash configuration register and read out the
number of blocks for each memory space of single Flash module.
Each time this driver is used, the user must provide the chip-dependent parameters such as c55RegBase,
mainArrayBase, uTestArrayBase, mainInterfaceFlag, programmableSize and DBMEnable and the rest of
parameters initialized via this function. Those are block information including the number of the block based on
the block size for each address space.
Prototype
UINT32 FlashInit (PSSD_CONFIG pSSDConfig);
Arguments
UM2636
Normal mode functions
Table 8. FlashInit
ArgumentDescriptionRange
pSSDConfig
Pointer to the SSD Configuration
Structure.
The values in this structure are chip-dependent. Please refer to Section
2.3 SSD configuration parameters for more details.
Return values
Table 9. Return values for FlashInit
Type
UINT32Indicates successful completion of operation.C55_OK
DescriptionPossible values
Troubleshooting
None.
Comments
In case that the mainInterfaceFlag is the main interface, ‘FlashInit’ checks the C55_MCR_RWE, C55_MCR_EER
and C55_MCR_SBC bits, and then clears them if any of them is set.
This function also clears the PGM and ERS bits in the MCR and MCRA registers respectively if any of them is set.
UM2636 - Rev 1
Assumptions
None.
page 8/45
2.7.2FlashErase
Description
This function is to perform an erase operation for multi-blocks on a single Flash module according to user’s input
arguments via the main interface. The target Flash module status is checked in advance to return relevant error
code if any. This function only sets the high voltage without waiting for the operation to be finished. Instead, the
user must call the ‘FlashCheckStatus’ function to confirm the successful completion of this operation.
The option is to select
user’s expected erase
operation.
To select the array blocks
in low address space for
erasing.
To select the array blocks
in mid address space for
erasing.
To select the array blocks
in high address space for
erasing.
To select the array blocks
in 256K address space for
erasing. It includes two
elements to decode the
first half of 256K block
select and the second half
of 256K block select.
The values in this structure are chip-dependent. Please refer to Section
2.3 SSD configuration parameters for more details.
The valid value can be:
C55_ERASE_MAIN (0x0)
C55_ERASE_MAIN_FERS (0x1)
C55_ERASE_UTEST (0x2)
C55_ERASE_UTEST_FERS (0x3)
Bit-mapped value which corresponds to LOWSEL of the block select register
in which the least significant bit of this argument corresponds to LOWSEL[0].
Select the block to be erased by setting 1 to the appropriate bit of
lowBlockSelect. If there is not any block to be erased in the low address
space, lowBlockSelect must be set to 0.
Bit-mapped value which corresponds to 256KSEL of the block select register.
The first 256K block select corresponds to the first 32 bits (from 0 to 31) of
256KSEL. The second 256K block select corresponds to the rest of 256KSEL
bits. Select the block to be erased by setting 1 to the appropriate bit of
nLargeBlockSelect. If there is not any block to be erased in the 256K address
space, nLargeBlockSelect must be set to 0.
Bit-mapped value such that the least significant bit is at bit 0 of 16K block
region (if available), then 32K block region (if available) and lastly 64K block
region (if available). Select the block in the high address space to be erased
by setting 1 to the appropriate bit of highBlockSelect. If there is not any block
to be erased in the high address space, highBlockSelect must be set to 0.
Bit-mapped value such that the least significant bit is at bit 0 of 256K block
region (if available). Select the block in the 256K address space to be erased
by setting 1 to the appropriate bit of nLargeBlockSelect. If there is not any
block to be erased in the 256K address space, nLargeBlockSelect must be
set to 0.
UM2636 - Rev 1
page 9/45
Normal mode functions
Return values
Table 11. Return values for FlashErase
TypeDescriptionPossible values
C55_OK
C55_ERROR_ERASE_OPTION
UINT32Successful completion or error value.
C55_ERROR_BUSY
C55_ERROR_FACTORY_OP
C55_ERROR_ENABLE
Troubleshooting
Table 12. Troubleshooting for FlashErase
Error CodesPossible CausesSolution
C55_ERROR_ERASE_OPTION Invalid erase option.Use one of the valid values for the option.
Wait until all previous program/erase operations on the
Flash module finish.
Possible cases that erase cannot start are:
1. erase in progress (MCR-ERS is high);
2. program in progress (MCR-PGM is high);
Factory erase is locked by the system due to the data at
the UTest NVM ‘diary’ location.
If UT0[UTE] bit is being set, then the erase operation
cannot be started. Thus, make sure that the UT0[UTE] is
cleared before any erase operation.
C55_ERROR_BUSY
C55_ERROR_FACTORY_OP
C55_ERROR_ENABLE
New erase operation cannot
be performed because there is
a program/erase sequence in
progress on the Flash module.
The factory erase could not be
performed.
ERS bit cannot be set
correctly.
UM2636
UM2636 - Rev 1
Comments
'FlashErase' always uses the main interface to complete an erase operation and ignores the value of the
‘mainInterfaceFlag’ in the SSD configuration structure. However, it is recommended that the user explicitly sets
this flag value to TRUE before calling 'FlashErase'.
The eraseOption input argument provides an option for the user to select the expected erase operation. If the
user wants to set a factory erase, he has to select eraseOption as C55_ERASE_MAIN_FERS or
C55_ERASE_UTEST_FERS. If the user wants to perform a normal erase operation on the main array,
eraseOption must be C55_ERASE_MAIN and lastly, the user must select C55_ERASE_UTEST to make an erase
operation on the UTest block.
The factory erase feature can be used to provide a faster erase. But the feature cannot be performed if the data at
“diary” location in the UTest NVM space contains at least one zero at reset. In that case, each try to perform
factory erase causes the error C55_ERROR_FACTORY_OP to be returned.
The inputs lowBlockSelect, midBlockSelect, highBlockSelect and nLargeBlockSelect are bit-mapped arguments
that are used to select the blocks to be erased in the low/mid/high/256K address spaces of main array. The
selection of the blocks of the main array is determined by setting/clearing the corresponding bit in lowBlockSelect,
midBlockSelect, highBlockSelect or nLargeBlockSelect.
The bit allocations for low/mid/high/first 256K blocks are: the least significant bit corresponds to the least
significant bit of LOWSEL/MIDSEL/HIGHSEL/256KSEL in the relevant block select register. The first 256K block
select can specify maximum 32 blocks. If there are more than 32 blocks of 256K, the second 256K block select
will be used to specify the remaining ones. In this case the least significant bit of the second 256K block
corresponds to 256KSEL[32] and so on.
page 10/45
UM2636
Normal mode functions
Table 13. Bit allocation for low block select argument is an example for block allocation and bit map for specific
Flash modules with two blocks for each block size in low, middle or high address space. The invalid blocks are
marked as reserved and the number of valid bits may vary according to specific Flash module.
Table 13. Bit allocation for low block select argument
If the selected main array blocks or UTest block are locked for erasing, those blocks do not erase, but
‘FlashErase’ still returns C55_OK. The user needs to check the erasing result with the ‘BlankCheck’ function.
It is impossible to erase any Flash block when a program or erase operation is already in progress on C55
module. ‘FlashErase’ returns C55_ERROR_BUSY when trying to do so. In addition, when ‘FlashErase’ is running,
it is unsafe to read the data from the flash partitions having one or more blocks being erased. Otherwise, it causes
a Read-While-Write error.
UM2636 - Rev 1
Assumptions
It is assumed that the Flash block is initialized using a ‘FlashInit’ API.
page 11/45
2.7.3FlashEraseAlternate
Description
This function is to perform an erase operation for single blocks on a single Flash module according to user’s input
arguments via alternate interface. The targeted Flash module status is checked in advance to return relevant error
code if any. This function only set the high voltage without waiting for the operation to be finished. Instead, the
user must call ‘FlashCheckStatus’ function to confirm the successful completion of this operation.
The interlock address which points to
the block needs to be erased.
UM2636
Normal mode functions
Table 18. Arguments for FlashEraseAlternate
The values in this structure are chip-dependent. Please refer to
Section 2.3 SSD configuration parameters for more details.
The interlockAddress must fall in the block that the user wants to
erase and must be aligned to word.
Return values
Table 19. Return values for FlashEraseAlternate
Type
UINT32Successful completion or error value.
DescriptionPossible values
Troubleshooting
Table 20. Troubleshooting for FlashEraseAlternate
Returned Error Bits
New erase operation cannot be
C55_ERROR_BUSY
C55_ERROR_ALIGNMENT
performed because a program/erase
sequence is in progress on the Flash
module.
The input argument of interlockAddress
is not aligned by word.
C55_OK
C55_ERROR_BUSY
C55_ERROR_ALIGNMENT
DescriptionSolution
Wait until all previous program/erase operations on
the Flash module finish.
Possible cases that erase cannot start are:
•erase in progress (MCR-ERS is high);
•program in progress (MCR-PGM is high);
The input argument of interlockAddress must be
aligned by word.
UM2636 - Rev 1
page 12/45
Comments
FlashEraseAlternate’ always uses the main interface to complete an erase operation and ignores the value of the
‘mainInterfaceFlag’ in the SSD configuration structure. However, it is recommended that user should explicitly set
this flag value to FALSE before calling FlashEraseAlternate’. The ‘FlashEraseAlternate’ must not be used to erase
any block in the 256K address space. In that case the function only returns C55_OK without performing the
operation. If the selected main array blocks are locked for erasing, those blocks are not erased, but
‘FlashEraseAlternate’ still return C55_OK. The user needs to check the erasing result with the ‘BlankCheck’
function. It is impossible to erase any Flash block when a program or erase operation is already in progress on
C55 module. ‘FlashEraseAlternate’ returns C55_ERROR_BUSY when trying to do so. In addition, when
‘FlashEraseAlternate’ is running, it is unsafe to read the data from the Flash partitions having one or more blocks
being erased. Otherwise, it causes a Read-While-Write error.
Assumptions
It is assumed that the Flash block is initialized using a ‘FlashInit’ API.
2.7.4BlankCheck
Description
This function is used to run a blank check for the previous erase operation. It verifies whether the expected Flash
range is blank or not. In case of mismatch, the failed address and failed destination are saved and the relevant
error code is returned. This function only runs blank check for given number of bytes which can terminate this
function within the expected time interval. Thus, if the user wants to conduct a blank check for large size, the
remaining information that needs to be blank-checked is stored in “pCtxData” variable and ‘FlashCheckStatus’
must be called periodically to run the next blank check for next destination based on all data provided in
“pCtxData”.
pSSDConfigPointer to the SSD Configuration Structure.
destDestination address to be checked.
sizeSize, in bytes, of the Flash region to check.
pFailedAddress
pFailedData
pCtxDataAddress of context data structure.A data structure for storing context variables.
Return the address of the first non-blank
Flash location in the checking region
Return the content of the first non-blank
Flash location in the checking region.
DescriptionRange
The values in this structure are chip-dependent.
Please refer to Section 2.3 SSD configuration
parameters for more details.
Any accessible address aligned on word boundary in
either main array or UTest block.
If size = 0, the return value is C55_OK.
It should be word aligned and its combination with
dest should fall in either main array or UTest block.
Only valid when this function returns
C55_ERROR_NOT_BLANK.
Only valid when this function returns
C55_ERROR_NOT_BLANK.
UM2636 - Rev 1
page 13/45
Return values
Table 22. Return values for BlankCheck
TypeDescriptionPossible values
UINT32Successful completion or error value.
C55_OK
C55_ERROR_ALIGNMENTC55_ERROR_NOT_BLANK
Troubleshooting
Table 23. Troubleshooting for BlankCheck
Returned Error BitsDescriptionSolution
C55_ERROR_ALIGNMENT
C55_ERROR_NOT_BLANK
The dest and size provided by the user are not
aligned by word.
There is a non-blank area within targeted Flash
range.
The dest and size must be word-aligned.
Call ‘FlashErase’ to re-erase the targeted
Flash range and do blank check again.
UM2636
Normal mode functions
Comments
If the blank checking fails, the first failing address is saved to pFailedAddress, and the failing data in Flash are
saved in pFailedData. The contents pointed by pFailedAddress and pFailedData are updated only when there is a
non-blank location in the checked Flash range.
If the user wants to run a blank check for large size, this Flash size is divided into many small portions defined by
NUM_WORDS_BLANK_CHECK_CYCLE so that blank check for one small portion can be finished within the
expected time interval. In this case, ‘BlankCheck’ function plays a role to kick-off this blank check operation by
finishing blank check for the first portion after backing-up all necessary information to pCtxData variable and blank
checks from the second portion are done within ‘FlashCheckStatus’ function. Thus, user must call
‘FlashCheckStatus’ to finish all the expected operations defined by size argument.
Assumptions
It is assumed that the Flash block is initialized using a ‘FlashInit’ API.
2.7.5FlashProgram
Description
This function is used to perform a program operation for single or multi-programmable sizes via different interface
on targeted Flash module according to user’s input arguments. The targeted Flash module status is checked in
advance to return relevant error code if any. This function only sets the high voltage without waiting for the
operation to be finished. Instead, the user must call ‘FlashCheckStatus’ function to confirm the successful
completion of this operation.
In case of programming for multi-programmable size, the remaining information needs to be programmed and is
stored in the “pCtxData” variable, and the ‘FlashCheckStatus’ function is called periodically by the user to confirm
the successful completion of the previous destination and once finished, this function invokes ‘FlashProgram’more
times to program the next destination based on the data provided in “pCtxData” until all is over.
UM2636 - Rev 1
page 14/45
Loading...
+ 31 hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.