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

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

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

エラーが発生しました。

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

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

10.picocalcのSDカードが遅いのはbaudrateの設定が悪いのを対策

jpgデータの読み込みが遅いんで何とかしたい。


とりあえず sdcard のドライバを確認すると、sdcard.py というmicropythonで広く使われてるソースだった。問題ないはずのコード。じゃぁbaudrateの設定を変えるだけで解決だね。と1MHzから5MHzに変えても500kHzに落としても性能は同じ。おや?

もしかしてSPIドライバの問題?と思ったがSPIドライバも標準提供品を使ってる。何もおかしいところがない。

変だな。Picoの標準品のドライバ使って性能が出ないなら大問題だろ?誰も困ってないの?おかしいだろ?

googleさんに相談したら、よくわからない高速版 sdcard.py とやらも見つけてくれた。でも改造箇所が多すぎてかなり怖い。試すと確かにちょっとは速いのだが...


あれ?ソースをよく見ると関数の呼び出し方が picocalcのドライバとちょっと違ってる。もしや...


お前が犯人だ!!


PicoCalcのSDカード初期化のためのラッパー関数が犯人。

引数で設定した baurate を sdcard.py に渡す必要があるのだが...


self.sd = sdcard.SDCard(

machine.SPI(self.spi_bus, b()a()u()d()r()a()t()e()=()s()e()l()f().()b()a()u()d()r()a()t()e(), polarity=0, phase=0,

sck=machine.Pin(self.sck_pin),

mosi=machine.Pin(self.mosi_pin),

miso=machine.Pin(self.miso_pin)),

machine.Pin(self.cs_pin)

)


一見良さそうに見えるじゃろ?それが罠じゃ

指定した baudrate をSPI の初期化時の baudrate に設定している。

しかし sdcard.py は内部でSPIを再設定しているので、sdcard.SDCard の引数として baudrate を設定すべき


self.sd = sdcard.SDCard(

machine.SPI(self.spi_bus, baudrate=self.baudrate, polarity=0, phase=0,

sck=machine.Pin(self.sck_pin),

mosi=machine.Pin(self.mosi_pin),

miso=machine.Pin(self.miso_pin)),

machine.Pin(self.cs_pin),

b()a()u()d()r()a()t()e()=()s()e()l()f().()b()a()u()d()r()a()t()e()

)


原因判明までエラい遠回りした

ボーレートを下げても現象が変わらない時点で気が付くべきだった。


ソース一式はこちら

https://github.com/bjsoftab4/PicoCalc-micropython-driver

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

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

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