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

к сожалению...но сильным быть-то и не надо, самую малость понимать уже хватило бы.
:laughing:

Как это делается на Си, не разбирался, т.к. под АВР пишу на ассемблере
:beer:

 

 

Спасибо _Артём_ и V_G, тереь становится яснее.

 

Попытаюсь слегка резюмировать то что я понял. Поправте ещё раз ежели не прав.

 

Итак, страничный буфер еепром это один 32-х байтных массив при записи в который почемуто происходит лог. И .

В режиме отображения в область данных писать в этот буфер можно по любым адресам 0x1000-0x17FF (старшие биты адреса игнорируются).

Количество этих записей не ограничено, ни что не мешает выполнить сто раз запись по одному и томуже адресу.

Для записи буфера в страницу еепром необходимо выполнить команду NVM с ADDR равным любому адресу записываемой страницы (младшие биты адреса игнорируются).

 

PS. похоже что при записи буфера в страницу еепром игнорируются не только 5 младших адресов а и адреса старше A10.

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


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

Вы бы еще ревизию чипа читали перед использованием eeprom. В xmega128a1 до ревизии чипа H, был неприятный баг. У меня проявлялся следующим образом (тоже использовал map ram), при записи в eeprom контроллер прыгал на произвольный адрес flash. Нормально запустить получилось, только когда применил workaround из errata. Запись в eeprom - впадение ядра в idle - просыпание по прерыванию об окончании записи в eeprom.

Первые партии xmega разных серий страдали этой бажиной, потом они ее пофиксили. Здесь как повезет. Мне два таких попалось, потом нормальные стали приходить.

 

Немного о причинах введения NVM контроллера. На мой взгляд одна из причин это организация постраничного доступа. В AVR постраничный доступ был доступен только через программатор. Мне в софте приходится сливать в eeprom большие массивы данных, в xmega это не в пример быстрее происходит из-за постраничной организации.

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


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

Первые партии xmega разных серий страдали этой бажиной, потом они ее пофиксили.

Капец!

С освоением хмег не спешил, ждал когда побольше багов выловят.

У меня все rev.H. Проверяю по старту и ругаюсь на более раннюю.

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


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

1. Одна из причин введения специализированного NVM - как раз введение режима отображения на память.

 

Да. конечно полезная штука.

я тоже хотел ею воспользоваться чтоб дополнительно сэкономить на озу.

чип мега 128а3

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

 

Но к сожалению, так и не удалось довести до релиза.

Хаотически появлялись глюки с записью в еепром.

3 месяца гонял свой софт из шкуры вылез, но так и не добился устойчивой работы NVM.

Пришлось по старинке грузить таблицы в озу.

Причины сбоев так и не смог опредлить.

 

Да и с включенным маппингом студия4+avr Jtag mkII+ активное окно: содержимое EEPROM - тоже дурит не по детски.

 

 

 

 

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


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

Да и с включенным маппингом студия4+avr Jtag mkII+ активное окно: содержимое EEPROM - тоже дурит не по детски.

Я применяю atxmega32a4, никаких подобных проблем не встречал. При отладке в Студии4 иногда затирается ячейка 0 EEPROM, но эта штука где-то описана.

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

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


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

Я применяю atxmega32a4, никаких подобных проблем не встречал. При отладке в Студии4 иногда затирается ячейка 0 EEPROM, но эта штука где-то описана.

 

В IAR в отладке тоже что-то подобное наблюдал с нулевой ячейкой.

Не могли бы Вы сказать где проблема описана, есть желание почитать об этом.

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


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

А как узнать время записи страницы еепром при тактировании проца от внутр. 32 MHz?

В DS на хмега128A (п. 33.4 Flash and EEPROM Memory Characteristics Table 33-4. Programming time) указано 6 ms но только для внутр. 2 MHz.

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


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

При отладке в Студии4 иногда затирается ячейка 0 EEPROM, но эта штука где-то описана.

