Nut/OS  4.10.3
API Reference
Embedded Flash Controller

Embedded flash controller registers. More...

Collaboration diagram for Embedded Flash Controller:

Defines

#define EFC_CHIP_BASE   0x00100000
 Base address of the flash memory chip.
#define EFC_CHIP_SIZE   0x00040000
 Size handled by each controller.
#define FLASH_CONF_SECTOR   0x0003FF00
 Address offset of the configuration sector.
#define FLASH_CONF_SIZE   256
 Size of the configuration area.
#define EFC_WRITE_WAIT   60000
#define EFC_ERASE_WAIT   60000
#define EFC_CHIP_ERASE_WAIT   600000

Typedefs

typedef uint32_t flashdat_t
typedef unsigned long flashadr_t
typedef volatile flashdat_tflashptr_t

Functions

RAMFUNC int At91EfcCmdEx (int fci, unsigned int cmd, uint32_t tmo)
 Execute flash controller command.
RAMFUNC int At91EfcCmd (unsigned int cmd, uint32_t tmo)
 Execute flash controller command.
int At91EfcSectorRead (unsigned int off, void *data, unsigned int len)
 Read data from flash memory.
int At91EfcSectorWrite (unsigned int off, CONST void *data, unsigned int len)
 Write data into flash memory.
int At91EfcSectorErase (unsigned int off)
 Erase sector at the specified offset.
int At91EfcRegionLock (unsigned int off)
 Lock specified region.
int At91EfcRegionUnlock (unsigned int off)
 Unlock specified region.
int At91EfcParamRead (unsigned int pos, void *data, unsigned int len)
 Load configuration parameters from embedded flash memory.
int At91EfcParamWrite (unsigned int pos, CONST void *data, unsigned int len)
 Store configuration parameters in embedded flash memory.

Detailed Description

Embedded flash controller registers.


Define Documentation

#define EFC_CHIP_BASE   0x00100000

Base address of the flash memory chip.

Definition at line 78 of file at91_efc.c.

Referenced by At91EfcSectorRead(), and At91EfcSectorWrite().

#define EFC_CHIP_SIZE   0x00040000

Size handled by each controller.

Definition at line 84 of file at91_efc.c.

Referenced by At91EfcRegionLock(), At91EfcRegionUnlock(), and At91EfcSectorWrite().

#define FLASH_CONF_SECTOR   0x0003FF00

Address offset of the configuration sector.

Although this is a configurable item, we try to determine a default value for some of the most widely used CPUs.

Todo:
Provide pre-defined flash layouts for all CPUs in one of the architecture specific header files.

Definition at line 100 of file at91_efc.c.

Referenced by At91EfcParamRead(), At91EfcParamWrite(), and ShowHardwareConfiguration().

#define FLASH_CONF_SIZE   256

Size of the configuration area.

During write operations a buffer with this size is allocated from heap and may cause memory problems with large sectors. Thus, this value may be less than the size of the configuration sector, in which case the rest of the sector is unused.

Currently only 1 sector can be used for system configurations.

Definition at line 114 of file at91_efc.c.

Referenced by At91EfcParamWrite(), and ShowHardwareConfiguration().

#define EFC_WRITE_WAIT   60000

Definition at line 118 of file at91_efc.c.

Referenced by At91EfcRegionLock(), At91EfcRegionUnlock(), and At91EfcSectorWrite().

#define EFC_ERASE_WAIT   60000

Definition at line 122 of file at91_efc.c.

#define EFC_CHIP_ERASE_WAIT   600000

Definition at line 126 of file at91_efc.c.


Typedef Documentation

Definition at line 130 of file at91_efc.c.

typedef unsigned long flashadr_t

Definition at line 131 of file at91_efc.c.

typedef volatile flashdat_t* flashptr_t

Definition at line 132 of file at91_efc.c.


Function Documentation

RAMFUNC int At91EfcCmdEx ( int  fci,
unsigned int  cmd,
uint32_t  tmo 
)

Execute flash controller command.

This routine must not be located in internal flash memory.

Definition at line 140 of file at91_efc.c.

References inr, MC_FCR_EFC0, MC_FCR_EFC1, MC_FRDY, MC_FSR_EFC0, MC_FSR_EFC1, MC_KEY, MC_LOCKE, MC_PROGE, NutEnterCritical, NutExitCritical, and outr.

