reverse libnfc:如何用arduino和wire库读写pn532 xram寄存器?

时间:2016-07-27 07:47:08

标签: arduino nfc i2c lib-nfc

Libnfc需要读写pn532 XRAM(有时是SFR)。 例如,我已经写了这个案子,但它不起作用:

case 0x08: { //WriteRegister Page 78 
    int address;
    int value;

    uint8_t dataSum = btDCS;

    for (int i = 0; i < abtRxBuf[3] - 2; i += 3) { //number of address to write with value = 3 bytes

        memcpy(&address, (int*) abtRxBuf + 7 + i, 2); // 2 bytes address
        memcpy(&value, (int*) abtRxBuf + 9 + i, 1);   // 1 byte value

        pn532_packetbuffer[0/*1*/] = address >> 8;
        pn532_packetbuffer[1/*2*/] = address & 0xff;
        pn532_packetbuffer[2/*2*/] = value;

        Wire.write(pn532_packetbuffer, 3);
        Serial.write(pn532_packetbuffer, 3);
        dataSum -= sum_array(pn532_packetbuffer, 3);
    }

    writePostStuff(dataSum);
    break;
}

该命令由3个字节组成,2表示xram地址,1表示值。

以相同的方式阅读注册工作,读取n个地址并检索n个值。

我使用有线库,因为pn532处于i2c模式

这是参考部分:

  • 7.2.5 WriteRegister此命令用于覆盖PN532的一个或多个内部寄存器的内容(位于 SFR区域或XRAM存储空间中。)

输入: D4 08 ADR1H ADR1L VAL1 ... ADRnH ADRnL VALn

ADR1H ADR1L第一个地址(高字节和低字节),  VAL1要写入的第一个值, ADRnH ADRnL第n个地址(高字节和低字节),  要写的第n个值。

输出: D5 09

  • 描述:对于每个地址ADR,PN532执行写操作 在位于地址ADR的寄存器中操作VAL值。
  • XRAM内存映射寄存器。完整的地址由。给出 高字节和低字节地址。

0 个答案:

没有答案