test public

Dependencies:   HttpServer_snapshot_mbed-os

Committer:
anhtran
Date:
Fri Oct 18 03:09:43 2019 +0000
Revision:
0:e9fd5575b10e
abc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anhtran 0:e9fd5575b10e 1 # **Mbed GRボード用ライブラリ** mbed-gr-libs
anhtran 0:e9fd5575b10e 2 GR-PEACH、GR-LYCHEE、RZ/A2Mボード用のライブラリ群です。ライブラリには以下の機能が含まれます。
anhtran 0:e9fd5575b10e 3 * カメラとLCDの接続
anhtran 0:e9fd5575b10e 4 * USBメモリとSDカードの接続
anhtran 0:e9fd5575b10e 5 * キャッシュ制御
anhtran 0:e9fd5575b10e 6 * JPEG変換
anhtran 0:e9fd5575b10e 7 * RGAライブラリ (GR-PEACHのみ)
anhtran 0:e9fd5575b10e 8 * オーディオ再生
anhtran 0:e9fd5575b10e 9 * USBホスト
anhtran 0:e9fd5575b10e 10 * ESP32 ATコマンド用ライブラリ
anhtran 0:e9fd5575b10e 11 * DisplayApp (USB接続でPCディスプレイに画像表示)
anhtran 0:e9fd5575b10e 12 * ASCIIフォント
anhtran 0:e9fd5575b10e 13 * SDカードの通信速度
anhtran 0:e9fd5575b10e 14 * DRP (RZ/A2Mのみ)
anhtran 0:e9fd5575b10e 15
anhtran 0:e9fd5575b10e 16 ## カメラとLCDの接続
anhtran 0:e9fd5575b10e 17 ``EasyAttach_CameraAndLCD``を使うことで、カメラとLCDの接続を簡単に行うことができます。
anhtran 0:e9fd5575b10e 18 サンプルコード:[GR-Boads_Camera_LCD_sample](https://github.com/d-kato/GR-Boads_Camera_LCD_sample)
anhtran 0:e9fd5575b10e 19 詳細は [EasyAttach_CameraAndLCD/README.md](EasyAttach_CameraAndLCD/README.md) を参照ください。
anhtran 0:e9fd5575b10e 20
anhtran 0:e9fd5575b10e 21
anhtran 0:e9fd5575b10e 22 ## USBメモリとSDカードの接続
anhtran 0:e9fd5575b10e 23 ``SdUsbConnectクラス``を使うことで、USBメモリとSDカードの接続を簡単に行うことができます。
anhtran 0:e9fd5575b10e 24 両方のデバイスが挿入されている場合は、先に検出した方のデバイスに接続します。
anhtran 0:e9fd5575b10e 25 ```cpp
anhtran 0:e9fd5575b10e 26 #include "SdUsbConnect.h"
anhtran 0:e9fd5575b10e 27
anhtran 0:e9fd5575b10e 28 int main() {
anhtran 0:e9fd5575b10e 29 SdUsbConnect storage("storage");
anhtran 0:e9fd5575b10e 30
anhtran 0:e9fd5575b10e 31 // 接続待ち
anhtran 0:e9fd5575b10e 32 storage.wait_connect();
anhtran 0:e9fd5575b10e 33
anhtran 0:e9fd5575b10e 34 while (1) {
anhtran 0:e9fd5575b10e 35 // 接続確認
anhtran 0:e9fd5575b10e 36 if (!storage.connected()) { // 切断
anhtran 0:e9fd5575b10e 37 printf("disconnect\r\n");
anhtran 0:e9fd5575b10e 38 break;
anhtran 0:e9fd5575b10e 39 }
anhtran 0:e9fd5575b10e 40
anhtran 0:e9fd5575b10e 41 FILE * fp = fopen("/storage/test.txt", "rb");
anhtran 0:e9fd5575b10e 42 char buf[32];
anhtran 0:e9fd5575b10e 43 fread(buf, sizeof(char), 32, fp);
anhtran 0:e9fd5575b10e 44 printf("%s", buf);
anhtran 0:e9fd5575b10e 45 fclose(fp);
anhtran 0:e9fd5575b10e 46 }
anhtran 0:e9fd5575b10e 47 }
anhtran 0:e9fd5575b10e 48 ```
anhtran 0:e9fd5575b10e 49 サンプルコード:[GR-Boards_Audio_WAV](https://github.com/d-kato/GR-Boards_Audio_WAV)
anhtran 0:e9fd5575b10e 50
anhtran 0:e9fd5575b10e 51
anhtran 0:e9fd5575b10e 52 ## キャッシュ制御
anhtran 0:e9fd5575b10e 53 DMAを使用する際はキャッシュ制御を意識する必要があります。DMAは、Direct Memory Accessの略で、CPUを介さずにメモリにアクセスします。
anhtran 0:e9fd5575b10e 54 `buf[0] = 0x01;`や`memcpy(buf, data, 64)`など、CPUを使ったデータ書き込みを行う場合、通常は実メモリではなくキャッシュへの書き込みが行われます。
anhtran 0:e9fd5575b10e 55 この状態で`buf`のデータをDMAで転送しようとした場合、まだ実メモリには書き込みが行われていないため、意図したデータの転送ができません。
anhtran 0:e9fd5575b10e 56 また逆に、DMAで転送されたデータに対してCPUを使ったアクセスをする場合、キャッシュ上にゴミが残ったままですと実メモリではなくキャッシュ上のゴミを読み込んでしまいます。
anhtran 0:e9fd5575b10e 57 mbedコードを使用する場合、GR-PEACH、GR-LYCHEEは共に、1MBの非キャッシュ領域(`NC_BSS`セクション)を用意しています。
anhtran 0:e9fd5575b10e 58 DMAを使用する場合はこの非キャッシュメモリを使用すると制御が楽になります。
anhtran 0:e9fd5575b10e 59 ```cpp
anhtran 0:e9fd5575b10e 60 //非キャッシュメモリ
anhtran 0:e9fd5575b10e 61 #if defined(__ICCARM__)
anhtran 0:e9fd5575b10e 62 static uint8_t buf[64]@ ".mirrorram";
anhtran 0:e9fd5575b10e 63 #else
anhtran 0:e9fd5575b10e 64 static uint8_t buf[64]__attribute((section("NC_BSS")));
anhtran 0:e9fd5575b10e 65 #endif
anhtran 0:e9fd5575b10e 66
anhtran 0:e9fd5575b10e 67 void dma_send_func() {
anhtran 0:e9fd5575b10e 68 buf[0] = 0x01;
anhtran 0:e9fd5575b10e 69 DMA_send(buf); //DMA送信
anhtran 0:e9fd5575b10e 70 }
anhtran 0:e9fd5575b10e 71
anhtran 0:e9fd5575b10e 72 void dma_recv_func() {
anhtran 0:e9fd5575b10e 73 DMA_recv(buf); //DMA受信
anhtran 0:e9fd5575b10e 74 printf("%d\r\n", buf[0]);
anhtran 0:e9fd5575b10e 75 }
anhtran 0:e9fd5575b10e 76 ```
anhtran 0:e9fd5575b10e 77
anhtran 0:e9fd5575b10e 78 非キャッシュメモリをを使用しない場合は、以下のようなキャッシュ制御が必要となります。
anhtran 0:e9fd5575b10e 79 キャッシュ制御を行うメモリは必ず32byteアラインにし、サイズを32byteの倍数にしておく必要があります。
anhtran 0:e9fd5575b10e 80
anhtran 0:e9fd5575b10e 81 ```cpp
anhtran 0:e9fd5575b10e 82 #include "dcache-control.h" //★キャッシュ制御用のヘッダを追加
anhtran 0:e9fd5575b10e 83
anhtran 0:e9fd5575b10e 84 //通常メモリに配置 キャッシュ制御を行うメモリは必ず32byteにアライン、32byteの倍数にする
anhtran 0:e9fd5575b10e 85 #if defined(__ICCARM__)
anhtran 0:e9fd5575b10e 86 #pragma data_alignment=32
anhtran 0:e9fd5575b10e 87 static uint8_t buf[64];
anhtran 0:e9fd5575b10e 88 #else
anhtran 0:e9fd5575b10e 89 static uint8_t buf[64]__attribute((aligned(32)));
anhtran 0:e9fd5575b10e 90 #endif
anhtran 0:e9fd5575b10e 91
anhtran 0:e9fd5575b10e 92 void dma_send_func() {
anhtran 0:e9fd5575b10e 93 buf[0] = 0x01;
anhtran 0:e9fd5575b10e 94 dcache_clean(buf, sizeof(buf)); //★キャッシュ上のデータを実メモリに書き込む
anhtran 0:e9fd5575b10e 95 DMA_send(buf); //DMA送信
anhtran 0:e9fd5575b10e 96 }
anhtran 0:e9fd5575b10e 97
anhtran 0:e9fd5575b10e 98 void dma_recv_func() {
anhtran 0:e9fd5575b10e 99 dcache_invalid(buf, sizeof(buf)); //★あらかじめキャッシュ上のデータを破棄しておく
anhtran 0:e9fd5575b10e 100 DMA_recv(buf); //DMA受信
anhtran 0:e9fd5575b10e 101 printf("%d\r\n", buf[0]);
anhtran 0:e9fd5575b10e 102 }
anhtran 0:e9fd5575b10e 103 ```
anhtran 0:e9fd5575b10e 104
anhtran 0:e9fd5575b10e 105
anhtran 0:e9fd5575b10e 106 ## JPEG変換
anhtran 0:e9fd5575b10e 107 JPEG変換にはDMAが使用されます。上記``キャッシュ制御`` を参照ください。
anhtran 0:e9fd5575b10e 108 その他の詳細は[GraphicsFramework](https://developer.mbed.org/teams/Renesas/code/GraphicsFramework/)を参照ください。
anhtran 0:e9fd5575b10e 109 サンプルコード:[GR-Boads_Camera_sample](https://github.com/d-kato/GR-Boads_Camera_sample)
anhtran 0:e9fd5575b10e 110
anhtran 0:e9fd5575b10e 111
anhtran 0:e9fd5575b10e 112 ## RGAライブラリ(GR-PEACHのみ)
anhtran 0:e9fd5575b10e 113 [GraphicsFramework](https://developer.mbed.org/teams/Renesas/code/GraphicsFramework/)を参照ください。
anhtran 0:e9fd5575b10e 114
anhtran 0:e9fd5575b10e 115
anhtran 0:e9fd5575b10e 116 ## オーディオ再生
anhtran 0:e9fd5575b10e 117 ``EasyPlaybackクラス``を使うことで、簡単にオーディオを再生することができます。
anhtran 0:e9fd5575b10e 118 サンプルコード:[GR-Boards_Audio_WAV](https://github.com/d-kato/GR-Boards_Audio_WAV)
anhtran 0:e9fd5575b10e 119
anhtran 0:e9fd5575b10e 120
anhtran 0:e9fd5575b10e 121 ## USBホスト
anhtran 0:e9fd5575b10e 122 mbed OSではオフィシャルのUSBホスト機能はまだ実装されていません。mbed classicで使用していたUSBHostをmbed OS 5で使用できるように変更しています。
anhtran 0:e9fd5575b10e 123 詳細は[USBHost](https://developer.mbed.org/handbook/USBHost)を参照ください。
anhtran 0:e9fd5575b10e 124 補足:USBHostMSDクラスはmbed OS 5.4の仕様に合わせて大幅に変更しています。USBメモリ接続の際は``SdUsbConnectクラス``を参照ください。
anhtran 0:e9fd5575b10e 125
anhtran 0:e9fd5575b10e 126
anhtran 0:e9fd5575b10e 127 ## ESP32 ATコマンド用ライブラリ
anhtran 0:e9fd5575b10e 128 ``ESP32Interfaceクラス``を使うことで、WiFi通信を行うことができます。
anhtran 0:e9fd5575b10e 129 詳細は[TCPSocketWiFi_Example_for_ESP32](https://github.com/d-kato/TCPSocketWiFi_Example_for_ESP32)を参照ください。
anhtran 0:e9fd5575b10e 130
anhtran 0:e9fd5575b10e 131
anhtran 0:e9fd5575b10e 132 ## DisplayApp (USB接続でPCディスプレイに画像表示)
anhtran 0:e9fd5575b10e 133 GR-Board内のJPEG画像をPC上に表示するためのライブラリです。GR-BoardとPCをUSBで接続して使用します。USBケーブルは``MicroUSB Connector(RZ/A1 Ch.0)``に接続してください。
anhtran 0:e9fd5575b10e 134
anhtran 0:e9fd5575b10e 135 ![](docs/img/usb0_and_button.jpg)
anhtran 0:e9fd5575b10e 136
anhtran 0:e9fd5575b10e 137 RZ/A2Mの場合は``USBチャネル1``に接続してください。
anhtran 0:e9fd5575b10e 138 Windows10以外ご使用の場合、ドライバのインストールが必要となります。下記サイトのからドライバーをダウンロードできます。
anhtran 0:e9fd5575b10e 139
anhtran 0:e9fd5575b10e 140 https://os.mbed.com/handbook/USBSerial
anhtran 0:e9fd5575b10e 141
anhtran 0:e9fd5575b10e 142 但し、「署名なしドライバ」となっていますので、お使いのWindowsバージョンによってはそのままインストールすることはできません。お使いのPC毎に設定方法が異なるため、検索サイトで「署名なしドライバ」で検索してください。
anhtran 0:e9fd5575b10e 143
anhtran 0:e9fd5575b10e 144 PC用アプリは以下よりダウンロードできます。
anhtran 0:e9fd5575b10e 145 * [For Windows](http://gadget.renesas.com/software/displayapp.zip)
anhtran 0:e9fd5575b10e 146 * [For Mac](http://gadget.renesas.com/software/DisplayApp.app.zip)
anhtran 0:e9fd5575b10e 147
anhtran 0:e9fd5575b10e 148 使用例
anhtran 0:e9fd5575b10e 149 ```cpp
anhtran 0:e9fd5575b10e 150 #include "DisplayApp.h"
anhtran 0:e9fd5575b10e 151 #include "mbed.h"
anhtran 0:e9fd5575b10e 152
anhtran 0:e9fd5575b10e 153 static uint8_t jpeg_image[] = {/* JPEG image data */};
anhtran 0:e9fd5575b10e 154
anhtran 0:e9fd5575b10e 155 int main() {
anhtran 0:e9fd5575b10e 156 DisplayApp display_app;
anhtran 0:e9fd5575b10e 157
anhtran 0:e9fd5575b10e 158 while (1) {
anhtran 0:e9fd5575b10e 159 display_app.SendJpeg(&jpeg_image[0], sizeof(jpeg_image));
anhtran 0:e9fd5575b10e 160 wait(1);
anhtran 0:e9fd5575b10e 161 }
anhtran 0:e9fd5575b10e 162 }
anhtran 0:e9fd5575b10e 163 ```
anhtran 0:e9fd5575b10e 164
anhtran 0:e9fd5575b10e 165
anhtran 0:e9fd5575b10e 166 ## ASCIIフォント
anhtran 0:e9fd5575b10e 167 ``AsciiFontクラス``を使うことで、ASCIIコードの文字を描画できます。
anhtran 0:e9fd5575b10e 168
anhtran 0:e9fd5575b10e 169 ```cpp
anhtran 0:e9fd5575b10e 170 #include "mbed.h"
anhtran 0:e9fd5575b10e 171 #include "AsciiFont.h"
anhtran 0:e9fd5575b10e 172
anhtran 0:e9fd5575b10e 173 #define WIDTH (12)
anhtran 0:e9fd5575b10e 174 #define HEIGHT (16)
anhtran 0:e9fd5575b10e 175 #define BYTE_PER_PIXEL (1u)
anhtran 0:e9fd5575b10e 176 #define STRIDE (((WIDTH * BYTE_PER_PIXEL) + 7u) & ~7u) //multiple of 8
anhtran 0:e9fd5575b10e 177
anhtran 0:e9fd5575b10e 178 uint8_t text_field[STRIDE * HEIGHT];
anhtran 0:e9fd5575b10e 179
anhtran 0:e9fd5575b10e 180 int main() {
anhtran 0:e9fd5575b10e 181 AsciiFont ascii_font(text_field, WIDTH, HEIGHT, STRIDE, BYTE_PER_PIXEL);
anhtran 0:e9fd5575b10e 182
anhtran 0:e9fd5575b10e 183 ascii_font.Erase(0xcc); // Erase text field
anhtran 0:e9fd5575b10e 184 ascii_font.DrawStr("AB", 0, 0, 0x11, 1);
anhtran 0:e9fd5575b10e 185 ascii_font.DrawChar('C', AsciiFont::CHAR_PIX_WIDTH, AsciiFont::CHAR_PIX_HEIGHT, 0x22, 1);
anhtran 0:e9fd5575b10e 186 }
anhtran 0:e9fd5575b10e 187 ```
anhtran 0:e9fd5575b10e 188
anhtran 0:e9fd5575b10e 189 ## SDカードの通信速度
anhtran 0:e9fd5575b10e 190 RZ/A2MはSDスピードクラスで通信を行います。RZ/A2MでHSスピードクラス、または、UHSスピードクラスが必要な方は、[こちら]((https://www.renesas.com/jp/ja/support/contact.html)よりお問合せください。
anhtran 0:e9fd5575b10e 191 GR-PEACH、GR-LYCHEEは SPIバスを使ってSDカードにアクセスします。
anhtran 0:e9fd5575b10e 192 接続については``SdUsbConnectクラス``を参照ください。
anhtran 0:e9fd5575b10e 193
anhtran 0:e9fd5575b10e 194
anhtran 0:e9fd5575b10e 195 ## DRP (RZ/A2Mのみ)
anhtran 0:e9fd5575b10e 196 DRP(Dynamically Reconfigurable Processor)はソフトウェアの柔軟さとハードウェアの高速性を兼ね備えたプログラマブルハードウェアです。処理を定義するファームウェアの書き換えが瞬間に行えます。
anhtran 0:e9fd5575b10e 197 詳しくは ``drp-for-mbed/TARGET_RZ_A2XX/r_drp/doc`` を参照ください。