Team for GR-PEACH Producer Meeting

ひろちゃんの実験

20 Jan 2015

廣光 加川 様
>USBHostHubとCMSIS-RTOS RTXの関係は?
USBHost内部でmbed-RTOSの機能を使用しているため、
USBHostをインポートすると、mbed-RTOSも同時にインポートされます。
mbed-RTOSは、CMSIS-RTOS RTXにmbed-RTOS用のwrapperをかぶせたものです。

>MMUはスレッド毎に管理されているのか?
CMSIS-RTOS RTXでは、MMUはスレッドごとの管理はせず、すべてのスレッドでひとつのメモリ空間を共有します。
そのため、懸念なされているように、メモリやIOの競合防止を考慮する必要があります。

22 Jan 2015

ひろちゃんの実験  ご教示願います

★CMSIS-RTOS RTXの関係 Ryo Hagimoto様、的確な回答有難うございます。  「USBHostHubとCMSIS-RTOS RTXとMMUの関係」 でモヤモヤとしていた物がスッキリしてきました。有難うございます。

 CMSIS-RTOS RTXを調べていたら次の資料が入手出来ました。   ・ルネサス社「RZ/A1グループ CMSIS-RTOS RTX 紹介」     ・Interface誌2014-7「Cortex-A9対応!ARM純正軽量リアルタイムOSRTX」  

 資料に有るサンプルプログラム「LEDの点滅」がCMSIS-RTOS RTXで実行できるか試してみました。2~3か所手直ししたらコンパイル出来ましたが、正しく実行できません。当然な結果です。コンパイルだけでも出来のは幸いです。

 そこで、初心者でも体験できるサンプルソフトや資料は無いでしょしょうか?  mbedHPのサンプルソフトは、部分部分に分かれすぎて全体が掴めません。

 宜しくお願いします。

★再度、USBHostSerialの使い方について

 USB_HOST_TEST 4で、Function(Device)側にはUSBSerialに設定したmbedボードを接続しました。mbedボードとmbedボード間の通信です。

 USB規格では、公開された規格に合致していれば何でも接続できます。mbedも制限は有るでしょうが同じ考えで作られているのでしょう。  USBSerialは、CDCクラスに近いものと考えますが、別物でしょうか?USBSerialとCDCクラスの関係をご教示頂きたく。宜しくお願いします。

24 Jan 2015

ひろちゃんの実験  その8

  LedBlinkで「1時間11分35秒で勝手に停止」

 <今、時間が無いもので、1回しか現象が出ていませんが、取り急ぎ報告します。>  <追試験は、時間が取れれば行います。>

 LCD連続表示テストをしていると、「1時間11分35秒で勝手に停止」しました。4回程。

 そこで、単純化した、Lチカを連続試験をしました。その結果です。

★連続動作OK:1時間30分で手動で停止した

「mbed_blinky」でNewProgramを生成後、「mbed-src」に変更しないで連続実行。 1時間30分で手動で停止した

/media/uploads/kagawahi/ledblink_ok.jpg

★連続動作ダメ:1時間11分35秒で勝手に停止 「mbed_blinky」でNewProgramを生成後、「mbed-src」に変更して連続実行。 1時間11分35秒で勝手に停止

/media/uploads/kagawahi/ledblink_dame.jpg

24 Jan 2015

加川さん
現時点で、mbed-srcを使用してLチカを行うとGR-PEACHは、4294.9秒後に停止してしまいます。
us_ticker_read()の関数に問題があり、すでに停止する問題の対策は済んでいます。
mbed-srcを削除し、最新のmbed-src-v442-preを使用して確認することをお勧めします。
mbed-src-v442-preにGR-PEACH専用の修正が入っていて、これを中の人がARMさんに依頼して正式版のmbed-srcが1月末くらいには出てくるのではと推察します。

27 Jan 2015

Araiさん>
適切な回答ありがとうございます。

加川さん>
OSについて回答いたします。

>そこで、初心者でも体験できるサンプルソフトや資料は無いでしょしょうか?  mbedHPのサンプルソフトは、部分部分に分かれすぎて全体が掴めません。

以下のテストコードはいかがでしょうか。
LEDの点滅を繰り返すスレッドとシリアルのエコーバックのスレッドが同時に動作しています。
http://developer.mbed.org/users/ohira/code/rtos-test/

また、申し訳ありませんが、現状では、上記コード内の以下のライブラリを差し替えていただけますでしょうか。

RTOS上でms以上の単位でのウエイトを行うときは、mbedのwait()の代わりに osDelay()等のOSの機能を使用した方がCPU資源を効率的に使用できます。

wait()待っている間、割り込み以外のことができません。
スレッドの切り替えは一定周期ごと(default:5ms)にのみ行われます。
また、優先順位の低いスレッドに処理が移りません。
osDelay()待っている間、他のスレッドを実行できます。
待ち時間経過後、元のスレッドが実行できる状態になります
(実行するかは優先順位などに依存します)。

多くのプログラムにおいて、処理の大部分は「待ち時間」です。OSの機能を用いることで、この「待ち時間」を有効活用できます。

03 Mar 2015

ひろちゃんの実験  SPI関連でご教示願います

★実装されているSDカードのポート番号について

 GR-PEACHに実装されているSDカードのSPIは、回路図からSPI2が使われているのがわかりました。  このSPI2のポート番号を教えて頂きたく。   例えば、P10_12,P10_15 様に。  ダウンロードしたサンプルプログラムで、ポート番号の設定が求められたもので。

★SpiMultiの使い方について

 CN11にSpiMultiのピンが割り当てられています。  このSpiMultiの使い方についてご教示頂きたく。    例えば、ライブラリ名や、サンプルプログラムについて。

03 Mar 2015

加川さん>

micro-SDスロットを使用するサンプルは Getting started に記載があります。

具体的には以下のように定義するとSDFileSyetemを使用できます。

SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd");


引き続き、よろしくお願いいたします。

08 Mar 2015

ひろちゃんの実験  その9

  mbed-Rtos で2つのスレッドとメールを試す

 GR-PeachのRtosで 2つのスレッドとメールを試しました。  私にとってRtosは、高い存在でしたが、mbedのRtosにチャレンジします。

 チャレンジしたのはよいのですが、ドキュメントが少なく困ってしまいました。

●プログラム構成とボード  試したプログラムは、mbedのホームページに有るサンプルプログラム「rtos_mail」をベースに、2つ目のスレッドを追加したもので、構成を次に図示します。  プログラム構成は、1秒毎にメッセージを発行するスレッドと、5秒毎にメッセージを発行するスレッドと、メイン関数です。メッセージは、スレッド毎に別々のメールを使って送信します。メイン関数は、2つのメールの状況を調べ、受信してればその内容をパソコンに送信します。

 下の方の写真は、mbedのホームページに有るメールの説明や、コンパイラーでのプログラム構成の表示や、ハードウエアです。

●実行結果  プログラムを実行した結果を次に示します。

 メッセージAは1秒毎に、メッセージBは5秒毎に発行されています。

◎◎◎学習したこと   mbed-Rtos 機能を大別すると、3つに分類できるのでは。

  ■プログラムの実行を制御する・・・・・Thread Interrupt    ①スレッドは、mbed-Rtos の主たる機能で、時分割プログラム実行を可能にする    ②割り込みは、外部要因による、プログラム実行切り替えを可能にする

  ■スレッド間の通信・・・・・Mutex Semaphore Signals Queue MemoryPool Mail    ③Mutex等は、スレッドや割り込みによるプログラム時分割実行の通信手段である。      この通信手段では、データの有無、データ量の多寡によりいろいろな名前がつけられている。

  ■その他・・・・・RTOS Timer    ④RTOS Timerは、まだ学習不足。

 以上を纏めると、Thread Interrupt がmbed-Rtos の中心で、他は補助機能と思える。

◎◎◎ご教示頂きたいこと

 ★ 上記の 「◎◎◎学習したこと」で間違いは無いでしょうか?

 ★ スレッドの切り替え間隔や優先レベルについて    設定でいろいろ変えられるのでしょうが、現状の設定での概要をご教示頂きたく。    ●切り替え間隔の現状値は? 又、切り替え間隔は、簡単に変更可能か?    ●優先レベル

 ★ 割り込み要因とレベルについて    設定でいろいろ変えられるのでしょうが、現状の設定での概要をご教示頂きたく。    ●外部ピンによる割り込み要因は、学習出来ました。他にもあるのでしょうか?

宜しくお願いします。

/media/uploads/kagawahi/rtos_mail_2thread_block.jpg

/media/uploads/kagawahi/rtos_mail_2thread_log.jpg

11 Mar 2015

加川さん>

>★ 上記の 「◎◎◎学習したこと」で間違いは無いでしょうか?

特に間違いはありません。

>★ スレッドの切り替え間隔や優先レベルについて
>   設定でいろいろ変えられるのでしょうが、現状の設定での概要をご教示頂きたく。
>●切り替え間隔の現状値は? 又、切り替え間隔は、簡単に変更可能か?

「切り替え間隔」とは、一定間隔ごとに実行するスレッドを切り替えるときの切り替え間隔ということでよろしいでしょうか。
デフォルトは5msです。
下記の5を変更するとデフォルトの5msから変更できます。

rtx\TARGET_CORTEX_A\RTX_Conf_CA.c (141)

 #define OS_ROBINTOUT   5


>●優先レベル

優先レベルは低い順に下記7段階です。

  osPriorityIdle          = -3,          ///< priority: idle (lowest)
  osPriorityLow           = -2,          ///< priority: low
  osPriorityBelowNormal   = -1,          ///< priority: below normal
  osPriorityNormal        =  0,          ///< priority: normal (default)
  osPriorityAboveNormal   = +1,          ///< priority: above normal
  osPriorityHigh          = +2,          ///< priority: high
  osPriorityRealtime      = +3,          ///< priority: realtime (highest)

mbed RTOS を用いる場合、スレッドの優先順位はスレッドの第3引数で設定可能です。defaultはosPriorityNormalです。
たとえば、sed2_thred()の優先順位をosPriorityAboveNormalにしたい場合、以下のように書きます。

優先順位指定

main()
{
	Thread sed2(sed2_thred, NULL, osPriorityAboveNormal);
}

ちなみに第2引数はスレッドに渡す(void*)型の引数です。

★割り込み要因とレベルについて設定でいろいろ変えられるのでしょうが、現状の設定での概要をご教示頂きたく。

割り込みレベルは GIC_SetPriority(割り込みID, 優先順位);で設定することができます。
割り込みIDはmbed-src\targets\cmsis\TARGET_RENESAS\TARGET_RZ_A1H\MBRZA1H.h を参照ください。
mbed official ライブラリで割り込みの優先度設定を行っているものを挙げます。

ライブラリ/API優先順位
InterruptIn5
Serial5
wait5
Ethernet5
USBDevice16
USBHost16

●外部ピンによる割り込み要因は、学習出来ました。他にもあるのでしょうか?

ほとんどの周辺機能に割り込み要因があります。
上記 MBRZA1H.h で定義されている割り込みのうち、 mbed official library で使用している割り込みは以下のものです。

InterruptIn
  IRQ0_IRQn            = 32,
  IRQ1_IRQn            = 33,
  IRQ2_IRQn            = 34,
  IRQ3_IRQn            = 35,
  IRQ4_IRQn            = 36,
  IRQ5_IRQn            = 37,
  IRQ6_IRQn            = 38,
  IRQ7_IRQn            = 39,

USBHost
  USBI0_IRQn           = 73,

USBDevice
  USBI0_IRQn           = 73,

wait
  OSTMI1TINT_IRQn      = 135,       /*!< OSTM Interrupt         */

Serial
  SCIFRXI0_IRQn        = 223,       /*!< SCIF Interrupt         */
  SCIFTXI0_IRQn        = 224,       /*!< SCIF Interrupt         */
  SCIFRXI1_IRQn        = 227,       /*!< SCIF Interrupt         */
  SCIFTXI1_IRQn        = 228,       /*!< SCIF Interrupt         */
  SCIFRXI2_IRQn        = 231,       /*!< SCIF Interrupt         */
  SCIFTXI2_IRQn        = 232,       /*!< SCIF Interrupt         */
  SCIFRXI3_IRQn        = 235,       /*!< SCIF Interrupt         */
  SCIFTXI3_IRQn        = 236,       /*!< SCIF Interrupt         */
  SCIFRXI4_IRQn        = 239,       /*!< SCIF Interrupt         */
  SCIFTXI4_IRQn        = 240,       /*!< SCIF Interrupt         */
  SCIFRXI5_IRQn        = 243,       /*!< SCIF Interrupt         */
  SCIFTXI5_IRQn        = 244,       /*!< SCIF Interrupt         */
  SCIFRXI6_IRQn        = 247,       /*!< SCIF Interrupt         */
  SCIFTXI6_IRQn        = 248,       /*!< SCIF Interrupt         */
  SCIFRXI7_IRQn        = 251,       /*!< SCIF Interrupt         */
  SCIFTXI7_IRQn        = 252,       /*!< SCIF Interrupt         */

