在正确的字节到来SPI RFID之前获取垃圾数据

时间:2017-07-19 12:23:38

标签: c rfid spi contiki

我尝试从RFID读取字节,表示设备的版本号。使用SPI协议,我得到0x92字节(RC522版本2.0),请求字节是0x37。除了字节的位置,一切都很好。在我得到正确的(0x92)之前,我不知道为什么要打印。输出:

Component.ts

  this.mainForm = this.fb.group({
      fromtotal: [0, [Validators.Required]],
      toTotal: [0, [Validators.Required]],
      option: [value, Validators.required]
    });

我说,好吧,让我从SPI.h库中删除 Hello, world received: 1 received: 92 = v2.0 received: 0 received: 92 = v2.0 received: 0 received: 92 = v2.0 received: 0 received: 92 = v2.0 received: 0 received: 92 = v2.0 行。但后来我没有打印任何东西(Hello World除外)。另一个应该在返回92h时仅打印printf("received: %x\n", data); \ 的函数不会这样做,为什么 - 因为返回的"version 2.0"变量是v而不是9f,之前的所有变量都不同。

92

也许我应该放置一些等待或延迟的功能,以便让RC522执行命令?然后让它打印出来。但即使发生这种情况,为什么#define SPI_READ(data) \ do { \ SPI_TXBUF = 0; \ SPI_WAITFOREORx(); \ data = SPI_RXBUF; \ printf("received: %x\n", data); \ } while(0) 删除会破坏整个输出?以下是调用SPI_READ的代码:

printf

以及检查版本的功能:

static uint8_t
read_register_rfid(uint8_t dev_cmd)
{
  uint8_t ret = 0;
  GPIO_CLR_PIN(GPIO_C_BASE, GPIO_PIN_1);
  SPI_WRITE(((dev_cmd << 1) & 0x7e) | 0x80);
  SPI_READ(ret);
  GPIO_SET_PIN(GPIO_C_BASE, GPIO_PIN_1);
  return ret;
}

1 个答案:

答案 0 :(得分:0)

在这里,我分享了使用SPI库读取和写入RC522的更新函数:

void
writeMFRC522(uint8_t adr, uint8_t val)
{
  GPIO_CLR_PIN(GPIO_C_BASE, GPIO_PIN_1);
  GPIO_CLR_PIN(GPIO_C_BASE, GPIO_PIN_1);
  SPI_WRITE((adr << 1) & 0x7e);
  SPI_WRITE(val);
  SPI_FLUSH();
  //printf("456\n");
  GPIO_SET_PIN(GPIO_C_BASE, GPIO_PIN_1);
}


static uint8_t
readMFRC522(uint8_t dev_cmd)
{
  uint8_t ret = 0x0;
  GPIO_CLR_PIN(GPIO_C_BASE, GPIO_PIN_1);
  GPIO_CLR_PIN(GPIO_C_BASE, GPIO_PIN_1);

  SPI_WRITE(((dev_cmd << 1) & 0x7e) | 0x80);
  SPI_READ(ret);

  ret = 0;
  SPI_WRITE(0x00);
  SPI_READ(ret);

  GPIO_SET_PIN(GPIO_C_BASE, GPIO_PIN_1);
  return ret;
}