0

ここでは、I2C プロトコルを使用して、windows 10 IOT ビルド 14376 インサイダーを実行しているラズベリー pi 3 と T-REXマニュアルの間で通信しようとしています。問題は、常にクラッシュすることです。そのため、いくつかのデバッグ プロセスの後、 から何も取得していないように見えDeviceInformation.FinAllAsync(..)ArgumentOutOfRangeException. Microsoft のチュートリアルではここで言及されていないデバイスの機能やアクセス許可など、私が理解できないことがいくつかあるはずです。

var settings = new I2cConnectionSettings(0x07);
settings.BusSpeed = I2cBusSpeed.StandardMode;
var aqs = I2cDevice.GetDeviceSelector("I2C1");
var dis = await DeviceInformation.FindAllAsync(aqs);
int a = dis.Count; //is always equal to 0

次に、前述の方法using (I2cDevice device = await I2cDevice.FromIdAsync(dis[0].Id, settings)){...}で失敗ArgumentOutOfRangeExceptionする

私が試した2番目の方法は、このコードを使用することでした:

I2CDevice device;
var settings = new I2cConnectionSettings(0x07);
settings.BusSpeed = I2cBusSpeed.StandardMode;

var controller = await Windows.Devices.I2c.I2cController.GetDefaultAsync();
device = controller.GetDevice(settings);

最後NullReferenceExceptionの行で

4

1 に答える 1

2

「Direct Memory Mapped Driver」が有効になっている可能性があります。「Inbox Driver」に戻す必要があります。

あなたのコードは「Inbox Driver」で問題なく動作するはずです。ただし、"Direct Memory Mapped Driver" では、"Microsoft.IoT.Lightning" パッケージを使用して IoT デバイスと通信する必要があります。

このチュートリアルに従って、 「Lightning」ライブラリを使用します。I2c コントローラーをセットアップする方法は以下のようになります。

        if (LightningProvider.IsLightningEnabled)
        {
            LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
        }

        var i2cProvider = LightningI2cProvider.GetI2cProvider();
        var i2cControllers = await I2cController.GetControllersAsync(i2cProvider);
        var i2cController = i2cControllers[0];
        var i2cDevice = i2cController.GetDevice(new I2cConnectionSettings(0x07));

含める必要があることに注意してください

<iot:Capability Name="lowLevelDevices"/>
<DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141"/>

そうしないと、すべてのシリアル周辺機器にアクセスできなくなります

このチュートリアルに従って、デバイス ドライバーを "Inbox Driver" と "Direct Memory Mapped Driver" の間で切り替えます。

于 2016-07-17T14:44:47.220 に答える