Ethernet
  ETHERI_IRQn          = 359,

RZ/A1H全体としては以下のRZ/A1HのマニュアルのP200 (7-21)を参照ください。 http://japan.renesas.com/req/product_document_lineup_child.do?REGION_KEY=2&LAYER_KEY=101996&PDF_URL=http://documentation.renesas.com/doc/products/mpumcu/doc/rz/r01uh0403jj0100_rz_a1h.pdf&TKUPDATE=true&APNOTE=true

引き続き、よろしくお願いいたします。

13 Mar 2015

ひろちゃんの実験  その10

  Gr-Peach でFTDI社のFT800を試す

 GR-PeachのSPIで FTDI社のFT800と接続しました。  FTDI社のFT800は、組み込み向きで、高性能な液晶表示器が簡単に制御できるとうたっています。  実験に使用したものは、4.3インチLCDが付属した評価ボードで、数多いサンプルプログラムから「キーボード」を試しました。表示、タッチセンサ、音声が試せます。  LCDは、WQVGAのカラー表示で、抵抗膜式タッチセンサ付きです。評価ボードは、表示、タッチセンサ、音声を制御します。

★FT800評価ボードでサンプルプログラムを試す

 ◎数多いサンプルプログラムを試すには2つの方法があります。

  ①MCUと接続する方法:    サンプルプログラムのMCUインタフェース部分を書き換える。サンプルプログラムの構造と、コマンドやレジスタ類が理解すれば、MCUインタフェース部書き換えは比較的容易にできる。   しかし、サンプルプログラムの構造とコマンドやレジスタ類が理解は、アメリカ式のマニュアル記述に慣れた私には、ヨーロッパ式と云うかFTDI社式のマニュアル記述やサンプルプログラムの構造の理解は難解であった。

 ②WindowsパソコンとUSB-SPIブリッジで接続する方法:    数多いサンプルプログラムを容易に試すことが出来た。パソコン等安定した装置で試せるのは、未知のサンプルプログラムを理解するには良い方法と思います。

 ◎サンプルプログラムを試して。

  表示、タッチセンサ、音声がf体験できるサンプルプログラムを試した感想は、「回転すし屋のタッチパネル」に近いかな!です。サンプルプログラムや評価ボードの出来にも依るのでしょが、色の範囲が狭く、音も電子ブザーを感じました。

  表示、タッチセンサ、音声が一つのFT800で制御できます。FT800自体は、数百円で入手出来ます。価格・性能は、優れたものと感じました。動画もあればと思いますが、欲張りでしょうか!

 ◎サンプルプログラムを改変して。

  数多いサンプルプログラムから「キーボード」をGr-Peach で実行しました。そして、「Space」ボタンの幅を狭くして、「Return」ボタンを追加しました。コマンド群が充実していて、ボタンの変更・追加は容易でした。当然、変更・追加したボタンのタッチセンサでの認識も容易に出来ました。

 コマンド群が充実していているので、キーボードやボタンや時計などのアイコンやラインの作成が容易なので、サンプルプログラムの構造がもっとシンプルだったら好いなと思います。

★GR-Peachの画像処理に何を?

 FT800自体は、数百円で入手出来、価格・性能は、優れたものです。たまたま見たサンプルプログラムが「回転すし屋のタッチパネル」に近いかな!と感じました。

 では、GR-Peachの画像処理に何を求めるのか!  私が見た「初夢」の様に、スマホやタブレットやカーナビの様な画像処理や音声演奏やタッチパネル機能が容易に作れるコマンド群やサンプルプログラムでしょうか。

 春になってきたので、心が浮き浮きして春の夢を見ました。期待しています。

/media/uploads/kagawahi/dscn5837.jpg

/media/uploads/kagawahi/dscn5876p20.jpg

14 Mar 2015

ひろちゃんの実験  SPI0 でご教示いただきたく。

★SPI0 を下記 ( ??の行)の様にSPIを定義して実行したら、動作しません。

試しに、SPI1(??の下の2行)の様にSPIを定義して実行したら、動作OKです。

 SPI0のピン番号は正しいのでしょうか?

 調べる方法をご教示頂きたく。宜しくお願いします。

