Renesas


Renesas Electronics Corporation (TSE: 6723), the world's number one supplier of microcontrollers, is a premier supplier of advanced semiconductor solutions including microcontrollers, SoC solutions and a broad range of analog and power devices.

GR PEACH knowhow database

Information

Japanese version is available in lower part of this page.
このページの後半に日本語版が用意されています.

[other]How to run a program stored in the internal SRAM

Access performance to internal SRAM is faster than access performance to serial flash memory. By placing the program in the internal RAM, it is possible to improve the program execution performance of GR-PEACH. The way to run a program stored in the internal SRAM is below:

  1. Delete mbed library.Then Import mbed-dev library.
    1. Select "mbed" library and delete it as shown below.
      /media/uploads/RyoheiHagimoto/delete-mbed.png
    2. Import mbed-dev library.

      Import librarymbed-dev

      mbed library sources. Supersedes mbed-src.

    3. Check "Update all libraries to the latest version".
    4. Get the source code by clicking "Import" button.
  2. Overwite or add following files of mbed-dev.
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/RZ_A1_Init.c … Beginning file (about line 29)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/gic.c … Beginning file (about line 36)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/mmu_Renesas_RZ_A1.c … Beginning file (about line 37)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/pl310.c … Beginning file (about line 36)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/system_MBRZA1H.c … Beginning file (about line 37)
    Add the following code.

#if defined ( __CC_ARM )
#pragma arm section code = "HANDLER"
#endif


- targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/TOOLCHAIN_ARM_STD/startup_MBRZA1H.S
Change the code as follows.

about line 129

AREA    |.text|, CODE, READONLY
↓
AREA    HANDLER, CODE, READONLY

line 212 and 213

LDR     R0, =InitMemorySubsystem
BLX     R0
↓
;LDR     R0, =InitMemorySubsystem
;BLX     R0


- targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/mmu_Renesas_RZ_A1.c
In the following code

about line 95-97

#if defined( __ICCARM__ )
#define VECTORS_SIZE    (((uint32_t)Image$$VECTORS$$Limit >> 20) - ((uint32_t)Image$$VECTORS$$Base >> 20) + 1)
#define RO_DATA_SIZE    (((uint32_t)Image$$RO_DATA$$Limit >> 20) - ((uint32_t)Image$$RO_DATA$$Base >> 20) + 1)

Add the following code on upper line of about line 95.

Add on the upper line of about line 95

#if 1 /* RAM Exe */
extern uint32_t Image$$RO_CODE$$Base;
extern uint32_t Image$$RO_CODE$$Limit;
#if defined( __ICCARM__ )
#define RO_CODE_SIZE    (((uint32_t)Image$$RO_CODE$$Limit >> 20) - ((uint32_t)Image$$RO_CODE$$Base >> 20) + 1)
#else
#define RO_CODE_SIZE    (((uint32_t)&Image$$RO_CODE$$Limit >> 20) - ((uint32_t)&Image$$RO_CODE$$Base >> 20) + 1)
#endif
#endif

In the following code

about line 199-211

#if defined( __ICCARM__ )
    //Define Image
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RO_DATA$$Base, RO_DATA_SIZE, Sect_Normal_RO);
   __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_DATA$$Base, RW_DATA_SIZE, Sect_Normal_RW);
   __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$ZI_DATA$$Base, ZI_DATA_SIZE, Sect_Normal_RW);
#endif

Add the following code on upper line of about line 199.

Add on the upper line of about line 199

#if 1 /* RAM Exe */
#if defined( __ICCARM__ )
    //Define Image
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$VECTORS$$Base, VECTORS_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RO_DATA$$Base, RO_DATA_SIZE, Sect_Normal_RO);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RO_CODE$$Base, RO_CODE_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RW_DATA$$Base, RW_DATA_SIZE, Sect_Normal_RW);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$ZI_DATA$$Base, ZI_DATA_SIZE, Sect_Normal_RW);
#else
    //Define Image
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$VECTORS$$Base, VECTORS_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RO_DATA$$Base, RO_DATA_SIZE, Sect_Normal_RO);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RO_CODE$$Base, RO_CODE_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_DATA$$Base, RW_DATA_SIZE, Sect_Normal_RW);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$ZI_DATA$$Base, ZI_DATA_SIZE, Sect_Normal_RW);
#endif
#else

