Перейти к содержанию
    

чтение info flash msp430F5506

Добрый день коллеги. Столкнулся с проблемой чтения инфо флеш.

Существет ли какая-то последовательность инициализации этой области ?

При подключенном JTAG все работает хорошо, пишет, читает, но как только я включаю прибор без JTAG несовпадает контрольная сумма (это единственное ветвление в программе).

Более подробно глянуть не могу, нет УАРТа.

При повторном включении с JTAG опять все на месте. т.е. данные не портятся.

Помогите расколдовать флешку. уже второй день бьюсь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У MSP430 единое адресное пространство, поэтому с чтением Flash не может должно быть никаких проблем.

С записью в область INFO Flash-памяти есть три отличия: 1) размер сектора 128 байт, а не 512 байт как у основной памяти, 2) отдельный бит LOCKINFO, блокирующий запись/стирание в области INFO и 3) бит LOCKA, блокирующий дополнительно отдельно сегмент INFO_A. Причем следет учитывать такой нюанс, бит LOCKA работает по принципу переключателя состояния и только при записи в него лог.1. Т.е. чтобы установить требуемое состояние LOCKA следует сначала его прочитать и только, если его состояние не совпадает с тем, что нужно, то произвести запись в LOCKA лог.1. Запись лог.0 на состояние LOCKA никакого эффекта не оказывает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У MSP430 единое адресное пространство, поэтому с чтением Flash не может должно быть никаких проблем.

С записью в область INFO Flash-памяти есть три отличия: 1) размер сектора 128 байт, а не 512 байт как у основной памяти, 2) отдельный бит LOCKINFO, блокирующий запись/стирание в области INFO и 3) бит LOCKA, блокирующий дополнительно отдельно сегмент INFO_A. Причем следет учитывать такой нюанс, бит LOCKA работает по принципу переключателя состояния и только при записи в него лог.1. Т.е. чтобы установить требуемое состояние LOCKA следует сначала его прочитать и только, если его состояние не совпадает с тем, что нужно, то произвести запись в LOCKA лог.1. Запись лог.0 на состояние LOCKA никакого эффекта не оказывает.

 

Спасибо за ответ. Но проблема видимо уже в возрасте :)

На второй день зоркий глаз заметил, что не обнулил переменную в стеке для подсчета контрольной суммы, а JTAG, видимо, всю память обнуляет. Железо не я делал, и уарта для отладки нет. У меня еще вопрос. Тут на форуме я видел что при записи и стирании запрещают прерывания. Это обязятельно? Я с МСП недавно, как-то не приходилось, но впечатления самые положительные, особенно если единицы микроампер выжимаешь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут на форуме я видел что при записи и стирании запрещают прерывания. Это обязятельно?

Вы не уточнили деталей вопроса, поэтому универсальный заведомо рабочий совет/ответ - да, обязательно. Причина в том, что таблица векторов прерываний в MSP430 находится во Flash.

Но в некоторых специальных случаях и при (одновременном) соблюдении нескольких условий прерывания можно не запрещать. Условия такие:

а) часть программы, выполняющая функции записи/стирания Flash, находится и исполняется из ОЗУ,

б) данный конкретный кристалл MSP430 поддерживает ремап векторов прерываний в ОЗУ и ремап этот реально задействован,

в) функции обработки прерываний находятся и исполняются из ОЗУ,

г) ни функции записи/стирания, ни функции обработки прерываний не используют других функций, расположеннных во Flash.

Про последний пункт часто забывают, используя в прерываниях функции вычислений (умножение/деление или вычисления с разрядностью выше нативной) или библиотечные функции ввода/вывода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не уточнили деталей вопроса, поэтому универсальный заведомо рабочий совет/ответ - да, обязательно. Причина в том, что таблица векторов прерываний в MSP430 находится во Flash.

Но в некоторых специальных случаях и при (одновременном) соблюдении нескольких условий прерывания можно не запрещать. Условия такие:

а) часть программы, выполняющая функции записи/стирания Flash, находится и исполняется из ОЗУ,

б) данный конкретный кристалл MSP430 поддерживает ремап векторов прерываний в ОЗУ и ремап этот реально задействован,

в) функции обработки прерываний находятся и исполняются из ОЗУ,

г) ни функции записи/стирания, ни функции обработки прерываний не используют других функций, расположеннных во Flash.

Про последний пункт часто забывают, используя в прерываниях функции вычислений (умножение/деление или вычисления с разрядностью выше нативной) или библиотечные функции ввода/вывода.

 

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

 

Еще раз огромное спасибо за ответ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...