Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added bin/control
Binary file not shown.
Binary file added bin/creator
Binary file not shown.
3 changes: 3 additions & 0 deletions bl_f030/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,8 @@ all:
clean:
rm -rf build/*

flash:
st-flash write build/main.bin 0x8000000

.PHONY: all clean

3 changes: 2 additions & 1 deletion bl_f030/include/isr/stm32f030.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

void SysTick_Handler(void);
void USART1_IRQHandler(void);
void USART4_IRQHandler(void);

__attribute__ ((used, section(".isr_vector")))
const IRQHandler_t g_IRQHandlers[] =
Expand Down Expand Up @@ -63,7 +64,7 @@ const IRQHandler_t g_IRQHandlers[] =
Default_Handler, // SPI2_IRQHandler
USART1_IRQHandler,
Default_Handler, // USART2_IRQHandler
Default_Handler, // USART3_4_5_6_IRQHandler
USART4_IRQHandler, // USART3_4_5_6_IRQHandler
0,
Default_Handler, // USB_IRQHandler
};
Expand Down
1 change: 1 addition & 0 deletions bl_f030/include/stm32f030.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#define SPI2_IRQn 26
#define USART1_IRQn 27
#define USART2_IRQn 28
#define USART4_IRQn 29
#define USART3_4_5_6_IRQn 29
#define USB_IRQn 31

Expand Down
63 changes: 58 additions & 5 deletions bl_f030/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#include "tiny-AES-c/aes.h"

#define UART4 //Default UART1

#define PRODUCT_ID 0xAABBCCDD
static uint8_t KEY[] = { 0xfe, 0xcc, 0xb8, 0x70, 0x05, 0xda, 0x13, 0x0c, 0x06, 0xe8, 0x6d, 0xd9, 0xf1, 0x75, 0x9d, 0x45 };

Expand All @@ -16,7 +18,8 @@ static uint8_t KEY[] = { 0xfe, 0xcc, 0xb8, 0x70, 0x05, 0xda, 0x13, 0x0c, 0x06, 0
#define CPU_F 8000000
#define BAUD 115200
#define APP_START 0x08001000 // 4k for bootloader
#define APP_END 0x08004000
//#define APP_END 0x08004000 //16K
#define APP_END 0x0800FFFF //64K
#define VTOR_SIZE 0xC0
#define PAGE_SIZE 1024
#define BLOCK_SIZE 16
Expand Down Expand Up @@ -169,13 +172,24 @@ void FLASH_write(uint32_t addr, uint32_t const * data, size_t dataLen) {
// ==================================================================================================================================================

bool UART_transmissionComplete(void) {
#ifdef UART4
return (USART4->ISR & USART_ISR_TC);
#else
return (USART1->ISR & USART_ISR_TC);
#endif
}

void UART_sendByte(uint8_t b) {
#ifdef UART4
while(!(USART4->ISR & USART_ISR_TXE)) {}

USART4->TDR = b;
#else
while(!(USART1->ISR & USART_ISR_TXE)) {}

USART1->TDR = b;
#endif

}

void UART_send(const uint8_t* d, size_t l) {
Expand All @@ -189,9 +203,20 @@ void SysTick_Handler(void) {
++timeTick;
}

#ifdef UART4
void USART1_IRQHandler(void) {}

void USART4_IRQHandler(void) {
if((USART4->ISR & USART_ISR_RXNE) == USART_ISR_RXNE) {
uint8_t c = USART4->RDR;
#else
void USART4_IRQHandler(void) {}

void USART1_IRQHandler(void) {
if((USART1->ISR & USART_ISR_RXNE) == USART_ISR_RXNE) {
uint8_t c = USART1->RDR;
#endif

switch(commState) {
case CommState_Start:
if(c == (uint8_t)Command_GetVersion) {
Expand Down Expand Up @@ -258,15 +283,31 @@ static void jumpToApp() {
}

static void initHardware(void) {
#ifdef UART4
RCC->APB1ENR |= RCC_APB1ENR_USART4EN;
RCC->AHBENR |= RCC_AHBENR_IOPAEN;

// UART4 on PA0/PA1
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR0_UP | GPIO_PUPDR_PUPDR1_UP;
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER0|GPIO_MODER_MODER1)) | (GPIO_MODER_MODER0_ALT | GPIO_MODER_MODER1_ALT);
GPIOA->AFRL = (GPIOA->AFRL & ~(GPIO_AFRL_AFR0 | GPIO_AFRL_AFR1)) | 0x44 ; // AF4: USART4 Alternate Function mapping

USART4->BRR = CPU_F / BAUD;
USART4->CR1 = USART_CR1_RXNEIE | USART_CR1_RE | USART_CR1_TE | USART_CR1_UE;

SysTick->RVR = CPU_F / 10 - 1; // 100 ms
SysTick->CVR = 0;
SysTick->CSR |= SYSTICK_CSR_CLKSOURCE | SYSTICK_CSR_TICKINT | SYSTICK_CSR_ENABLE;

NVIC_EnableIRQ(USART4_IRQn);
#else
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
RCC->AHBENR |= RCC_AHBENR_IOPAEN;

// UART1 on PA9/PA10
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR9_UP | GPIO_PUPDR_PUPDR10_UP;
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER9|GPIO_MODER_MODER10))
| (GPIO_MODER_MODER9_ALT | GPIO_MODER_MODER10_ALT);
GPIOA->AFRH = (GPIOA->AFRH &~ (GPIO_AFRH_AFR9 | GPIO_AFRH_AFR10))
| (1 << (1 * 4)) | (1 << (2 * 4));
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER9|GPIO_MODER_MODER10)) | (GPIO_MODER_MODER9_ALT | GPIO_MODER_MODER10_ALT);
GPIOA->AFRH = (GPIOA->AFRH & ~(GPIO_AFRH_AFR9 | GPIO_AFRH_AFR10)) | (1 << (1 * 4)) | (1 << (2 * 4)); //0x110

USART1->BRR = CPU_F / BAUD;
USART1->CR1 = USART_CR1_RXNEIE | USART_CR1_RE | USART_CR1_TE | USART_CR1_UE;
Expand All @@ -276,16 +317,28 @@ static void initHardware(void) {
SysTick->CSR |= SYSTICK_CSR_CLKSOURCE | SYSTICK_CSR_TICKINT | SYSTICK_CSR_ENABLE;

NVIC_EnableIRQ(USART1_IRQn);
#endif

}

static void deinitHardware(void) {
#ifdef UART4
NVIC_DisableIRQ(USART4_IRQn);

// all changed registers to their reset-values
SysTick->CSR = 0;

USART4->CR1 = 0;
USART4->BRR = 0;
#else
NVIC_DisableIRQ(USART1_IRQn);

// all changed registers to their reset-values
SysTick->CSR = 0;

USART1->CR1 = 0;
USART1->BRR = 0;
#endif

GPIOA->MODER = 0x28000000;
GPIOA->PUPDR = 0x24000000;
Expand Down
14 changes: 14 additions & 0 deletions controlCLI/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

# Copyright (c) 2018 serra82@gmail.com

CC=gcc
EXE=controlCLI
OBJ=controlCLI.o serial_posix.o
CFLAGS= -Wall

all: $(EXE)

$(EXE):$(OBJ)

clean:
rm -f $(OBJ) $(EXE)
67 changes: 67 additions & 0 deletions controlCLI/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
Firmware Loader
===============

sudo ./controlCLI /dev/_UART_ FIRMWARE_CRYPTO.bin


Building
--------

Linux/Mac OS X:
> make


Example:
--------
```cpp
serra82@gmail ~/bootloader/controlCLI $ ./controlCLI /dev/ttyUSB0 ../stm32f072rbt6_blink_example/blinky/mainBlu_crypto.bin
file size:8228
Connecting..
Command_OK | Command_GetVersion A 65

Connected
PROTOCOL_VERSION: 1000
PRODUCT_ID: ddccbbaa

Starting
Send start cmd
read from file:36
ERROR;65
Resend Command_Start for reply 65
ERROR;1
ERROR;0
ERROR;0
ERROR;0
ERROR;221
ERROR;204
ERROR;187
ERROR;170

Sending
read from file:1024

Sending
read from file:1024

Sending
read from file:1024

Sending
read from file:1024

Sending
read from file:1024

Sending
read from file:1024

Sending
read from file:1024

Sending
read from file:1024

Sending
read from file:0
Upgrade Finished
```c
Binary file added controlCLI/controlCLI
Binary file not shown.
Loading