====== NFC čtečka s PN532 ====== ===== Zadání ===== Realizujte čtečku NFC karet standardu ISO/IEC 14443. Použijte NFC modul založený na PN532 a pomocí vhodné sběrnice jej propojte s deskou 32F429IDISCOVERY. Pro zobrazení přijatých dat použijte vestavěný LCD displej. ===== Úvod ===== Cílem tohoto projektu bylo vytvořit zařízení schopné komunikovat s RFID kartami, pracujícími na frekvenci 13,56 MHz. Dále mělo být zajištěno zobrazení dat na displej. ===== Hardware ===== V projektu byly využity dvě hardwarové platformy:\\ * Vývojová deska STM32F429I-Discovery * NFC modul s obvodem PN532 ==== STM32F429I-Discovery ==== Vývojová deska s procesorem od ST a s jádrem ARM Cortex-M4 má vestavěný LCD displej, vhodný pro zobrazení dat. Displej je dotykový-rezistivní a deska je vybavena dedikovaným obvodem STMPE811 pro jeho ovládání. Z těchto důvodů byla tato deska vybrána jako Master zařízení pro tento projekt. {{ :2016:stm32f429-disco_g.png?200 |}} ==== NFC modul ==== Řídícím obvodem použitého NFC modulu je PN532 od NXP, zakoupený na [[http://www.ebay.com/itm/New-PN532-NFC-module-Reader-Writer-3-3V-5V-Arduino-compatible-with-2-S50-card-/161292573998?hash=item258dc95d2e:g:ecAAAOxyOalTYvHW|Ebay]]. Na desce je vytvořena PCB anténa pro kmitočet 13,56 MHz a celé zařízení dokáže zajistit komunikaci s NFC kartou (modulace a demodulace, synchronizace atd.). Pro komunikaci s externími zařízeními jsou k dispozici sběrnice I2C, SPI a HSU, po kterých obvod komunikuje prostřednictvím datových rámců. Pro projekt byl tento modul vybrán jako Slave zařízení. ===== Řešení ===== ==== Softwarové prostředky ==== Pro konfiguraci periferií Master desky byl použit program STM32CubeMX, programování probíhalo v prostředí EmBitz. Pro práci byly využity HAL knihovny od STMicroelectronics. ==== Komunikace mezi Master a Slave ==== Základním úkolem bylo nejprve zajistit komunikaci mezi Master a Slave deskou. Pro komunikační rozhraní byla vybrána sběrnice SPI. Parametry přenosu byly dány firmwarem obvodu PN532 a podle nich byla konfigurována periférie SPI4 v programu STM32CubeMX. Pro ověření funkčnosti byl použit příkaz //GetFirmwareVersion//, pro který je známa očekávaná odpověď. Výpis odpovědi byl realizován přímo do okna prostředí EmBitz pomocí semihostingu. Následující kód ukazuje způsob odeslání příkazu a výpisu odpovědi: ... // frame for command Transmit[0]= 0x01; //Data write byte Transmit[1]= 0x00; Transmit[2]= 0x00; Transmit[3]= 0xff; Transmit[4]= PN532_COMMAND_GETFIRMWAREVERSION; Transmit[5]= 0xfe; Transmit[6]= 0xd4; Transmit[7]= 0x02; Transmit[8]= 0x2a; Transmit[9]= 0x00; switch(HAL_SPI_Transmit(&hspi4, (uint8_t *)Transmit, B_SIZE, 5000)) { case HAL_OK: printf("Transmission OK\n"); HAL_SPI_Receive(&hspi4, (uint8_t *)Receive, B_SIZE, 5000); printf("Received:\n"); for (uint8_t i = 0; i < B_SIZE; i++) { printf(" %2X", Receive[i]); fflush(stdout); } break; case HAL_TIMEOUT: printf("Timeout\n"); break; case HAL_ERROR: printf("Error\n"); break; default: break; } ===== Závěr ===== Bohužel se nepodařilo zprovoznit komunikaci mezi Master a Slave deskou, ani při explicitním zadání rámce příkazu (viz kód) nebyla odpověď obvodu podle očekávání. Další části projektu realizovány nebyly a celkové vypracování je nedostačující.