Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:p2p-mrf24j40

Zadání

Pomocí dvojice modulů PmodRF2 (čipset MRF24J40) připojených ke kitům FRDM-KL25Z realizujte experimentální rádiový spoj v pásmu 2.4GHz. Vytvořte firmware pro testování spojení - měření chybovosti, rychlosti přenosu, RTT apod. Proveďte měření základních parametrů v závislosti na vzdálenosti modulů.

Úvod

Cílem projektu bylo připojit moduly PmodRF2 k vývojové desce FRDM-KL25Z. Poté navázat komunikaci mezi deskami a RF moduly a následně komunikaci mezi deskami navzájem skrze rádiový signál na frekvenci 2.4 GHz protokolu ZigBee. Poté, jakmile se naváže komunikace, je třeba změřit základní parametry spojení jako je chybovost, rychlost přenosu, RTT, výkony signálu a také dosah. Poté změřit tyto parametry v závislosti na vzdálenosti a vyhodnotit. Bohužel se podařilo uskutečnit pouze připojení a inicializaci RF modulu.

Vývojový hardware

Kit FRDM-KL25Z

  • Freescale, 32 ARM, Cortex M0+
  • MMA8451Q accelerometer, tri color LED
  • Easy access to MCU I/O
  • Sophisticated OpenSDA debug interface
  • Mass storage device flash programming interface (default)
  • P&E Multilink interface provides run-control debugging and compatibility with IDE tools
  • Programmable OpenSDA debug interface with multiple applications

RF modul PmodRF2

  • Digilent inc., RF module, MRF24J40 chip
  • IEEE 802.15 compliant RF transceiver
  • Supports ZigBee, MiWi, MiWi P2P and proprietary wireless networking protocols
  • ISM band 2.405GHz to 2.48GHz operation
  • Simple SPI communication interface
  • Integrated 20MHz and 32.768 oscillator circuitry

Vývojový software

Zdrojový kód byl napsán a kompilován ve webovém prostředí MBED.
Algoritmus se skládá z inicializace čipsetu MRF24J40 a vlastního vysílání a příjmu dat.
Níže je popsán kód pouze pro inicializaci a možnosti nastavení modulu.

Základem je komunikace po sběrnici SPI.
Veškerá nastavení se provádějí pomocí nastavování a čtení hodnot z konfiguračních registrů. Jejich detailní popis je uveden v datasheetu výrobce.

Adresace registrů je provedena ve dvou variantách, krátká, 6-bitová (registry 0x00 až 0x3F) a dlouhá, 10-bitová (registry 0x200 až 0x24C). První a poslední bity adresy jsou použity pro režii SPI komunikace.

Příklad funkce pro zápis a čtení registru:

void write_short (int adr, int data)                        //Zápis do krátké adresy
{
    cs = 0;                                                 //zvolit slave
    spi.write((adr<<1 & 0b01111110) | 0x01);                //posli adresu, 0xxxx - short, xxx1 zapis
    spi.write(data);                                        //data
    cs = 1;                                                 //odpojit slave
    wait(0.1);
}
int read_long(int adr)                                      //čtení z dlouhé adresy
{
    cs = 0;                                                 //zvolit slave
    int ahigh = adr >> 3;                                   //posuv adresy pro
    int alow = adr << 5;                                    //posuv adresy pro 
    spi.write(0x80 | ahigh);                                //první část adresy, 1 pro long
    spi.write(alow);                                        //druhá část adresy      
    int ret = spi.write(0);                                 //prázná data
    cs = 1;                                                 //odpojit slave
    return ret;                                             //navrat ctene hodnoty
}

Inicializace

Modul je nutné před použitím nejprve inicializovat.

Vycházelo se z doporučení, uvedeného výrobcem v datasheetu. Pro individuální potřeby se nastavení bude lišit.

    write_short(MRF_PACON2, 0x98); // – Inicializace FIFOEN = 1, TXONTS = 0x6.
    write_short(MRF_TXSTBL, 0x95); // – Inicializace RFSTBL = 0x9.
 
    write_long(MRF_RFCON0, 0x03);  // – Inicializace RFOPT = 0x03.
    write_long(MRF_RFCON1, 0x01);  // – Inicializace VCOOPT = 0x02.
    write_long(MRF_RFCON2, 0x80);  // – Inicializace PLL (PLLEN = 1).
    write_long(MRF_RFCON6, 0x90);  // – Inicializace TXFIL = 1 a 20MRECVR = 1.
    write_long(MRF_RFCON7, 0x80);  // – Inicializace SLPCLKSEL = 0x2 (100 kHz Interni oscilator).
    write_long(MRF_RFCON8, 0x10);  // – Inicializace RFVCO = 1.
    write_long(MRF_SLPCON1, 0x21); // – Inicializace CLKOUTEN = 1, SLPCLKDIV = 0x01.
 
    //  Konfigurace pro síť bez Beacon rámce
 
    write_short(MRF_BBREG2, 0x80);  //  CCA mod jako ED
    write_short(MRF_CCAEDTH, 0x60); // – Nastavit CCA ED prahu.
    write_short(MRF_BBREG6, 0x40);  // – Vkládat RSSI do RXFIFO.
 
    set_interrupts();               //nastavení přerušení
    set_channel(6);                 //zvolení RF kanálu
 
    write_short(MRF_RFCTL, 0x04);   //  – Reset RF modulu.
    write_short(MRF_RFCTL, 0x00);   // 
 
    wait(0.1);                      // minimalne 200us

Jelikož se jedná o PAN síť, je třeba nastavit moduly tak aby patřily právě do jedné sítě, označené identifikátorem PANID.
Příklad nastavení PANID:

void set_pan(int panid)                        //nastaveni PANID
{
    write_short(MRF_PANIDH, panid >> 8);
    write_short(MRF_PANIDL, panid & 0xff);
}
 
int get_pan(void)                             //čtení PANID
{
    int panh = read_short(MRF_PANIDH);
    return panh << 8 | read_short(MRF_PANIDL);
}

V každé sítí musí mít každé zařízeni jedinečnou adresu.
Příklad nastavení adresy:

void set_adr(int address16)                    //nastavení adresy
{
    write_short(MRF_SADRH, address16 >> 8);
    write_short(MRF_SADRL, address16 & 0xff);
}
 
int get_adr(void)                              //čtení adresy
{
    int a16h = read_short(MRF_SADRH);
    return a16h << 8 | read_short(MRF_SADRL);
}

Vysílání

Pakety se vysílají sestavením zprávy, která se skládá z délky hlavičky, délky obsahu, hlavičky a samotného obsahu. Pote se zpráva uloží do FIFO paměti a spustí odeslání.

Přijímání

Jakmile je zpráva vyslána, na přijímací straně o tom modul informuje prostřednictvím přerušení a zprávu uloží do FIFO paměti. Procesor tuto paměť přečte a zprávu zpracuje.

Závěr

Podařilo se připojit RF moduly ke kitům a navázat s nimi komunikaci prostřednictvím SPI sběrnice. Také byly napsány funkce pro zapisování a čtení hodnot do konfiguračních registrů a inicializaci, což bylo prakticky ověřeno. Bohužel se nepodařilo zprovoznit rádiový přenos mezi moduly, tudíž nebylo možno testovat spojení. Byla tedy splněna pouze malá část zadání. I tak to někomu může pomoct při pochopení komunikace s RF moduly na bázi čipu MRF24J40 a poté i navázat komunikaci.

2015/p2p-mrf24j40.txt · Poslední úprava: 2016/01/17 23:50 autor: Tomáš Kyselý