Add the following code on lower line of about line 211.

Add on the lower line of about line 211

#endif


- targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/TOOLCHAIN_ARM_STD/MBRZA1H.sct
- targets/hal/TARGET_RENESAS/TARGET_RZ_A1H/mbed_overrides.c
Overwite or add the following file.
Packed zip file

Note

Program code is stored in address below. Do not allocate variables to these address.

0x20020000 - 0x200FFFFF


[other]How to change sct file in mbed online compiler

You can not edit scr file in mbed online compiler. Please import sct file by the way shown below.
/media/uploads/RyoheiHagimoto/import.png

  1. Click "import" button on mbed compiler.
  2. Click "Upload" tag.
  3. Click "browse" button, and select file to upload.
    /media/uploads/RyoheiHagimoto/import2.png
  4. Select file to import on mbed compiler.
  5. Click "Import!" button.

Note

  • Please use mbed-dev lib instead of mbed lib.
sct file path : targets\cmsis\TARGET_RENESAS\TARGET_RZ_A1H\TOOLCHAIN_ARM_STD\MBRZA1H.sct


  • Relationship of 60000000 address and 20000000 address(mirror address) are as follows.
AddressMirror address
H'20000000 - H'200FFFFFH'60000000 - H'600FFFFF
H'20500000 - H'205FFFFFH'60100000 - H'601FFFFF
H'20600000 - H'206FFFFFH'60200000 - H'602FFFFF
H'20100000 - H'201FFFFFH'60300000 - H'603FFFFF
H'20200000 - H'202FFFFFH'60400000 - H'604FFFFF
H'20700000 - H'207FFFFFH'60500000 - H'605FFFFF
H'20800000 - H'208FFFFFH'60600000 - H'606FFFFF
H'20300000 - H'203FFFFFH'60700000 - H'607FFFFF
H'20400000 - H'204FFFFFH'60800000 - H'608FFFFF
H'20900000 - H'209FFFFFH'60900000 - H'609FFFFF

If you compile by using ARMCC, GR-PEACH decleare H'60900000-H'609FFFFF as non-cache area.
If you change the scattter file and increase the non-cache area, you must be careful.
(If you compile by using GCC, GR-PEACH decleare H'20900000-H'209FFFFF as non-cache area.)
For more information, please refer to the Hardware manual.

[USB]How to change the USB Speed

You can switch Hi-Speed or Full-speed by the procedure below. (define 1:Hi-Speed, define 0:Full Speed)

USBHost

USBHost\USBHost\TARGET_RENESAS\TARGET_RZ_A1H\usb_host_setting.h

#define USB_HOST_HISPEED                      1
↓
#define USB_HOST_HISPEED                      0


USBDevice

\USBDevice\USBDevice\TARGET_RENESAS\TARGET_RZ_A1H\usb_function_setting.h

#define USB_FUNCTION_HISPEED                  1
↓
#define USB_FUNCTION_HISPEED                  0


[USB]How to use the USB1 function of GR-PEACH rev.C

You can use the USB1 connector by the procedure below.
(define 0:USB0、define 1:USB1)

USBHost

USBHost\USBHost\TARGET_RENESAS\TARGET_RZ_A1H\usb_host_setting.h

#define USB_HOST_CH                           0
↓
#define USB_HOST_CH                           1


USBDevice

\USBDevice\USBDevice\TARGET_RENESAS\TARGET_RZ_A1H\usb_function_setting.h