**** SpiMaster Init ***

??SPI spiMaster(P10_15, P10_14, P10_12); mosi, miso, sck

??DigitalOut spiMaster_nCs(P10_13);

SPI spiMaster(P11_14, P11_15, P11_12); mosi, miso, sck

DigitalOut spiMaster_nCs(P11_13);

/media/uploads/kagawahi/grpeach_spi0.jpg

14 Mar 2015
14 Mar 2015

Yuuichi Akagawaさん         ひろちゃんです

 ご連絡ありがとうございます。以前に話題に成ったのですね!目が届きませんでした。

 ピン番号を修正して、実験を進めます。

17 Mar 2015

ひろちゃんの実験  その11

  Gr-Peach とRTC Rx8025と128x64DotグラフイックLCDを試す

 GR-Peachの「BusOut」で グラフイックLCDと、「I2C」でRTC Rx8025と接続しました。

★プログラムの内容

  128x64DotグラフイックLCDは、16文字 x 8行に区切って周期的に次の表示をします。

  ①256種類のFONTを、2回に分けて16文字 x 8行の画面に表示します。

  ②RTC Rx8025から時刻を読み出し、上の2行に表示します。

★実験結果

  問題無く動作しました。

/media/uploads/kagawahi/510_lcd16x8_st7565s_allstyle.jpg

/media/uploads/kagawahi/510_lcd16x8_st7565s_lcddisp.jpg

29 Mar 2015

ひろちゃんの実験  その12

  Gr-Peach VerC でI2CTextLCDを試す

 Gr-Peach VerC が到着しましたので、早速I2CTextLCDと接続して試ました。  問題無く動作しました。

 ★少し気になった点   コンパイルしたプログラムをGr-Peach に書き込みした後、リセット釦を押したら新しいプログラムが動作するのですが、リセット釦を「ポチ」と押しただけではリセットされない感じがしました。

 何回も押したり、長く押したりしてたらリセットできました。

 しつこく調べてませんが、感想まで。

/media/uploads/kagawahi/dscn5948p20.jpg

28 Apr 2015

ひろちゃんの実験  Gr-Peachの機能 でご教示いただきたく。

 Gr-Peachで、使い易いmbed機能を保ちながら、次の様な事が可能かご教示いただきたく。

 次の様な事を気にしています。

 ・mbed機能でRZ/A1Hの機能が制限されるのでは

 ・RZ/A1Hの機能が、mbedの使いやすいプログラミング機能では引き出せないのでは

★DMA(Direct Memory Access)を使用して、データ入出力を高速にしたい

 Gr-Peach VerCの仕様を見ると、クロックは、MAX400MHzと有ります。  Gr-Peach VerCで、DMAが可能か、正確なクロック数をご教示いただきたく。

 又、mbedのBusInやBusOut機能を使うと速度低下しそうなので、その対策。

★SDRAMを追加

 ユーザーズマニュアルを見ると、SDRAMをCS2とCS3の空間に其々64MByte接続できるとあります。  Gr-Peach VerCでも可能なのでしょうか。

 宜しくお願いします。

19 Aug 2016

レス有難うございました。

年超えてのフォローですけど、USBのアイソクロナス転送への対応は、どこか別の投稿になってますでしょうか? あと、GR-PEACHの3.4 inch LCDモジュールに表示させている画像をホストに送るようなUSBカメラ(USBファンクション)として動作させるようなことは、可能でしょうか?

Daiki Kato wrote:

Hirofumi Inomata 様
Yuuichi Akagawa 様

アイソクロナス転送の対応について、社内で検討します。正式回答はもう少々お待ちください。


廣光 加川 様

スレッド間通信のサンプルとしてRTOSQueueMailはいかがでしょうか。 CMSIS-RTOS RTXの仕様についてはこちらで紹介されています。
(mbedで使用するCMSIS-RTOS RTXのバージョンはV4.61です。)

29 Aug 2016

USBのアイソクロナス転送への対応は以下のスレッドに投稿されています。
https://developer.mbed.org/forum/team-886-GR-PEACH_producer_meeting-community/topic/5594/

mbedボードをUSBカメラとして見えるようにするためには、UVC(USB Video Class)などのUSBファンクション クラスドライバが必要になると思いますが、適切なサンプルは存じ上げておりません。