реклама на сайте
подробности

 
 
> STM32 flash, помогите разобраться
dimka76
сообщение May 30 2014, 07:34
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



В документации написано что шина данных FLASH памяти у STM32 128-ми битная.
Но при этом в коде startup, где идет инициализация переменных в ОЗУ, копирование идет по 4 байта (32 бита) инструкции
Код
       ...
   ldr  r3, [r3, r1]
   str  r3, [r0, r1]
   adds  r1, r1, #4
       ...


У ST есть AppNote EEPROM emulation in STM32F10x microcontrollers, где при чтении из FLASH (виртуальной EEPROM) копируются 16-ти битные данные
Код
/**
  * @brief  Returns the last stored variable data, if found, which correspond to
  *   the passed virtual address
  * @param  VirtAddress: Variable virtual address
  * @param  Data: Global variable contains the read variable value
  * @retval Success or error status:
  *           - 0: if variable was found
  *           - 1: if the variable was not found
  *           - NO_VALID_PAGE: if no valid page was found.
  */
uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data)


Как же все-таки читается FLASH?
А если мне надо только один байт прочитать из FLASH ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
7 страниц V  < 1 2 3 4 5 > »   
Start new topic
Ответов (30 - 44)
ViKo
сообщение Jul 1 2014, 13:55
Сообщение #31


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Я последовательно соединял две независимых кнопки (у каждой две группы контактов). В обычном режиме каждая работает сама по себе, а когда нажимаю обе - особый случай.
Теперь аналогичное делаю программным способом, с некоторыми дополнительными условиями.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 1 2014, 13:57
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(doom13 @ Jul 1 2014, 17:41) *
Т.е. данная кнопка выносится на корпус и доступна любому пользователю? На мой взгляд, не есть хорошее решение. Если бы какой-то Master мог сделать это по внешней технологической команде, тогда ещё приемлемо.

У меня обычно есть несколько кнопок, и я делаю вход в загрузчик, если при включении питания нажата определённая комбинация. Обычный обыватель не догадается, и в случае неисправности комбинацию можно сообщить пользователю. Опять же залить что попало он туда не сможет, потому что есть проверка целостности прошивки.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 1 2014, 15:11
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А у меня есть видеорегистратор, который виснет если при включении держать кнопку, и только ресетом через дырочку отвисает. Подозреваю как раз в загрузчик переходит. А вот что выйти кнопкой включения нельзя - руки бы поломал бы.... Да еще кнопки так стоят, что включая легко задеть ту самую заветную%)...

У меня кнопочка внутри прибора - аварийный вариант.
Штатно переход в загрузчик командой по езернет или при загрузки с битой прошивкой или левым кодом безопасности.

Но аварийная кнопка нужна. Если случайно зальют левак какой-то с верным ЦРЦ и верным кодом безопасности или в котором команда перехода в бутлоадер сломана или езернет отвалится, или случайно у битого кода совпадет ЦРЦ, мало ли что.....

Так же надо не забывать что иногда ваши устройства собирают партнеры которые могут и обновлять прошивки во время сборки, что им ЖТАГ поставлять?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 1 2014, 15:29
Сообщение #34


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Golikov A. @ Jul 1 2014, 18:11) *
Но аварийная кнопка нужна. Если случайно зальют левак какой-то с верным ЦРЦ и верным кодом безопасности или в котором команда перехода в бутлоадер сломана или езернет отвалится, или случайно у битого кода совпадет ЦРЦ, мало ли что.....
Именно. Или какой-то непредусмотренной комбинацией штатных настроек устройство приводится в нерабочее состояние (ну бывает, любая программа содержит минимум одну ошибку), или клиенту случайно отправили промежуточную, совсем нерабочую версию - вот в таком крайнем случае можно попросить клиента вскрыть устройство, замкнуть заветную точку и залить исправление. Это быстрее и дешевле, чем пересылать устройство на ремонт через половину земного шарика. В штатном режиме устройство обновляется командой по интерфейсу без вмешательства человека.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 2 2014, 08:42
Сообщение #35


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(doom13 @ Jul 1 2014, 17:41) *
Т.е. данная кнопка выносится на корпус и доступна любому пользователю?
Она не выносится, она уже есть и является частью клавиатуры прибора. И используется обычно по своему назначению, а вызов загрузчика это её вторая скрытая функция, активируемая лишь в момент подачи питания на несколько миллисекунд.
Убеждать вас в её необходимости я не буду. Сами всё поймёте рано или поздно.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 2 2014, 08:46
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(demiurg_spb @ Jul 2 2014, 11:42) *
Она не выносится, она уже есть и является частью клавиатуры прибора. И используется обычно по своему назначению, а вызов загрузчика это её вторая скрытая функция, активируемая лишь в момент подачи питания на несколько миллисекунд.
Убеждать вас в её необходимости я не буду. Сами всё поймёте рано или поздно.