#define USB_FUNCTION_CH                       0
↓
#define USB_FUNCTION_CH                       1


Usable settings please refer to the following.

NoUSB0USB1usable
1HostDeviceOK
2DeviceHostOK
3HostHostNG
4DeviceDeviceNG

If you use the USB0 as USB Host, please close JP3.
If you use the USB1 as USB Host, please supply 5V to USB1 VBUS.
/media/uploads/RyoheiHagimoto/usb.jpg

[USB]USBHost Isochronous transfer

In board-dependent part of USBHost, GR-PEACH supports isochronous transfer.
USBHost library by mbed official does not support isochronous transfer.
If you use isochronous transfer, please import following library.

Import libraryUSBHost_AddIso

I added the Isochronous to USBHost library. The Isochronous code based on the following. http://developer.mbed.org/users/va009039/code/USBHostC270_example/


Two samples below are the sample of use of the library above.

  • USB camera
    This program converts the camera image in JPEG image, and save it to a USB flash memory. Note: USBHostC270 is the C270 dedicated driver.
    Note: This porgram set the baud rate of serial to 921600bps.
    Target device:C270

    Import programUSBHostC270_example_GR-PEACH

    supported GR-PEACH original: http://developer.mbed.org/users/va009039/code/USBHostC270_example/ The function of Isochronous has moved to USBHost_AddIso library.

  • USB DAC sample
    This program will play the file with the extension "abc" in the root directory of the USB flash memory.
    (This program supports only file with RIFF format, 48kHz, 16bit, and 2ch.)
    Target device:BSHSAU01BK

    Import programUSBHostDac_example

    This sample will play a ".wav" file of the USB root folder. Only RIFF format, 48kHz, 16bit, 2ch.






[other]内蔵RAMに格納されたプログラムを実行する方法

プログラムを、GR-PEACH標準のシリアルフラッシュメモリよりもアクセス性能の良い内蔵RAMに配置することで、GR-PEACHのプログラム実行性能を向上させることができます。

  1. mbedライブラリを削除し、mbed-devライブラリをimportしてください
    1. mbedライブラリを選択して削除して下さい.
      /media/uploads/RyoheiHagimoto/delete-mbed.png
    2. mbed-devライブラリをimportしてください.

      Import librarymbed-dev

      mbed library sources. Supersedes mbed-src.

    3. "Update all libraries to the latest version"にチェックを入れてください
    4. "Import" ボタンをクリックしてください
  2. 以下に示すmbed-dev内のファイルを変更または追加してください
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/RZ_A1_Init.c … ファイル冒頭(29行目辺り)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/gic.c … ファイル冒頭(36行目辺り)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/mmu_Renesas_RZ_A1.c … ファイル冒頭(37行目辺り)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/pl310.c … ファイル冒頭(36行目辺り)
    - targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/system_MBRZA1H.c … ファイル冒頭(37行目辺り)
    以下のコードを追記してください。

#if defined ( __CC_ARM )
#pragma arm section code = "HANDLER"
#endif


- targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/TOOLCHAIN_ARM_STD/startup_MBRZA1H.S
以下のようにコードを変更してください。

129行目辺り

AREA    |.text|, CODE, READONLY
↓
AREA    HANDLER, CODE, READONLY

212,213行目

LDR     R0, =InitMemorySubsystem
BLX     R0
↓
;LDR     R0, =InitMemorySubsystem
;BLX     R0


- targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/mmu_Renesas_RZ_A1.c
95~97行目辺りにある以下のコードにて

#if defined( __ICCARM__ )
#define VECTORS_SIZE    (((uint32_t)Image$$VECTORS$$Limit >> 20) - ((uint32_t)Image$$VECTORS$$Base >> 20) + 1)
#define RO_DATA_SIZE    (((uint32_t)Image$$RO_DATA$$Limit >> 20) - ((uint32_t)Image$$RO_DATA$$Base >> 20) + 1)

95行目辺りの上に以下のコードを追加してください。

