「RX」カテゴリーアーカイブ

ルネサスRX66T(その1)

ルネサスRXマイコンを購入する場合、自分の場合「チップワンストップ」がほとんどで、他ではほぼ買わない(値段が一番安く、種類が豊富、個数割引もあるので)。

RX66Tは、発表されてからかなりたつものの、未だにチップ単体での販売はされていない。

ところが、ツイッターで「RX66TでLチカした」とゆーツイートを見つけた・・
※変換基板だったので、デバイス単体で入手したようだった。
ツイートした人はマイクロマウスをやってる人のようで、「どうやって入手したの?」と聞いたが連絡は取れず、色々調べたら「RSコンポーネンツ」で販売している事を見つけた。
1個900円と少し高いと思ったが、早く試してみたかったので、早速1個購入した。
※それにRXマイコンも10周年らしぃのでw
※現在(4月9日)、ルネサスのHPでも、RX66Tの販売先としてはどこも登録されていない。
※次の日には届いて、変換基板にハンダ付け。
※購入した型番は「R5F566TEBDFP」で、PGA 差動入力なし、USB なし、100 ピン、プログラムフラッシュ 512K、RAM 64K、データフラッシュ 32K

早速、変換基板に取り付け

写真のハンダ付けはちょっと汚いが、一応ブリッジや接触不良は無いものと思う。(よく確認した)
いつものように「直付」する為、裏側をカプトンテープで保護する。

ユニバーサル基板に直接乗せ、ガイドとして、適当なヘッダーピンを刺しておき、対角のピンにハンダを流して、変換基板と、下のユニバーサル基板を固定する。
後は、電源ライン、MD端子、クリスタル関係、リセットSW、シリアルラインなど、最低限必要な線だけ配線する。


  • (20) PD5/RXD1 <--- TXD (USB Serial)
  • (22) PD3/TXD1 ---> RXD (USB Serial)
  • (6) MD L:Boot、H:Run
  • (1) /RES
  • (5) VCL GND 間に 0.47uF
  • (11) XTAL 10MHz、GND間に 8pF
  • (13) EXTAL 10MHz、GND間に 8pF
  • (2) EMLE 4.7K で プルダウン(エミュレーターイネーブル)
  • (15) PE2/NMI 10K でプルアップ

rxprog も、RX66T 用にプロトコルを追加して、LED 点滅は直ぐに動作した。
RX66T関係のデバイス定義は、発表と同時くらいに、ハードウェアーマニュアルをダウンロードして、実装していたので、ソフトの準備はそれなりに出来ていた。
RX66T の内部構成は、RX24T よりRX64M 系に近い。
今回入手したデバイスは、USB は内臓していないバージョンだが、ラインナップには USB 付きもある、その場合、内臓クロックは12の倍数にする必要があり、144MHz 動作になってしまうと思う(最高速は160MHzなので少しもったいない)。

static void micro_second(uint32_t us)
{
    while(us > 0) {
#if defined(SIG_RX64M) || defined(SIG_RX63T) || defined(SIG_RX71M)
        for(uint32_t n = 0; n < (F_ICLK / 4285714); ++n) {
            asm("nop");
        }
#elif defined(SIG_RX65N)
        for(uint32_t n = 0; n < (F_ICLK / 4444444); ++n) {
            asm("nop");
        }
#elif defined(SIG_RX24T)
        for(uint32_t n = 0; n < (F_ICLK / 4444444); ++n) {
            asm("nop");
        }
#elif defined(SIG_RX66T)
        for(uint32_t n = 0; n < (F_ICLK / 3346666); ++n) {
            asm("nop");
        }
#else
#  error "delay.hpp requires tune dummy operations"
#endif
        --us;
    }
}

RX66T は、RXv3 コアとなっており、実測による簡単なソフトループだが、今までのRXコアより15~20%くらい速いようだ。
※同じバイナリーでこれだけ高速なのは、驚くべき性能だと思う。
※ちゃんとしたベンチマークは後ほど行う予定

現在の問題として、フラッシュプログラム中に停止する症状がある。
これは、原因を特定出来ていない・・・
とりあえず、rx_prog.conf のシリアル速度を、230400から115200に落としたら、多少安定して書き込めるようなので、当面そうしておく。
※RX64M、RX71M、RX24T では、問題無いのだが・・・

とりあえず
FIRST_sample/RX66T(LED 点滅)
SCI_sample/RX66T(シリアル通信)
は、動作する事を確認した。

※RX66T では、SCI のベースクロックは、PCLKBを利用するが、このクロックの最大は60MHzで、内臓クロックを160MHzで動かす場合、最大では40MHzとなる。


