SSブログ

RP2040で音の実験、SDカードから (補足) [DCCデコーダ]

 音を1音増やすと15msかかるのはちょっと遅いと思うので、
(1)SDカードの呼び出しでSPIクロックはどれくらいに設定しているか?
(2)SDカード呼び出しにDMAは使っているか?
という質問があったので、書いておきます。
 と言いつつ、(2)についてはわかりません。
 SPIクロックですが、多分、
SD.begin(SS,SD_SCK_MHZ(32));
のSD_SCK_MHZ(32)で、
ファイルを開いて、4KByteずつ8回Readして閉じる作業をクロックを変えながらやってみました。
 結果は以下の通りだったので、なんとなく32MHzを選択しています。24MHzから75msだったので、内部では24MHzが選択されているのではないかと思います。
MHz ms
1 343
2 205
4 133
8 99
16 85
24 75
32 75
48 75


ファイルオープン+(4kByte*8回=)32KByteのリード+ファイルクローズで75msなので、いわゆる読み込みスピードとは少し異なると思いますが、427KByte/s程度と遅そうではあります。
なお、SDカードは、見かけからすると、ADATAの16GBで80MByte/sらしいです。

PicoのSDのスピードを測っている参考サイト
https://elehobica.blogspot.com/2021/03/raspberry-pi-picosdxcexfat-spi-if.html
https://community.element14.com/products/raspberry-pi/b/blog/posts/rp2040-sd-card-spi-benchmark



コメント(0) 

RP2040で音の実験、SDカードから鳴らす。 [DCCデコーダ]

 4か月ぶりですね。
 仕事がいまいちで、趣味が進みませんが、メモだけ書いておきます。
 Desktopstation様とDCC電子工作連合でRP2040を使ったDCCデコーダ(SmileSound)を作っていますが、SDカードの抜き差しで電車の音を変えられる据え置き型コントローラを作りたい!という話があり、SDカード(内蔵のFlashに比べ遅い)でどれだけ、ダメになるかを試してみました。
 ソースの方は現在使っているLittleFSSDに変える感じで、あとはほぼ一緒です。

 LittleFS.h
→SPI.h,SD.h

 LittleFS.begin();
→SD.begin(SS,SD_SCK_MHZ(32));
 SCKは上げて処理が速くなるようにしています。 

 f = LittleFS.open(inFile, "r");
→f = SD.open(inFile, "r");
という感じに機械的に変更すれば、とりあえず動きます。
 
 pinはSPI0のデフォルトを使います。(変更方法がわからなかった・・・。)
#define PIN_SPI0_MISO (16u)
#define PIN_SPI0_MOSI (19u)
#define PIN_SPI0_SCK (18u)
#define PIN_SPI0_SS (17u)

 で、それ用に適当に配線して、こんな感じです。
re_IMG20220618164430.jpg

 まあ、全体ではこんな感じで、
re_IMG20220618164513.jpg
 
 秋月のマイクロSDカードスロットDIP化キットを使用して、SD部分は下記のように繋ぎました。
sd_pico.png

 で、元々音の処理は85ms周期で音の処理をしていますが、無音状態で15msぐらいかかります。一音増やすごとに15ms程度処理時間が増えるため、同時に4~5音出すのがやっとでした・・・。
 44.1kHzで、1音当たり、音の処理に10ms、ファイルのヘッダ呼び出しに5msかかっています。
 
 ハマったところは、最初、SDカードのファイル一覧は見れるが、中身が化けてて変というのがあり、一度、スケッチからファイルを書いたら、読めるようになりました。それとも最初にちゃんとFAT32でフォーマットしないといけないかもですが。
 まあ、最終手段で、SDカード挿した後、内蔵のフラッシュに全部コピーして、それから動かすとやれば、SDの遅い呪縛から逃れられるというのはあります。

コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。