95行目辺りの上に追加

#if 1 /* RAM Exe */
extern uint32_t Image$$RO_CODE$$Base;
extern uint32_t Image$$RO_CODE$$Limit;
#if defined( __ICCARM__ )
#define RO_CODE_SIZE    (((uint32_t)Image$$RO_CODE$$Limit >> 20) - ((uint32_t)Image$$RO_CODE$$Base >> 20) + 1)
#else
#define RO_CODE_SIZE    (((uint32_t)&Image$$RO_CODE$$Limit >> 20) - ((uint32_t)&Image$$RO_CODE$$Base >> 20) + 1)
#endif
#endif

また、199~211行目辺りにある以下のコードにて

199~211行目辺り

#if defined( __ICCARM__ )
    //Define Image
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RO_DATA$$Base, RO_DATA_SIZE, Sect_Normal_RO);
   __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_DATA$$Base, RW_DATA_SIZE, Sect_Normal_RW);
   __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$ZI_DATA$$Base, ZI_DATA_SIZE, Sect_Normal_RW);
#endif

199行目の上にコードを追加してください。

199行目辺りの上に追加

#if 1 /* RAM Exe */
#if defined( __ICCARM__ )
    //Define Image
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$VECTORS$$Base, VECTORS_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RO_DATA$$Base, RO_DATA_SIZE, Sect_Normal_RO);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RO_CODE$$Base, RO_CODE_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$RW_DATA$$Base, RW_DATA_SIZE, Sect_Normal_RW);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)Image$$ZI_DATA$$Base, ZI_DATA_SIZE, Sect_Normal_RW);
#else
    //Define Image
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$VECTORS$$Base, VECTORS_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RO_DATA$$Base, RO_DATA_SIZE, Sect_Normal_RO);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RO_CODE$$Base, RO_CODE_SIZE, Sect_Normal_Cod);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_DATA$$Base, RW_DATA_SIZE, Sect_Normal_RW);
    __TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$ZI_DATA$$Base, ZI_DATA_SIZE, Sect_Normal_RW);
#endif
#else

211行目の下にコードを追加してください。

211行目辺りの下に追加

#endif


- targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/TOOLCHAIN_ARM_STD/MBRZA1H.sct
- targets/hal/TARGET_RENESAS/TARGET_RZ_A1H/mbed_overrides.c
以下のファイルを上書きまたは追加してください。
Packed zip file

注意:

RAM実行時、以下のRAM領域はコード領域となります。
変数などのデータは配置しないでください。

0x20020000 - 0x200FFFFF


[other]sctファイルの変更方法

sctファイルはmbedコンパイラ上で編集することができません。以下の手法でインポートしてください。
/media/uploads/RyoheiHagimoto/import.png

  1. mbed compiler 上で 「import」をクリックします
  2. 「Upload」タグをクリックします
  3. 「参照」をクリックし、アップロードするファイルを選択します
    /media/uploads/RyoheiHagimoto/import2.png
  4. mbed compiler上でインポートするファイルを選択します
  5. 「Import!」ボタンをクリックします

注意:

  • mbed libの代わりにmbed-dev libを使用してください。
sct file path : targets\cmsis\TARGET_RENESAS\TARGET_RZ_A1H\TOOLCHAIN_ARM_STD\MBRZA1H.sct


  • 20000000番地とミラーアドレスである60000000番地の関係は以下のようになっております。
アドレスミラーアドレス
H'20000000 - H'200FFFFFH'60000000 - H'600FFFFF
H'20500000 - H'205FFFFFH'60100000 - H'601FFFFF
H'20600000 - H'206FFFFFH'60200000 - H'602FFFFF
H'20100000 - H'201FFFFFH'60300000 - H'603FFFFF
H'20200000 - H'202FFFFFH'60400000 - H'604FFFFF
H'20700000 - H'207FFFFFH'60500000 - H'605FFFFF
H'20800000 - H'208FFFFFH'60600000 - H'606FFFFF
H'20300000 - H'203FFFFFH'60700000 - H'607FFFFF
H'20400000 - H'204FFFFFH'60800000 - H'608FFFFF
H'20900000 - H'209FFFFFH'60900000 - H'609FFFFF

