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

 
 
 
Reply to this topicStart new topic
> чтение info flash msp430F5506
koljakh
сообщение Dec 15 2013, 13:02
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Добрый день коллеги. Столкнулся с проблемой чтения инфо флеш.
Существет ли какая-то последовательность инициализации этой области ?
При подключенном JTAG все работает хорошо, пишет, читает, но как только я включаю прибор без JTAG несовпадает контрольная сумма (это единственное ветвление в программе).
Более подробно глянуть не могу, нет УАРТа.
При повторном включении с JTAG опять все на месте. т.е. данные не портятся.
Помогите расколдовать флешку. уже второй день бьюсь sm.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 15 2013, 18:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



У MSP430 единое адресное пространство, поэтому с чтением Flash не может должно быть никаких проблем.
С записью в область INFO Flash-памяти есть три отличия: 1) размер сектора 128 байт, а не 512 байт как у основной памяти, 2) отдельный бит LOCKINFO, блокирующий запись/стирание в области INFO и 3) бит LOCKA, блокирующий дополнительно отдельно сегмент INFO_A. Причем следет учитывать такой нюанс, бит LOCKA работает по принципу переключателя состояния и только при записи в него лог.1. Т.е. чтобы установить требуемое состояние LOCKA следует сначала его прочитать и только, если его состояние не совпадает с тем, что нужно, то произвести запись в LOCKA лог.1. Запись лог.0 на состояние LOCKA никакого эффекта не оказывает.
Go to the top of the page
 
+Quote Post
koljakh
сообщение Dec 15 2013, 21:01
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Цитата(rezident @ Dec 15 2013, 20:56) *
У MSP430 единое адресное пространство, поэтому с чтением Flash не может должно быть никаких проблем.
С записью в область INFO Flash-памяти есть три отличия: 1) размер сектора 128 байт, а не 512 байт как у основной памяти, 2) отдельный бит LOCKINFO, блокирующий запись/стирание в области INFO и 3) бит LOCKA, блокирующий дополнительно отдельно сегмент INFO_A. Причем следет учитывать такой нюанс, бит LOCKA работает по принципу переключателя состояния и только при записи в него лог.1. Т.е. чтобы установить требуемое состояние LOCKA следует сначала его прочитать и только, если его состояние не совпадает с тем, что нужно, то произвести запись в LOCKA лог.1. Запись лог.0 на состояние LOCKA никакого эффекта не оказывает.


Спасибо за ответ. Но проблема видимо уже в возрасте sm.gif
На второй день зоркий глаз заметил, что не обнулил переменную в стеке для подсчета контрольной суммы, а JTAG, видимо, всю память обнуляет. Железо не я делал, и уарта для отладки нет. У меня еще вопрос. Тут на форуме я видел что при записи и стирании запрещают прерывания. Это обязятельно? Я с МСП недавно, как-то не приходилось, но впечатления самые положительные, особенно если единицы микроампер выжимаешь.
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 16 2013, 03:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(koljakh @ Dec 16 2013, 02:01) *
Тут на форуме я видел что при записи и стирании запрещают прерывания. Это обязятельно?

Вы не уточнили деталей вопроса, поэтому универсальный заведомо рабочий совет/ответ - да, обязательно. Причина в том, что таблица векторов прерываний в MSP430 находится во Flash.
Но в некоторых специальных случаях и при (одновременном) соблюдении нескольких условий прерывания можно не запрещать. Условия такие:
а) часть программы, выполняющая функции записи/стирания Flash, находится и исполняется из ОЗУ,
б) данный конкретный кристалл MSP430 поддерживает ремап векторов прерываний в ОЗУ и ремап этот реально задействован,
в) функции обработки прерываний находятся и исполняются из ОЗУ,
г) ни функции записи/стирания, ни функции обработки прерываний не используют других функций, расположеннных во Flash.
Про последний пункт часто забывают, используя в прерываниях функции вычислений (умножение/деление или вычисления с разрядностью выше нативной) или библиотечные функции ввода/вывода.
Go to the top of the page
 
+Quote Post
koljakh
сообщение Dec 16 2013, 07:06
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Цитата(rezident @ Dec 16 2013, 05:22) *
Вы не уточнили деталей вопроса, поэтому универсальный заведомо рабочий совет/ответ - да, обязательно. Причина в том, что таблица векторов прерываний в MSP430 находится во Flash.
Но в некоторых специальных случаях и при (одновременном) соблюдении нескольких условий прерывания можно не запрещать. Условия такие:
а) часть программы, выполняющая функции записи/стирания Flash, находится и исполняется из ОЗУ,
б) данный конкретный кристалл MSP430 поддерживает ремап векторов прерываний в ОЗУ и ремап этот реально задействован,
в) функции обработки прерываний находятся и исполняются из ОЗУ,
г) ни функции записи/стирания, ни функции обработки прерываний не используют других функций, расположеннных во Flash.
Про последний пункт часто забывают, используя в прерываниях функции вычислений (умножение/деление или вычисления с разрядностью выше нативной) или библиотечные функции ввода/вывода.


Ага, классический набор требований. Ясно.

Еще раз огромное спасибо за ответ.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th August 2025 - 09:51
Рейтинг@Mail.ru


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