0

我正在使用树莓派 3,RFID RC522。我想使用wiringPi读取卡片。我正在尝试这些代码;

#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 接线PiSPIDataRW (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 回答