|
OpenThread é independente de sistema operacional e plataforma, com uma estreita Platform Abstraction Layer (PAL). Este PAL define:

- Interface de alarme para cronômetro de funcionamento livre com alarme
- Interfaces de barramento (UART, SPI) para comunicar mensagens CLI e Spinel
- Interface de rádio para comunicação IEEE 802.15.4-2006
- Rotinas de inicialização específicas do GCC
- Entropia para geração de número aleatório verdadeiro
- Serviço de configurações para armazenamento de configuração não volátil
- Interface de registro para entrega de mensagens de registro OpenThread
- Rotinas de inicialização específicas do sistema
Todas as APIs devem ser implementadas com base no Pacote de Suporte de Compilação (BSP) da Camada de Abstração de Hardware (HAL).
Os arquivos da API devem ser colocados nos seguintes diretórios:
Tipo | Diretório |
---|---|
Implementação PAL específica da plataforma | /openthread/examples/platforms/ platform-name |
Arquivos de cabeçalho - API de armazenamento não volátil | /openthread/examples/platforms/utils |
Todos os outros arquivos de cabeçalho | /openthread/include/openthread/platform |
HAL BSP | /openthread/third_party/ platform-name |
Alarme
Declaração de API:
/openthread/include/openthread/platform/alarm-milli.h
A API de alarme fornece serviços de temporização e alarme fundamentais para a implementação do temporizador da camada superior.
Existem dois tipos de serviço de alarme, milissegundo e microssegundo . Milissegundos são necessários para uma nova plataforma de hardware. O microssegundo é opcional.
UART
Declaração de API:
/openthread/include/openthread/platform/uart.h
A API UART implementa comunicação de porta serial fundamental por meio da interface UART.
Embora os add-ons OpenThread CLI e NCP dependam da interface UART para interagir com o host, o suporte UART API é opcional. No entanto, mesmo se você não planeja usar esses complementos em seu novo exemplo de plataforma de hardware, é altamente recomendável adicionar suporte por alguns motivos:
- A CLI é útil para validar se a porta funciona corretamente
- A ferramenta Harness Automation usa a interface UART para controlar OpenThread para fins de teste e certificação
Se a plataforma de hardware de destino suportar um módulo USB CDC em vez de UART, certifique-se de:
- Instale o driver USB CDC correto no host
- Substitua a implementação da API UART pelo driver USB CDC (junto com BSP) no lado do OpenThread, usando os mesmos protótipos de função
Rádio
Declaração de API:
/openthread/include/openthread/platform/radio.h
A API Radio define todas as funções necessárias chamadas pela camada MAC IEEE 802.15.4 superior. O chip de rádio deve ser totalmente compatível com a especificação 2.4 GHz IEEE 802.15.4-2006.
Devido ao seu recurso aprimorado de baixo consumo de energia, o OpenThread requer que todas as plataformas implementem o quadro automático pendente (transmissão indireta) por padrão, e a tabela de correspondência de endereço de origem também deve ser implementada no arquivo de origem radio.h
.
No entanto, se seu novo exemplo de plataforma de hardware tiver recursos limitados, a tabela de endereços de origem pode ser definida como comprimento zero. Consulte Auto Frame Pending para obter mais informações.
Misc / Reset
Declaração de API:
/openthread/include/openthread/platform/misc.h
A API Misc / Reset fornece um método para redefinir o software no chip e consultar o motivo da última redefinição.
Entropia
Declaração de API:
/openthread/include/openthread/platform/entropy.h
A API Entropy fornece um verdadeiro gerador de números aleatórios (TRNG) para a camada superior, que é usado para manter ativos de segurança para toda a rede OpenThread. A API deve garantir que um novo número aleatório seja gerado para cada chamada de função. Ativos de segurança afetados pelo TRNG incluem:
- AES CCM nonce
- Jitter retardado aleatório
- Endereço estendido dos dispositivos
- O período inicial aleatório no temporizador de gotejamento
- IDs de token / mensagem CoAP
Observe que muitas plataformas já integraram um gerador de números aleatórios, expondo a API em seu pacote BSP. No caso de a plataforma de hardware de destino não suportar TRNG, considere aproveitar a amostragem do módulo ADC para gerar um número aleatório de comprimento fixo. Faça a amostragem em várias iterações, se necessário, para atender aos requisitos TRNG (uint32_t).
Quando a macro MBEDTLS_ENTROPY_HARDWARE_ALT
é definida como 1
, esta API também deve fornecer um método para gerar a entropia de hardware usada na biblioteca mbedTLS.
Armazenamento não volátil
Declarações de API:
/openthread/include/openthread/platform/flash.h
ou
/openthread/include/openthread/platform/settings.h
O requisito de armazenamento não volátil pode ser satisfeito com a implementação de uma das duas APIs listadas acima. A API Flash implementa um driver de armazenamento flash, enquanto a API de configurações fornece funções para uma implementação de operação flash subjacente na camada superior.
Essas APIs expõem à camada superior:
- O tamanho de armazenamento não volátil disponível usado para armazenar dados de aplicativo (por exemplo, conjunto de dados operacional ativo / pendente, parâmetros de rede atuais e credenciais de dispositivos de thread para reconexão após redefinição)
- Ler, gravar, apagar e consultar operações de status do flash
Use OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE
no arquivo de configuração principal de seu exemplo de plataforma para indicar qual API a plataforma deve usar. Se definido como 1
, a API do Flash deve ser implementada. Caso contrário, a API de configurações deve ser implementada.
Este sinalizador deve ser definido em seu /openthread/examples/platforms/ platform-name /openthread-core- platform-name -config.h
.
Exploração madeireira
Declaração de API:
/openthread/include/openthread/platform/logging.h
A API Logging implementa a funcionalidade de registro e depuração do OpenThread, com vários níveis de saída de depuração disponíveis. Esta API é opcional se você não planeja utilizar o log do OpenThread em seu novo exemplo de plataforma de hardware.
O nível mais alto e detalhado é OPENTHREAD_LOG_LEVEL_DEBG
, que imprime todas as informações do pacote bruto e registra as linhas através da porta serial ou no terminal. Escolha um nível de depuração que melhor atenda às suas necessidades.
Específico do sistema
Declaração de API:
/openthread/examples/platforms/openthread-system.h
A API específica do sistema fornece principalmente operações de inicialização e desinicialização para a plataforma de hardware selecionada. Esta API não é chamada pela própria biblioteca OpenThread, mas pode ser útil para seu sistema / RTOS. Você também pode implementar a inicialização de outros módulos (por exemplo, UART, Radio, Random, Misc / Reset) neste arquivo de origem.
A implementação desta API depende do seu caso de uso. Se desejar usar os aplicativos CLI e NCP gerados para uma plataforma de exemplo , você deve implementar esta API. Caso contrário, qualquer API pode ser implementada para integrar os drivers de plataforma de exemplo em seu sistema / RTOS.