️ Esse software é o padrão de transmitir a banda ISM de 915MHz legal nos Estados Unidos. Transmitir nessa banda pode não ser legal em seu país.
Como compilar
$ git clone --recurse-submodules https://github.com/jpaximadas/YeeNet.git
$ cd YeeNet
$ git config core.hooksPath git-hooks # Only necessary if you plan on contributing
$ export YEENET_BOARD=BLUEPILL_F103
$ make -C libopencm3
$ make -C src
Se você tem um git mais antigo, ou ficou à frente de si mesmo e pulou o --recurse-submodules você pode consertar as coisas executando git submodule update --init (isso é necessário apenas uma vez)
Se você estiver segmentando o Conselho de Desenvolvimento que não seja o STM32 "Blue Pill", mude Yeenet_board de acordo. Para uma lista de placas suportadas, consulte as placas suportadas
Alterações subsequentes nos arquivos de origem exigem apenas make -C src
Como fazer upload
Este repositório usa o STM32 MCU Programming Toolset: https://github.com/stlink-org/stlink
- Verifique se o boot0 não está definido de modo que a placa apagará a memória após uma redefinição
- Certifique -se de que o SWdio, o SWCLK e o GND estão conectados ao MCU (conecte apenas 3.3V se você pretender alimentar a placa do programador)
- Programar o chip:
O Openocd é uma alternativa ao STLink, mas não é suportado pelo make upload .
Como depurar
Depois que o binário for enviado, execute o seguinte no diretório SRC:
- Inicie o servidor GDB
- Em outro terminal-ainda no SRC-inicia o GDB e configure
$ gdb yeenet_router_firmware.elf
$ set processor armv7
$ target remote localhost:4242
$ load yeenet_router_firmware.elf
Mais gdb na leitura do STM:
https://www.st.com/resource/en/user_manual/dm00613038-stm32cubeide-stlink-gdb-sever-stmicroelectronics.pdf
Observe que este PDF usa o STMCUBE GDB Server, não o STLink de código aberto. No entanto, da perspectiva do cliente GDB, não há diferença. A página 6/15 do PDF mostra como usar pontos de interrupção e pontos de observação.
Como usar a interface serial
Existem drivers em série no desenvolvimento aqui: https://github.com/jpaximadas/yeenet-ruter-driver-python
Diretórios
- SRC contém o programa
- Compartilhado contém arquivos compartilhados do libopencm3
Placas suportadas
A Yeenet pretende atingir as placas de desenvolvimento STM32 prontamente disponíveis e de baixo custo. Veja abaixo uma tabela de metas suportadas e seu valor correspondente de yeenet_board.
| Quadro | Yeenet_board |
|---|
| Pílula azul stm32f103 | Bluepill_f103 |
| Pílula preta STM32F411 | Blackpill_F411 |
O suporte a outras placas pode ser adicionado criando uma definição de plataforma apropriada na platform/ e atualizando yeenet.mk de acordo.
Configuração da placa de ensaio
A tabela a seguir mostra como os pinos nas placas de desenvolvimento suportados devem ser conectados ao SX127X e USB ao UART. Leia os avisos no final da seção antes de tentar a placa de ensaio.
| Função | Pílula azul/pílula preta |
|---|
| TX serial | PA9 |
| Rx em série | PA10 |
| IRQ | PA0 |
| Mosi | PA7 |
| Miso | PA6 |
| Sck | PA5 |
| CS/SS | A1 |
| RST | B9 |
| Endereço Bit 0 | B10 |
| Endereço Bit 1 | B11 |
- O TX/RX serial deve se conectar a um chip USB/UART.
- O IRQ deve se conectar ao DIO0 no SX127X. (Pode ser chamado D0 ou G0 em uma placa de fuga)
- Mosi, Miso, SCK e SS devem se conectar da placa de dev aos pinos apropriados na fuga SX127X.
- O RST deve se conectar da placa de dev ao pino apropriado na fuga SX1276X.
- Os bits de endereço 0 e 1 devem ser executados da placa de dev para 3.3V ou terra.
️ Não alimenta a placa de mais de uma fonte de tensão. Isso danificará o regulador no PCB.
️ Power a placa de dev SX127X ou SX127X apenas com 3,3 volts. O layout dos pinos acima das rotas sinais do SX127X em pinos do Bluepill que não são tolerantes a 5 volts. A quebra do Adafruit SX127X emitirá sinais lógicos de 5 volts e danificará o Bluepill se for alimentado de 5 volts.
Maneira recomendada para alimentar as placas
- Powe o Bluepill de 5 volts do USB para o UART. O Bluepill regulamentará isso até 3,3 volts para seu próprio uso. Como alternativa, o Bluepill pode ser alimentado com 3,3 volts de um regulador no USB para o UART.
- Ligue o SX127X de um regulador decente de 3,3 volts. O regulador de 3,3 volts do Bluepill não é bom o suficiente para a tarefa. Use o do seu USB para o UART, se estiver presente.
- Deixe 3,3 volts no programador ST-Link desconectado.
PENDÊNCIA
- Trabalhe no manipulador de pacotes
- Melhorar o modo de falha quando um ACK chega tarde
- Como as ACKs afetam o manipulador de pacotes ao trabalhar com pacotes não achados
- O recurso de soneca TX funciona?
- Evite que o packet_handler dereferenciar TX_PKT NULL POINTER imediatamente após a configuração ao fazer um Nack?
- Forneça uma função de camadas mais altas para mover a localização do ponteiro rx_pkt em packet_handler
- Escreva o roteador de pacotes
- Implementar USB e reter a funcionalidade UART
- Escreva documentação
- Melhore o backoff_rng em packet_handler para que não esgote o pool de entropia rapidamente
- Melhorar a organização da configuração de hardware
- Iniciar o repositório da interface do usuário (use Dear Imgui)
- Adicione a funcionalidade SX127X FSK ao modem_xl.c
Obtendo uma placa de breakout
A placa de breakout da Adafruit pode ocupar muito espaço para acessar todos os pinos e pode ser caro. Você pode obter uma prancha nua aqui:
O módulo de rádio RFM95 pode ser obtido da Aliexpress ou Banggood por menos de cinco dólares por peça.
Notas
Notas SX127X
- O pino de redefinição na placa Adafruit Breakout deve ser mantido baixo para que o dispositivo funcione, ao contrário das instruções no site da Adafruit.
- O pino de redefinição deve ser puxado com baixo momento para redefinir o dispositivo quando o MCU reinicializa. Este registro de garantias é redefinido para o estado original. Não fazer isso pode causar comportamento estranho.
- Para limpar o registro dos sinalizadores do IRQ, os zeros devem ser escritos duas vezes sobre o SPI. Este é um bug de hardware.
- Ao colocar o SX127X no modo Lora, ele deve ser colocado no modo de suspensão primeiro. Não em espera ou outros modos.
- O mestre SPI não pode escrever para o FIFO fora do modo de espera
- O FIFO nem sempre é limpo durante uma mudança de modo. Nunca assuma que o FIFO é automaticamente limpo
- O modo de cabeçalho explícito em SF = 6 não funciona. A função de configuração de modulação automática neste software não rejeitará essa configuração de modulação.
- Este código não toca no byte "Sync Word" que permite que os pacotes de rejeitar Loras automaticamente.
Notas do Bluepill dev Board
- O LED PC13 na placa de dev "Bluepill" possui seu ânodo vinculado a 3,3 volts e está cátodo ligado ao PC13 (por algum motivo). Isso significa que o PC13 deve ser puxado para baixo para ligar o LED.
- Não tente alimentar o SX127X da fonte de 3,3 volts do Bluepill. O regulador de bordo não pode realizar a tarefa durante o RX ou TX. Seu SX127X vai dourar e redefinir.
Notas USB para UART
- Usar uma placa Arduino com o CH430 USB para o UART Chip como seu dispositivo USB para UART, não é uma tarefa simples. O que é rotulado como TX no PCB (mas na verdade é RX da perspectiva do Arduino) pode ser colocado em um pino TX tolerante a 5 volts da sua placa de dev. Aí vem a parte difícil. O que é labalelado como RX no PCB (na verdade, o TX da perspectiva do Arduino) não funcionará se você apenas conectá -lo ao pino RX da sua placa de dev. Você precisa soldar diretamente o chip CH430. Consulte a folha de dados para descobrir onde está o pino TX do CH430. A carta no final do "CH430" é muito importante.
Yee: https://youtu.be/iepv31_e__4
