- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I need a simple set of commands to write a 32bit value to the SFLASH on my PROC-012011 module. This is too store the users selected pairing code. I need to be able to write, read and clear the 32 bit value, this is rather urgent, and the documentation is not clear.
Is there a simple SFLASH example for one 32 bit word?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Herb,
Here is a routine I wrote a while back for a project, it uses the last user row of SFLASH to store data, should be easy to modify to 32bit value, my example shows 8bit and 16 bit variables being stored and read back from SFLASH.
/* Defines last ROW of SFlash */
#define CY_TEST_SFLASH_ROW (CY_SFLASH_NUMBER_USERROWS - 1u)
/* Defines absolute address of ROW */
#define CY_TEST_SFLASH_ADDR (CY_SFLASH_USERBASE + CY_TEST_SFLASH_ROW * CY_SFLASH_SIZEOF_USERROW)
/* FLAG indicating flash write occurred */
#define FLASH_WRITE_FLAG 0xAA
uint8 A;
uint8 B;
uint8 C;
uint8 D;
uint8 E;
uint8 F;
uint16 G;
void updateFlashValues(void)
{
/***********************************************************************
* Erases a row of SFlash and programs it with the rowPattern.
* Comment line below and program the hex file into the target device
* to check if SFlash dataRow is available after device reprogramming.
***********************************************************************/
uint8 flashArray[CY_SFLASH_SIZEOF_USERROW];
flashArray[0] = A;
flashArray[1] = B;
flashArray[2] = C;
flashArray[3] = D;
flashArray[4] = E;
flashArray[5] = F;
flashArray[6] = (uint8)G;
flashArray[7] = (uint8)(G >> 8);
CySysSFlashWriteUserRow(CY_TEST_SFLASH_ROW, flashArray);
}
void readFlashValues(void)
{
/* Define source value */
A = (*((uint8 *) (CY_TEST_SFLASH_ADDR)));
B = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 1)));
C = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 2)));
D = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 3)));
E = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 4)));
F = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 5)));
G = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 7)));
G = (G << 8 )|(*((uint8 *) (CY_TEST_SFLASH_ADDR + 6)));
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Herb,
Here is a routine I wrote a while back for a project, it uses the last user row of SFLASH to store data, should be easy to modify to 32bit value, my example shows 8bit and 16 bit variables being stored and read back from SFLASH.
/* Defines last ROW of SFlash */
#define CY_TEST_SFLASH_ROW (CY_SFLASH_NUMBER_USERROWS - 1u)
/* Defines absolute address of ROW */
#define CY_TEST_SFLASH_ADDR (CY_SFLASH_USERBASE + CY_TEST_SFLASH_ROW * CY_SFLASH_SIZEOF_USERROW)
/* FLAG indicating flash write occurred */
#define FLASH_WRITE_FLAG 0xAA
uint8 A;
uint8 B;
uint8 C;
uint8 D;
uint8 E;
uint8 F;
uint16 G;
void updateFlashValues(void)
{
/***********************************************************************
* Erases a row of SFlash and programs it with the rowPattern.
* Comment line below and program the hex file into the target device
* to check if SFlash dataRow is available after device reprogramming.
***********************************************************************/
uint8 flashArray[CY_SFLASH_SIZEOF_USERROW];
flashArray[0] = A;
flashArray[1] = B;
flashArray[2] = C;
flashArray[3] = D;
flashArray[4] = E;
flashArray[5] = F;
flashArray[6] = (uint8)G;
flashArray[7] = (uint8)(G >> 8);
CySysSFlashWriteUserRow(CY_TEST_SFLASH_ROW, flashArray);
}
void readFlashValues(void)
{
/* Define source value */
A = (*((uint8 *) (CY_TEST_SFLASH_ADDR)));
B = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 1)));
C = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 2)));
D = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 3)));
E = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 4)));
F = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 5)));
G = (*((uint8 *) (CY_TEST_SFLASH_ADDR + 7)));
G = (G << 8 )|(*((uint8 *) (CY_TEST_SFLASH_ADDR + 6)));
}