2016-09-18 1 views
0

SPI를 통해 두 번째 rfid 리더를 연결하려면 RFID RC522 Raspberry PI 2 Windows IOT이라는 주제에서 어떤 수업을 변경해야합니까?두 개의 RFID RC522 라즈베리 PI 2 Windows IOT

SPI_CE1_N 핀에 두 번째 "ss 라인"을 연결하고 GPIO12 핀에 "리셋 라인"을 연결했습니다.

클래스 Mfrc522에 생성자를 추가했고 SPI_CONTROLLER_NAME, SPI_CHIP_SELECT_LINE, RESET_PIN을 매개 변수로 사용했지만 성공하지는 않았습니다.

+0

라인 0은 Rpi2의 물리적 핀 번호 24 (CS0)에 매핑되고 라인 1은 물리적 핀 번호 26 (CS1)에 매핑됩니다. 칩 선택 라인은 초기화 할 때 SPI 디바이스에 바인딩되기 때문에. 초기화 된 SPI 디바이스를'Dispose '하고 칩 선택 라인을 변경하고 다시 초기화 할 수 있습니다. –

+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 = SpiDevice.FromIdAsync (devices [0] .Id, settings); – Jarek

+0

Windows IoT 코어의 버전은 무엇입니까? –

+0

10.0.14393.0 있습니다. 괜찮습니까? – Jarek

0

마지막으로 문제를 해결했습니다.

당신의 도움에 감사드립니다. 이제 코드가 훌륭하게 작동합니다. 하드웨어 문제가 생겨서. 오실로스코프를 접속하여 MISO 버스의 전압이 정확하지 않은 것으로 확인되면

Connection RFID-RC522 to the Raspberry Pi.

:

제가

사진 등의 장치를 접속되어있다. 두 장치 모두 전압을 접지로 끌어 당깁니다. 대신에 3,3V는 겨우 1,24V였다. (3,3V CMOS 로직 레벨 1의 최소 전압은 2,4V이다)

One of the devices trying to transmit.

빨리 나는 (하강 에지 속도) 및 저항 (출력을 분리하기 위해) 2 개의 다이오드를 사용하여 테스트 할 수 있습니다.

Solution - separation output.

결과 : 3,3V -

Result - separation output.

Vf를 = 2,56V

지금 두 장치는 큰 작업입니다.

궁극적으로 SN74HC125N을 사용하는 것이 더 좋을 것이라고 생각합니다.

현재 : SS 핀을 속성으로 변경할 수없는 이유는 무엇입니까?

_spi.ConnectionSettings.ChipSelectLine = 1; 
관련 문제