Jump to content

    
DpInRock

stm32F030C8 и стирание страницы флэша

Recommended Posts

2 часа назад, DpInRock сказал:

Внутри прерывания - считывание символа в волатильную переменную.

Для теста полезно было бы без всяких обработчиков: Запустить извне входящий поток символов в UART на максимальной частоте следования и попробовать выполнить запись флешь.

Share this post


Link to post
Share on other sites
On 6/15/2020 at 7:04 PM, DpInRock said:

Вот такое прямо наблюдение. 

Полно глюков наблюдается, главное понять в чьих байтах они проявляются. Я тут ставил вопрос про работу таймеров в 030F4 - так и повисло по причинам, хоть и решил по факту. Можно, конечно, сетовать на криворукость стшников, но всю жисть этим заниматься не продуктивно, хотя, определенно, железные глюки есть.

Мой проект сейчас в этой части похож на ваш, 030F4, идут байты с uart через dma, параллельно эмулируется eeprom, нормально работает.

Себе пометил. Спасибо.

Share this post


Link to post
Share on other sites
32 минуты назад, Vlad_G сказал:

железные глюки есть.

Все железные глюки перечислены в ES. Практика показывает, что в подавляющем большинстве случаев у ST все норм, а не прав программист.

Я не припомню ни одного обратного случая. Да, есть особенности, о которых нужно знать, и в документации все можно найти.

Глянул ES - там ничего по теме топика нет.

Share this post


Link to post
Share on other sites
59 минут назад, adnega сказал:

Все железные глюки перечислены в ES.

Но, все-таки, редко бывают и реально песочные глюки. Я однажды на такие натыкался, правда на процессоре от Microchip.

 

Однако с тезисом

1 час назад, adnega сказал:

Практика показывает, что в подавляющем большинстве случаев у ST все норм, а не прав программист.

соглашусь.

 

Всяко может быть, а вдруг у ТС китайский аналог STM-ки, и он сам даже об этом не знает? Вполне вероятный исход событий.

Share this post


Link to post
Share on other sites
1 час назад, Arlleex сказал:

Но, все-таки, редко бывают и реально песочные глюки. Я однажды на такие натыкался, правда на процессоре от Microchip.

Я тоже. На глюк не указанный в еррата (позже добавили). Но было такое всего 1 раз за всю карьеру (насколько помню).

Что как бы и подтверждает тезис о том, что баг ТС-а с вероятностью 99.99% - его собственный.

Тем более на таких популярных МК, которые много кто использует, баги должны быстро выявляться и попадать в еррата. Если б ещё чип какой-то редкий был, другое дело....

Share this post


Link to post
Share on other sites

Ну, собственно, контроллер STM32F030R8T6.

Тактирование от HSI, Flash Prefetch Buffer выключен.

USART1 19200-E-1, RX/TX на PA10/PA9.

В системе крутится еще таймер TIM1, по 1мс прерыванию которого отсчитываю 1с и даю флажок в main().

В main() по этому флажку запускаю стирание последнего сектора Flash.

С ПК-шной программы задуваю сплошной поток данных с 0 паузой между байтами.

Раз в 1с, там же, где даю команду на очистку сектора Flash, переключаю светодиод. Переключается, работает.

Share this post


Link to post
Share on other sites

STM32F030C8.

У иных STM32 такое не наблюдается. 
Я был бы рад и прыгал до потолка, если бы нашелся мой глюк. Но у меня потолки около 3 метров. Не допрыгнешь.

Share this post


Link to post
Share on other sites
19.06.2020 в 10:08, Arlleex сказал:

Ну, собственно, контроллер STM32F030R8T6.

Тактирование от HSI, Flash Prefetch Buffer выключен.

