0

私はraspberyy pi 3、RFID RC522を使用しています。配線Piを使ってカードを読みたい。このコードを試しています。

#include<stdio.h>
#include<conio.h>
#include<wiringPi.h>
#include<wiringPiSPI.h>

int main()
{
    int chan = 1;
    int speed = 1000000;

    if (wiringPiSPISetup(chan, speed) == -1)
    {
        printf("Could not initialise SPI\n");
        return;
    }
    printf("When ready hit enter.\n");
    (void) getchar(); // remove the CR
    unsigned char buff[100];

    while (1)
    {
        int ret = wiringPiSPIDataRW(chan, buff, 4);
        printf("%d %s \n", ret, buff);

    }
}

これを試すと、常に「4」になります。読み方がわかりません。

4

1 に答える 1

0

初期化されていないデータをスレーブ SPI デバイスに送信しています。

unsigned char buff[100];

while (1)
{
    int ret = wiringPiSPIDataRW(chan, buff, 4);
    printf("%d %s \n", ret, buff);

}

buffer内容は未定です。

ライブラリのドキュメントを見る

int wirePiSPIDataRW (int channel, unsigned char *data, int len);

これにより、選択した SPI バス上で同時に書き込み/読み取りトランザクションが実行されます。バッファにあったデータは、SPI バスから返されたデータによって上書きされます。

これは、送信するメッセージでバッファを初期化する必要があることを意味します。スレーブ応答が同じバッファに返されるため、このデータは失われます。

この例を見ると、次のようにする必要があります。

 unsigned char buff[100] = {0};

 // Following bytes must be set according to your slave SPI device docs.
 buffer[0] = ??; 
 buffer[1] = ??;
 buffer[2] = ??;
 buffer[3] = ??;
 wiringPiSPIDataRW(chan, buffer, 4);
于 2016-12-19T10:00:37.083 に答える