IDE for GRにR5F100LJAFB/R5F100LGAFB/R5F100LEAFBのリンカスクリプトを追加してみた

秋月電子さんで販売されているGR-COTTONに搭載されているRL78/G13 64pinマイコンと同系のR5F100LJAFB/R5F100LGAFB/R5F100LEAFBのリンカスクリプトをIDE for GRに追加してみました。また、IDE for GRに同梱されているオープンソースソフトウェアのrl78flashというRL78マイコン内蔵FLASHメモリ書き込みツールのGitHubの最新版を使って、書き込み回路のタイプや書き込み時のボーレート、タイムスタンプ付きターミナル(シリアルモニタ)モードでの書き込み、などを選択出来るようにしてみました。






選択出来る書き込み回路のタイプは以下の通りです。ただし、これらはイメージ的なものですので、実際に組む回路では、インバータの変わりにスリーステートバッファやトランジスタを使用したり、オープンコレクタバッファの変わりにスリーステートバッファやトランジスタやダイオードを使用したり、といった機能的に等価なものを使用することが出来ます。同様に、抵抗値も同程度のもので代用することが出来ます。(部品箱のストック次第というところです。速い通信速度で通信エラーが発生した場合には通信速度を遅くすれば何とかなると思います。)




なお、IDE for GRに追加(幾つかは上書き)するファイルを以下のzipファイルに固めました。

IDE4GR-RL78G13_64pin_LJ_LG_LE_20170207.zip    50KB

ここでは以下について説明します。

(1) zipファイルの内容
(2) FT232RL使用上の注意点
(3) CP2102使用上の注意点
(4) 外部シリアルモニタウィンドウについて
(5) Arduino-1.8.1のBlinkサンプルを改造したコードサイズ100Kバイト超のスケッチ
(6) 参考リンク

詳細は以下の通りです。

(1) zipファイルの内容

zipファイルの内容は以下の通りです。

   
ide4gr-1.00\hardware\arduino\rl78_2\variants\gr_cotton\linker_scripts\rl78_R5F100LJAFB.ld 追加リンカスクリプト
ide4gr-1.00\hardware\arduino\rl78_2\variants\gr_cotton\linker_scripts\rl78_R5F100LGAFB.ld 追加リンカスクリプト
ide4gr-1.00\hardware\arduino\rl78_2\variants\gr_cotton\linker_scripts\rl78_R5F100LEAFB.ld 追加リンカスクリプト
ide4gr-1.00\hardware\arduino\rl78_2\variants\gr_cotton\linker_scripts\rl78_R5F100LCAFB.ld 未使用(RAMが不足)
ide4gr-1.00\hardware\arduino\rl78_2\boards.txt ボード情報ファイル
ide4gr-1.00\hardware\arduino\rl78_2\boards.txt.$ 変更前のファイル
ide4gr-1.00\hardware\arduino\rl78_2\platform.txt ボード情報ファイル
ide4gr-1.00\hardware\arduino\rl78_2\platform.txt.$ 変更前のファイル
ide4gr-1.00\hardware\tools\rl78\rl78flash_ex.bat 橋渡しバッチファイル
ide4gr-1.00\hardware\tools\rl78\rl78flash-0.6.0rc2-win32\README.md RL78FLASH説明書
ide4gr-1.00\hardware\tools\rl78\rl78flash-0.6.0rc2-win32\rl78flash.exe 実行ファイル
ide4gr-1.00\hardware\tools\rl78\rl78flash-0.6.0rc2-win32\rl78g10flash.exe 未使用(G10用)

(2) FT232RL使用上の注意点

FT232RLのWindowsドライバは以下のように設定しました。この設定では以下の表のようになります。


  FT232RLと
PCを
接続した時
IDE for GRで
書き込み
操作した後
IDE for GRの
シリアル
モニタ
起動中
外部
シリアル
モニタ
起動中
TeraTerm
接続中
書き込みに
使用可能な
プログラマ
ソフトウェア
2線,DTR#→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット* KurumiWriter
2線,RTS#→RES リセット リセット リセット リセット解除 リセット*  
2線,DTR#→反転→RES リセット リセット リセット リセット解除 リセット解除  
2線,RTS#→反転→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット解除  
1線,DTR#→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット*  
1線,RTS#→RES リセット リセット リセット リセット解除 リセット*  
1線,DTR#→反転→RES リセット リセット リセット リセット解除 リセット解除  
1線,RTS#→反転→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット解除 RFP

* : TeraTermマクロを作成することで接続時に自動的にリセットを解除させることは可能です。

このうちの 2線,RTS#→RES と 1線,RTS#→RES に関してはFT232RLのWindowsドライバを以下のように設定することにより、一応、IDE for GRからでもリセット解除することが出来るようになります。


  FT232RLと
