cancel
Showing results for 
Search instead for 
Did you mean: 

After adding BL and changing the FW flash position, core communication doesn't work

__silardg
Associate III

Hello!

I have developed a firmware for the STM32H745 where I have communication between the two cores. I am using a specific ring buffer library and the semaphore method. 
Meaning:

First core gets the semaphore, puts something into the shared memory, releases the semaphone, second takes the semaphore, reads the data etc etc. 

All in all, that works very nicely. 

I just went and developed a bootloader, because I wanted to enable flashing via a specific protocol. It works and boots the application firmware. But, unfortunately, the core communication doesn't work. 

I am not sure what could be the problem as the shared memory is at 0x38000000, which is not deleted or touched via the bootloader. 

The bootloader sits at 0x08000000 and 0x08100000; The application sits at 0x08020000 and 0x08120000;

What are some things that are connected to the openamp and 0x38000000 memory that could prevent it from working. 

I am getting a confirmation that the buffer was written, but on the other core I am not getting a reading that anything is available. 

Would there be anything colliding with the semaphore, or the bootloader not deiniting some things? 

1 REPLY 1
__silardg
Associate III

I added more deinit functions, and it works. I guess something was blocking... 

static void goto_application(void) { printf("Gonna Jump to Application\r\n"); void (*app_reset_handler)(void) = (void*)(*((volatile uint32_t*) (0x08020000 + 4U))); // Deinitialize UART4 HAL_UART_DeInit(&huart4); // Deinitialize FDCAN1 HAL_FDCAN_DeInit(&hfdcan1); // Deinitialize TIM3 HAL_TIM_Base_Stop(&htim3); HAL_TIM_Base_DeInit(&htim3); // Disable NVIC interrupts HAL_NVIC_DisableIRQ(UART4_IRQn); HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn); HAL_NVIC_DisableIRQ(FDCAN1_IT1_IRQn); HAL_NVIC_DisableIRQ(TIM3_IRQn); // Turn off peripheral clocks __HAL_RCC_UART4_CLK_DISABLE(); __HAL_RCC_TIM3_CLK_DISABLE(); HAL_RCC_DeInit(); HAL_DeInit(); __set_MSP(*(volatile uint32_t*) 0x08020000); SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /* Jump to application */ app_reset_handler(); //call the app reset handler }
View more