R01AN0544JU0240 Rev.2.40 RX600 RX200 API MCU API API RX 0xFF 3.10 API RX610 RX621 RX62N RX62T RX62G RX630 RX631 RX63N RX63T RX210 1.... 2 2. API... 3 3.... 11 4.... 16 5. API... 18 6.... 32 R01AN0544JU0240 Rev.2.40 Page 1 of 29
1. API ROM API ROM ROM RX600 RX200 MCU API ROM ROM 1.1 API ROM ROM ROM ROM R01AN0544JU0240 Rev.2.40 Page 2 of 29
2. API API 2.1 MCU RX600 RX200 MCU 4MHz 2.2 2.2.1 FCU FCU FCU 2.3 2.4 RX v1.02 2.5 r_flash_api_rx_if.h API 2.6 ANSI C99 exact width integer types stdint.h R01AN0544JU0240 Rev.2.40 Page 3 of 29
2.7 r_flash_api_rx_config.h FLASH_API_RX_CFG_ ENABLE_ROM_PROGRAMMING FLASH_API_RX_CFG_FLASH_TO_FL ASH FLASH_API_RX_CFG_DATA_FLASH_ BGO FLASH_API_RX_CFG_ROM_BGO FLASH_API_RX_CFG_FLASH_READY _IPL FLASH_API_RX_CFG_ IGNORE_LOCK_BITS FLASH_API_RX_CFG_ COPY_CODE_BY_API 1 API r_flash_api_rx_config.h ROM RAM ROM ROM ROM API RAM RAM ROM API API ROM ROM API API ROM BGO API API RAM RAM dbsct.c R_FlashCodeCopy() R_FlashCodeCopy() dbsct.c 2.7.1 MCU MCU MCU RX62N ROM FCU API r_bsp API r_bsp RX MCU API r_bsp r_bsp RX R01AN0544JU0240 Rev.2.40 Page 4 of 29
2.7.2 DATA_FLASH_OPERATION_PIPL ROM_OPERATION_PIPL 2.00 2 #define API MCU IPL API IPL ROM MCU IPL BGO ISR IPL ISR ISR IPL MCU IPL 2 1 ISR IPL IPL IPL PSW 2.8 API API 2.8.1 MCU g_flash_blockaddresses[] ROM 0x00 0x00FF4000 ROM 0xFF 0xFFFF4000 ROM 0xFF000000 OR ROM ROM ROM /* Data Structure #1 */ const uint32_t g_flash_blockaddresses[86] = { 0x00FFF000, /* EB00 */ 0x00FFE000, /* EB01 */ 0x00FFD000, /* EB02 */ 0x00FFC000, /* EB03 */... }; R01AN0544JU0240 Rev.2.40 Page 5 of 29
2.9 API r_flash_api_rx_if.h 2 /**** Function Return Values ****/ /* Operation was successful */ #define FLASH_SUCCESS (0x00) /* Flash area checked was blank, making this 0x00 as well to keep existing code checking compatibility */ #define FLASH_BLANK (0x00) /* The address that was supplied was not on aligned correctly for ROM or DF */ #define FLASH_ERROR_ALIGNED (0x01) /* Flash area checked was not blank, making this 0x01 as well to keep existing code checking compatibility */ #define FLASH_NOT_BLANK (0x01) /* The number of bytes supplied to write was incorrect */ #define FLASH_ERROR_BYTES (0x02) /* The address provided is not a valid ROM or DF address */ #define FLASH_ERROR_ADDRESS (0x03) /* Writes cannot cross the 1MB boundary on some parts */ #define FLASH_ERROR_BOUNDARY (0x04) /* Flash is busy with another operation */ #define FLASH_BUSY (0x05) /* Operation failed */ #define FLASH_FAILURE (0x06) /* Lock bit was set for the block in question */ #define FLASH_LOCK_BIT_SET (0x07) /* Lock bit was not set for the block in question */ #define FLASH_LOCK_BIT_NOT_SET (0x08) 2.10 1. r_flash_api_rx 2. src r_flash_api_rx.c 3. r_flash_api_rx 4. r_flash_api_rx src 5. ref r_flash_api_rx_config_reference.h r_flash_api_rx_config.h 6. r_flash_api_rx_config.h 7. API r_flash_api_rx_if.h #include ROM 2.12 8. ROM PFRAM 9. RAM RPFRAM 10. FRAM RAM 11. API ROM RAM R_FlashCodeCopy() R01AN0544JU0240 Rev.2.40 Page 6 of 29
2.11 1. 2. ROM ROM ROM BGO RAM 3. DF DF ROM 2.12 API RAM RX600 RX200 MPU ROM API RAM ROM ROM ROM FCU ROM RAM ROM r_flash_api_rx_config.h FLASH_API_RX_CFG_ENABLE_ROM_PROGRAMMING ROM HEW : 1. RAM RPFRAM 2. ROM PFRAM R01AN0544JU0240 Rev.2.40 Page 7 of 29
3. ROM PFRAM RAM RPFRAM 4. API RAM ROM RAM API MCU RAM RAM dbsct.c RAM dbsct.c RAM : -- FILE [dbsct.c] -- #pragma section $DSEC static const struct { _UBYTE *rom_s; /* Initial address on ROM of initialization data section */ _UBYTE *rom_e; /* Final address on ROM of initialization data section */ _UBYTE *ram_s; /* Initial address on RAM of initialization data section */ } DTBL[] = { { sectop("d"), secend("d"), sectop("r") }, { sectop("pfram"), secend("pfram"), sectop("rpfram") } }; R01AN0544JU0240 Rev.2.40 Page 8 of 29
2.20 RAM API R_FlashCodeCopy() API r_flash_api_rx_config.h COPY_CODE_BY_API dbsct.c R_FlashCodeCopy() E2Studio : E2Studio ROM RAM 1. RAM RPFRAM 2. ROM PFRAM 3. -rom,pfram=rpfram ROM PFRAM RAM RPFRAM E2Studio Tool Settings Linker >> User R01AN0544JU0240 Rev.2.40 Page 9 of 29
4. HEW API RAM 2.13 ROM BGO API FCU API 3 flash_api_rx_demo_main.c 3 void FlashEraseDone(void) ROM void FlashWriteDone(void) ROM void FlashBlankCheckDone(uint8_t result) result FLASH_BLANK FLASH_NOT_BLANK void FlashError(void) API FCU R01AN0544JU0240 Rev.2.40 Page 10 of 29
3. 3.1 HEW E1 E20 RAM RX600 RX200 FDT HEW E1/E20 Configuration Properties Internal flash memory overwrite R01AN0544JU0240 Rev.2.40 Page 11 of 29
3.2 HEW HEW Memory HEW CPU E1/E20/JLink Configuration Properties System Debug the program using the CPU re-write mode Memory 3.3 ROM RX600 RX200 ROM MCU 2MB ROM RX63N 4 ROM 0 1 2 3 ROM R_FlashWrite() ROM FENTRY FENTRY 1 R_FlashWrite() R01AN0544JU0240 Rev.2.40 Page 12 of 29
3.4 BGO BGO ROM RAM 3.5 ROM BGO ROM BGO RAM ROM BGO API ROM API ROM ROM ROM ROM ROM INTB 3.6 ROM BGO 3.7 API ROM RAM ROM API RAM RPFRAM PFRAMROM 1. r_flash_api_rx_config.h ENABLE_ROM_PROGRAMMING 2. RPFRAM PFRAM ROM RAM 2.12 3. ROM R_FlashCodeCopy() 3.8 ROM API API RAM ROM BGO RAM API RAM RAM ROM RAM API RAM 1. src/targets/ MCU RX62N MCU src/targets/rx62n/r_flash_api_rx62n.h 2. g_flash_blockaddresses[] extern 2 const RAM R01AN0544JU0240 Rev.2.40 Page 13 of 29
RAM ROM BGO FCU RAM 3.9 R_FlashDataAreaAccess() API 5.4 3.10 RX 0xFF RX 1 2 ROM 1 1 4 0 1 3 RX 0 1 0 1 R_FlashDataAreaBlankCheck() 5.5 RX FCU 3.11 API RX 24 16 24 32 16 24 RX 32 24 1 16 2 24 API 32 API ROM RAM 0xFF800000RAM 0x00000000 0x800000 24 2 RAM 24 RX L2330 (E) Relocation size overflow RX 32 HEW : 1. HEW 2. Build >> RX Standard Toolchain 3. RX Standard Toolchain CPU 4. CPU 5. Details 6. CPU details Width of divergence of function 32 bit R01AN0544JU0240 Rev.2.40 Page 14 of 29
E2Studio : 1. Properties 2. C/C++ Build Settings 3. Tool Settings Compiler >> CPU >> Advanced 4. Width of divergence of function 32 bit R01AN0544JU0240 Rev.2.40 Page 15 of 29
4. RAM 4.1 RX600 RX200 MCU MCU HEW IVT IVT 0xFFFFFFFC 0xFF7FFFFC 0xFF7FFFFC 1. 0xFF7FFFFC BOOTVECT 2. C BootLoader #pragma section C BOOTVECT void* const Boot_Vectors[] = { //0xFF7FFFFC is reset vector in User Boot Mode (void*) BootLoader, } 4.2 RAM RX RAM HEW RAM F (Fixed) MY_APP_RAM FMY_APP_RAM RAM ROM HEW P (Program) MY_APP PMY_APP RX RAM ROM ROM RAM RAM RAM ROM RAM ROM RAM -rom=xxxx=yyyy xxxx ROM yyyy RAM R01AN0544JU0240 Rev.2.40 Page 16 of 29
2.12 3 HEW -rom=pmy_app=fmy_app_ram RAM ROM RAM 2.12 4 dbset.c unsigned char *scr; unsigned char *dst; src = (unsigned char *)( sectop("pmy_app")); dst = (unsigned char *)( sectop("fmy_app_ram")); for( ; src < (unsigned char *)( secend("pmy_app")); src++, dst++) { *dst = *src; } RAM ROM #pragma section MY_APP MY_APP P P #pragma section #pragma section #pragma section RX #pragma section MY_APP void function1( void ) { {THIS FUNCTION WILL BE PLACED IN PMY_APP } } void function2( void ) { {THIS FUNCTION WILL BE PLACED IN PMY_APP } } 1 RAM ROM RAM 1 32 ROM RAM ROM R01AN0544JU0240 Rev.2.40 Page 17 of 29
5. API 5.1 API R_FlashErase() R_FlashEraseRange() R_FlashWrite() R_FlashDataAreaAccess() R_FlashDataAreaBlankCheck() R_FlashProgramLockBit() R_FlashReadLockBit() R_FLashSetLockBitProtection() R_FlashGetStatus() R_FlashCodeCopy() R_FlashGetVersion() 1 ROM ROM ROM API ROM RAM API R01AN0544JU0240 Rev.2.40 Page 18 of 29
5.2 R_FlashErase uint8_t R_FlashErase(uint32_t block); block r_flash_api_rx_if.h RX610 0xFFFFE000 0 BLOCK_0 FLASH_SUCCESS: FLASH_FAILURE: FLASH_BUSY: BGO r_flash_api_rx_if.h r_flash_api_rx.c 1 RX63x MCU RX MCU RX630 RX631 RX63N 32 32KB 1024 : BLOCK_DB0, BLOCK_DB1,, BLOCK_DB1023 2KB 64 R_FlashEraseRange() 32 uint32_t loop; uint8_t ret; /* Search for record */ for (loop = 0; loop < NUM_BLOCKS_TO_ERASE; loop++) { /* Erase block */ ret = R_FlashErase(loop); } /* Check for errors. */ if (FLASH_SUCCESS!= ret) {... } R_FlashDataAreaAccess() R01AN0544JU0240 Rev.2.40 Page 19 of 29
5.3 R_FlashEraseRange RX610 RX62x uint8_t R_FlashEraseRange(uint32_t start_addr, uint32_t bytes); start_addr bytes RX630 32 32 64 96... FLASH_SUCCESS: BGO FLASH_FAILURE: FLASH_BUSY: FLASH_ERROR_BYTES: FLASH_ERROR_ADDRESS: r_flash_api_rx_if.h r_flash_api_rx.c 1 RX63x MCU RX600 MCU #define uint8_t ret; /* Erase 64 bytes. */ ret = R_FlashEraseRange(address, 64); /* Check for errors. */ if (FLASH_SUCCESS!= ret) {... } RX610 RX62x MCU MCU R_FlashErase() ROM R_FlashDataAreaAccess() R01AN0544JU0240 Rev.2.40 Page 20 of 29
5.4 R_FlashWrite uint8_t R_FlashWrite( uint32_t uint32_t uint16_t flash_addr, buffer_addr, bytes); flash_addr buffer_addr bytes buffer_addr FLASH_SUCCESS: BGO FLASH_FAILURE: FLASH_BUSY: FLASH_ERROR_ALIGNED: FLASH_ERROR_BYTES: FLASH_ERROR_ADDRESS: FLASH_ERROR_BOUNDARY: (ROM) ROM r_flash_api_rx_if.h r_flash_api_rx.c MCU ROM 256 B0 B7 0 RX MCU ROM r_flash_api_rx_private.h ROM_AREA_# R01AN0544JU0240 Rev.2.40 Page 21 of 29
uint8_t ret; uint8_t write_buffer[program_size] = Hello World... ; /* Write data to internal memory. */ ret = R_FlashWrite(address, (uint32_t)write_buffer, PROGRAM_SIZE); /* Check for errors. */ if (FLASH_SUCCESS!= ret) {... } RX MCU MCU ROM RX61x RX62x 256 8 128 RX63x 128 2 RX210 2 8 128 2 8 R_FlashDataAreaAccess() R01AN0544JU0240 Rev.2.40 Page 22 of 29
5.5 R_FlashDataAreaAccess void R_FlashDataAreaAccess(uint16_t read_en_mask, uint16_t write_en_mask); read_en_mask MCU '0''1' 0 3 0 3 write_en_mask FCU '0' '1' 0 3 0 3 r_flash_api_rx_if.h r_flash_api_rx.c MCU 1 /* Enable reading, writing, and erasing of all data flash blocks. */ R_FlashDataAreaAccess(0xFFFF, 0xFFFF); R01AN0544JU0240 Rev.2.40 Page 23 of 29
5.6 R_FlashDataAreaBlankCheck 0xFF uint8_t R_FlashDataAreaBlankCheck(uint32_t address, uint8_t size); address 'size' 'BLANK_CHECK_8_BYTE' RX610 RX62x 8 'size' 'BLANK_CHECK_2_BYTE' RX63x 2 'size' 'BLANK_CHECK_ENTIRE_BLOCK' RX600 RX200 'BLOCK_DB0' 'BLOCK_DB1' 'BLOCK_DB2' 'BLOCK_DB3' size 8 2 8KB 'BLANK_CHECK_2_BYTE' 'BLANK_CHECK_8_BYTE' 'BLANK_CHECK_ENTIRE_BLOCK' FLASH_BLANK: FLASH_NOT_BLANK: FLASH_FAILURE: FLASH_BUSY: FLASH_ERROR_ADDRESS: FLASH_ERROR_BYTES: 2 8 BGO BGO size r_flash_api_rx_if.h r_flash_api_rx.c MCU RX600 RX200 0xFF RX600 RX200 RX610 RX62x 8 RX63x 2 R01AN0544JU0240 Rev.2.40 Page 24 of 29
uint8_t ret; /* Blank check an entire data flash block. */ ret = R_FlashDataAreaBlankCheck(address, BLANK_CHECK_ENTIRE_BLOCK); /* Check result. */ if (FLASH_NOT_BLANK == ret) { /* Block is not blank. */... } else if (FLASH_BLANK == ret) { /* Block is blank. */... } RX MCU RX610 RX62x RX63x RX210 MCU 8 8KB 8 2KB 2 2KB 2 2KB R01AN0544JU0240 Rev.2.40 Page 25 of 29
5.7 R_FlashProgramLockBit uint8_t R_FlashProgramLockBit(uint32_t block); block ROM FLASH_SUCCESS: FLASH_FAILURE: FLASH_BUSY: r_flash_api_rx_if.h r_flash_api_rx.c ROM API R_FlashSetLockBitProtection() uint8_t ret; /* Enable lock bit protection (this is default out of reset) */ ret = R_FlashSetLockBitProtection(true); /* Check for errors. */ if (FLASH_SUCCESS!= ret) {... } /* Program lock bits */ ret = R_FlashProgramLockBit(flash_block); /* Check for errors. */ if (FLASH_SUCCESS!= ret) {... } r_flash_api_rx_config.h FLASH_API_RX_CFG_IGNORE_LOCK_BITS R01AN0544JU0240 Rev.2.40 Page 26 of 29
5.8 R_FlashReadLockBit uint8_t R_FlashReadLockBit(uint32_t block); block ROM FLASH_LOCK_BIT_SET: FLASH_LOCK_BIT_NOT_SET: FLASH_FAILURE: FLASH_BUSY: r_flash_api_rx_if.h r_flash_api_rx.c ROM API R_FlashSetLockBitProtection() uint8_t ret; /* Program lock bits */ ret = R_FlashReadLockBit(flash_block); /* Check result. */ if (FLASH_LOCK_BIT_SET == ret) { /* Lock bit is set for this block. */... } else if (FLASH_LOCK_BIT_NOT_SET == ret) { /* Lock bit was not set for this block. */... } r_flash_api_rx_config.h FLASH_API_RX_CFG_IGNORE_LOCK_BITS R01AN0544JU0240 Rev.2.40 Page 27 of 29
5.9 R_FlashSetLockBitProtection uint8_t R_FlashSetLockBitProtection(uint32_t lock_bit); lock_bit 'true' 'false' FLASH_SUCCESS: FLASH_BUSY: r_flash_api_rx_if.h r_flash_api_rx.c ROM uint8_t ret; /* Enable lock bit protection (this is default out of reset) */ ret = R_FlashSetLockBitProtection(true); /* Check for errors. */ if (FLASH_SUCCESS!= ret) {... } r_flash_api_rx_config.h FLASH_API_RX_CFG_IGNORE_LOCK_BITS R01AN0544JU0240 Rev.2.40 Page 28 of 29
5.10 R_FlashGetStatus uint8_t R_FlashGetStatus(void); FLASH_SUCCESS: FLASH_BUSY: r_flash_api_rx_if.h r_flash_api_rx.c BGO uint8_t ret; /* Blank check an entire data flash block. */ ret = R_FlashDataAreaBlankCheck(address, BLANK_CHECK_ENTIRE_BLOCK); while( R_FlashGetStatus() == FLASH_BUSY ) { /* Wait for previous operation to finish. You could also stall this task and do some real work. */ } R01AN0544JU0240 Rev.2.40 Page 29 of 29
5.11 R_FlashCodeCopy API ROM RAM void R_FlashCodeCopy(void); r_flash_api_rx_if.h r_flash_api_rx.c ROM ROM API ROM ROM RAM /* Transfer Flash API code to RAM so that we can program/erase ROM. */ R_FlashCodeCopy(); /* Flash API can now program/erase ROM. */ ROM API ROM 2.12 dbsct.c ROM dbsct.c API API RAM R01AN0544JU0240 Rev.2.40 Page 30 of 29
5.12 R_FlashGetVersion API uint32_t R_FlashGetVersion(void); API r_flash_api_rx_if.h r_flash_api_rx.c API 2 2 4.25 0x00040019 uint32_t cur_version; /* Get version of installed Flash API. */ cur_version = R_FlashGetVersion(); /* Check to make sure version is new enough for this application s use. */ if (MIN_VERSION > cur_version) { /* This Flash API version is not new enough and does not have XXX feature that is needed by this application. Alert user. */... } r_flash_api_rx.c R01AN0544JU0240 Rev.2.40 Page 31 of 29
6. API 7flash_api_rx_demo_main.c main() 6.1 HEW RSKRX62N RSKRX630 YRDKRX63N r_bsp HEW : 1. Flash_API_RX HEW Set as Current Project 2. r_bsp platform.h RSK+RX63N RSKRX63N #include R01AN0544JU0240 Rev.2.40 Page 32 of 29
8Hhttp://japan.renesas.com/ 9Hhttp://japan.renesas.com/inquiry R01AN0544JU0240 Rev.2.40 Page 33 of 29
Rev. 1.00 2010.01.27 1.20 2010.02.11 1.30 2010.03.05 RTE 1.40 2010.05.26 RX62x 1.41 2010.06.11 1.43 2011.02.18 blank check 2.00 2011.04.27 BGO 2.10 2011.07.11 RX630 RX631 RX63N DATA_FLASH_OPERATION_PIPL ROM_OPERATION_PIPL API R_FlashEraseRange() RX610 RS63x ROM 3.4 2.20 2012.03.27 r_bsp API R_FlashCodeCopy() 2.30 2012.09.12 F_FlashGetVersion() API r_bsp r_bsp ROM API R_FlashDataAreaBlankCheck 2.40 RX210 RX62G RX63T RX200 RX600 APIRX API 0xFF API API A-1
1. CMOS LSILSI 2. LSI 3. 4. 5.