2016-12-19 12 views
0

私はraspberyy pi 3、RFID RC522を使用しています。私はwiringPiを使ってカードを読みたいです。私はこのコードを試しています。RFID RC522リーディングカード配線基板

#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」に変わります。どのように私は理解できないのですか?

+0

あなたは上のSPIをオンにしましたか?私はraspberrypi 3についてはわかりませんが、もう一方ではraspi-configでSPIをオンにする必要がありました。例えば、https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/README.mdを参照してください。 – hetepeperfan

+0

@hetepeperfanこのコードには '#include 'が含まれているので、Linuxの基本システムではありません。 – LPs

+0

サイドノート: 'int main()' - > 'int main(void)' – LPs

答えて

0

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

unsigned char buff[100]; 

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

} 

buffer内容は不確定です。

library doc

INT wiringPiSPIDataRW目線(INTチャネルはunsigned char *データ、INT LEN)。

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

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

あなたのようsometningないはずですthis exampleを見る:

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); 
関連する問題