1

単一の SPI デバイス (MCP3008) との通信に成功しました。Windows 10 iot を搭載した raspberry pi 2 で複数 (4x) SPI デバイスを実行することは可能ですか?

  1. CS(チップセレクト)ラインを手動で接続し、spi関数を呼び出す前にアクティブにし、spi関数を実行した後に非アクティブにすることを考えています。Windows 10 iotで動作しますか?
  2. spi チップ セレクト ピンの設定はどうですか? SPI 初期化中にピン番号を変更しますか? それは可能ですか?
  3. Windows 10 IoTで複数(4 x MCP3008)SPIデバイスを使用するよりスマートな方法はありますか?

(Windows 10 iotを実行しているラズベリーパイ2に入力される32個のアナログ信号を監視する予定です)

どうもありがとう!

4

2 に答える 2

0

もちろん、必要な数 (GPIO ピン数) を使用できます。呼び出し先のデバイスを指定するだけです。

まず、チップセレクトライン 0 を使用して、たとえば SPI の構成を設定します。

settings = new SpiConnectionSettings(0); //chip select line 0
settings.ClockFrequency = 1000000;
settings.Mode = SpiMode.Mode0;

String spiDeviceSelector = SpiDevice.GetDeviceSelector();
devices = await DeviceInformation.FindAllAsync(spiDeviceSelector);
_spi1 = await SpiDevice.FromIdAsync(devices[0].Id, settings);

このピンは以降のアクションでは使用できません! したがって、デバイスを示すために使用する GpioPin クラスを使用して出力ポートを構成する必要があります。

GpioPin_19 = IoController.OpenPin(19);
GpioPin_19.Write(GpioPinValue.High);
GpioPin_19.SetDriveMode(GpioPinDriveMode.Output);

GpioPin_26 = IoController.OpenPin(26);
GpioPin_26.Write(GpioPinValue.High);
GpioPin_26.SetDriveMode(GpioPinDriveMode.Output);

GpioPin_13 = IoController.OpenPin(13);
GpioPin_13.Write(GpioPinValue.High);
GpioPin_13.SetDriveMode(GpioPinDriveMode.Output);

転送前に常にデバイスを示す: (方法の例)

private byte[] TransferSpi(byte[] writeBuffer, byte ChipNo)
{
    var readBuffer = new byte[writeBuffer.Length];

    if (ChipNo == 1) GpioPin_19.Write(GpioPinValue.Low);
    if (ChipNo == 2) GpioPin_26.Write(GpioPinValue.Low);
    if (ChipNo == 3) GpioPin_13.Write(GpioPinValue.Low);

    _spi1.TransferFullDuplex(writeBuffer, readBuffer);

    if (ChipNo == 1) GpioPin_19.Write(GpioPinValue.High);
    if (ChipNo == 2) GpioPin_26.Write(GpioPinValue.High);
    if (ChipNo == 3) GpioPin_13.Write(GpioPinValue.High);

    return readBuffer;
}
于 2017-02-28T00:05:22.447 に答える
-1

から: https://projects.drogon.net/understanding-spi-on-the-raspberry-pi/

Raspberry Pi は現時点ではマスター モードのみを実装しており、2 つのチップ セレクト ピンがあるため、2 つの SPI デバイスを制御できます。(一部のデバイスには独自のサブアドレス方式があるため、同じバスにさらに多くのデバイスを配置できます)

Jared Bienz のIoT Devices GitHub リポジトリ内のDeviceTester プロジェクトBreathalyzer プロジェクトで 2 つの SPI デバイスを正常に使用しました。

各プロジェクトでは、両方のプロジェクトで使用される ADC とディスプレイの ControllerName プロパティで、SPI インターフェイス記述子が明示的に宣言されていることに注意してください。Breathalyzer プロジェクトに関する詳細な情報は、私のブログにあります。

    // ADC
    // Create the manager
    adcManager = new AdcProviderManager();

    adcManager.Providers.Add(
        new MCP3208()
        {
            ChipSelectLine = 0,
            ControllerName = "SPI1",
        });

    // Get the well-known controller collection back
    adcControllers = await adcManager.GetControllersAsync(); 

    // Create the display
    var disp = new ST7735()
    {
        ChipSelectLine = 0,
        ClockFrequency = 40000000, // Attempt to run at 40 MHz
        ControllerName = "SPI0",
        DataCommandPin = gpioController.OpenPin(12),
        DisplayType = ST7735DisplayType.RRed,
        ResetPin = gpioController.OpenPin(16),

        Orientation = DisplayOrientations.Portrait,
        Width = 128,
        Height = 160,
    };
于 2016-02-26T18:38:19.590 に答える