ボクにもわかる電子工作

Raspberry Pi、IchigoJam、Wi-Fi、BLE、XBee、RN-42、ESP-WROOM-02、ESP32

過去の投稿日別表示

[ リスト | 詳細 ]

全1ページ

[1]

〜お詫び〜
この記事はTeraTerm側の送信バッファの動作の違いによる効果を、IchigoJamの受信バッファの違いによる効果であると勘違いして記載していました。
実験の内容や結果に相違はありませんが、私の勘違いによって誤解を与えるような表現がありました。TeraTerm限定であることを赤文字にて追記し、一部の表現を取り消し線で取り消しました。Facebookへの投稿メッセージ(https://www.facebook.com/groups/ichigojam/permalink/848499335289821/)については、はじめからTeraTerm限定の話のような書き方になっていましたが、投稿時の私に、そのような意図はなく、当ブログを読んで、実験をしてくださった皆様にご迷惑をおかけしました。
引き続き、有用な情報が提供できるよう、努力いたしますので、何卒、よろしくお願いいたします。
2017/1/3
国野 亘


TeraTermを使ってシリアル接続したIchigoJamへのプログラム転送時間を約半分にすることが出来ましたので、その方法について説明します。

※すべてのプログラム転送が早まるとは限りません。ご容赦ください。
※IchigoJamのファームウェアは1.2.1以降が必要です。
※TeraTermを使った場合の実験結果です。

シリアルの送信遅延を 9ミリ秒/字 250ミリ秒/行に設定する

結論から書くと、TeraTermの「設定」メニュー内の「シリアルポート」ウィンドウを開き、以下のように設定します。これで、(おそらく)通常の転送時間の半分で転送することが出来ると思います。

イメージ 1

原理

IchigoJamのファームウェア1.2.1以降ではシリアルの受信バッファが128バイトに拡大されました。このバッファを活用することで処理時間を短縮させるのが目的です。
IchigoJamでは1文字の受信を行うのに約18msの処理時間が必要です。このため従来は18ms以上の送信遅延を設定していました。
一方で、IchigoJamのプログラムの1行の最大文字数は200文字です。つまりプログラムの1行の半分をバッファで処理することが出来るはずです。そこで、
ここでは、送信遅延を半分の9msに設定し、1行ごとに250msの遅延を設定することにしました。もし、予め1行の文字数が分かっているのであれば、1行ごとの250msの遅延についても、より短くすることが出来るでしょう。
ただし、この検証の後に、IchigoJam側が1/60秒ごとに1文字づつしか受信バッファの取り込みを行っていない可能性が高まっています。この場合、本検証による効果はTeraTermのみに限定されたものとなります。
以下は、貴重な参考情報です。

 - MicJackでは、文字遅延18ms、行遅延18msが最速(IchigoJam FANグループ尾野さん)
 - MicJackで、1度に100文字送った場合、行遅延で1600msが必要。つまり1文字あたり16msを要する。(同上)
 - Windows 10 VC++ コンソールアプリでは、文字遅延16ms、行遅延10msが高速(茶虎さん)
 - 記載していた結果の転送時間17.4秒は、1文字当たり17msであり、上記の結果を裏付けている

検証方法

以下のようなデータをTeraTermから転送して検証しました。始めにnewコマンドでプログラムを消去し、次にIchigoJam側の画面のカーソル位置を最下行に移動させます。そして、cltコマンドでタイマーをリセットし、1行あたり200文字のダミープログラムを5行分、入力し、最後に経過時間を表示します。
new
fori=1to25:?:next
clt
1 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
2 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
3 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
4 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
5 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
?tick()

実行結果

1文字の送信遅延を、従来の18msにしたときと、9msにしたときの実行結果を比較しました。その結果、転送時間を約半分に短縮することが出来ました。
なお、実行後にはプログラムをPCに再転送し、相違がないことをdiffして確認済みです。
       文字遅延設定 行遅延設定  転送時間(結果)    効果
従来方式    18 ms      50 ms   tick=1925  32.1秒
提案方式     9 ms     250 ms   tick=1044  17.4秒  ▼ 46 %
イメージ 2

前述のとおり、TeraTermの場合は、1行の文字数に合わせて行遅延設定を変更しても良いでしょう。
例えば、100文字以下の場合は50ms、100文字以降の場合は文字数をNとして、50+(N-100)×2 msとすれば、上手くゆきそうです(これは未検証です)。
なお、検証済みの方法も含めて、問題点があるかもしれません。自己責任で活用してください。

by ボクにもわかるIchigoJam用マイコンボード


開く コメント(0)

最新IoTチップESP32を搭載したESP-WROOM-32について、従来のESP-WROOM-02との比較表を作成してみました。
Bluetoothに対応しただけでなく、MCUがデュアルになり、さらにクロックも2倍、各種の入出力インタフェースも充実しています。
使ってみて感じたことは、ファームウェアの書き込み速度が大幅に向上したことです。SPIインタフェース部の転送に関わる処理速度が改善されたものと思います。

イメージ 1

気になっていること

・周波数範囲(チャンネル範囲)
データシート「ESP-WROOM-32 Datasheet」によるとWi-Fiの「Wi-Fi Radio Characteristics」の部分で「Input frequency」が2412MHz〜2484MHzとあります。これは、PAの測定条件を示しているだけなのか、第1chの中心周波数2412MHzから日本仕様の第14chの2484MHzまでが使えるという意味なのか、どちらなのかが分からないです。
占有周波数で考えると:
2400〜2484MHzとあった場合: 1ch 2412 MHz 〜 13ch 2472 MHz が使えると解釈できる
2400〜2495MHzとあった場合: 1ch 2412 MHz 〜 14ch 2484 MHz が使えると解釈できる

中心周波数で考えると(あまり、そんな表記はしない):
2412〜2472MHzとあった場合: 1ch 2412 MHz 〜 13ch 2472 MHz が使えると解釈できる
2412〜2484MHzとあった場合: 1ch 2412 MHz 〜 14ch 2484 MHz が使えると解釈できる
・フラッシュ
従来製品ESP-WROOM-02では、当初4MBのフラッシュが実装されていましたが、最新版は2MBと表明されています。2016年2月に2MB品への移行が示され、11月に2MB品に移行したようです。一方、今回の場合は何も書かれていません。手持ち品が4MBだったので、とりあえず4MBとしました。

・クロック
水晶の周波数は40MHz(従来は26MHz)、CPU動作はArduino IDEのboard.txtの設定で160MHzとなっています。(Facebookグループ「ESP8266環境向上委員会」大野さんからの情報:https://www.facebook.com/groups/927623023964478/permalink/1271155496277894/?comment_id=1272254989501278
こちらも、実際の製品に実装されている水晶のクロック周波数は分からないです。ご存知の方が居ましたら教えていただけないでしょうか?



ボクにもわかるESPモジュール
http://blogs.yahoo.co.jp/bokunimowakaru/folder/1681421.html

by ボクにもわかる電子工作
https://bokunimo.net/

開く コメント(0)

全1ページ

[1]


.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事