表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
25/61

2.SDカードが遅いのを改めて対策することになろうとは

以前、picocalcのドライバからSDカードのドライバにボーレートが正しく渡ってないのを対策したわけだが、今回は正しく渡されているのに遅いという新現象。


転送速度は、ボーレートを5Mbpsにしても1Mbpsにしてもほとんど変わらず 100kB/s 程度。500kbpsに落としたら50kB/s程度。

これはボーレートが影響するSPI通信以外のところで時間がかかっている。

ということでSDカードのドライバである sdcard.py を読み始めた。


割とシンプルなソースだなぁ。と読み進めていると、SDカードとSPIで通信する前処理でSDカードの応答待ちがありtime.sleep_ms(1) と書いてある。


あ~、こいつか? 1Mbps や 500kbps 設定だとSPIデータの転送の間にSDカードの応答が間に合うが 5Mbps だと間に合わず1msのウエイトが入ってしまうって感じ?

この関数は頻繁に呼ばれるから、1ms待つかもしれないってことになると、そりゃ遅いわ。


試しに sleep_us(20) に変えてみたら性能が改善された。110kB で 1100ms ぐらいだったのが、440ms ぐらいになった。ざっくり三倍。赤く塗っておきたい。


わざわざ sleep_ms を使ってるのは理由がありそうだな。例えばsleep_us が実装されてないマイコンもあるとか。知らんけど。


ともあれ性能もなんとかなりそうだから、ちょっとソースをきれいにしてから先に進もう。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