Посоны выручайти, stm32 в цикле пишу во флеш, сектор 256К, предварительно очищен, пишет 0x280 байт и вешает контроллер. в чем может быть дело? режимы 8\16\32\64 бита не влияют на ситуацию FLASH->CR &= CR_PSIZE_MASK; FLASH->CR |= FLASH_PSIZE_BYTE; FLASH->CR |= FLASH_CR_PG; *(__IO uint16_t*)(ADDR) = DATA; пишу так
Комментарии: 26
Anton
1) Должны быть отключены все перывания 2) Код обязательно должен исполняться из ОЗУ 3) Контроллер должен тактироваться от внутреннего генератора LSI
Nikita
3 не канает - проверял а как его исполнять из ОЗУ?
Anton
Я писал свой бут для stm32 и без 3его варианта не работает :)
Nikita
а понял в странно почему тогда хотя бы немного пишет а если нет LSI? только HSI ой, LSE HSE и все
Anton
брр... я и имел ввиду HSI.... stm32 без HSI? это как?
Nikita
HSI имеется щас еще раз попробую про код из памяти точно видел пример где этого нет и прошивка так же обновлялась уверен что обязательное условие?
Anton
да, т.к. стм исполняет инструкции напрямую с флешки, если будет одновременно исполнение инструкций и запись на флеху, скорее всего все повиснет...
Nikita
есть же read while write лан попробуем а то уже весь день туплю) спасибо большое
Cyberzx
похачить LinkerScript.ld /* The program code and other data into ROM memory */ .text : { . = ALIGN(4); *(.text) /* .text sections (code) */ *(.text*) /* .text* sections (code) */ *(.glue_7) /* glue arm to thumb code */ *(.glue_7t) /* glue thumb to arm code */ *(.eh_frame) KEEP (*(.init)) KEEP (*(.fini)) . = ALIGN(4); _etext = .; /* define a global symbols at end of code */ } >ROM вот тут ROM внизу поменять на RAM
Anton
Ну в этом случае такое не прокатит, для отладки еще можно, тут надо стартануть с флеша, а потом выполнить кусок кода из ОЗУ....
Cyberzx
думаю можно отдельные функции положить в RAM
Nikita
да проще скопировать прямо на ходу и запустить
Anton
Да оно и надо
Nikita
еще момент обнаружил когда запускаю стирание сектора отладчик кейл отваливается почему так? по той же причине? доступ к памяти блокируется? кстати этого прикола с "неписанием" во флеш нет на более дешевом МК, на нем пишет ок более дешевый это stm32f103c8t6
Anton
я писал для 107 и 407, везде работает одинаково...
Nikita
ну на 103 у меня кварца нет
Fedor
2 пункт нужен только для перезаписи того, что начинает грузится первым. 3 пункт вообще не нужен.
Anton
Вы сами бутлодер писали? Я говорю о результатах поулченных на практике, в частных случаях может оно и не надо....
Fedor
У меня тоже бутлоадер копируется в ОЗУ и обновляет прошивку Еще какой писал И для f4 и для h7
Anton
я писал для f1 и f4, без 3его пункта не завелось....
Fedor
Так же есть эмуляция eeprom на встроенном flash. С чередованием двух секторов. Никакого переключения тактмрованич и тем более исполнения из озу не требуется А причем же тут тактирование? Это по сути переферия, ее настроил и оно работает Отвалы дебагера могут быть, но точно не помню причин. Вообще там главное - соблюсти последовательность
Anton
у флешки есть настройки, точно сейчас не вспомню как называются, меняются в зависимости от тактовой частоты ядра для стабильной её работы... возможно в них было дело, но я предпочел наиболее надежное и простое решение :)
Fedor
Возможно. Хотя я бы не назвал смену источника тактирования надежным решением. Это все же костыль
Anton
а что не надежного в смене тактирования?
Fedor
Если есть проблемы со стиранием, могут быть и проблемы с чтением/исполнением Дело не конкретно в смене. Это устранение симптома
Anton
хм, но если на высокой частоте перезапись флешки сбоит, то я считаю это менее нажедным :) тише едешь, дальше будешь :)