フラッシュ書き込み時にハングアップする原因が判ったと思う。
RX66Tでは、EMLE端子が増設された、「1」でエミュレーターイネーブルなので、とりあえずGNDに落としておいたが、これが原因のようだ、4.7Kでプルダウンしたら、安定して書き込めるようになった。
多分、フラッシュ書き込み時などに一瞬出力になる場合があるのだろう・・
※ボーレートは関係無かった。

Makefile 、環境毎の違いを補正

既に、「glfw_app」などで行っていたのだが、RXマイコンの開発環境でも、boost を使うようになった為、Makefile の修正を行った。
※プロジェクトの数が多いので、主要な部分のみ行った。

boost は、パッケージマネージャーでインストールするのが標準的となったので、環境毎にパスを追加で指定しなければならない。
そこで、以下のようなスクリプトで、環境を識別して、内部変数を設定している。

# Include path for each environment
ifeq ($(OS),Windows_NT)
SYSTEM := WIN
LOCAL_PATH  =   /mingw64
else
  UNAME := $(shell uname -s)
  ifeq ($(UNAME),Linux)
    SYSTEM := LINUX
    LOCAL_PATH = /usr/local
  endif
  ifeq ($(UNAME),Darwin)
    SYSTEM := OSX
    OSX_VER := $(shell sw_vers -productVersion | sed 's/^\([0-9]*.[0-9]*\).[0-9]*/\1/')
    LOCAL_PATH = /opt/local
  endif
endif

INC_SYS     =   $(LOCAL_PATH)/include

これで、Windows(MSYS2)、Linux、OS-Xの違いを識別して、適切な「パス」を設定できる。
OS-X では、OS のバージョンも抜き出している。

他、emacs を起動した場合の TAB を強制的に指示する為、以下の「おまじない」をファイルの先頭に追加した。

# -*- tab-width : 4 -*-

さらに、既に2019年だが、今まで「C++14」を指定していたコンパイルオプションを「C++17」に変更しておいた。

PFLAGS      =   -std=c++17 $(CP_OPT) $(OPTIMIZE) $(MCU_TARGET) $(DEFS)

github のREADMEを英語ベースにする試み・・

最近、VSCodeでマークダウンを編集している。
これが、凄く快適で、画面をスプリットして、リアルタイムに描画イメージを確認しながら作業出来る。

そんな事もあって、トップページの README を英語にして、日本語はリンクにしてみた。
自分、英語が得意では無いので、翻訳は、Google 先生にほぼお任せ状態で、ネィティブな人には、かなり痛い英語かもしれない。
まぁ、無いよりはマシ程度と考えている。

まだ、全部を翻訳していないが、順次追加していこうと思う。

VSCode にはマークダウンを PDF 化する拡張機能があり、これを使う事で、ブラウザ以外でも読めるファイルが作れる事から、RXマイコン関連の事や、ブログで書いた細かい話などをまとめた。

https://github.com/hirakuni45/RX/blob/master/docs/cpp_spin_rx_story.md

これもまだまだ未完成なので、今後加筆修正していこうと思う。

Visual Studio Code を使う為の設定

自分は、マルチプラットホームにこだわりがあり、色々な異なった環境でも同じような操作性を提供できる事に注目している。

Visual Studio Code は、マイクロソフトのオープンソースによるもので、アプリケーションとしてはテキストエディターだが、単なる文書を書くだけではない、色々な拡張機能を追加でき、カスタマイズ出来る点で大きな広がりがある。
拡張機能は、emacs が先人でもあるが、emacs がスタートした時代は古く、VSC は最近の「流行」を取り入れて斬新な物になっている、emacs を現代風に作り直したアプリケーションとも言えると思う。
※emacs は Lisp だが、VSCは Json なので、より多くの人に受け入れやすい。

「創作活動のほとんどは、文書を作る動作が起点になっている。」と言う事実に改めて気がつく。

既に多くの人が、VSC を利用した拡張機能をリリースしており、自分で新規に作らなくても、インストールして利用する事が出来る。
また、VSC の設定方法や Tips など豊富にある、ただ、目的の機能を実現する方法は複数(無限)あり、VSC のバージョンとも関連するので、シンプルな方法を選んで取り込む必要がある。

自分が VSC で感激した点:
・拡張機能が豊富で、検索してインストールする事がコンビニエンス。
・Git と連携していて、git で行う操作を標準で色々行える、git 用フロントエンドアプリを使うより強力で判りやすく便利かもしれない。
・Markdown 形式を標準でサポートしており、プレビューしながら記述出来る。
※拡張機能を入れると PDF 化する事も出来る。
・Terminal 機能があり、MSYS2 の bash などを呼び出して使う事が出来る。
・C++ では非常に有能なインテリセンスが使える。
※インクルードパスの設定が重要
・プラットホーム毎の「固有」設定が出来る。
・比較的軽い。

それでも、小躍りする前に事前の調査が重要、「道具」類は、良さそうと思って使ってみても、細かいとこで気に入らない事も多い。
少し使ってみて、「何だコレ!」って思った事もあったけど、やはり「短所」より「長所」が勝っており、将来性を考えたら、コレを使わない理由が無い事に気がつく。

今まで emacs を中心に使ってきた、ただ、積極的に Lisp を使う気になれなくて、ほぼコードを書くだけで使っていた。
※知り合いは、自分で Lisp を書いて、自分の欲しい環境を色々実装している。
それを横目で観ていて、自分もやってみたいと思っていたが、もう少しハードルを下げた方法は無いのかとも思っていた。

最近の VSC では、「ワークスペース」と言う概念を使う事ができる点で、異なった環境を柔軟に切り替える事が出来る。
※以前は、フォルダーのルートを指定するシンプルな物だったが、それを少し拡張して、複数フォルダーに関連するファイル郡を一括して扱う事が出来るようになった。
「ワークスペース」では、設定が書かれた専用ファイルを開く事から始めるので、固有の設定を取り込む事が出来る。

まずインストール。
MSYS2 は現状でも、ツールの中心なので、インストールする、詳しい方法は、https://github.com/hirakuni45/RX を参照の事。
※MSYS2 は MinGW とは異なったアプリケーションなので、必ずMSYS2 を使うように。

・Terminal で MSYS2 の bash が起動出来るようにする設定、「settings.json」を編集して、以下のように追加しておく。
※「settings.json」の直接編集の正しい方法は「ぐぐって」もらうとして、自分の場合は、
「設定」などで、「settings.json で編集」などのリンクがあるので、それをクリックして編集している。
※キーワードを入れると候補が表示されるので判りやすい。

{
    "git.ignoreLegacyWarning": true,
    "git.autoRepositoryDetection": "subFolders",
    "C_Cpp.default.cppStandard": "c++14",
    "C_Cpp.default.cStandard": "c99",
    "files.autoSave": "afterDelay",
    "C_Cpp.default.intelliSenseMode": "gcc-x64",
    "C_Cpp.intelliSenseEngineFallback": "Disabled",
    // MSYS2 bash のパスと、起動設定
    "terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
    "terminal.integrated.env.windows": {
        "MSYSTEM": "MINGW64",
        "CHERE_INVOKING": "1"
    },
    "terminal.integrated.shellArgs.windows": [
        "--login"
    ],
    "terminal.integrated.cursorStyle": "line",
    "editor.renderWhitespace": "all"
}

※必要な部分のみコピーする場合は、「,」に注意

・拡張機能を入れよう~
※「拡張機能」ボタンを押して、検索ボックスでキーワードを入れれば、候補がリストされ、簡単にインストール出来る。

(1) C/C++ (Microsoft)
※自分は、マイクロソフトの物を入れているが、検索すると複数の物が見つかるので、自分の嗜好に合った物を使えば良いだろう。
※現段階で、gcc などでインテリセンスを機能させる設定が判っていない。

(2) Emacs Friendly Keymap
※とりあえず、キーバインドを Emacs 風にしている、vi や他のエディター用もあるし、自分でキーバインドを設定する事も出来る。
※VSCでは、「ESC」キーは別の意味で使われており、一般的な Emacs のメタキーとして利用するには反故が多いようだ。
なので、「M-v」は「ALT+v」として機能する、今まで「ESC」を使ってきたが、矯正する必要がありそうだ・・・
まぁ確かに、ESC を押してから v を押すより、ALT+v の方が利便性が高い。

(3) Japanese Language Pack for VS Code (Microsoft)
英語のメニューでも、そんなに困らないが、日本語の対応は流石に本家だけあって良く出来ている


最後はインテリセンスの設定だが、MSYS2 上の gcc g++、clang などで運用するには、もう少し調査が必要だと思う。

思いつくインクルードパスを設定しても、思ったように、インテリセンスが機能しない・・・

色々調べたが、何故思ったように機能しないかも不明で、WEBにある「こうすればおけー」と言った情報を見て、そのように設定してみたが、やはり駄目・・

何か特殊な設定をするのか、別の拡張機能を入れるのか、謎である・・・