GR-PEACHではARMCCでコンパイルする場合、H'60900000 - H'609FFFFFを非キャッシュ領域として宣言しております。
sctファイルを変更して非キャッシュ領域を増やす場合には、注意が必要です。
(GCCでコンパイルする場合、H'20900000 - H'209FFFFFを非キャッシュ領域として宣言しております)
詳細はハードウェアマニュアルを参照下さい。

[USB]USB Speedの切り替え

以下の手順でHi-SpeedとFull Speedの切り替えができます。
(define 1:Hi-Speed、define 0:Full Speed)

USBHost

USBHost\USBHost\TARGET_RENESAS\TARGET_RZ_A1H\usb_host_setting.h

#define USB_HOST_HISPEED                      1
↓
#define USB_HOST_HISPEED                      0


USBDevice

\USBDevice\USBDevice\TARGET_RENESAS\TARGET_RZ_A1H\usb_function_setting.h

#define USB_FUNCTION_HISPEED                  1
↓
#define USB_FUNCTION_HISPEED                  0


[USB]rev.Cボード USB 2ポート設定方法

以下の手順で使用するUSBのポートを指定できます。
(define 0:USB0、define 1:USB1)
注意:rev.Cボードのみの機能です。rev.B以前のボードではUSBポートの変更はできません。

USBHost

USBHost\USBHost\TARGET_RENESAS\TARGET_RZ_A1H\usb_host_setting.h

#define USB_HOST_CH                           0
↓
#define USB_HOST_CH                           1


USBDevice

\USBDevice\USBDevice\TARGET_RENESAS\TARGET_RZ_A1H\usb_function_setting.h

#define USB_FUNCTION_CH                       0
↓
#define USB_FUNCTION_CH                       1


Host、Deviceの組み合わせは下記を参照ください。

NoUSB0USB1設定可否
1HostDevice可(OK)
2DeviceHost可(OK)
3HostHost不可(NG)
4DeviceDevice不可(NG)

USB0をUSB Hostとして使用する場合はJP3をcloseしてください。
USB1をUSB Hostとして使用する場合はUSB1 VBUSに5Vを供給してください。
/media/uploads/RyoheiHagimoto/usb.jpg

[USB]USBHost アイソクロナス転送

USBHostのボード依存部において、アイソクロナス転送に対応しています。
mbedオフィシャルのUSBHostではアイソクロナス転送のインターフェースが存在しないため、以下のライブラリをご用意しました。

Import libraryUSBHost_AddIso

I added the Isochronous to USBHost library. The Isochronous code based on the following. http://developer.mbed.org/users/va009039/code/USBHostC270_example/


また、上記ライブラリの使用例として、USBカメラとUSB Dacのサンプルを公開しました。

  • USBカメラサンプル
    カメラの画像をjpegに変換し、USBメモリに保存します。
    注意:USBHostC270はc270専用ドライバです。
    注意:printfを表示させるためには、PCとのシリアルポート ボー・レートを921600に変更する必要があります。
    動作確認デバイス:c270

    Import programUSBHostC270_example_GR-PEACH

    supported GR-PEACH original: http://developer.mbed.org/users/va009039/code/USBHostC270_example/ The function of Isochronous has moved to USBHost_AddIso library.

  • USB Dacサンプル
    USBルートフォルダにある拡張子".wav"のファイルを再生します。(RIFF形式、48kHZ、16bit、2chのみ対応)
    動作確認デバイス:BSHSAU01BK

    Import programUSBHostDac_example

    This sample will play a ".wav" file of the USB root folder. Only RIFF format, 48kHz, 16bit, 2ch.