koljakh 0 15 декабря, 2013 Опубликовано 15 декабря, 2013 · Жалоба Добрый день коллеги. Столкнулся с проблемой чтения инфо флеш. Существет ли какая-то последовательность инициализации этой области ? При подключенном JTAG все работает хорошо, пишет, читает, но как только я включаю прибор без JTAG несовпадает контрольная сумма (это единственное ветвление в программе). Более подробно глянуть не могу, нет УАРТа. При повторном включении с JTAG опять все на месте. т.е. данные не портятся. Помогите расколдовать флешку. уже второй день бьюсь :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 15 декабря, 2013 Опубликовано 15 декабря, 2013 · Жалоба У MSP430 единое адресное пространство, поэтому с чтением Flash не может должно быть никаких проблем. С записью в область INFO Flash-памяти есть три отличия: 1) размер сектора 128 байт, а не 512 байт как у основной памяти, 2) отдельный бит LOCKINFO, блокирующий запись/стирание в области INFO и 3) бит LOCKA, блокирующий дополнительно отдельно сегмент INFO_A. Причем следет учитывать такой нюанс, бит LOCKA работает по принципу переключателя состояния и только при записи в него лог.1. Т.е. чтобы установить требуемое состояние LOCKA следует сначала его прочитать и только, если его состояние не совпадает с тем, что нужно, то произвести запись в LOCKA лог.1. Запись лог.0 на состояние LOCKA никакого эффекта не оказывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
koljakh 0 15 декабря, 2013 Опубликовано 15 декабря, 2013 · Жалоба У MSP430 единое адресное пространство, поэтому с чтением Flash не может должно быть никаких проблем. С записью в область INFO Flash-памяти есть три отличия: 1) размер сектора 128 байт, а не 512 байт как у основной памяти, 2) отдельный бит LOCKINFO, блокирующий запись/стирание в области INFO и 3) бит LOCKA, блокирующий дополнительно отдельно сегмент INFO_A. Причем следет учитывать такой нюанс, бит LOCKA работает по принципу переключателя состояния и только при записи в него лог.1. Т.е. чтобы установить требуемое состояние LOCKA следует сначала его прочитать и только, если его состояние не совпадает с тем, что нужно, то произвести запись в LOCKA лог.1. Запись лог.0 на состояние LOCKA никакого эффекта не оказывает. Спасибо за ответ. Но проблема видимо уже в возрасте :) На второй день зоркий глаз заметил, что не обнулил переменную в стеке для подсчета контрольной суммы, а JTAG, видимо, всю память обнуляет. Железо не я делал, и уарта для отладки нет. У меня еще вопрос. Тут на форуме я видел что при записи и стирании запрещают прерывания. Это обязятельно? Я с МСП недавно, как-то не приходилось, но впечатления самые положительные, особенно если единицы микроампер выжимаешь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба Тут на форуме я видел что при записи и стирании запрещают прерывания. Это обязятельно? Вы не уточнили деталей вопроса, поэтому универсальный заведомо рабочий совет/ответ - да, обязательно. Причина в том, что таблица векторов прерываний в MSP430 находится во Flash. Но в некоторых специальных случаях и при (одновременном) соблюдении нескольких условий прерывания можно не запрещать. Условия такие: а) часть программы, выполняющая функции записи/стирания Flash, находится и исполняется из ОЗУ, б) данный конкретный кристалл MSP430 поддерживает ремап векторов прерываний в ОЗУ и ремап этот реально задействован, в) функции обработки прерываний находятся и исполняются из ОЗУ, г) ни функции записи/стирания, ни функции обработки прерываний не используют других функций, расположеннных во Flash. Про последний пункт часто забывают, используя в прерываниях функции вычислений (умножение/деление или вычисления с разрядностью выше нативной) или библиотечные функции ввода/вывода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
koljakh 0 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба Вы не уточнили деталей вопроса, поэтому универсальный заведомо рабочий совет/ответ - да, обязательно. Причина в том, что таблица векторов прерываний в MSP430 находится во Flash. Но в некоторых специальных случаях и при (одновременном) соблюдении нескольких условий прерывания можно не запрещать. Условия такие: а) часть программы, выполняющая функции записи/стирания Flash, находится и исполняется из ОЗУ, б) данный конкретный кристалл MSP430 поддерживает ремап векторов прерываний в ОЗУ и ремап этот реально задействован, в) функции обработки прерываний находятся и исполняются из ОЗУ, г) ни функции записи/стирания, ни функции обработки прерываний не используют других функций, расположеннных во Flash. Про последний пункт часто забывают, используя в прерываниях функции вычислений (умножение/деление или вычисления с разрядностью выше нативной) или библиотечные функции ввода/вывода. Ага, классический набор требований. Ясно. Еще раз огромное спасибо за ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться