ルネサスから提供されていたソースコードはいくつかあって、すでに公式では入手できないものもあるようです。
GR-CITRUSはusb_core.cなどのファイルを使ったRX62Nのサンプルソースを改修されたものが使われています。
オリジナルは公式サイトで見つからなかったのでwrbb-v2lib-firmから引っこ抜いてみました。
結構苦戦して4日くらいかかりました。
usb_hal.cに
#if GRSAKURA
assignPinFunction(PIN_IO32, 0x11, 0, 0);
assignPinFunction(PIN_IO34, 0x11, 0, 0);
#elif defined(GRCITRUS)
assignPinFunction(PIN_IO41, 0x11, 0, 0);
assignPinFunction(PIN_IO42, 0x11, 0, 0);
#else
#error "no target"
#endif
がなくて動かなくて苦労しました。たまたまArudinoのコードを眺めていて気が付きました。
この処理はRX62NにはなくてRX631で追加された機能のようです。
GR-CITRUSは各種サンプルソースを使いArduino互換のライブラリを用意して、その上にmrubyがのっかっているようです。
おそらくArudinoのライブラリはルネサスが作っていて、元になったRX631対応したusb_core.cなどは単体では公開されてなくて、社内のみで使われていた可能性もあります。
ルネサスのサンプルコードはオリジナルのCコンパラ用とgcc用があってgccではコンパイルできないこともしばしばあります。
xmodemを実装したところ、送り側で1バイト毎に1msのsleepを入れなと正しく動作しませんでした。oz_
GR-CITRUSではusb_hal.cのファンクションを入れ替えるHackが入っています。
PCからデータを送っているのにRX631側で読み込みをしないと不安定になるようです。