2016-09-18 137 views
0

如果我想通過SPI連接第二個rfid閱讀器,那麼我應該如何更改主題RFID RC522 Raspberry PI 2 Windows IOT中的一個類?兩個RFID RC522 Raspberry PI 2 Windows IOT

我將第二個「ss線」連接到SPI_CE1_N引腳,將「reset line」連接到GPIO12引腳。

我在類Mfrc522中添加了一個構造函數,我使用SPI_CONTROLLER_NAME,SPI_CHIP_SELECT_LINE,RESET_PIN作爲參數,但沒有成功。

+0

0號線映射到Rpi2上的物理引腳號24(CS0),1號線映射到物理引腳號26(CS1)。由於芯片選擇線在初始化時綁定到SPI器件。您可以「處理」已初始化的SPI器件並更改其芯片選擇線並重新初始化它。 –

+0

它不起作用。在下一次初始化過程中停止。 – Jarek

回答

0

第一次初始化

public async Task InitIO() 
{ 
    ... 
    ... 

    try 
    { 
     settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE); 
     settings.ClockFrequency = 1000000; 
     settings.Mode = SpiMode.Mode0; 

     String spiDeviceSelector = SpiDevice.GetDeviceSelector(); 
     IReadOnlyList<DeviceInformation> devices = await DeviceInformation.FindAllAsync(spiDeviceSelector); 

     _spi = await SpiDevice.FromIdAsync(devices[0].Id, settings); 

    } 
    catch (Exception ex) 
    { 
     throw new Exception("SPI Initialization Failed", ex); 
    } 

    ... 
    ... 
} 

第二次初始化:

public async Task ReInitSpi() 
{ 
    _spi.Dispose(); //Here is important. 

    try 
    { 
     if (settings.ChipSelectLine == 0) 
     { 
      settings = new SpiConnectionSettings(1); //CS1 
     } 
     else 
     { 
      settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE); //CS0 
     } 

     settings.ClockFrequency = 1000000; 
     settings.Mode = SpiMode.Mode0; 

     String spiDeviceSelector = SpiDevice.GetDeviceSelector(); 
     IReadOnlyList<DeviceInformation> devices = await DeviceInformation.FindAllAsync(spiDeviceSelector); 

     _spi = await SpiDevice.FromIdAsync(devices[0].Id, settings); 

    } 
    /* If initialization fails, display the exception and stop running */ 
    catch (Exception ex) 
    { 
     throw new Exception("SPI Initialization Failed", ex); 
    } 

} 

每次你使用它,例如,像這樣做:

await mfrc.ReInitSpi(); 

    var writeBuffer = new byte[] { 0x55, 0xaa }; 

    mfrc._spi.Write(writeBuffer); 

該作品爲了我。我希望它對你有幫助。

+0

程序總是卡在_spi = await SpiDevice.FromIdAsync(devices [0] .Id,settings); – Jarek

+0

您的Windows IoT核心版本是什麼? –

+0

我有10.0.14393.0可以嗎? – Jarek

0

最後我解決了這個問題。

謝謝麗塔韓你的幫助。你的代碼現在工作得很好。現在因爲我有硬件問題。

我連接的設備爲一個圖:

Connection RFID-RC522 to the Raspberry Pi.

後連接示波器注意到MISO總線的電壓是不正確的。兩種設備都將電壓降至地。而不是3,3V只有1,24V。 (對於3,3V CMOS邏輯電平1的最小電壓是2,4V)

One of the devices trying to transmit.

要快速測試I使用兩個二極管(用於分離輸出)和電阻器(加快下降沿)。

Solution - separation output.

結果:3,3V - VF = 2,56V

Result - separation output.

現在,這兩個設備偉大的工作。

我認爲最終使用SN74HC125N會更好。

順便說一句:爲什麼不能改變屬性的SS引腳?

_spi.ConnectionSettings.ChipSelectLine = 1;