Implementa API Platform Abstraction Layer

Visualizza l'origine su GitHub

OpenThread è indipendente dal sistema operativo e dalla piattaforma, con un livello PAL (Platform Abstraction Layer) limitato. Questo PAL definisce:

Architettura di portabilità
  • Interfaccia sveglia per timer in esecuzione con sveglia
  • Interfacce bus (UART, SPI) per la comunicazione dei messaggi dell'interfaccia a riga di comando e di Spinel
  • Interfaccia radio per comunicazione IEEE 802.15.4-2006
  • Routine di inizializzazione specifiche per GCC
  • Entropia per la generazione di numeri casuali reali
  • Servizio di impostazioni per l'archiviazione della configurazione non volatile
  • Interfaccia di logging per la consegna dei messaggi di log OpenThread
  • Routine di inizializzazione specifiche per il sistema

Tutte le API devono essere implementate in base al pacchetto di assistenza per la creazione di livelli di astrazione hardware (HAL) sottostante.

I file API devono essere inseriti nelle seguenti directory:

Tipo Directory
Implementazione PAL specifica per piattaforma /openthread/examples/platforms/platform-name
File di intestazione: API di archiviazione non volatile /openthread/examples/platforms/utils
Tutti gli altri file di intestazione /openthread/include/openthread/platform
BSP HAL /openthread/third_party/platform-name

Sveglia

Dichiarazione dell'API:

/openthread/include/openthread/platform/alarm-milli.h

L'API Alarm fornisce servizi di cronologie e di allarme fondamentali per l'implementazione del timer di livello superiore.

Esistono due tipi di servizi di sveglia: millisecondo e microsecondo. Il Millisecond è necessario per una nuova piattaforma hardware. Il microsecondo è facoltativo.

UART

Dichiarazione dell'API:

/openthread/examples/platforms/utils/uart.h

L'API UART implementa la comunicazione della porta seriale di base tramite l'interfaccia UART.

Sebbene i componenti aggiuntivi CLI e NCP di OpenThread dipendono dall'interfaccia UART per interagire con il lato host, il supporto dell'API UART è facoltativo. Tuttavia, anche se non prevedi di utilizzare questi componenti aggiuntivi nel tuo nuovo esempio di piattaforma hardware, ti consigliamo vivamente di aggiungere il supporto per alcuni motivi:

  • L'interfaccia a riga di comando è utile per verificare che la porta funzioni correttamente
  • Lo strumento Harness Automation utilizza l'interfaccia UART per controllare OpenThread a scopo di test e certificazione

Se la piattaforma hardware di destinazione supporta un modulo CDC USB anziché UART, assicurati di:

  • Installa il driver CDC USB corretto sul lato host
  • Sostituisci l'implementazione dell'API UART con il driver USB CDC (insieme a BSP) sul lato OpenThread, utilizzando gli stessi prototipi di funzioni

Radio

Dichiarazione dell'API:

/openthread/include/openthread/platform/radio.h

L'API Radio definisce tutte le funzioni necessarie chiamate dal livello MAC IEEE 802.15.4 superiore. Il chip della radio deve essere completamente conforme alla specifica IEEE 802.15.4-2006 a 2,4 GHz.

A causa della sua funzionalità avanzata a basso consumo, OpenThread richiede a tutte le piattaforme di implementare il frame automatico in attesa (trasmissione indiretta) per impostazione predefinita, inoltre la tabella di corrispondenza degli indirizzi di origine deve essere implementata nel file sorgente radio.h.

Tuttavia, se l'esempio di una nuova piattaforma hardware prevede una risorsa limitata, la tabella degli indirizzi di origine può essere definita come zero. Per ulteriori informazioni, consulta la sezione Frame automatico in attesa.

Varie/Reimposta

Dichiarazione dell'API:

/openthread/include/openthread/platform/misc.h

L'API Misc/Reset fornisce un metodo per resettare il software del chip ed eseguire una query sul motivo dell'ultimo reset.

