evgeniy1294 (24.05.2019 16:38 - 16:43, просмотров: 207) ответил =AlexD= на По UARTу засылать код платы для записи на внешнюю флеш, но вообще я так понимаю - платы разные, можно просто проверять, какая внешняя периферия есть в наличии
Объясните мне наконец, чем вам внутренние flash и OTP не нравятся? Просто напишите скрипт на питоне, который заставляет openocd стереть flash, залить новый бинарь и прописать по заданным адресам константы, всего три команды. Какие-то уарты, какие-то перемычки, какая-то внутренняя периферия, зачем это всё? Чтобы проверить наличие периферии вам минимум нужен такой код:
bool mcu::core::ValidatePointer(volatile uint8_t* pointer)
{
// Cortex-M3, Cortex-M4, Cortex-M4F, Cortex-M7 are supported
bool is_valid = true;
// Clear BFARVALID flag
SCB->CFSR |= SCB_CFSR_BFARVALID_Msk;
uint32_t mask = __get_FAULTMASK();
// Ignore BusFault by enabling BFHFNMIGN and disabling interrupts
__disable_fault_irq();
SCB->CCR |= SCB_CCR_BFHFNMIGN_Msk;
// probe pointer in question
*pointer;
// Check BFARVALID flag
if ((SCB->CFSR & SCB_CFSR_BFARVALID_Msk) != 0)
is_valid = false; // Bus Fault occured reading the address
// Reenable BusFault by clearing BFHFNMIGN
SCB->CCR &= ~SCB_CCR_BFHFNMIGN_Msk;
__set_FAULTMASK(mask);
return is_valid;
}
И так каждый указатель. На M0 нужен другой подход с модификацией архитектурных регистров, у половины камней с разными корпусами периферия одинакова на 100%. Оно вам надо?