eCos Common Support for SPI Flash Memory Devices — Overview


The CYGPKG_DEVS_FLASH_SPI_COMMON package provides an abstraction layer between the standard eCos I/O Flash API package (CYGPKG_IO_FLASH) and hardware specific xSPI controller drivers. This allows for serial memory device support to be shared across architectures and platforms, avoiding the need for the H/W specific device drivers to duplicate manufacturer or device specific information in each H/W xSPI driver implementation.


Many eCos targets will still use the older driver model where the architecture specific device driver will implement direct support for a specific subset of SPI memory devices. Only newer ports, and some ports that have been explicitly updated, will reference this common approach. The goal is to bring as much support as is relevant for SPI memory devices into this single package, to aid maintenance and porting, with a simpler H/W device driver implementation for the platform specific component.

This common package presents as a Flash V2 device driver to the Flash I/O layer.

The package allows for JEDEC Serial Flash Discoverable Parameters (SFDP) device supplied parameter tables to be used to configure the required device access. The package currently supports JESD216D.01 and earlier devices. It will work with devices that implement newer versions of the standard, but will be limited to the backwards compatible features .


At the time of writing not all of the SFDP table declared configurations have been tested.

The following table is not an exhaustive list of tested platforms/devices, but an example set:


Configuration Options

The common SPI memory driver package will be loaded automatically when configuring eCos for a target with suitable hardware. However the driver will be inactive unless the generic flash package CYGPKG_IO_FLASH is loaded. It may be necessary to add the generic CYGPKG_IO_FLASH package to the configuration explicitly before the driver functionality becomes available. There should never be any requirement to load or unload the CYGPKG_DEVS_FLASH_SPI_COMMON driver package.

The flash driver provides a small number of configuration options which application developers may use to control features provided by the package.


If this option is enabled then the flash device is configured for memory mapped mode when the underlying H/W driver and platform HAL support such use.

Memory mapped access allows the CPU to directly read data or execute code from the flash area. The default is for the feature to be enabled, which is desired for most configurations. However, in some situations, indirect (e.g. DMA) access may be preferred for performance reasons, in which case this feature can be disabled.

When the option is enabled some further configuration options are presented:


This option should be enabled if ISRs or DSRs are to execute from the memory mapped xSPI space.


This will adversely affect the interrupt latency of the system, since certain xSPI operations will need to disable interrupts when switching out of memory mapped mode (e.g. erasing). So this feature should only be enabled if actually required.

If the eCos application providing the xSPI flash driver is executing from the flash device (using memory mapped mode) then some critical functionality must execute from a different memory space (e.g. SRAM).
This option controls whether support for device soft reset is enabled. The developer is not normally required to modify this option

Fixed settings

If the target system needs to support devices without SFDP tables, or where the tables provide inconsistent or incomplete information, then a hook mechanism is provided based on the standard RDID command (0x9F). The flash_csm_fixedset.h provides the CYG_CSM_FIXEDSET(localname, mask, id, init_function) macro to allow an instantation of a cyg_csm_family_t structure to be added to the table scanned by this common flash driver.

This provides a mechanism for partially or completely updating the internal context used to describe a device to the common flash code and the underlying H/W driver layer.

Currently SFDP fix-up support is provided for the Winbond W25Q512JV parts when the CYGINT_DEVS_FLASH_SPI_COMMON_HARDWIRED_W25Q512 interface is implemented. Normally the required implements is performed by the target platform CDL as required, and should not need to be managed by application developers.