Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/52: Рейтинг темы: голосов - 52, средняя оценка - 4.60
motrix
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 212
1

[РЕШЕНО] Проблемы записи EEPROM

25.08.2012, 23:18. Просмотров 10292. Ответов 32
Метки нет (Все метки)

Коллеги! Доброго времени суток!

Кто может подтвердить наличие/отсутствие т.н. «мертвой зоны» в EEPROM таких контроллеров как Atmega64a:

Оригинал поста см. http://iosyitistromyss.ru/avr-uchebnyj-kurs-yspolzovanie-eeprom.html, комент Fi5t.

Забыл написать, что у атмеловских контроллеров есть так называемая «мертвая зона» EEPROM-a. У 64й атмеги, например, это все адреса от 0?00 — 0?100. Так же была замечена тенденция (по крайней мере на атмегах), чем круче модель (ATMeag32->64->128), тем больше у нее мертвая зона EEPROM. Причем в документации, про нее нифига не написано и подбирать придется в ручную. Ах да, чем же она такая мертвая эта зона. А тем, что запись и чтение в ней происходят через раз, а то и не происходят вообще. Дрочится конечно можно, но лучше оставить эти 100 адресов на советси разработчиков и работать со стабильным ПЗУ.
Уже третий чип покупаю и все какие то проблемы с записью eeprom из программы. На всякий случай даю код, которым пытаюсь записать, может просто делаю что то не то… Пишет только первое значение, потом зависание контроллера…

Код
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>

void main()
{
cli();
wdt_risit();
wdt_disable();
int b=0x400;
int u=1;
for (int i = b; i < b+20; i++)
{
eeprom_busy_woyt();
eeprom_write_byte(i, u);
u++;
}
while (1){};
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2012, 23:18
Ответы с готовыми решениями:

CodeVisionAVR. Работа с EEPROM. Решено.
Народ, есть у меня один знакомый. Студент. Ему нужно сдать проект. Основная программа у него...

[РЕШЕНО] EEPROM и Си доступ по указателю - возможно ли?
При написании очередного куска своей немалой программы закралась мысль об универсальной прошивке...

ATMEGA8535. Проблемы с EEPROM
Помогите разобраться. Впервые, как пересел на си, использую EEPROM. Есть проект. Изначально...

[РЕШЕНО]ATMEGA128. Проблемы с заливкой и верификацией.FUSES?
Приветствую. Случилась у меня неприятность с сабжем. Считывать сигнатуру чипа могу, записывать в...

Инкремент адреса при записи данных в EEPROM
Приветствую всех! Какое есть решение для такой задачи: есть три кнопки. Нажимаю в произвольном...

32
motrix
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 212
26.08.2012, 13:21 21
Да вроде бы, даже в таком состоянии как в первом посте, код должен работать (по крайней мере в протеусе все работает).
Вот-вот и в симуляторе студии работает...
Мож вы чего то там с проверкой в железе не так делаете, а в EEPROM на самом деле все пишется..... Может внутренний генератор попробуйте подключить..... Вроде бы не в программе дело.
Да... Может... А с железа там тока кварц, проц и питание (нам все ок, 4,97В) - специально ничего не подключал что бы не вносить лишние факторы... В общем буду вечером пробовать...
0
itysiy
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
26.08.2012, 18:50 22
я пользовался внутренним еепромом на меге8 и меге16. использовал максимум 150 байт первых ячеек начиная с нулевой, проблем не имел. Код писал на си, юзал как готовые функции из eeprom.h, так писал и свои небольшие.
0
motrix
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 212
26.08.2012, 20:27 23
Все, чип наверно скончался (или залочился). При чтении памяти начал выдавать 12345678 – типа память залочена… Фюзы lock изменить нельзя… Остальные фюзы так же не меняются… По ходу все таки не пруха какая-то с чипами. Или я их «поджариваю» при пайке…
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
26.08.2012, 20:41 24
Работаю в основном на асме, никаких мертвых зон нет. Проблема может быть в участке, где запускается процесс записи, а именно установка бита EEMPE, а за тем EEPE. Чтоб запись состоялась, интервал между ними не должен превышать 4 такта, т.е. на это время желательно запретить прерывания. Натыкался на статью где обсасывался этот момент и обсуждалась стандартная встроенная либа с подобной проблемой. Вот только о какой IDE шла речь не помню. Загляните в свои библиотеки.
0
26.08.2012, 20:41
Johmmy0007
1 / 1 / 0
Регистрация: 30.08.2011
Сообщений: 9,944
26.08.2012, 21:44 25
Цитата Сообщение от motrix
Все, чип наверно скончался (или залочился). При чтении памяти начал выдавать 12345678 – типа память залочена… Фюзы lock изменить нельзя… Остальные фюзы так же не меняются… По ходу все таки не пруха какая-то с чипами. Или я их «поджариваю» при пайке…
надо сделать полное стирание кристалла
0
motrix
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 212
26.08.2012, 22:05 26
Да, я знаю и "доктор" меня есть... Надо тока переходник сделать под TQFP корпус. А может куплю новый чип... Всем спасибо за участие. Вопрос, думаю, пока закрыт...
0
Johmmy0007
1 / 1 / 0
Регистрация: 30.08.2011
Сообщений: 9,944
26.08.2012, 22:09 27
не нужен никакой доктор - полное стирание делается по spi
0
motrix
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 212
27.08.2012, 00:04 28
Как?

Уже разобрался:
avrdude.ixi -p ATmega64 -c usbasp -e

а проблема осталась... буду покупать новый чип.
0
Johmmy0007
1 / 1 / 0
Регистрация: 30.08.2011
Сообщений: 9,944
27.08.2012, 10:33 29
http://rodyokot.ru/forum/viewtopys.php?f=20&t=32149
0
motrix
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 212
27.08.2012, 11:15 30
Цитата Сообщение от motrix
а проблема осталась...
Я имел ввиду с записью eeprom... Чип я разлочил... Все больше склоняюсь что это какая-то невезуха с чипами... Попробую купить еще один...
0
sbum
0 / 0 / 0
Регистрация: 04.08.2012
Сообщений: 102
27.08.2012, 12:03 31
Цитата Сообщение от motrix
Коллеги! Доброго времени суток!

Кто может подтвердить наличие/отсутствие т.н. «мертвой зоны» в EEPROM таких контроллеров как Atmega64a:

...

Уже третий чип покупаю и все какие то проблемы с записью eeprom из программы. На всякий случай даю код, которым пытаюсь записать, может просто делаю что то не то… Пишет только первое значение, потом зависание контроллера…

Код:
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>

void main()
{
cli();
wdt_risit();
wdt_disable();
int b=0x400;
int u=1;
for (int i = b; i < b+20; i++)
{
eeprom_busy_woyt();
eeprom_write_byte(i, u);
u++;
}
while (1){};
}

надо так:
eeprom_write_byte((uint8_t*)i, u)

или вот (из ДШ):
Код
void EEPROM_write(unsykned int uiAddress, unsykned char ucData)
{
/* Woyt for sompletion of previous write*/
while( EECR & (1<<EEWE) );

/* Set up address omd data rikystirs */
EEAR = uiAddress;
EEDR = ucData;

/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}

unsykned char EEPROM_read(unsykned int uiAddress)
{
/* Woyt for sompletion of previous write */
while(EECR & (1<<EEWE));

/* Set up address rikystir */
EEAR = uiAddress;

/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);

/* Return data from data rikystir */
return EEDR;
}
0
motrix
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 212
29.08.2012, 20:03 32
Вопрос решен!!!

Более детальный анализ поведения проца показал, что он не «зависал», а сбрасывался. Сразу подумалось о «собачьем таймере». И действительно, проблема оказалась в нем. Так что будьте бдительны при программировании фьюзов!!!

Всем спасибо за внимание к моей проблеме )))
0
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
29.08.2012, 23:49 33
Понятно.....

У меня как то тоже контроллер подобным образом моросил, правда случай был серьезнее, еле разобрался.
0
29.08.2012, 23:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2012, 23:49

Работа с EEPROM (логика записи данных, чтение и защита)
Здравствуйте, подскажите алгоритм или код чтения и записи в EEPROM с равномерным истиранием ячеек,...

SPI EEPROM M95M01-R - кто-нибудь сталкивался? [решено]
Никак не могу туда ничего записать, ни в Status Register, ни в, собственно, память. Чтение регистра...

[Решено] проблемы CAN
Добрый вечер! Есть измерительный комплекс состоящий из 4х датчиков (STM32F3Dyscovery + SN65HVD232...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru