SFLASH support addition in WICED
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
WICED currently has support for sflash from the following manufacturers.
- MACRONIX
- MICRON
- SST
- EON
- ISSI
- WINBOND
- CYPRESS
You can get a list of all the supported sflash in CYW43907 with External SFLASH in WICED . If you want to add support for any other part number from the existing supported flash manufacturers in WICED SDK, you can follow the steps mentioned below. In this example, I have added support for N25Q128A flash from MICRON.
For ST based platforms:
- Please add the SFLASH_ID from the part number datasheet in 43xxx_Wi-Fi/libraries/drivers/spi_flash/spi_flash_internal.h
#define SFLASH_ID_MX25L8006E ( (uint32_t) 0xC22014 )
#define SFLASH_ID_MX25L1606E ( (uint32_t) 0xC22015 )
#define SFLASH_ID_MX25L6433F ( (uint32_t) 0xC22017 )
#define SFLASH_ID_MX25L12835F ( (uint32_t) 0xC22018 )
#define SFLASH_ID_MX25L25635F ( (uint32_t) 0xC22019 )
#define SFLASH_ID_MX25U1635F ( (uint32_t) 0xC22535 )
#define SFLASH_ID_MX66U51235F ( (uint32_t) 0xC2253A )
#define SFLASH_ID_SST25VF080B ( (uint32_t) 0xBF258E )
#define SFLASH_ID_EN25QH16 ( (uint32_t) 0x1C3015 )
#define SFLASH_ID_ISSI25CQ032 ( (uint32_t) 0x7F9D46 )
#define SFLASH_ID_N25Q512A ( (uint32_t) 0x20BB20 )
#define SFLASH_ID_ISSI25LP064 ( (uint32_t) 0x9D6017 )
#define SFLASH_ID_N25Q064A ( (uint32_t) 0x20BA17 )
#define SFLASH_ID_W25Q64FV ( (uint32_t) 0xEF4017 )
#define SFLASH_ID_CY15B104Q ( (uint32_t) 0x7F7F7F )
+#define SFLASH_ID_N25Q128A ( (uint32_t) 0x20BA18 )
#define SFLASH_ID_DEFAULT ( (uint32_t) 0x000000 )
- Then try adding the size of the new part number in 43xxx_Wi-Fi/libraries/drivers/spi_flash/spi_flash_internal.h
#define SFLASH_SIZE_1MByte 0x100000
#define SFLASH_SIZE_2MByte 0x200000
#define SLFASH_SIZE_32MByte 0x2000000
#define SFLASH_SIZE_64MByte 0x4000000
#define SFLASH_SIZE_512KByte 0x80000
#define SFLASH_SIZE_16MByte 0x1000000
- Add the device name in the sflash_device_id_size structure in the following manner
device_id_to_flash_size_t sflash_device_id_size [SFLASH_ID_MAX_PARTS] =
{
{ SFLASH_ID_MX25L8006E, SFLASH_SIZE_1MByte },
{ SFLASH_ID_MX25L1606E, SFLASH_SIZE_2MByte },
{ SFLASH_ID_MX25L25635F, SLFASH_SIZE_32MByte },
{ SFLASH_ID_MX25U1635F, SFLASH_SIZE_2MByte },
{ SFLASH_ID_SST25VF080B, SFLASH_SIZE_1MByte },
{ SFLASH_ID_EN25QH16, SFLASH_SIZE_2MByte },
{ SFLASH_ID_N25Q512A, SFLASH_SIZE_64MByte },
{ SFLASH_ID_CY15B104Q, SFLASH_SIZE_512KByte },
{ SFLASH_ID_N25Q128A, SFLASH_SIZE_16MByte }
};
- If you are using WINBOND, ISSI, CYPRESS flash, you have to add SFLASH_SUPPORT_WINBOND_PARTS in 43xxx_Wi-Fi/libraries/drivers/spi_flash/spi_flash.mk or as a part of GLOBAL_DEFINES in your <platform>.mk file
For 4390x based platform
To add a new part with the already supported sflash chips for 4390x platform, you have to make the necessary modifications in 43xxx_Wi-Fi/WICED/platform/MCU/BCM4390x/peripherals/spi_flash.
- Just like ST based platforms, you need to add the SFLASH_ID in 43xxx_Wi-Fi/WICED/platform/MCU/BCM4390x/peripherals/spi_flash/spi_flash.h
#define SFLASH_ID_MX25L8006E SFLASHID( 0xC2, 0x20, 0x14 )
#define SFLASH_ID_MX25L1606E SFLASHID( 0xC2, 0x20, 0x15 )
#define SFLASH_ID_MX25L6433F SFLASHID( 0xC2, 0x20, 0x17 )
#define SFLASH_ID_MX25L12835F SFLASHID( 0xC2, 0x20, 0x18 )
#define SFLASH_ID_MX25L25635F SFLASHID( 0xC2, 0x20, 0x19 )
#define SFLASH_ID_MX25U1635F SFLASHID( 0xC2, 0x25, 0x35 )
#define SFLASH_ID_MX66U51235F SFLASHID( 0xC2, 0x25, 0x3A )
#define SFLASH_ID_SST25VF080B SFLASHID( 0xBF, 0x25, 0x8E )
#define SFLASH_ID_EN25QH16 SFLASHID( 0x1C, 0x30, 0x15 )
#define SFLASH_ID_ISSI25CQ032 SFLASHID( 0x7F, 0x9D, 0x46 )
#define SFLASH_ID_N25Q512A SFLASHID( 0x20, 0xBB, 0x20 )
#define SFLASH_ID_ISSI25LP064 SFLASHID( 0x9D, 0x60, 0x17 )
#define SFLASH_ID_N25Q064A SFLASHID( 0x20, 0xBA, 0x17 )
#define SFLASH_ID_W25Q64FV SFLASHID( 0xEF, 0x40, 0x17 )
#define SFLASH_ID_S25FL064L SFLASHID( 0x01, 0x60, 0x17 )
#define SFLASH_ID_S25FL128L SFLASHID( 0x01, 0x60, 0x18 )
#define SFLASH_ID_S25FL256L SFLASHID( 0x01, 0x60, 0x19 )
#define SFLASH_ID_N25Q128A SFLASHID( 0x20, 0xBA, 0x18 )
#define SFLASH_ID_DEFAULT SFLASHID( 0x00, 0x00, 0x00 )
- In 43xxx_Wi-Fi/WICED/platform/MCU/BCM4390x/peripherals/spi_flash/spi_flash.c, you have to add the part number information in sflash_capabilities_tables structure.
#ifdef SFLASH_SUPPORT_MICRON_PARTS
{ SFLASH_ID_N25Q064A, { 8*MBYTE, 256, .action = µn_action, .speed_advance = µn_speed_config } },
{ SFLASH_ID_N25Q128A, { 16*MBYTE, 256, .action = µn_action, .speed_advance = µn_speed_config } },
#endif
- If you are using any flash other than macronix flash, you have to add support in <platform_name>.mk file in the following manner.
GLOBAL_DEFINES += SFLASH_SUPPORT_MICRON_PARTS
Debugging Notes:
- Please check for DEBUG_PRINT macro in 43xxx_Wi-Fi/apps/waf/sflash_write/sflash_write.c. Once you enable this macro, you should be able to see debug prints in the UART terminal where you should look for SFLASH ID and SFLASH size. If the support is correctly added, these two fields will show you the correct SFLASH ID and the size that you have added following the above mentioned steps.
SFLASH Device ID ( 0x20ba18)
SFLASH Size ( 0x1000000)
- The micron flash (N25Q128A) I have added in this example needed a 100k pull up resistor in the RESET pin as specified by the datasheet. Please check similar things in the datasheet of the flash you plan to add.
- This blog post does not cover the porting effort of flash from a different manufacturer, in which case, you have to add the read, write, erase source code in the spi_flash.c for which you can refer to the already existing implementations.
- Tags:
- sflash porting