" http://stm32f4-discovery.net/2014/07/libra...32f4xx-devices/ "
Перед этим через STM32CubeL4 создал проект для SPI1 (под Кейл).
Соответственно в скачанной библиотеке поправил вызовы функций передачи и приема байтов по SPI через HAL-драйверы.
В результате с RC522 нормально читаю все регистры. Их содержимое соответствует тому, что должно быть после сброса по умолчанию.
Потом провожу инициализацию и вижу правильное их изменение .
Антенна включается и поле видно даже петлей.
После этого проводится непрерывный запрос карты командой 0х26 (функция из библиотеки TM_MFRC522_Check(CardID)).
В поле виден байт запроса и потом байт остановки (функция TM_MFRC522_Halt())
Независимо от присутствия/отсутствия карты ничего не происходит (всегда status = MI_ERR).
Осциллографом из ответов ничего не обнаруживается ни в поле, ни на ножках RC522.
Была попытка продублировать ответы карты внутри RC522 на ножку MFOUT (установкой регистра TxSelReg/0х16 байтом 0х17), но на этой ножке всегда 3-е состояние почему-то.
Всё это проверено на 2 считывателях, 3 картах и 2 брелках (из комплекта).
Таким образом нахожусь в недоумении.
Я что-то не включаю? Хотя по той библиотеке я делаю тот же Init.
Могут ли быть два считывателя подряд неисправными?
MFRC522 подключен к SPI1 STM32L476
PE15 - MOSI
PE14 - MISO
PE13 - SCK
PE12 - SS
PE10 - RST
При включение сначала сигнал RST выставляется в "1".
Потом инициализация:
Код
void TM_MFRC522_Init(void)
{
TM_MFRC522_Reset();
TM_MFRC522_WriteRegister(MFRC522_REG_T_MODE, 0x8D);
TM_MFRC522_WriteRegister(MFRC522_REG_T_PRESCALER, 0x3E);
TM_MFRC522_WriteRegister(MFRC522_REG_T_RELOAD_L, 30);
TM_MFRC522_WriteRegister(MFRC522_REG_T_RELOAD_H, 0);
TM_MFRC522_WriteRegister(MFRC522_REG_TX_SELL, 0x15);
TM_MFRC522_WriteRegister(MFRC522_REG_TX_AUTO, 0x40);
TM_MFRC522_WriteRegister(MFRC522_REG_MODE, 0x3D);
TM_MFRC522_AntennaOn(); //Open the antenna
}
{
TM_MFRC522_Reset();
TM_MFRC522_WriteRegister(MFRC522_REG_T_MODE, 0x8D);
TM_MFRC522_WriteRegister(MFRC522_REG_T_PRESCALER, 0x3E);
TM_MFRC522_WriteRegister(MFRC522_REG_T_RELOAD_L, 30);
TM_MFRC522_WriteRegister(MFRC522_REG_T_RELOAD_H, 0);
TM_MFRC522_WriteRegister(MFRC522_REG_TX_SELL, 0x15);
TM_MFRC522_WriteRegister(MFRC522_REG_TX_AUTO, 0x40);
TM_MFRC522_WriteRegister(MFRC522_REG_MODE, 0x3D);
TM_MFRC522_AntennaOn(); //Open the antenna
}
Привожу содержимое регистров
Далее показаны первые 31 регистр перед запросом и после запроса
(PICC_REQIDL=0х0С)
CODE
Рег. - Иниц. - Запрос+Стоп
0x01 - 0x20 - 0x0C
0x02 - 0x80 - 0xF7
0x03 - 0x00 - 0x00
0x04 - 0x14 - 0x44
0x05 - 0x00 - 0x04
0x06 - 0x00 - 0x00
0x07 - 0x29 - 0x39
0x08 - 0x00 - 0x05
0x09 - 0x26 - 0x00
0x0A - 0x00 - 0x00
0x0B - 0x08 - 0x08
0x0C - 0x10 - 0x10
0x0D - 0x00 - 0x04
0x0E - 0xA0 - 0xA0
0x0F - 0x00 <-
0x10 - 0x00 <-
0x11 - 0x3D <-
0x12 - 0x00 <-
0x13 - 0x00 <-
0x14 - 0x83 <-
0x15 - 0x40 <-
0x16 - 0x15 <-
0x17 - 0x84 <-
0x18 - 0x84 <-
0x19 - 0x4D <-
0x1A - 0x00 <-
0x1B - 0x00 <-
0x1C - 0x62 <-
0x1D - 0x00 <-
0x1E - 0x00 <-
0x1F - 0xEB <-
0x01 - 0x20 - 0x0C
0x02 - 0x80 - 0xF7
0x03 - 0x00 - 0x00
0x04 - 0x14 - 0x44
0x05 - 0x00 - 0x04
0x06 - 0x00 - 0x00
0x07 - 0x29 - 0x39
0x08 - 0x00 - 0x05
0x09 - 0x26 - 0x00
0x0A - 0x00 - 0x00
0x0B - 0x08 - 0x08
0x0C - 0x10 - 0x10
0x0D - 0x00 - 0x04
0x0E - 0xA0 - 0xA0
0x0F - 0x00 <-
0x10 - 0x00 <-
0x11 - 0x3D <-
0x12 - 0x00 <-
0x13 - 0x00 <-
0x14 - 0x83 <-
0x15 - 0x40 <-
0x16 - 0x15 <-
0x17 - 0x84 <-
0x18 - 0x84 <-
0x19 - 0x4D <-
0x1A - 0x00 <-
0x1B - 0x00 <-
0x1C - 0x62 <-
0x1D - 0x00 <-
0x1E - 0x00 <-
0x1F - 0xEB <-