Entropia

Dichiarazione dell'API:

/openthread/include/openthread/platform/entropy.h

L'API Entropy fornisce un vero generatore di numeri casuali (TRNG) per il livello superiore, che viene utilizzato per gestire gli asset di sicurezza per l'intera rete OpenThread. L'API deve garantire che venga generato un nuovo numero casuale per ogni chiamata funzione. Gli asset di sicurezza interessati dal TRNG includono:

  • Nonce CCM AES
  • Tremolio ritardato casuale
  • Indirizzo esteso dei dispositivi
  • Il periodo casuale iniziale nel timer di manipolazione
  • ID token/messaggio CoAP

Tieni presente che molte piattaforme hanno già integrato un generatore di numeri casuali, esponendo l'API nel suo pacchetto BSP. Nel caso in cui la piattaforma hardware di destinazione non supporti il TRNG, potresti utilizzare il campionamento del modulo ADC per generare un numero casuale a lunghezza fissa. Esegui il campionamento su più iterazioni se necessario per soddisfare i requisiti TRNG (uint32_t).

Quando la macro MBEDTLS_ENTROPY_HARDWARE_ALT è impostata su 1, questa API deve fornire anche un metodo per generare l'entropia hardware utilizzata nella libreria mbedTLS.

Spazio di archiviazione non volatile

Dichiarazioni API:

/openthread/include/openthread/platform/flash.h

o

/openthread/include/openthread/platform/settings.h

Il requisito di archiviazione non volatile può essere soddisfatto implementando una delle due API elencate sopra. L'API Flash implementa un driver di archiviazione flash, mentre l'API Settings fornisce funzioni per l'implementazione di un'operazione Flash sottostante nella parte superiore.

Queste API espongono al livello superiore:

  • Le dimensioni dello spazio di archiviazione non volatile disponibili per l'archiviazione dei dati delle applicazioni (ad esempio, set di dati operativi attivi/in attesa, parametri di rete correnti e credenziali dei dispositivi dei thread per il riconnessione dopo il ripristino)
  • Lettura, scrittura, cancellazione ed esecuzione di query sulle operazioni relative allo stato Flash

Utilizza OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE nel file di configurazione principale dell'esempio della piattaforma per indicare l'API che la piattaforma deve utilizzare. Se è impostata su 1, è necessario implementare l'API Flash. In caso contrario, deve essere implementata.

Questo flag deve essere impostato nel file /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h.

Logging

Dichiarazione dell'API:

/openthread/include/openthread/platform/logging.h

L'API Logging implementa la funzionalità di logging e debug di OpenThread, con diversi livelli di output di debug disponibili. Questa API è facoltativa se non prevedi di utilizzare il logging di OpenThread sulla tua nuova piattaforma hardware di esempio.

Il livello più alto e più dettagliato è OPENTHREAD_LOG_LEVEL_DEBG, che stampa tutte le informazioni sul pacchetto e le righe di log non elaborate tramite la porta seriale o sul terminale. Scegli il livello di debug più adatto alle tue esigenze.

Specifico per il sistema

Dichiarazione dell'API:

/openthread/examples/platforms/openthread-system.h

L'API specifica del sistema fornisce principalmente operazioni di inizializzazione e deinizializzazione per la piattaforma hardware selezionata. Questa API non viene chiamata dalla libreria OpenThread stessa, ma può essere utile per il tuo sistema o i tuoi RTO. In questo file di origine puoi anche implementare l'inizializzazione di altri moduli (ad esempio UART, Radio, Random, Miss/Reset).

L'implementazione di questa API dipende dal tuo caso d'uso. Se vuoi utilizzare le applicazioni CLI e NCP generate per una piattaforma di esempio, devi implementare questa API. In caso contrario, qualsiasi API può essere implementata per integrare i driver di piattaforma di esempio nel tuo sistema/RTOS.