私がスキームで見るように、スレーブ用の2つのチャネルがあります-CS0とCS1。MCP3008などの2つのチップしか接続できないということですか?または、これらの2つの接続されたスレーブにより多くのスレーブを接続できますか。
Raspberryスキームには、ウィキペディアから取得したこのSPIスレーブ接続スキームとのサポートまたは共通点がありますか?このようにすることは可能ですか?
私がスキームで見るように、スレーブ用の2つのチャネルがあります-CS0とCS1。MCP3008などの2つのチップしか接続できないということですか?または、これらの2つの接続されたスレーブにより多くのスレーブを接続できますか。
Raspberryスキームには、ウィキペディアから取得したこのSPIスレーブ接続スキームとのサポートまたは共通点がありますか?このようにすることは可能ですか?
回答:
たくさんの方法。
スレーブが選択するビットバンを並べ替えることができます。つまり、すべてのデバイスを共有MISO / MOSI / SCLKとグランド(ただしCSは別個)に接続できます。SPIドライバーを呼び出す前に、目的のデバイスのCSをLowに設定するだけです。SPIドライバーはCSを設定しようとしますが、接続されていないことを知りません。
40ピン拡張ヘッダーのあるPiには、3つのチップセレクトを備えた別のSPIデバイスがあります。私のpigpioライブラリはそのデバイスをサポートしています。
プロトコル全体をソフトウェアビットバンすることができます。
追加のハードウェアを追加して、CS回線を任意のデバイスに切り替えることができます。
等
追加するように編集されました
「適切な」Raspberry Pi Linux SPIドライバーは現在、レビューを行っており、CSとして任意のgpiosを使用できるようにしています。
2を追加するように編集
現在のLinux SPIドライバー(spi_bcm2853)は、チップの選択時に任意のGPIOをサポートすると言われています。/ boot / overlays / READMEを参照してください。
RaspberryPiがSPIバスでチップセレクトを2つしか提供しないのは正しいことです(こちらを参照)。そして、SPIドライバーとソフトウェアソリューションはその事実に依存していると仮定します(@joanの答えは、異なるライブラリがそれを異なる方法で処理し、公式ドライバーは将来、任意のGPIOピンをチップ選択として使用できるようにすることを示唆しています)。
ただし、チップセレクトは、Piの専用デジタル出力にすぎないことに注意してください。したがって、GPIOピンを使用すると、常により多くのチップセレクトを使用できます。ただし、その場合、ソフトウェアは適切なSPIスレーブに対応するために適切なピンを設定する必要があります。
チップセレクトの全体的なアイデアは相互に排他的に1つのスレーブを選択することなので、さらにいくつかの単純なデジタル回路を使用して「無駄な」GPIOピンの量を減らすことができます(他の目的にも必要な場合)。74HC / HCT138のようなものを3対8のラインデコーダ/デマルチプレクサを使用して、3つのGPIOピンで8つのチップセレクトを介して8つのスレーブをアドレス指定できます。
バスラインSCLKとMOSIはすべてのスレーブで共有されていることに注意してください。したがって、複数のスレーブをPiに接続する場合、Piのファンアウトが負荷(スレーブの入力ピンの抵抗と静電容量)を超えないようにしてください。ただし、これは低静電容量とデジタル入力の高抵抗。
実際には、ラズベリーフォーラムでRPiエンジニアのPhilEがこれに対する非常に良い答えを持っています。2015年9月28日を参照してください。基本的に、彼は、spi-bcm2835でチップセレクトとして無料のGPIOを使用する可能性を使用するデバイスツリーオーバーレイの例を示します。