WinbondさんのSample ShieldをGR-LYCHEEで動かしてみた / I tried Winbond's Sample Shield with GR-LYCHEE

B3c7199a1790cec8ddad60984c740e40?s=47 d-kato
October 27, 2018

WinbondさんのSample ShieldをGR-LYCHEEで動かしてみた / I tried Winbond's Sample Shield with GR-LYCHEE

mbed祭り 2018@秋の虎ノ門「WinbondさんのSample ShieldをGR-LYCHEEで動かしてみた」のスライドです。

B3c7199a1790cec8ddad60984c740e40?s=128

d-kato

October 27, 2018
Tweet

Transcript

  1. © 2017 Renesas Electronics Corporation. All rights reserved. ルネサス エレクトロニクス株式会社

    Winbondさんの Sample Shieldを GR-LYCHEEで動か してみた
  2. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE ページ 2 自己紹介 名前 :加藤 大樹(かとう だいき) 勤務先 :ルネサスエレクトロニクス株式会社 仕事内容:Mbed用ソフト整備、がじぇるね活動 など Mbed歴:4年 Mbedマイページ:https://os.mbed.com/users/dkato/ GitHubマイページ:https://github.com/d-kato
  3. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE ページ 3 いつもは GR-PEACH を使って発表するのですが.. GR-PEACH Control USB(HID) Image RGB DVI Image Resolution 720p DVi-Board USB Hub USB(Hub) 本日は後半のデモのため、PCを使用します。 小型版のデモを展示コーナーでご紹介しています。
  4. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE ページ 4 GR-PEACHを使ったプレゼン発表 小型版 GR-PEACH Image LVDS 4.3 inch LCD Shield JPEG microSD Control USB(HID) GR-LYCHEE 非接触USBマウスとして使用 PCにも接続可能 microSD内のJPEGデータを ハード機能で高速デコード GR-PEACH専用Shieldで綺麗に 描画 タッチ操作も可能 カメラに向かって手を左右に動かすとページをめくることができます。 展示中のデモ
  5. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE WINBONDさんのSAMPLE SHIELDを GR-LYCHEEで動かしてみた
  6. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE WinbondさんからShieldをいただきました Winbondさんより Arduino UNO form-factor で使用できる Flash Memory Sample Shield をいただきました。 4種類のフラッシュメモリが搭載されており、切り替えはジャンパーで行います。 通信はSPIです。WinbondさんのWebページに「NUCLEO-F411RE」向けのサ ンプルプログラムが公開されています。(GR-LYCHEEもそのままで動作します)
  7. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE GR-LYCHEEで何か作ろう ▪ファイルシステム経由でフラッシュメモリにアクセスしたい ▪PC上からフラッシュメモリ内を簡単に書き換えられるようにしたい ▪GR-LYCHEE 特有の機能も追加したい GR-LYCHEE ×
  8. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE ファイルシステム経由でアクセスする
  9. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE ファイルシステム使ってますか? Mbedボードでファイルシステムを使用 するのはとても簡単です。 ブロックデバイス (データ転送をブロッ ク単位で行う装置) を ファイルシステム にマウントすることで、C言語の標準関数 によるファイルを操作が可能となります。 “fopen()”、“fclose()”、“fread()”、 “fwite()” 、“fseek()”、“fprintf()” など #include "mbed.h" #include "FATFileSystem.h" #include "SDBlockDevice.h" int main() { SDBlockDevice sd(mosi, miso, clk, cs); FATFileSystem fs("bd"); fs.mount(&sd); // ココ! // 以降、ファイルアクセスが可能 FILE * fp = fopen("/bd/test.txt", "a"); if (fp != NULL) { fprintf(fp, "Hello World!¥r¥n"); fclose(fp); } }
  10. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE Mbedで使えるブロックデバイス Mbed OS 5.10.0 より新たに3つの ブロックデバイス が使用できるようになり ました。 クラス名 接続対象 SDBlockDevice SDカードとeMMC。(sd-driver から mbed-os に引っ越し) HeapBlockDevice ヒープメモリ。 USBHostMSD USBメモリ。(GR-PEACH & GR-LYCHEE 用ライブラリ) SPIFBlockDevice SFDPをサポートするNORベースのSPIフラッシュ。 DataFlashBlockDevice DataFlashプロトコルをサポートするNORベースのSPIフラッシュ。 FlashIAPBlockDevice Mbedボード上のシリアルフラッシュ。 new new new 新しく追加された SPIFBlockDevice が Sample Shield にそのまま使えます。 新機能の FlashIAPBlockDevice も使ってみることにしました。
  11. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE 機能の有効化 新しい ブロックデバイス を有効にするには“mbed_app.json”を編集します。 ※ ボードによっては、mbed-os 内の設定にて予め有効になっているものもあります。 { "target_overrides": { "*": { "target.components_add": ["SPIF", "FLASHIAP"] } } } mbed_app.json
  12. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE SPIFBlockDeviceを使ってみる #include "mbed.h" #include "FATFileSystem.h" #include "SPIFBlockDevice.h" int main() { SPIFBlockDevice spif_bd(D11, D12, D13, D10, 32000000); // SPIF クロックは32MHz FATFileSystem::format(&spif_bd); // 初回のみフォーマットが必要 FATFileSystem fs("bd"); fs.mount(&spif_bd); // 以降、ファイルアクセスが可能 ・・・省略・・・ } ブロックデバイス を入れ替えるだけで使用できます。但し、初回はフォーマット が必要です。
  13. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE FlashIAPBlockDeviceのコンストラクタ シリアルフラッシュの前半はプログラム領域として使用しているため、今回スト レージとして使用するのは、先頭から1MB以降のアドレスとします。 FlashIAPBlockDeviceのコンストラクタには開始アドレスを指定できるものも ありますが、Mbed OS 5.10.1ではまだ使えません。⇒ ユーティリティを使う class FlashIAPBlockDevice : public BlockDevice { public: /** Creates a FlashIAPBlockDevice **/ FlashIAPBlockDevice(); MBED_DEPRECATED("Please use default constructor instead") FlashIAPBlockDevice(uint32_t address, uint32_t size = 0); GitHub上の最新リポジトリでは 使用できるようになっているが、 現在リリースされている5.10.1 では使用できない。
  14. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE ブロックデバイスのユーティリティ ベースとなるブロックデバイスと組み合わせて使用することで、さまざまな機能 を付加することできます。 クラス名 機能 SlicingBlockDevice 独立して使用できる小さなブロックデバイスに分割。 ChainingBlockDevice 複数のブロックデバイスを連結し、ストレージ容量を拡張。 MBRBlockDevice MBR(Master Boot Record)を使用してパーティションを作成。 ReadOnlyBlockDevice 書き換え禁止。 ProfilingBlockDevice 消去、書き込み、読み取り の操作の量を記録する。 ObservingBlockDevice 消去、書き込み の操作時にコールバックを通知する。 ExhaustibleBlockDevice 摩耗をシミュレート。必要に応じてブロックを期限切れに設定。 詳しく知りたい方は https://github.com/ARMmbed/mbed-os-example-blockdevice
  15. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE FlashIAPBlockDeviceを使ってみる #include "mbed.h" #include "FATFileSystem.h" #include "FlashIAPBlockDevice.h" #include "SlicingBlockDevice.h" int main() { FlashIAPBlockDevice flashiap_bd_base; // ベースとなるブロックデバイス SlicingBlockDevice flashiap_bd(&flashiap_bd_base, // ユーティリティを使って分割 0x100000, 0x800000); // アドレス 1MB以上~8MB未満 FATFileSystem::format(&flashiap_bd); // 初回のみフォーマットが必要 FATFileSystem fs("bd"); fs.mount(&flashiap_bd); // 以降、ファイルアクセスが可能 ・・・省略・・・ }
  16. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE 【小ネタ】バッファリングの有無 “fopen()” でファイルオープンすると 512byte※ のバッファが自動的に割り当 てられます。ブロックデバイス へのアクセスはこのバッファ単位で行われます。 ※ デフォルトのバッファサイズはコンパイラに依存します。ARMCC や GCC_ARM は 512byte です。 バッファサイズは “setvbuf()” で変更可能で、バッファリング無しに設定する こともできます。一度に大量のデータを読み書きする場合、ブロックデバイス に よってはバッファリング無し(分割無し)の方が高速にアクセスできることがあり ます。 FILE * fp = fopen("/bd/test.txt", "r"); setvbuf(fp, NULL, _IONBF, 0); // unbuffered
  17. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE PC上からファイルを読み書きする
  18. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE USB Device を先行お試し 今後、Mbed OS に追加される予定の USB Device の USBMSDクラス を使用 すると、PC上からUSBメモリのようにアクセスできるようになります。 #include "mbed.h" #include "SPIFBlockDevice.h" #include "USBMSD.h" int main() { SPIFBlockDevice spif_bd(D11, D12, D13, D10, 32000000); USBMSD usb(&spif_bd); while (true) { usb.process(); } }
  19. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE ユーティリティでファイル書き換えを検出 クラス名 機能 ObservingBlockDevice 消去、書き込み の操作時にコールバックを通知する。 #include "ObservingBlockDevice.h" void storage_change(BlockDevice * p_bd) { // ファイルの削除や書き込みが発生するとコールされる } int main() { SPIFBlockDevice spif_bd(D11, D12, D13, D10, 32000000); ObservingBlockDevice observing_bd(&spif_bd); // ブロックデバイスを設定 observing_bd.attach(&storage_change); // コールバック関数を登録 USBMSD usb(&observing_bd); // ObservingBlockDeviceを設定 ・・・省略・・・ }
  20. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE GR-LYCHEE っぽさを追加
  21. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE 追加する機能 ▪内蔵メモリが3MBのうち1MBをHeapBlockDeviceとして使用します。 リセット毎にデータは忘れてしまいますが、高速アクセスが可能です。 ▪SDカードとUSBメモリをブロックデバイスとして追加します。 PCからデータを書き換えるとデバイス内のデータも書き変わります。 ▪ボタンが押されるとブロックデバイスが切り替わるようにします。 ▪ストレージにWAVファイルが書き込まれた際は再生するようにします。 再生中にストレージ内が書き変わった際は、再生を中断し再マウントします。
  22. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE 完成したもの ブロックデバイスを切替 PCからストレージの読み 書きが可能 ストレージが書き変わる とファイルシステムを再 マウントする ストレージ内に wavファイルが あれば再生する https://github.com/d-kato/GR-LYCHEE_Switching_BlockDevice Sample Shield を持っ ていない場合は機能を OFFにできる SPIF⇒FlashIAP⇒ Heap⇒SD⇒USB⇒戻る SPIF、FlashIAP、Heap、SDカード、 USBメモリをブロックデバイスとし て使用する
  23. © 2017 Renesas Electronics Corporation. All rights reserved. BIG IDEAS

    FOR EVERY SPACE Renesas.com