R01AN0724JU0170 Rev.1.70 MCU EEPROM RX MCU 1 RX MCU EEPROM VEE VEE API MCU MCU API RX621 RX62N RX62T RX62G RX630 RX631 RX63N RX63T RX210 R01AN0724JU0170 Rev.1.70 Page 1 of 33
1.... 3 1.1... 3 1.2... 3 1.3... 3 1.4 VEE... 4 2. API... 7 2.1... 7 2.2... 7 2.2.1... 7 2.3... 7 2.4... 7 2.5... 7 2.6... 7 2.7... 7 2.8... 8 2.8.1 r_bsp... 9 2.9 VEE... 9 2.9.1 VEE... 9 2.9.2 VEE VEE... 9 2.9.3 VEE... 10 2.9.4 VEE... 10 2.10 API... 12 2.10.1 VEE... 12 2.11 API Typedef... 12 2.11.1 API... 12 2.11.2 VEE... 12 2.11.3 R_VEE_Control() VEE... 13 2.12 MCU Typedef... 13 2.13 VEE... 13 2.14 VEE... 14 2.15... 15 2.16... 15 2.17... 16 3. API... 17 3.1... 17 3.2 R_VEE_Read... 18 3.3 R_VEE_Write... 19 3.4 R_VEE_Defrag... 21 3.5 R_VEE_Erase... 22 3.6 R_VEE_GetState... 24 3.7 R_VEE_ReleaseState... 25 3.8 R_VEE_GenerateCheck... 26 3.9 R_VEE_Open... 27 3.10 R_VEE_Control... 28 3.11 R_VEE_GetVersion... 29 4.... 30 4.1 HEW... 30 4.2 E2Studio... 31 R01AN0724JU0170 Rev.1.70 Page 2 of 33
1. 1.1 EEPROM (VEE) API 1.1 1.1 EEPROM MCU BGO API MCU BGO BGO VEE MPU BGO 1.2 VEE VEE VEE ID ID VEE 1.4 1.3 VEE MCU VEE MCU VEE VEE VEE 2 VEE VEE 1 MCU 1 VEE VEE VEE VEE VEE VEE VEE VEE 1 VEE R01AN0724JU0170 Rev.1.70 Page 3 of 33
1.2 VEE EEPROM ID ID API 1.4 VEE VEE 1 2 VEE VEE VEE 2 VEE ID 1 1 ID 1.2 VEE VEE 0 2 VEE 0 VEE0 VEE1 VEE0 VEE1 VEE1 VEE0 VEE2 VEE2 1.2 0 R01AN0724JU0170 Rev.1.70 Page 4 of 33
VEE VEE VEE VEE 1 VEE 0 1.3 VEE 1 1.3 1 VEE 0 VEE0 VEE0 VEE1 VEE1 VEE1 VEE1 VEE0 VEE2 VEE0 VEE2 VEE2 1.4 R01AN0724JU0170 Rev.1.70 Page 5 of 33
VEE 1.5 VEE VEE 1 VEE 0 VEE 0 VEE 1 VEE 0 VEE0 VEE1 VEE1 VEE0 VEE2 1.5 0 R01AN0724JU0170 Rev.1.70 Page 6 of 33
2. API VEE API API 2.1 MCU BGO 2.2 2.2.1 MCU VEE VEE 2.3 RX600 API (R01AN0544JU) v2.40 FIT (r_bsp) v2.00 2.4 API EEPROM VEE API VEE 2.5 RX v1.02 2.6 API VEE 1 r_vee_if.h VEE r_vee_user_config.h 2.7 ANSI C99 "Exact width integer types" stdint.h R01AN0724JU0170 Rev.1.70 Page 7 of 33
2.8 r_vee_config.h VEE 2.1 VEE_NUM_SECTORS VEE_MAX_RECORD_ID VEE_IGNORE_DUPLICATE_WRITES VEE_CACHE_FILL_ALL VEE_USE_DEFAULT_CHECK_FUNCTIONS r_vee_config.h VEE r_vee_config_<target>_<df_size>.h 32 KB RX62N 2 VEE 2 VEE r_vee_config_rx62x_32kb.h ID ID ID VEE API ID 1 8 8 ID 0 ID 7 VEE VEE 1 R_VEE_GenerateCheck() vee_check_record() R01AN0724JU0170 Rev.1.70 Page 8 of 33
VEE_CALLBACK_FUNCTION r_vee_config.h 2 VEE_CALLBACK_FUNCTION VEE VEE_CALLBACK_FUNCTION MyCallback MyCallback() VEE 2.8.1 r_bsp VEE v1.50 FIT (r_bsp) r_bsp RX MCU VEE r_bsp MCU r_bsp RX 2.9 VEE r_vee_config_<target>_<df_size>.h 32 KB RX62N r_vee_config_rx62x_32kb.h VEE VEE VEE VEE VEE r_vee_config_<target>_<df_size>.h r_vee.c 2.9.1 VEE VEE r_vee_config.h VEE_NUM_SECTORS #define 2.8 2.9.2 VEE VEE VEE VEE g_vee_recordlocaion[] VEE ID 1 VEE ID 2.8 VEE_MAX_RECORD_ID VEE 2 4 VEE 0 4 VEE 1 const uint8_t g_vee_recordlocations[vee_max_record_id] = 0, /* Record 0 will be in sector 0 */ 0, /* Record 1 will be in sector 0 */ 0, /* Record 2 will be in sector 0 */ 0, /* Record 3 will be in sector 0 */ 1, /* Record 4 will be in sector 1 */ 1, /* Record 5 will be in sector 1 */ 1, /* Record 6 will be in sector 1 */ 1, /* Record 7 will be in sector 1 */ }; R01AN0724JU0170 Rev.1.70 Page 9 of 33
2.9.3 VEE VEE VEE 2 g_vee_sect#_block_addresses[] # VEE VEE 1 2 g_vee_sect#_df_blocks[][2] # 2 VEE MCU VEE 1 2 VEE VEE 2 VEE VEE 4 MCU VEE 0 1 /* Sector 0 */ const uint32_t g_vee_sect0_block_addresses[] = 0x100000, /* Start address of VEE Block 0 */ 0x102000 /* Start address of VEE Block 1 */ }; const uint16_t g_vee_sect0_df_blocks[][2] = BLOCK_DB0, BLOCK_DB3}, /* Start & end DF blocks making up VEE Block 0 */ BLOCK_DB4, BLOCK_DB7} /* Start & end DF blocks making up VEE Block 1 */ }; /* Sector 1 */ const uint32_t g_vee_sect1_block_addresses[] = 0x104000, /* Start address of VEE Block 0 */ 0x106000 /* Start address of VEE Block 1 */ }; const uint16_t g_vee_sect1_df_blocks[][2] = BLOCK_DB8, BLOCK_DB11}, /* Start & end DF blocks making up VEE Block 0 */ BLOCK_DB12, BLOCK_DB15} /* Start & end DF blocks making up VEE Block 1 */ }; #define BLOCK_DB0 RX API 2.9.4 VEE g_vee_sectors VEE VEE VEE ID VEE VEE MCU 2.9.3 VEE MCU VEE MCU 2.9.3 R01AN0724JU0170 Rev.1.70 Page 10 of 33
3 VEE VEE const vee_sector_t g_vee_sectors[ VEE_NUM_SECTORS ] = /* Sector 0 */ /* ID is 0 */ 0, /* There are 2 VEE Blocks in this sector */ 2, /* Size of each VEE Block */ 8192, /* Starting addresses for each VEE Block */ (const uint32_t *)g_vee_sect0_block_addresses, /* Number of data flash blocks per VEE Block (End Block # - Start Block # + 1) */ 4, /* Start & end DF blocks making up VEE Blocks */ g_vee_sect0_df_blocks }, /* Sector 1 */ /* ID is 1 */ 1, /* There are 2 VEE Blocks in this sector */ 2, /* Size of each VEE Block */ 6144, /* Starting addresses for each VEE Block */ (const uint32_t *)g_vee_sect1_block_addresses, /* Number of data flash blocks per VEE Block (End Block # - Start Block # + 1) */ 3, /* Start & end DF blocks making up VEE Blocks */ g_vee_sect1_df_blocks }, /* Sector 2 */ /* ID is 2 */ 2, /* There are 2 VEE Blocks in this sector */ 2, /* Size of each VEE Block */ 2048, /* Starting addresses for each VEE Block */ (const uint32_t *)g_vee_sect2_block_addresses, /* Number of data flash blocks per VEE Block (End Block # - Start Block # + 1) */ 1, /* Start & end DF blocks making up VEE Blocks */ g_vee_sect2_df_blocks } }; /* To add more sectors copy the one above and change the values */ R01AN0724JU0170 Rev.1.70 Page 11 of 33
2.10 API 2.10.1 VEE API VEE VEE r_vee_if.h /* VEE Record Structure */ typedef struct /* Unique record identifier, cannot be 0xFF! */ vee_var_data_t ID; /* Number of bytes of data for this record */ vee_var_data_t size; /* Valid or error checking field */ vee_var_data_t check; /* Which VEE Block this record is located in, user does not set this */ vee_var_data_t block; /* Pointer to record data */ uint8_t far * pdata; } vee_record_t; 2.11 API Typedef 2.11.1 API VEE API r_vee_if.h typedef /* Return values for functions */ typedef enum VEE_SUCCESS, VEE_FAILURE, VEE_BUSY, VEE_NO_ROOM, VEE_NOT_FOUND, VEE_ERROR_FOUND } vee_return_values_t; 2.11.2 VEE VEE r_vee_if.h R_VEE_GetState() /* Defines the possible states of the VEE */ typedef enum VEE_READY, VEE_READING, VEE_WRITING, VEE_ERASING, VEE_DEFRAG, VEE_ERASE_AND_DEFRAG, VEE_WRITE_AND_DEFRAG, VEE_ERASE_AND_WRITE } vee_states_t; R01AN0724JU0170 Rev.1.70 Page 12 of 33
2.11.3 R_VEE_Control() VEE R_VEE_Control() typedef /* VEE Record Structure */ typedef enum /* This command will reset the VEE even if it is in the middle of an operation. This should only be used when a flash error (e.g. data flash access during VEE operation) has occurred and you need to return the VEE to a working state. */ VEE_CMD_RESET } vee_command_t; 2.12 MCU Typedef VEE MCU 2 typedef vee_var_min_t vee_var_data_t r_vee.h vee_var_min_t RX62N 8 uint64_t 8 RX63N 2 vee_var_min_t uint16_t 2 vee_var_data_t typedef 2.10 VEE vee_var_data_t vee_var_min_t vee_var_data_t VEE 2.13 vee_var_data_t vee_var_data_t R8/38C vee_var_data_t typedef uint8_t 1 VEE 255 (0xFF) R8C/3x /* Set size of vee_var_data_t to the minimum write size of MCU's data flash or larger. This is the size of the variables in a record structure. */ typedef uint16_t vee_var_data_t; /* Set size of vee_var_min_t to the minimum write size of MCU's data flash */ typedef uint8_t vee_var_min_t; 2.13 VEE VEE2.10 vee_record_t 4 vee_var_data_t VEE 4 * sizeof(vee_var_data_t) 2.12 R8C/3x vee_var_data_t 2 8 RX62N vee_var_data_t 8 32 R01AN0724JU0170 Rev.1.70 Page 13 of 33
2.14 VEE VEE API R_VEE_Read (vee_record_t * vee_temp) VEE pdata API R_VEE_ReleaseState() BGO 1. VEE 0 R_VEE_Read() 2. VEE 0 3. VEE VEE 1 R_VEE_Write() 4. R_VEE_Write() BGO 5. VEE 0 6. VEE 1 VEE VEE VEE R_VEE_Read() R_VEE_Write() R_VEE_Erase() R_VEE_Defrag() VEE 0 R_VEE_Write(ID=2) R_VEE_Read(ID=0) VEE API R_VEE_Read(ID=1) R_VEE_Write(ID=2) R_VEE_Read(ID=2) R_VEE_Read(ID=1) R_VEE_Read(ID=2) VEE 1 2 R_VEE_Erase( ) R_VEE_ReleaseState() R_VEE_Erase( ) R_VEE_Write(ID=3) R_VEE_Read(ID=2) R_VEE_Read(ID=2) VEE 2 VEE_BUSY VEE_BUSY R01AN0724JU0170 Rev.1.70 Page 14 of 33
2.15 R_VEE_Write() R_VEE_Defrag() API API VEE VEE VEE VEE VEE check check VEE VEE 1. VEE 0 R_VEE_Write() 2. VEE 0 3. VEE VEE 0 4. VEE 0 5. R_VEE_Read() VEE 0 VEE VEE 0 VEE VEE RAM VEE RAM RAM R_VEE_Read() VEE VEE VEE 2.16 VEE API 1. r_vee 2. r_vee.c 3. MPU C src/targets/ a. RX62x r_vee_rx62x.c r_vee/src/targets/rx62x 4. r_vee 5. r_vee/src 6. r_vec_config_reference.h ref r_vee_config.h 7. r_vee_config.h 8. VEE API r_vec_if.h #include R01AN0724JU0170 Rev.1.70 Page 15 of 33
2.17 FlashError() API API MCU void FlashError(void); R01AN0724JU0170 Rev.1.70 Page 16 of 33
3. API 3.1 API R_VEE_Read() R_VEE_Write() R_VEE_Defrag() R_VEE_Erase() R_VEE_GetState() R_VEE_ReleaseState() R_VEE_GenerateCheck() R_VEE_Open() R_VEE_Control() R_VEE_GetVersion() VEE VEE VEE VEE VEE VEE VEE check VEE VEE VEE R01AN0724JU0170 Rev.1.70 Page 17 of 33
3.2 R_VEE_Read VEE uint8_t R_VEE_Read(vee_record_t * vee_temp); vee_temp. VEE_SUCCESS: VEE_NOT_FOUND: VEE_BUSY: VEE_INVALID_INPUT: VEE r_vee_if.h r_vee.c VEE ID VEE VEE VEE VEE VEE_BUSY vee_record_t example_record; /* We want to find VEE Record 1 */ example_record.id = 1; /* Search VEE for record */ if (VEE_SUCCESS == R_VEE_Read(&example_record)) /* Send data */ for (loop = 0; loop < example_record.size; loop++) TransmitByte(example_record.pData[loop]);... } } : VEE VEE VEE MCU VEE ID VEE VEE R01AN0724JU0170 Rev.1.70 Page 18 of 33
3.3 R_VEE_Write VEE uint8_t R_VEE_Write(vee_record_t * vee_temp); vee_temp VEE_SUCCESS: VEE_BUSY: VEE_NO_ROOM: VEE_FAILURE: VEE_INVALID_INPUT: VEE R_VEE_Erase() r_vee_if.h r_vee.c VEE VEE ID size check pdata VEE_SUCCESS VEE VEE R_VEE_GetState() VEE vee_record_t example_record; /* Fill in data for VEE Record 1 */ example_record.id = 1; example_record.size = sizeof(record_data); example_record.pdata = &record_data[0]; /* Generate check field */ R_VEE_GenerateCheck(&example_record); /* Write record */ if (VEE_SUCCESS == R_VEE_Write(&example_record))... } R01AN0724JU0170 Rev.1.70 Page 19 of 33
: VEE API VEE_BUSY R01AN0724JU0170 Rev.1.70 Page 20 of 33
3.4 R_VEE_Defrag VEE uint8_t R_VEE_Defrag(uint8_t sector); sector VEE ID VEE_SUCCESS: VEE_BUSY: VEE_NOT_FOUND: VEE_INVALID_INPUT: VEE ACTIVE ID r_vee_if.h r_vee.c R_VEE_Write() VEE VEE_SUCCESS VEE VEE R_VEE_GetState() uint8_t sector; for (sector = 0; sector < VEE_NUM_SECTORS; sector++) /* Defrag sector */ ret = R_VEE_Defrag(sector); /* Check result */ if (VEE_SUCCESS == ret)... } } /* Wait for defrag to finish */... : VEE API VEE_BUSY R01AN0724JU0170 Rev.1.70 Page 21 of 33
3.5 R_VEE_Erase VEE uint8_t R_VEE_Erase(uint8_t sector); sector VEE ID VEE_SUCCESS: VEE_BUSY: VEE_FAILURE: VEE_INVALID_INPUT: VEE ID r_vee_if.h r_vee.c VEE VEE VEE VEE_SUCCESS VEE VEE VEE VEE VEE_SUCCESS VEE VEE R_VEE_GetState() uint8_t sector; /* Erase all data from VEE */ for (sector = 0; sector < VEE_NUM_SECTORS; sector++) /* Erase sector */ ret = R_VEE_Erase(sector); /* Check result */ if (VEE_SUCCESS == ret)... } } /* Wait for erase to finish */... /* VEE is empty */ : VEE VEE VEE VEE R01AN0724JU0170 Rev.1.70 Page 22 of 33
R_VEE_Read() R01AN0724JU0170 Rev.1.70 Page 23 of 33
3.6 R_VEE_GetState VEE vee_states_t R_VEE_GetState(void); VEE VEE 2.11.2 r_vee_if.h r_vee.c VEE VEE uint8_t sector; /* Erase all data from VEE */ for (sector = 0; sector < VEE_NUM_SECTORS; sector++) /* Erase sector */ ret = R_VEE_Erase(sector); /* Check result */ if (VEE_SUCCESS == ret)... } } while (VEE_READY!= R_VEE_GetState()) /* Wait for erase to finish */ } /* VEE is empty */ : R01AN0724JU0170 Rev.1.70 Page 24 of 33
3.7 R_VEE_ReleaseState VEE VEE_READY VEE uint8_t R_VEE_ReleaseState(void); VEE_SUCCESS: VEE_FAILURE: VEE VEE_READING VEE_READY VEE_READING r_vee_if.h r_vee.c VEE VEE R_VEE_Read() VEE 2.14 VEE VEE_FAILURE. vee_record_t example_record; uint8_t ret; /* We want to find VEE Record 1 */ example_record.id = 1; /* Search VEE for record */ if (VEE_SUCCESS == R_VEE_Read(&example_record)) /* Read data and use it */... } /* Release state so other VEE operations can occur */ ret = R_VEE_ReleaseState(); : R01AN0724JU0170 Rev.1.70 Page 25 of 33
3.8 R_VEE_GenerateCheck check uint8_t R_VEE_GenerageCheck(vee_record_t * record); record check VEE_SUCCESS: VEE_FAILURE: check r_vee_if.h MCU r_vee_rx62x.c check VEE VEE CRC vee_record_t example_record; /* Fill in data for VEE Record 1 */ example_record.id = 1; example_record.size = sizeof(record_data); example_record.pdata = &record_data[0]; /* Generate check field */ R_VEE_GenerateCheck(&example_record); /* Write record */ if (VEE_SUCCESS == R_VEE_Write(&example_record))... } : CRC vee_check_record() R_VEE_GenerateCheck() check vee_check_record() VEE vee_check_record() R01AN0724JU0170 Rev.1.70 Page 26 of 33
3.9 R_VEE_Open VEE uint8_t R_VEE_Open(void); VEE_SUCCESS: r_vee_if.h r_vee.c VEE VEE /* Initialize the Virtual EEPROM */ R_VEE_Open(); : R01AN0724JU0170 Rev.1.70 Page 27 of 33
3.10 R_VEE_Control VEE uint8_t R_VEE_Control(vee_command_t command, void * pdata); command pdata VEE_SUCCESS: VEE_BUSY: VEE VEE_INVALID_INPUT: r_vee_if.h r_vee.c VEE r_vee_if.h vee_command_t typedef 2.11.3 /* A data flash access violation occurred and the VEE is in a locked state. Reset the VEE to start recovery. */ if (VEE_SUCCESS == R_VEE_Control(VEE_CMD_RESET, (void *)FIT_NO_PTR)) /* VEE has been reset. The next write or defrag of the VEE will start any needed recovery operations. */... } : FIT r_bsp pdata FIT_NO_PTR R01AN0724JU0170 Rev.1.70 Page 28 of 33
3.11 R_VEE_GetVersion VEE uint32_t R_VEE_GetVersion(void); VEE r_vee_if.h r_vee.c API 2 2 4.25 0x00040019 uint32_t cur_version; /* Get version of installed VEE. */ cur_version = R_VEE_GetVersion(); /* Check to make sure version is new enough for this application s use. */ if (MIN_VERSION > cur_version) /* This Virtual EEPROM version is not new enough and does not have XXX feature that is needed by this application. Alert user. */... } : r_vee.c R01AN0724JU0170 Rev.1.70 Page 29 of 33
4. HEW E2Studio HEW HEW E2Studio E2Studio VEE RSKRX62N RSKRX63N RDKRX63N RSKRX62G RSKRX63T_144PIN 4.1 HEW RSKRX62T RSKRX630 RDKRX62N RSKRX63T_64PIN RSKRX210 HEW VEE 1. HEW 2. Set as Current Project 3. VEE API MCU r_bsp r_bsp r_bsp plotform.h r_bsp platform.h RSK+RX63N./board/rskrx63n/r_bsp.h #include #include 4. R01AN0724JU0170 Rev.1.70 Page 30 of 33
4.2 E2Studio E2Studio HEW E2Studio 1. E2Studio Workspace e2studio *.exe 2. Extract 3. E2Studio 4. File >> Import File Import 5. General >> Existing Projects into Workspace Next 6. Select archive file browse 7. E2Studio zip R01AN0724JU0170 Rev.1.70 Page 31 of 33
8. Finish RDKRX63N 9. VEE API MCU r_bsp r_bsp r_bsp plotform.h r_bsp platform.h RSK+RX63N./board/rskrx63n/r_bsp.h #include #include 10. R01AN0724JU0170 Rev.1.70 Page 32 of 33
http://japan.renesas.com http://japan.renesas.com/contact/ R01AN0724JU0170 Rev.1.70 Page 33 of 33
Rev. 1.00 2011.07.15 1.50 2012.01.03 RX63x VEE 1.60 2012.09.14 R_VEE_GenerateCheck() API FIT v0.7 1.70 FIT v1.0 API R_VEE_Open() R_VEE_Control()API R_VEE_GetVersion() HEW E2Studio A-1
1. CMOS LSILSI 2. LSI 3. 4. 5.
1. 2. 3. 4. 5. OA AV 6. 7. 8. RoHS 9. 10. 11. 1. 2. http://www.renesas.com 100-00042-6-2 (03)5201-5307 http://japan.renesas.com/contact/ 2013 Renesas Electronics Corporation. All rights reserved. Colophon 2.0