SPI-связь между MFRC522 и LPC1768

В настоящее время я реализую небольшой класс C++ для связи через SPI с чипом MFRC522 (на модуле считывания карт IC Mifare RFID-RC522) из LPC1768. Я пользуюсь услугами mbed библиотека, доступ через mbed.h заголовок.

Вот как выглядит мой класс:

#include "mbed.h"

class RFIDScanner
{
public:

    RFIDScanner(PinName p_mosi,
                PinName p_miso,
                PinName p_serialClock,
                PinName p_chipSelect,
                PinName p_reset
                );

    void init();
    void writeToRegister(uint8_t p_register, uint8_t p_data);
    uint8_t readFromRegister(uint8_t reg);

    // Data members:
    SPI        m_spi;   ///< SPI interface for communication.
    DigitalOut m_cs;    ///< chip select for SPI.
    DigitalOut m_reset; ///< Reset pin.

};

Метод чтения:

uint8_t RFIDScanner::readFromRegister(uint8_t p_register)
{
    uint8_t data;

    m_cs = 0;
    m_spi.write(p_register | 0x80);
    data = m_spi.write(0);   
    m_cs = 1;

    return data;
}

Метод записи:

void RFIDScanner::writeToRegister(uint8_t p_register, uint8_t p_data)
{
    m_cs = 0;
    m_spi.write(p_register & 0x7E);
    m_spi.write(p_data);
    m_cs = 1;
}

Проблема в том, что я могу успешно читать r/w регистр. Например, если я вызову метод чтения в реестре 0x14 (сдвинут влево на единицу), я получаю значение 0x80, который является точно значением по умолчанию. С другой стороны, если я попытаюсь написать на него (чтобы включить антенну, например, написав 0x03 в тот же регистр), а затем прочитать его, я все еще получаю то же значение по умолчанию. Это как 0x03 значение никогда не было написано.

Я попытался прочитать несколько читаемых регистров, и значение всегда было правильным, поэтому я почти уверен, что все мои подключения и инициализация хорошие.

Можете ли вы определить, что я делаю неправильно?

0 ответов

Другие вопросы по тегам