Может быть и так, но тогда есть вероятность получить такое:
Цитата(Golikov A. @ Jul 1 2014, 18:11) *
А у меня есть видеорегистратор, который виснет если при включении держать кнопку, и только ресетом через дырочку отвисает. Подозреваю как раз в загрузчик переходит. А вот что выйти кнопкой включения нельзя - руки бы поломал бы.... Да еще кнопки так стоят, что включая легко задеть ту самую заветную%)...

Ну и как же быть, если нет никаких кнопок. В нашей системе и без кнопок всё нормально работает, переход в загрузчик только по командам CAN, Ethernet. Не считаю наличие данной кнопки необходимостью любой системы и Вас также переубеждать не стану. Думаю, где-то может быть оправдано такое решение где-то нет.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 2 2014, 08:55
Сообщение #37


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А вот можно ли зайти во встроенный загрузчик в STM32? Адрес известен, перенести таблицу векторов... Или там работает абсолютная адресация, и нужно отобразить System память на нулевые адреса (что делается ножками boot)?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 2 2014, 08:59
Сообщение #38


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



У ST есть несколько подробных аппнотов по загрузчику. Думаю, этот вопрос там освещен.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 2 2014, 09:05
Сообщение #39


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Сергей Борщ @ Jul 2 2014, 11:59) *
У ST есть несколько подробных аппнотов по загрузчику. Думаю, этот вопрос там освещен.

Листал. Там расписано, как работать со встроенным загрузчиком. Но чтобы из рабочей программы скакнуть, такого не помню. Впрочем, читал не внимательно.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 2 2014, 09:11
Сообщение #40


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(doom13 @ Jul 2 2014, 12:46) *
Может быть и так, но тогда есть вероятность получить такое:
Чтобы такого не было я использую таймаут и выхожу из загрузчика при его бездействии.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 2 2014, 09:42
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Jul 2 2014, 13:05) *
Листал. Там расписано, как работать со встроенным загрузчиком. Но чтобы из рабочей программы скакнуть, такого не помню. Впрочем, читал не внимательно.

Эта фича не предусмотрена, насколько я понял. Но никто не мешает МК самому себе дёргать ногу BOOT0 и делать сброс (+конденсатор, чтобы нужный уровень на BOOT0 продержался до выхода из сброса).
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Jul 2 2014, 15:02
Сообщение #42


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(demiurg_spb @ Jul 2 2014, 11:42) *
И используется обычно по своему назначению, а вызов загрузчика это её вторая скрытая функция, активируемая лишь в момент подачи питания на несколько миллисекунд.

Правильно. Да, ограничения накладывает, но если продумать комбинацию (CTRL+ALT+DEL например :-)) В последних SAM3 именно так и сделана фунция ERASE. В момент подачи питания анализируется уровень PIO_ERASE, а потом программа в праве переключить на PIO или оставить как есть.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 4 2014, 17:37
Сообщение #43


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Писал ответ в соседнюю тему и пришла в голову такая мысль: запустить загрузчик на Cortex-M3/M4 очень просто. Мы же знаем, где он находится. Значит знаем, где начинаются его вектора. Нам надо запретить прерывания, установить VTOR на вектора загрузчика, загрузить в MSP число из первого слова векторов, переключить стек на MSP и передать управление на адрес из второго слова векторов. То есть произвести те же действия, которые мы делаем при запуске приложения из самописного загрузчика.

P.S. Хм, ViKo как раз это и предлагал. Надо читать сообщения внимательнее.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 4 2014, 17:57
Сообщение #44


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Сергей Борщ @ Jul 4 2014, 13:37) *
Писал ответ в соседнюю тему и пришла в голову такая мысль: запустить загрузчик на Cortex-M3/M4 очень просто. Мы же знаем, где он находится. Значит знаем, где начинаются его вектора. Нам надо запретить прерывания, установить VTOR на вектора загрузчика, загрузить в MSP число из первого слова векторов, переключить стек на MSP и передать управление на адрес из второго слова векторов. То есть произвести те же действия, которые мы делаем при запуске приложения из самописного загрузчика.

P.S. Хм, ViKo как раз это и предлагал. Надо читать сообщения внимательнее.

А смысл? Входить в загрузчик без кнопки все равно не получится.
В смысле получится, пока прошивка нормальная, как только глюк - все.
Хотя если просто пользовать фирменный загрузчик в своем бутлоадере, то да.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 4 2014, 18:20
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Чего то я не понял бизнеса...
Хотим загрузить загрузчик без ресета? Так столько копий сломано что это чревато. А если с ресетом, то вроде и так запуститься штатный загрузчик?

Чего я не понимаю? Или это способ ухода от вочдога? Так регистры то не сбросятся...
Go to the top of the page
 
+Quote Post

7 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016