До этого я не имел практических дел (почти) с "народным" STM32F103. Но захотелось сделать небольшую ерундовину. Взял давно валявшуюся платку с STM32F103R8T6 (некогда купленную на али). Всё более-менее запустилось, но в процессе запуска наткнулся на один косяк: При включённом "prefetch buffer" + выполнении кода из flash + достаточно высокой SYSCLK происходит сбой в работе - выполнение кода процессором улетает по случайным адресам памяти. Если выполнять код из ОЗУ на любой штатной SYSCLK - всё ок. Если выключить prefetch - тоже всё ок. Методом тыка нашёл, что на SYSCLK<=36МГц - всё работает ок, на SYSCLK>=48МГц - имеет место быть глюк (между этими частотами не искал точную граничную частоту). Тактирование от кварца+PLL если что.

С питанием всё ок. Также прочитал про все биты в RCC, PWR и FLASH.ACR - ничего.

Прошерстил errata - там про это ни слова. Вот и странно - вроде такой со всех сторон обсосанный чип, а про такой глюк нет упоминаний. Хотя в errata указано "This errata sheet applies to the revisions B, Z, Y, 1, 2, 3 and X". Может такой баг есть в ревизии A? Неужто у меня она??? На сайте ST для неё ничего нет. Или китайцы прислали подделку, а не true STM32F103? :scratch_one-s_head:

 

PS: Вобщем интерес скорее академический - это известный баг STM32F103 или у меня в консерватории что-то не так? :mega_shok:

Share this post


Link to post
Share on other sites
1 час назад, jcxz сказал:

PS: Вобщем интерес скорее академический - это известный баг STM32F103 или у меня в консерватории что-то не так?

Девайсов на 103-м у нас полно и нареканий никогда не было...

Присоединяюсь к ответу @Vasily_, а может китайский аналог STM-ки.

На али ардуино-платы на этих МК ведрами за копейки продают, так что там или клон, или брак.

 

P.S. Все девайсы на этом МК у меня на максимальной частоте, HSE от кварца + PLL, prefetch buffer тоже всегда включен.

Подобный баг наблюдал один раз в жизни, когда не правильно настроил количество циклов доступа к Flash. Но он проявлялся практически сразу.

Share this post


Link to post
Share on other sites
10.07.2020 в 21:56, jcxz сказал:

Методом тыка нашёл, что на SYSCLK<=36МГц - всё работает ок, на SYSCLK>=48МГц - имеет место быть глюк (между этими частотами не искал точную граничную частоту). Тактирование от кварца+PLL если что.

Нужно настроить wait-states в регистре FLASH_ACR. Цитата из RM:

Цитата

Bits 2:0 LATENCY: Latency
These bits represent the ratio of the SYSCLK (system clock) period to the Flash access time.
000 Zero wait state, if 0 < SYSCLK≤ 24 MHz
001 One wait state, if 24 MHz < SYSCLK ≤ 48 MHz
010 Two wait states, if 48 MHz < SYSCLK ≤ 72 MHz

 

Share this post


Link to post
Share on other sites
On 7/11/2020 at 2:05 AM, Arlleex said:

На али ардуино-платы на этих МК ведрами за копейки продают

Я таки не понимаю, как можно брать у китайцев некитайские микросхемы? Одно дело купить там esp8266 (хотя слышал что одни китайцы подделываю других), другое дело евпропейскую F103... Хотя у меня на работе взял плату с клоном китайским, маркировку не помню. Но оканчивается на F103. Работает. Вот только до каких пределов?

7 hours ago, AHTOXA said:

Нужно настроить wait-states в регистре FLASH_ACR. Цитата из RM:

О, появилась надежда, что китайцы - ребята честные)

Share this post


Link to post
Share on other sites
12 часов назад, AHTOXA сказал:

Нужно настроить wait-states в регистре FLASH_ACR. Цитата из RM:

Тоже про это подумал, но автор темы пишет:

10.07.2020 в 19:56, jcxz сказал:

Также прочитал про все биты в RCC, PWR и FLASH.ACR - ничего.

Я так понял, что эти биты он настроил.

Share this post


Link to post
Share on other sites
1 час назад, Сергей Борщ сказал:

Я так понял, что эти биты он настроил.

Ну, если настроил (и сделал это правильно), то эта тема будет темой про необъяснимые явления в мире микроконтроллеров :crazy:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.