Вернулся старый глюк meg, про который все уже забыли?

 

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


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

Я бы сказал глюк at90s, т.к. в мегах ИМХО его уже не было.

Я до сих пор во всех AVR проектах нулевой байт eeprom'a резервирую:-)

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


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

Да нет это проявляется только при отладке

и при включенном мапинге и открытом окне содержимого еепрома

(покрайне мере у меня 100 % затирание ячейки- одна или несколько уже не помню)

я так понимаю студия читает содержимое еепрома не используя маппинг

если за этим следить (руками ставить\убирать флаг) то проблем нет

хотя конечно напрягает.

 

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

 

если не сложно не могли бы вы показать код того момента, когда происходит запись еепрома (особенно когда произходит переключения с маппинга на нормальный режим)

если конечно не напрягает :-)

если асм - это даже лучше

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


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

если не сложно не могли бы вы показать код того момента, когда происходит запись еепрома (особенно когда произходит переключения с маппинга на нормальный режим)

 

Я не использую нормальный режим и на него соответственно не переключаюсь

SaveAllBlock:
    RCALL    CopyYtoZ;заполнили PageBuffer
SaveEEPage:
    CLI    
    MOVW    r26,r30
    SBIW    r26,1
    CALL    AtomicWrite        
    CALL    _WAIT_FOR_SPM    
    SEI
    RET

AtomicWrite:;запись подготовленной страницы в EEPROM
    STS        NVM_ADDR0,address
    MOV        r16,addressH
    STS        NVM_ADDR1,r16
    CLR        r16
    STS        NVM_ADDR2,r16
    LDI        r16,NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc
    STS        NVM_CMD,r16
    LDI        r17,CCP_IOREG_gc
    OUT        CPU_CCP,r17                ;загрузили Protect IO Register signature
    LDI        r16,NVM_CMDEX_bm
    STS        NVM_CTRLA,r16                    ;команда "выполнить запись"
    RET

_WAIT_FOR_SPM:
    LDS        r17,NVM_STATUS    
    ANDI    r17,NVM_NVMBUSY_bm
    BRNE    _WAIT_FOR_SPM
    RET

 

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


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

Спасибо за код.

то есть вы работаете с постоянно включенном маппинге

не знаю почему, но я всегда считал, что запись в еепром должна производиться при выключенном маппинге

может отсюда все мои проблемы?

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


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

При переходе в спящие режимы запись в еепром останавливается или нет?

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


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

Да нет это проявляется только при отладке

и при включенном мапинге и открытом окне содержимого еепрома

(покрайне мере у меня 100 % затирание ячейки- одна или несколько уже не помню)

 

Аналогичное поведение в IAR.

 

При переходе в спящие режимы запись в еепром останавливается или нет?

 

В IDLE продолжает писать. В power save\down с памяти снимается тактовая, так что не должен писать, остальные не пробовал.

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


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

В IDLE продолжает писать. В power save\down с памяти снимается тактовая, так что не должен писать, остальные не пробовал.

ОК.

 

Еще вопрос:

При выключении питания проц уходит в power save и питается от резервного CR2032, просыпаясь раз в секунду инкрементирует счётчик времени и проверяет не появилось ли основное питание.

Всё ОК, пол года полёт нормальный.

Но есть одна проблемка.

Если отключить и резервное питание то по сбросу счётчику времени кирдык.

Сейчас при сбросе просто инициализирую счётчик временем прожига проца.

Но хочется что бы время не сбрасывалось а хотябы просто останавливалось.

Планирую раз в минуту писать счётчик в еепром.

Время стирания/записи страницы еепром 12ms и потребление 30mA.

Как прикинуть на сколько быстрее сдохнет батарейка если дополнительно каждую минуту при просыпании бросать текущее время в еепром?

 

 

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


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

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

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

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

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

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

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

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

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

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