質問: ATmega32u4との二重SPI主装置 私の設計では、2つのスレーブSPIデバイスを同時に制御するという予期しないニーズが発生しました。最初はもちろん、SPIバスを通常通りに使用し、両方のデバイスを/ CSピンを使用して制御することを計画していました。 今日のデバイスAのデータシートを確認すると、すべてのデータが一度に必要になることがわかりました。つまり、当初計画していた手順を実行することはできません。 1)機器Bを選択 2)Bからデータを読み込む 3)装置Bの選択を解除します 4)機器Aを選択 5)Bからデータを書き込む 6)装置Aの選択を解除します 7)Bからの全てのデータがA(約1.1Mビット)に行くまで繰り返す。 デバイスAは、その/ CSがハイになったときにデータストリームの終わりであると見なします。もちろん、データが大きくなってしまうので、Bからすべてを一度に読み込んでMCU RAMに格納することはできません。 当然のことながら、次に思いついたのは、2つの別々のマスターSPIを同時に使用することです。両方のチップを選択し、Bからバイトを読み取り、すぐにAに送ります。 **だから私の質問は:** a)ATmega32u4を使用してそれは可能ですか?それは全体的な設計において重要な役割を持ち、他のMCUへの変更は後退するでしょう。 b)USARTが2番目のSPIマスタとして機能できることを私は読みました。それは実行可能で信頼性がありますか?実装するのはどのくらい難しいですか? c)残念ながら不可能で、MCUを変更しなければならない場合、どれをお勧めしますか。 ATmega32U4のUSB機能は重要です。 d)新しいプロセス(Bからの読み込み、Aへのフィード)は予期しない動作を引き起こす可能性がありますか?私の見解では見えません、私は私が新しいエンジニアであるので念のために尋ねています。 他のアイデアや方向性は大歓迎です。前もって感謝します。 **UPDATE** In case it plays a significant role, Device A is an FPGA while B is an flash memory. The MCU has a dual role: Download the bitstream from the PC via USB and store it on the flash ROM/use the stored bitstream to configure the FPGA upon reset/power on. Both FPGA and flash use SPI. According to the datasheet of the FPGA (ice40 family, Lattice, "iCE40 Programming and Configuration" p.26), the image has to be programmed without interruption.
回答: CSがディアサートされると、FPGAはコンフィギュレーションデータの終わりと見なします。タイムアウトもありますか?つまり、CSをアクティブにしたまま無期限に遅延させることができる場合、デバイスは正しく動作しますか? FPGAデバイスがトランザクションをクローズしないようにする必要があるだけの場合は、フラッシュへのコマンドがゴミデータとして読み込まれないようにしながらCSを選択したままにすることで問題を単純化できます。このため、2番目のSPIマスタが過剰になる可能性があります。 MCUとFPGAの間に `MISO` 、 `MOSI` 、および `SCLK` の各行にバッファデバイスを使用して、SPI信号を無効にすることをお勧めバッファデバイスのリセット/イネーブルピンを使用して。 トランザクションは次のようになります 1. FPGA用のCSを非同期にアサート 2. バッファデバイスを無効にする 3. 通常どおりFLASH端末を読む 4. バッファデバイスを有効にする 5. FPGAトランザクション(CSは既にアサートされています) 6. GOTO 2が完了するまで 7. FPGAのCSを非同期にアサート解除