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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Слетает flash
Step_ARM
сообщение Aug 7 2008, 19:09
Сообщение #16


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

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(defunct @ Aug 7 2008, 19:16) *
Причина слетов здесь - отсутствие или неправильная работа супервизора.
Не верится, что BOD у автора включен.
Причина - кривая разводка, отстутствие блокировочных емкостей по питанию, кривой DC/DC, кривой супервизор питания. Других причин здесь нет.

Возможно и так(я еще раз проверю). Но непонятно как влияет уровень напряжения на записанную флэш? У меня в самой программе SPM не выполняется нигде, а в загрузчике очень много условий для входа в саму загрузку.
Записывается-то нормально, без сбоев.
Разводка действительно очень плотная. И опять вопрос-- каким образом это влияет на целостность флэш? Предположим что где-то жуткие помехи -- изделие просто не будет работать или будет сбоить сама программа. Но тут получается , что прога работает прекрасно пока флэш не побита. Глюки все давно исправлены, да и программа несложная без изысков особых...
Go to the top of the page
 
+Quote Post
rtfcnf
сообщение Aug 7 2008, 19:20
Сообщение #17


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

Группа: Участник
Сообщений: 96
Регистрация: 27-06-08
Из: Москва
Пользователь №: 38 581



конденсатор КМ-5 0,01 - 0,1 мкФ на ножки питания меги biggrin.gif
Go to the top of the page
 
+Quote Post
VDG
сообщение Aug 7 2008, 19:27
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Сотрите всю флеш - и бут и программу или чистый контроллер возьмите. Подергайте питание и считайте флеш. Если и в этом случае будут ошибки в флеше, значит бут не причем, просто кристаллы левые.


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 7 2008, 19:37
Сообщение #19


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Step_ARM @ Aug 7 2008, 22:09) *
Разводка действительно очень плотная. И опять вопрос-- каким образом это влияет на целостность флэш?

Когда уровень напряжения питания падает ниже критической отметки указанной в ДШ, не секрет что МК начинает глючить, первым искажается содержимое RAM. МК надо бы сбросить и держать сброшенным до того как это произойдет. В противном случае, процессор может выполнять блоки вашей программы в совершенно случайном порядке. С достаточно низкой вероятностью (но ее хватает чтобы испортить флеш) процессор выполняет опасную команду SPM с параметром Page Erase. После чего питание падает настолько что процессор отключается, либо наоборот возрастает до нормального уровня и процессор начинает выполнять все правильно с той точки где находится, но одной страницы уже нет.

Кстати, можете убедиться в том, что слетает всегда только одна случайная страница флеш. Для этого прочитайте содержимое флеш после того как программа начнет работать неправильно и сравните с бинарником программы.

Цитата
Загрузчик начинает работать на запись только когда связался с компом и получил верные данные для записи страницы...

Стоит еще добавить "железную" защиту от записи - перемычку, проверяемую непосредственно перед SPM. Я использую перемычку между MISO/MOSI, т.к. всегда есть разъем программирования. Правда без супервизора питания она все одно не поможет, но вероятность слета хоть как-то снизит.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 7 2008, 21:57
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Step_ARM @ Aug 7 2008, 21:43) *
Загрузчик начинает работать на запись только когда связался с компом и получил верные данные для записи страницы... То есть , загрузчик посылает байт запроса, получает три байта в ответ. Если они совпали , то загрузчик посылает подтверждение компу. Дальше команда адрес и сразу 128 байт в буфер с проверкой CRC.

smile.gif

Вот тут вы заблуждаетесь. Это как у Дон Амброзио "процессор завис" или "сбоит". smile.gif

Память сама по себе не слетает. Не имеет такой привычки. Это значит, что при каких-то обстоятельствах процессор начинает выполнять некоректные действия и, портит ваш флэш.
Ваша задача разобраться почему и при каких обстоятельствах CPU занимается ерундой.

Причин может быть несколько.
Например - ошибка в программе.
Именно поэтому вам говорят про нарастание питания и BOD. То есть при низком питании, если выключен BOD и CPU при этом работает на высокой частоте (U=1.6 FCLK = 4) могут происходить такие финики.

Для проверки работоспособности вашего BOD подайте питание 2.5V и посмотрите порты.

Главное, вы должны понимать, что хомут где то у вас и вы можете и должны его найти.
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение Aug 8 2008, 10:33
Сообщение #21


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

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(rtfcnf @ Aug 7 2008, 23:20) *
конденсатор КМ-5 0,01 - 0,1 мкФ на ножки питания меги biggrin.gif

biggrin.gif smile.gif

BOD был отключен при параллельном программировании. Сейчас установил 4 В BODEN 0. В этом ли дело не уверен, но при испытаниях 10 изделий в рабочих условиях (быстрое включение и выключение питания) ни одно изделие не вышло из строя.
Спасибо всем. a14.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 8 2008, 10:41
Сообщение #22


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
В этом ли дело не уверен


Дело именно в этом. И за этим надо строго следить, чтобы не напрошивали фигни на производстве.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Aug 8 2008, 18:52
Сообщение #23


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

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
Я не могу электролиты убрать помехи слишком большие будут...

Цитата
Обычный 7805

После 7805 - УБЕРИ!!! Лучше добавь перед стабилизатором. После стабилизатора только керамика обеспечивающая устойчивую работу 7805 (см. ее доку).
Go to the top of the page
 
+Quote Post
demaven
сообщение Aug 9 2008, 04:08
Сообщение #24


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

Группа: Свой
Сообщений: 108
Регистрация: 10-05-05
Из: Киргизия Бишкек
Пользователь №: 4 886



столкнулись с такой проблеммой на меге16, перепробовали все, не помогало, перешли на внешнюю еепром - не помогло 01.gif стали смотреть код и нашли ошибку, исправили - и все стало нормально. на все эти поиски потратили недели две.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 9 2008, 05:39
Сообщение #25


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Rst7 @ Aug 8 2008, 13:41) *
Дело именно в этом. И за этим надо строго следить, чтобы не напрошивали фигни на производстве.
В особо параноидальных случаях - вплоть до того, что на старте программы проверять значение fuses и в случае чего стопорить работу с какой-то явной индикацией неработоспособности.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Petka
сообщение Aug 9 2008, 07:38
Сообщение #26


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(ReAl @ Aug 9 2008, 09:39) *
В особо параноидальных случаях - вплоть до того, что на старте программы проверять значение fuses и в случае чего стопорить работу с какой-то явной индикацией неработоспособности.

Это как? Что-то не припомню что фузы программно доступны.... 07.gif
Go to the top of the page
 
+Quote Post
Flasher
сообщение Aug 9 2008, 07:43
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



так в схему встроить автономный программатор, чтоб верификацию делал и заливал новую прошивку, если что
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение Aug 9 2008, 07:46
Сообщение #28


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

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(demaven @ Aug 9 2008, 08:08) *
столкнулись с такой проблеммой на меге16, перепробовали все, не помогало, перешли на внешнюю еепром - не помогло 01.gif стали смотреть код и нашли ошибку, исправили - и все стало нормально. на все эти поиски потратили недели две.

А при чем здесь EEPROM?
Go to the top of the page
 
+Quote Post
Petka
сообщение Aug 9 2008, 08:15
Сообщение #29


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Flasher @ Aug 9 2008, 11:43) *
так в схему встроить автономный программатор, чтоб верификацию делал и заливал новую прошивку, если что

а кто будет контролировать "автономный программатор"? ИМХО, это ещё одна деталь снижающая надёжность.
Всё же интересно, что же имел ввиду ReAl?
Go to the top of the page
 
+Quote Post
sKWO
сообщение Aug 9 2008, 09:53
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Petka @ Aug 9 2008, 10:38) *
Это как? Что-то не припомню что фузы программно доступны.... 07.gif

Поиск по форуму
Цитата
It is possible to read both the Fuse and Lock bits from software. To read the Lock bits,
load the Z-pointer with 0x0001 and set the RFLB and SELFPRGEN bits in SPMCSR.
When an LPM instruction is executed within three CPU cycles after the RFLB and
SELFPRGEN bits are set in SPMCSR, the value of the Lock bits will be loaded in the
destination register.

В иаре для меги так
Код
#include <inavr.h>

#define _GET_LOCK_BITS() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0001, 0x09 )
#define _GET_LOW_FUSES() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0000, 0x09 )
#define _GET_HIGH_FUSES() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0003, 0x09 )
#define _GET_EXTENDED_FUSES() __AddrToZByteToSPMCR_LPM( (void __flash *) 0x0002, 0x09 )
#define _SET_LOCK_BITS(data) __DataToR0ByteToSPMCR_SPM( data, 0x09 )
#define _ENABLE_RWW_SECTION() __DataToR0ByteToSPMCR_SPM( 0x00, 0x11 )

#define _WAIT_FOR_SPM() while( SPMCR_REG & (1<<SPMEN) );

// Read lock bits.
_WAIT_FOR_SPM();
sendchar( _GET_LOCK_BITS() );

// Read fuse bits.
_WAIT_FOR_SPM();
sendchar( _GET_LOW_FUSES() );

// Read high fuse bits.
_WAIT_FOR_SPM();
sendchar( _GET_HIGH_FUSES() );

// Read extended fuse bits.
_WAIT_FOR_SPM();
sendchar( _GET_EXTENDED_FUSES() );


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post

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

 


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


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