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が選択されているのではないかと思います。
ファイルオープン+(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
(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
2022-06-18 20:56
コメント(0)
RP2040で音の実験、SDカードから鳴らす。 [DCCデコーダ]
4か月ぶりですね。
仕事がいまいちで、趣味が進みませんが、メモだけ書いておきます。
Desktopstation様とDCC電子工作連合でRP2040を使ったDCCデコーダ(SmileSound)を作っていますが、SDカードの抜き差しで電車の音を変えられる据え置き型コントローラを作りたい!という話があり、SDカード(内蔵のFlashに比べ遅い)でどれだけ、ダメになるかを試してみました。
ソースの方は現在使っているLittleFSをSDに変える感じで、あとはほぼ一緒です。
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)
で、それ用に適当に配線して、こんな感じです。
まあ、全体ではこんな感じで、
秋月のマイクロSDカードスロットDIP化キットを使用して、SD部分は下記のように繋ぎました。
で、元々音の処理は85ms周期で音の処理をしていますが、無音状態で15msぐらいかかります。一音増やすごとに15ms程度処理時間が増えるため、同時に4~5音出すのがやっとでした・・・。
44.1kHzで、1音当たり、音の処理に10ms、ファイルのヘッダ呼び出しに5msかかっています。
ハマったところは、最初、SDカードのファイル一覧は見れるが、中身が化けてて変というのがあり、一度、スケッチからファイルを書いたら、読めるようになりました。それとも最初にちゃんとFAT32でフォーマットしないといけないかもですが。
まあ、最終手段で、SDカード挿した後、内蔵のフラッシュに全部コピーして、それから動かすとやれば、SDの遅い呪縛から逃れられるというのはあります。
仕事がいまいちで、趣味が進みませんが、メモだけ書いておきます。
Desktopstation様とDCC電子工作連合でRP2040を使ったDCCデコーダ(SmileSound)を作っていますが、SDカードの抜き差しで電車の音を変えられる据え置き型コントローラを作りたい!という話があり、SDカード(内蔵のFlashに比べ遅い)でどれだけ、ダメになるかを試してみました。
ソースの方は現在使っているLittleFSをSDに変える感じで、あとはほぼ一緒です。
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)
で、それ用に適当に配線して、こんな感じです。
まあ、全体ではこんな感じで、
秋月のマイクロSDカードスロットDIP化キットを使用して、SD部分は下記のように繋ぎました。
で、元々音の処理は85ms周期で音の処理をしていますが、無音状態で15msぐらいかかります。一音増やすごとに15ms程度処理時間が増えるため、同時に4~5音出すのがやっとでした・・・。
44.1kHzで、1音当たり、音の処理に10ms、ファイルのヘッダ呼び出しに5msかかっています。
ハマったところは、最初、SDカードのファイル一覧は見れるが、中身が化けてて変というのがあり、一度、スケッチからファイルを書いたら、読めるようになりました。それとも最初にちゃんとFAT32でフォーマットしないといけないかもですが。
まあ、最終手段で、SDカード挿した後、内蔵のフラッシュに全部コピーして、それから動かすとやれば、SDの遅い呪縛から逃れられるというのはあります。
2022-06-18 17:40
コメント(0)