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)
コメント 0