Você está na página 1de 4

Bootloader CAN da ST

Sistema de download de programas.


Documentação do Bootloader via CAN da STM32F407

Essa aplicação consiste em programar (flashear/fazer download de um algoritmo) uma placa


STM32F407(escravo) por meio de outra placa (mestre) executando o programa BOOTLO-
ADER_ST_CAN_SD_MASTER na placa mestre. A programação será feita a partir do protocolo CAN
apresentado na Application Note AN3154(CAN bootloader).
O mestre deve possuir um cartão SD que deverá conter o programa em binário(.bin) a ser trans-
ferido para placa escravo. O escravo deve estar configurado de acordo com o programa BOOTLO-
ADER_ST_CAN_SD_SLAVE, para ser capaz de comunicar-se via CAN e entrar no modo de boot.
O bootloader será acionado na placa escravo quando a placa mestre enviar um número identifi-
cando a placa. Esse número deverá ser enviado pelo ID da CAN1. A placa escrava deverá estar pro-
gramada para aceitar essa mensagem pela CAN2 e pular para posição de memória do bootloader. O
controle do processo de programação será feito pela CAN2 da placa escrava e CAN1 do mestre.

Botão do usuário, LEDs e


Botão reset

Figura 1 STM32F4DISCOVERY

Os seguintes pinos devem estar conectados e configurados:

Função Placa mestre Placa escravo

GND Interconectados

CAN1 PD0(CAN1TX)/PD1(CAN1RX) -

CAN2 - PB5(CAN2TX) /PB13(CAN2RX)


Tabela 1 Pinagem

A frequência de operação (Baudrate) da conexão CAN é 125 kbps. O protocolo CAN é execu-
tado pela função TxRxCanProtocol O processo de programação ocorre nos seguintes passos:
1) Seleção do escravo: Ao energizar o sistema a placa mestre piscará o LED verde e então per-
manecerá aceso, indicando que o sistema está pronto para a seleção da placa. O algoritmo em
questão seleciona uma entre duas placas ao pressionar o botão do usuário (cor azul). A seleção
é feita da seguinte forma; Pressionar o botão seleciona a placa 1 e segurar o botão seleciona a
placa 2. Durante o processo diversos LEDs alternam de estados como na tabela a seguir:

LED Função
Azul Comando do botão do usuário foi reconhecido
Verde Pronto para iniciar, receber comando do botão
Laranja Escravo 2 selecionado.
Vermelho Escravo 1 selecionado. Se estiver piscando indica alguma falha.
Tabela 2 LEDs

2) Iniciação da comunicação: Com o escravo selecionado, basta pressionar o botão do usuário


mais uma vez para que a comunicação seja iniciada. O mestre envia uma mensagem CAN com
ID da placa escavo pela CAN1. A placa escravo manda uma mensagem ACK = 0x79 com o
mesmo ID da mensagem recebida, confirmando e validando a mensagem recebida, acendendo
o LED laranja. Caso contrário, O LED verde é aceso e o escravo desativa temporariamente a
CAN2 para não interferir no processo de bootloader do outro escravo. Após a validação da
mensagem a placa entra no modo bootloader e mestre passa a executar o protocolo da CAN
Bootloader dentro do arquivo can_boot.c.

3) Apagar a memória: Em seguida ocorre o apagamento da memória flash, começando da posi-


ção de memória padrão 0x8000000. O apagamento da memória é feito enviando-se uma men-
sagem(Erase Memory command) com ID = 0x43 e Data[0] = 0xFF.

4) Configura transmissão do binário: Após confirmação da memória apagada, é calculado quan-


tos Chunks(pedaços) de 248 bytes com 31 pedaços de 8 bytes o arquivo binário possui e se o
último pedaço pode ser dividido em pedaços de 8 bytes.

5) Transmissão do binário: A transmissão do binário é feita em pedaços de 8 bytes pela CAN e


gravado na memória Flash da placa escravo. Antes de cada Chunk transmitido, é enviado uma
mensagem(Write Memory command) com o endereço inicial de gravação da memória e o tama-
nho do Chunk. A cada Chunk transmitido, o LED Azul é alternado entre aceso e desligado.

6) Final de Transmissão: Após a gravação bem sucedida, é enviado uma mensagem(Go com-
mand) para o escravo executar o programa na memória utilizável em seguida o LED verde é li-
gado indicando que o processo ocorreu de forma prevista e está pronto para recomeçar desde o
passo 1).

Em caso de Erro: O LED vermelho começa a piscar.


Figura 2 Fluxograma

Principais funções

a. int Init_CanBootloader(TCHAR * firmwareName, uint8_t can-


SLAVE_NodeID,CAN_HandleTypeDef *hcan1,CAN_HandleTypeDef *hcan2,FATFS *myFAT )
Manda todos os comandos pela CAN1 e CAN2 necessários para selecionar, apagar a memória
e gravar o arquivo binário na memória flash.
firmwareName: Nome do arquivo a ser gravado.
canSLAVE_NodeID: ID da placa escravo a ser gravada.
hcan1: Ponteiro para CAN1.
hcan2: Ponteiro para CAN2.
myFAT: Ponteiro para o cartão SD.
b. void GetAddress(CAN_HandleTypeDef*hcan,int address)
Insere o endereço especificado nos 4 bytes de dados do frame da CAN.
hcan: Ponteiro da CAN em que o endereço será inserido.
address: Endereço que será inserido nos 4 bytes voltados para dados da CAN.

c. void TxRxCanProtocol(CAN_HandleTypeDef*hcan)
Transmite os dados no frame da hcan e espera o recebimento do ACK.
hcan: Frame da CAN que será utilizada no protocolo.

Você também pode gostar