こんにちは、
私は、I2Cマルチプレクサを使用せずに、S32K118(Q48)マスターから10個の同一アドレスのI2Cスレーブを同時に駆動する方法を評価しています。
私の計画は、ハードウェアタイマーでクロックを生成し、DMA転送を組み合わせて同じポート上の10本のGPIOピンを同時に更新することで、10本の並列I2Cバスをエミュレートすることです。
S32K118のDMAやタイマー**ペリフェラル**が、このような方法でポート全体のGPIO更新をトリガーできるかどうか、確認を手伝ってもらえますか?このアーキテクチャに関して注意すべきハードウェアの制限やエッジケースはありますか?
よろしくお願いいたします。
こんにちは、 @Luke_John さん。
はい、このアーキテクチャは基本的にサポートしています。
S32K1xxシリーズリファレンスマニュアル、Rev. 14を参照:
第13.3.1項 GPIOレジスタの説明
ご覧の通り、すべてのGPIOポートは32ビットレジスタからアクセス可能です。
セクション 17 4.1「GPIOポートを使用して波形を駆動またはサンプリングする」DMAを構成してデータを1つ以上のGPIOポートに転送することにより、オンチップメモリに格納された表形式データを使用して複雑な波形を作成することが可能です。逆に、DMAを使用して1つまたは複数のGPIOポートからデータを定期的に転送することで、複雑な波形をサンプリングし、その結果を表形式でオンチップメモリに保存することが可能です。
DMAトランスファーはDMAMUXやTRGMUXのタイマーでトリガーできます。
シームレスなDMA転送を実現するには、クロスバーをラウンドロビンアービトレーション(MCM_CPCR[CBRR]を「1」に設定)にプログラムする必要があります。
よろしくお願いいたします。
ダニエル