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
значение никогда не было написано.
Я попытался прочитать несколько читаемых регистров, и значение всегда было правильным, поэтому я почти уверен, что все мои подключения и инициализация хорошие.
Можете ли вы определить, что я делаю неправильно?