Gravador de produção Standalone para STM8


Introdução

Vimos anteriormente como gravar binários (.s19 ou .srec) no STM8 usando o ST Visual Programmer (STVP). Se você ainda não leu esse artigo, clique aqui.

Mas com esse método, para gravar uma placa com um STM8, é necessário ter um computador com o STVP instalado e uma pessoa operadora que saiba carregar o binário, configurar os Option Bytes, proteger a memória e finalmente gravar o STM8.

Esse artigo vai trazer um passo a passo de como modificar uma placa de desenvolvimento (a STM8SVLDISCOVERY ou a STM8S-DISCOVERY) para armazenar o binário e configurações de Option Bytes dentro do gravador, para que ele grave placas com STM8 sem precisar de um computador ou do STVP. Para seguir esse roteiro e fazer o Standalone, serão necessários:


Modificações de hardware

Fazendo o conector

Primeiro, serão necessárias algumas modificações no hardware das placas:
  • Desconecte as placas na área demarcada


  • A placa de cima é o gravador que usaremos. E esses são os principais componentes dela:


  • É necessário soldar o conector de gravação do ARM gravador, e para isso vamos preparar um conector especial com uma barra de pinos macho dupla com 8 pinos e um pedaço de fio:


  • O conector CN5 da placa tem 7 pinos, mas vamos precisar do sinal de reset (NRST) que não está nesse conector. Então vamos cortar um pedaço do oitavo pino, e soldar um fio para fora, de maneira que o conector encaixe corretamente no conector CN5 e que o sinal do pino 8 modificado saia pelo fio que soldamos:

  • Solde o conector preparado em CN5, e agora vamos soldar o cabinho vermelho entre o resistor R16 e o capacitor C11 para termos o sinal de reset (NRST) do gravador.


  • Agora temos o conector pronto para gravar o microcontrolador gravador da placa



Adaptando a alimentação da placa

Ainda é necessário fazer uma última modificação, e essa é diferente caso você tenha a placa STM8SVLDISCOVERY ou a placa STM8S-DISCOVERY:

  • Se tiver a STM8SVLDISCOVERY: do outro lado da placa, é necessário desgastar o verniz até ver o cobre (por exemplo, com um estilete). E deve-se curto circuitar os pontos (vermelho):


  • Se tiver a STM8S-DISCOVERY: do outro lado da placa, é necessário desgastar o verniz até ver o cobre (por exemplo, com um estilete). E deve-se curto circuitar os pontos (amarelo):



Modificações de firmware

Conexões dos pinos de gravação

O microcontrolador presente no gravador da placa modificada é um ARM Cortex M3 (STM32F103C8T6), então precisamos de um gravador/debugger de ARM/STM32 para gravá-lo com o Firmware que contém os binários do STM8. Pode ser qualquer gravador/debugger de STM32 como as placas DiscoveryNucleo, ou o ST-LINK/V2. Nesse artigo, vamos usar a placa NUCLEO.
  • Primero, é necessário desconectar os Jumpers CN2 para habilitar o pinos CN4 para reprogramarmos o microcontrolador do Standalone


  • Vamos conectar o conector CN5 da placa Standalone com o conector CN4 da placa NUCLEO (você pode conferir a ligação dos pinos no esquemático da Discovery do STM8 e no da NUCLEO)




  • Conecte a NUCLEO ao PC e alimente o Standalone via USB:


Modificando o firmware

Para modificar o firmware do gravador precisamos da IDE IAR Embedded Workbench (EWARM). Para instalação dele, siga o passo 1 desse roteiro de instalação.

Com a IDE instalada, vamos fazer uma cópia do projeto do gravador Standalone, para isso:

  • Ou, se já usa o Git, é só acessar o Git na pasta que quer salvar o projeto e colocar o seguinte comando:

    git clone https://github.com/diegomendesmoreno/STM8_Standalone

Agora abra a pasta do projeto em \STM8_Standalone\Project e abra o arquivo STLink.eww.


Configurações do Standalone

Adicionando o binário ao projeto

Voltando a pasta do projeto, vá na pasta \STM8_Standalone\Conversor, e cole aqui o seu binário (
.s19 ou .srec) que você aprendeu nesse post onde pegar.

Com o binário na pasta, rode o arquivo S19Converter.exe, digite o nome do arquivo binário (incluindo a extensão.s19 ou .srec) e o programa vai transformar o binário em um vetor no arquivo HexCode.c dentro do projeto no IAR.


Voltando ao IAR, na árvore de arquivos à esquerda, abra a pasta User, e então o arquivo HexCode.c. Observe que todo o código do binário agora está dentro de const uint8 ProgInit[FILE_SIZE]. Observe que se você usou um binário .s19, talvez você precise deletar o excesso de zeros no final do vetor para o projeto compilar com sucesso.

Configurando a família, proteção de escrita e Option bytes

Dentro da mesma pasta User abra o arquivo main.h incluído em main.c.


E aqui faremos todas as configurações, que são:

  • Habilitar escrita na EEPROM: habilita a gravação de dados de usuário que possam existir dentro de const uint8 EEPROMInit[EEP_SIZE]:
    /* Habilitar escrita na EEPROM / Enables EEPROM writting
       1 - Habilita a escrita do vetor EEPROMInit[EEP_SIZE] na EEPROM / Enables EEPROM writting
       0 - Não habilita escrita na EEPROM / Disables EEPROM writting
     */
    #define W_EEPs        1
    

  • Habilitar Proteção de leitura (ROP): habilita proteção da memória FLASH contra leitura
    /* Habilitar Proteção de leitura (ROP) / Enables ROP (Read Out Protection)
       1 - Protege a memória FLASH contra leitura / Enables ROP (Read Out Protection)
       0 - Não protege a FLASH contra leitura / Disables ROP (Read Out Protection)
     */
    #define ATIVAR_ROP    0
    

  • Escolha da família de microcontrolador utilizado
    /* Família de microcontrolador utilizado / MCU Family
       Descomente a linha que contém a família do microcontrolador a ser gravado
       Uncomment the line that contains the STM8 family to be flashed
     */
    #define STM8S001_STM8S003_STM8S103_STM8S903
    //#define STM8S005_STM8S105_STM8S207_STM8S208
    //#define STM8L001_STM8L101
    

  • Configurações de Option Bytes: onde colocar os valores de option bytes (descritos na secão "Option bytes" no datasheet do MCU)
    /* Mude os Option Bytes aqui de acordo com a família usada
       Configure the Option bytes from the STM8 family to be flashed
     */
    #ifdef STM8S001_STM8S003_STM8S103_STM8S903
    #define OPT1_BITS       0x00    // 0x4801 - UBC (UserBoot code size) - OPT1
    #define NOPT1_BITS      0xFF    // 0x4802 - UBC (UserBoot code size) - NOPT1
    [...]
    #define OPT5_BITS       0x00    // 0x4809 - HSE clock startup - OPT5
    #define NOPT5_BITS      0xFF    // 0x480A - HSE clock startup - NOPT5
    #endif
    
    #ifdef STM8S005_STM8S105_STM8S207_STM8S208
    #define OPT1_BITS       0x00    // 0x4801 - UBC (UserBoot code size) - OPT1
    #define NOPT1_BITS      0xFF    // 0x4802 - UBC (UserBoot code size) - NOPT1
    [...]
    #define OPTBL_BITS      0x00    // 0x480E - Bootloader - OPTBL
    #define NOPTBL_BITS     0xFF    // 0x480F - Bootloader - NOPTBL
    #endif
    
    #ifdef STM8L001_STM8L101
    #define OPT2_BITS       0x00    // 0x4802 - UBC (UserBoot code size) - OPT2
    #define OPT3_BITS       0x00    // 0x4803 - DATASIZE - OPT3
    #define OPT4_BITS       0x00    // 0x4808 - Independent watchdog option (IWDG) - OPT4
    #endif

Após as configurações, recompile o projeto.

Gravando o STM8 (Standalone em ação)

Com o projeto configurado e as placas conectadas está na hora de regravarmos o firmware do gravador, e para isso já recomendo conectar ao gravador uma placa com o STM8 que se deseja gravar.


Escolha a opção
Download and Debug (Project >> 
Download and Debug), e aguarde a gravação e a entrada em modo de Debug. Aperte F5 para rodar a aplicação e veja o gravador gravando a placa com o STM8. Observe que o LED vermelho do gravador se acende, e apaga quando a gravação é concluída.


E pronto!

OBS: Se quiser monitorar as etapas, vá em View >> Live Watch e monitore a variável SWIM_Estado. Ela fica no estado 24 quando a gravação é concluída, e no estado 4 se ela não achar nenhum STM8 conectado a ela.

Créditos

Bruno Montanari - implementação do protocolo SWIM no MCU do ST-LINK
Fernando Caldeira - programa que converte os arquivos .s19 ou .srec no vetor hex no código.


Comentários