Тема перенесена со старого форума, т.к. может быть полезной.
Модуль вот такого вида
подключен к STM32 по шине I2C. Проблема в том, что модуль не отвечает на команды, совсем, питание в норме, данные по интерфейсу доходят. Модуль должен выдавать низкий уровень на выводе IRQ после подачи команды от мк, но он молчит. Код чтения строго по апноуту. В апноуте следующая картинка:
У меня же IRQ всегда в высоком уровне.
Вот кусок кода, который отправляет команду в PN532
void NFC::send ( uint8_t * cmd, uint8_t len )
{
uint8_t sum;
len ++;
// Отправка.
i2c->beginTransmission ( PN532_I2C_ADDRESS );
sum = PN532_PREAMBLE + PN532_PREAMBLE + PN532_STARTCODE2;
i2c->write ( PN532_PREAMBLE );
i2c->write ( PN532_PREAMBLE );
i2c->write ( PN532_STARTCODE2 );
i2c->write ( len );
i2c->write ( ~len + 1 );
i2c->write ( PN532_HOSTTOPN532 );
sum += PN532_HOSTTOPN532;
for ( uint16_t i = 0; i < ( len - 1 ); i++ )
{
i2c->write ( cmd[i] );
sum += cmd[i];
}
i2c->write ( (uint8_t)~sum );
i2c->write ( (uint8_t)PN532_POSTAMBLE );
// Конец отправки.
i2c->endTransmission();
}
Код, который проверяет пин IRQ:
uint8_t NFC::isReady ( void )
{
uint8_t pinState = HAL_GPIO_ReadPin ( _irqPort, _irqPin );
if ( pinState == GPIO_PIN_SET )
return PN532_I2C_BUSY;
else
return PN532_I2C_READY;
}
Отправка данных по шине в режиме опроса без прерываний.