PCを
接続した時
IDE for GRで
書き込み
操作した後
IDE for GRの
シリアル
モニタ
起動中
外部
シリアル
モニタ
起動中
TeraTerm
接続中
書き込みに
使用可能な
プログラマ
ソフトウェア
2線,DTR#→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット* KurumiWriter
2線,RTS#→RES リセット解除 リセット解除 リセット リセット解除 リセット*  
2線,DTR#→反転→RES リセット リセット リセット リセット解除 リセット解除  
2線,RTS#→反転→RES リセット リセット リセット解除 リセット解除 リセット解除  
1線,DTR#→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット*  
1線,RTS#→RES リセット解除 リセット解除 リセット リセット解除 リセット*  
1線,DTR#→反転→RES リセット リセット リセット リセット解除 リセット解除  
1線,RTS#→反転→RES リセット リセット リセット解除 リセット解除 リセット解除 RFP

* : TeraTermマクロを作成することで接続時に自動的にリセットを解除させることは可能です。

なお、いずれの場合も[BMオプション]の[待ち時間(msec)]をデフォルトの16から1へ変更していますが、このように設定することで書き込み時間が短くなったからという理由からです。

(3) CP2102使用上の注意点

CP2102ではWindowsドライバの設定はありません。動作は以下の表のようになります。なお、CP2102では最大ボーレートは921600ボーまでとなっているようです。

  CP2102と
PCを
接続した時
IDE for GRで
書き込み
操作した後
IDE for GRの
シリアル
モニタ
起動中
外部
シリアル
モニタ
起動中
TeraTerm
接続中
書き込みに
使用可能な
プログラマ
ソフトウェア
2線,DTR#→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット* KurumiWriter
2線,RTS#→RES リセット解除 リセット解除 リセット リセット解除 リセット*  
2線,DTR#→反転→RES リセット リセット リセット リセット解除 リセット解除  
2線,RTS#→反転→RES リセット リセット リセット解除 リセット解除 リセット解除  
1線,DTR#→RES リセット解除 リセット解除 リセット解除 リセット解除 リセット*  
1線,RTS#→RES リセット解除 リセット解除 リセット リセット解除 リセット*  
1線,DTR#→反転→RES リセット リセット リセット リセット解除 リセット解除  
1線,RTS#→反転→RES リセット リセット リセット解除 リセット解除 リセット解除 RFP

* : TeraTermマクロを作成することで接続時に自動的にリセットを解除させることは可能です。

(4) 外部シリアルモニタウィンドウについて

外部シリアルモニタウィンドウというのは、コマンドラインオプションでターミナル機能を使用するように指定してrl78flashを起動したWindowsのコンソールウィンドウのことです。書き込み時に毎回自動的にウィンドウが開きます。閉じるには、CTRL+Cキーを2回連続で押すか、右上の[×]ボタンをクリックします。




Windowsの通常のコンソールウィンドウと同様に、フォント、画面サイズや画面バッファーサイズ、表示位置、画面の色、カーソルのサイズ、などを設定することが出来ます。設定した内容はWindowsに記憶され、次にウィンドウが開く時にも同じ設定でウィンドウが開きます。




なお、rl78flashのターミナル機能ではタイムスタンプが付きます。(ちなみに、今のところ、付けないようにすることは出来ませんでした。) また、rl78flashのターミナル機能ではマイコン側からの受信だけでなくマイコンへの送信も行うことが出来ます。ただし、IDE for GR(というかArduino IDE)のような1行まとめての入力(送信)ではなく、TeraTermのような1文字ごとの入力(送信)になります。

(5) Arduino-1.8.1のBlinkサンプルを改造したコードサイズ100Kバイト超のスケッチ

Arduino-1.8.1のBlinkサンプルを何の気なしに見たところ、ふとLED_BUILTINというマクロが使われていることに気付きました。そこで、IDE for GRのボード情報ファイルboard.txtの設定でGNURL78のGCCのコマンドラインオプションに -DLED_BUILTIN=23 が追加されるようにしてみました。更に、そのBlinkサンプルにインラインアセンブラ記述を追加してコードサイズが100Kバイト超になるようにしてみました。スケッチとマップファイルは以下の通りです。

Blink.ino   2KB

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino model, check
  the Technical Specs of your board  at https://www.arduino.cc/en/Main/Products
 
  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
 
  modified 2 Sep 2016
  by Arturo Guadalupi
 
  modified 8 Sep 2016
  by Colby Newman
*/


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
  // for measuring the upload speed
  __asm("br !!padding_skip");
  __asm(".rept 0x1BBC");
  __asm(".byte 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF");
  __asm(".endr");
  __asm("padding_skip:");
}

Blink.cpp.map    150KB




(6) 参考リンク

RL78/G13 ユーザーズマニュアル メモリ空間
RL78ファミリ セルフプログラミングライブラリ セルフRAMリスト
RL78/G13 ユーザーズマニュアル 端子特性 内蔵プルアップ抵抗 P40/TOOL0 (MIN/TYP/MAX)
GR-COTTON回路図
GR-KURUMI回路図
RL78 RFP シリアルポート書き込み回路例
RL78 プログラマ編 プロトコルAアプリケーションノート
IDE for GRのダウンロードページ
rl78flashのダウンロードページ (GitHub)
秋月電子さんのRL78関連ページ (秋月電子通商)