Referenced by At91EfcCmd(), and At91EfcSectorWrite().

RAMFUNC int At91EfcCmd ( unsigned int  cmd,
uint32_t  tmo 
)

Execute flash controller command.

This routine must not be located in internal flash memory.

Definition at line 182 of file at91_efc.c.

References At91EfcCmdEx().

Referenced by At91EfcRegionLock(), At91EfcRegionUnlock(), and At91EfcSectorWrite().

Here is the call graph for this function:

int At91EfcSectorRead ( unsigned int  off,
void *  data,
unsigned int  len 
)

Read data from flash memory.

Parameters:
offStart location within the chip, starting at 0.
dataPoints to a buffer that receives the data.
lenNumber of bytes to read.
Returns:
Always 0.

Definition at line 196 of file at91_efc.c.

References EFC_CHIP_BASE, and memcpy().

Referenced by At91EfcParamRead(), and At91EfcParamWrite().

Here is the call graph for this function:

int At91EfcSectorWrite ( unsigned int  off,
CONST void *  data,
unsigned int  len 
)

Write data into flash memory.

The related sector will be automatically erased before writing.

Parameters:
offStart location within the chip, starting at 0.
dataPoints to a buffer that contains the bytes to be written. If this is a NULL pointer, then the sector will be reased.
lenNumber of bytes to write, 1 full sector max.
Returns:
0 on success or -1 in case of an error.

Definition at line 215 of file at91_efc.c.

References At91EfcCmd(), At91EfcCmdEx(), EFC_CHIP_BASE, EFC_CHIP_SIZE, EFC_WRITE_WAIT, inr, MC_FCMD_WP, MC_FMR, MC_FMR_EFC1, MC_NEBP, MC_PAGEN_MASK, and outr.

Referenced by At91EfcParamWrite(), and At91EfcSectorErase().

Here is the call graph for this function:

int At91EfcSectorErase ( unsigned int  off)

Erase sector at the specified offset.

Definition at line 257 of file at91_efc.c.

References At91EfcSectorWrite().

Here is the call graph for this function:

int At91EfcRegionLock ( unsigned int  off)

Lock specified region.

Parameters:
offLocation within the region to be locked.
Returns:
0 on success or -1 in case of an error.

Definition at line 269 of file at91_efc.c.

References At91EfcCmd(), EFC_CHIP_SIZE, EFC_WRITE_WAIT, MC_FCMD_SLB, and MC_PAGEN_MASK.

Referenced by At91EfcParamWrite().

Here is the call graph for this function:

int At91EfcRegionUnlock ( unsigned int  off)

Unlock specified region.

Parameters:
offLocation within the region to be unlocked.
Returns:
0 on success or -1 in case of an error.

Definition at line 285 of file at91_efc.c.

References At91EfcCmd(), EFC_CHIP_SIZE, EFC_WRITE_WAIT, MC_FCMD_CLB, and MC_PAGEN_MASK.

Referenced by At91EfcParamWrite().

Here is the call graph for this function:

int At91EfcParamRead ( unsigned int  pos,
void *  data,
unsigned int  len 
)

Load configuration parameters from embedded flash memory.

Applications should call NutNvMemLoad().

Parameters:
posStart location within configuration sector.
dataPoints to a buffer that receives the contents.
lenNumber of bytes to read.
Returns:
Always 0.

Definition at line 305 of file at91_efc.c.

References At91EfcSectorRead(), and FLASH_CONF_SECTOR.

Referenced by NutNvMemLoad().

Here is the call graph for this function:

int At91EfcParamWrite ( unsigned int  pos,
CONST void *  data,
unsigned int  len 
)

Store configuration parameters in embedded flash memory.

Applications should call NutNvMemSave().

The region that contains the configuration sector will be automatically locked.

Parameters:
posStart location within configuration sector.
dataPoints to a buffer that contains the bytes to store.
lenNumber of bytes to store.
Returns:
0 on success or -1 in case of an error.

Definition at line 324 of file at91_efc.c.

References At91EfcRegionLock(), At91EfcRegionUnlock(), At91EfcSectorRead(), At91EfcSectorWrite(), FLASH_CONF_SECTOR, FLASH_CONF_SIZE, free(), malloc(), memcmp(), and memcpy().

Referenced by NutNvMemSave().

Here is the call graph for this function: