RX65N版GR-CITRUSからFRAMをアクセスする


RX65N版GR-CITRUSとFRAMブレイクアウトボード

RX65N-2MBに貼り替えたGR-CITRUSのArduino環境を作成しているのですが、SPI経由のSDカードの通信がうまくいかないためSPI通信の確認がしやすそうなFRAMの組み合わせで通信を試みました。

Adafruit社がリリースされているArduino向けのサンプルコードがArduiuno UNO R3で動くことをまず確認しました。

続いてGR-CITRUS(RX65N-2MB)のWebコンパイラ環境で同ライブラリをコンパイルしたのですが、二点ハマるところがありました。

SPI.hの修正点

Adafruit_FRAM_SPI.cpp/hはAdafruit社が独自に作成したAdafruit_SPIDevice.cpp/hとlib下のSPI.cpp/hを両方とも参照するのですが、GR-ROSEのArduinoライブラリのSPI.hで存在自体が消されている関数transfer(引数が2つ版)を参照しておりエラーの原因となっていました。今回はSPIのアクセスで使用しないため空の関数としましたが、他のデバイスを使用した時に具体的に関数の内容の定義が必要となりそうです。

SPI.h
#ifndef __RX600__
  inline static void transfer(void *buf, size_t count) {
  //(略)
  }

//Add for GR-CITRUS_D (Adafruit lib need this  200523)
#else
  inline static void transfer(void *buf, size_t count) {
    /*
    */
  }
#endif //__RX600__

Adafruit_SPIDevice.hの修正点

こちらは難しくないのですが、マイコンのdefineでMSB/LSBFIRSTの記述が切り替えられている箇所でルネサスのMCUの定義がないためエラーとなります。下記の定義を追加すればいいのですが、後発のSONYのSPRESENSEの定義が普通にあるのでこの辺は企業努力の差が出ています。

Adafruit_SPIDevice.h(記述追加)
typedef enum _BitOrder {
  SPI_BITORDER_MSBFIRST = MSBFIRST,
  SPI_BITORDER_LSBFIRST = LSBFIRST,
} BitOrder;

感想

SPIの通信が確認できたためSCI,I2C,DIO,AIO含め各端子の機能確認は残すはIntのみとなりました。
FRAMでいえば大容量(4Mb程度)のFRAMのディスクリート版が近々出るということで、RX65Dと組み合わせた活用を考えていきたいところです。