Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:nfc-reader

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.

NFC modul

Řídícím obvodem použitého NFC modulu je PN532 od NXP, zakoupený na 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í.

2016/nfc-reader.txt · Poslední úprava: 2017/01/14 22:21 autor: Ondřej Sládek