|
|
  |
XMega, EEPROM, NVM, разъясните плиз |
|
|
|
Sep 3 2012, 06:23
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(_Артём_ @ Sep 3 2012, 01:38)  к сожалению...но сильным быть-то и не надо, самую малость понимать уже хватило бы.  Цитата(V_G @ Sep 3 2012, 05:32)  Как это делается на Си, не разбирался, т.к. под АВР пишу на ассемблере Спасибо _Артём_ и V_G, тереь становится яснее. Попытаюсь слегка резюмировать то что я понял. Поправте ещё раз ежели не прав. Итак, страничный буфер еепром это один 32-х байтных массив при записи в который почемуто происходит лог. И . В режиме отображения в область данных писать в этот буфер можно по любым адресам 0x1000-0x17FF (старшие биты адреса игнорируются). Количество этих записей не ограничено, ни что не мешает выполнить сто раз запись по одному и томуже адресу. Для записи буфера в страницу еепром необходимо выполнить команду NVM с ADDR равным любому адресу записываемой страницы (младшие биты адреса игнорируются). PS. похоже что при записи буфера в страницу еепром игнорируются не только 5 младших адресов а и адреса старше A10.
|
|
|
|
|
Sep 6 2012, 08:21
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(V_G @ Sep 2 2012, 18:03)  1. Одна из причин введения специализированного NVM - как раз введение режима отображения на память. Да. конечно полезная штука. я тоже хотел ею воспользоваться чтоб дополнительно сэкономить на озу. чип мега 128а3 задумка была при постоянном включенном маппинге работать с калибровочными таблицами. Но к сожалению, так и не удалось довести до релиза. Хаотически появлялись глюки с записью в еепром. 3 месяца гонял свой софт из шкуры вылез, но так и не добился устойчивой работы NVM. Пришлось по старинке грузить таблицы в озу. Причины сбоев так и не смог опредлить. Да и с включенным маппингом студия4+avr Jtag mkII+ активное окно: содержимое EEPROM - тоже дурит не по детски.
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Sep 6 2012, 12:21
|

Местный
  
Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035

|
Цитата(V_G @ Sep 6 2012, 15:37)  Я применяю atxmega32a4, никаких подобных проблем не встречал. При отладке в Студии4 иногда затирается ячейка 0 EEPROM, но эта штука где-то описана. В IAR в отладке тоже что-то подобное наблюдал с нулевой ячейкой. Не могли бы Вы сказать где проблема описана, есть желание почитать об этом.
|
|
|
|
|
Sep 6 2012, 15:01
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Да нет это проявляется только при отладке и при включенном мапинге и открытом окне содержимого еепрома (покрайне мере у меня 100 % затирание ячейки- одна или несколько уже не помню) я так понимаю студия читает содержимое еепрома не используя маппинг если за этим следить (руками ставить\убирать флаг) то проблем нет хотя конечно напрягает. Цитата(V_G @ Sep 6 2012, 15:37)  EEPROM у меня используется на запись относительно часто, каждый раз при выключении питания пишется страница статуса (32 байта), 100 мкФ по питанию вполне хватает для удержания питания на время записи. если не сложно не могли бы вы показать код того момента, когда происходит запись еепрома (особенно когда произходит переключения с маппинга на нормальный режим) если конечно не напрягает :-) если асм - это даже лучше
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Sep 7 2012, 00:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
Цитата(Kovrov @ Sep 7 2012, 01:01)  если не сложно не могли бы вы показать код того момента, когда происходит запись еепрома (особенно когда произходит переключения с маппинга на нормальный режим) Я не использую нормальный режим и на него соответственно не переключаюсь Код 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
|
|
|
|
|
Sep 10 2012, 06:10
|

Местный
  
Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035

|
Цитата(Kovrov @ Sep 6 2012, 19:01)  Да нет это проявляется только при отладке и при включенном мапинге и открытом окне содержимого еепрома (покрайне мере у меня 100 % затирание ячейки- одна или несколько уже не помню) Аналогичное поведение в IAR. Цитата(zombi @ Sep 10 2012, 02:15)  При переходе в спящие режимы запись в еепром останавливается или нет? В IDLE продолжает писать. В power save\down с памяти снимается тактовая, так что не должен писать, остальные не пробовал.
|
|
|
|
|
Sep 10 2012, 18:02
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(xelax @ Sep 10 2012, 09:10)  В IDLE продолжает писать. В power save\down с памяти снимается тактовая, так что не должен писать, остальные не пробовал. ОК. Еще вопрос: При выключении питания проц уходит в power save и питается от резервного CR2032, просыпаясь раз в секунду инкрементирует счётчик времени и проверяет не появилось ли основное питание. Всё ОК, пол года полёт нормальный. Но есть одна проблемка. Если отключить и резервное питание то по сбросу счётчику времени кирдык. Сейчас при сбросе просто инициализирую счётчик временем прожига проца. Но хочется что бы время не сбрасывалось а хотябы просто останавливалось. Планирую раз в минуту писать счётчик в еепром. Время стирания/записи страницы еепром 12ms и потребление 30mA. Как прикинуть на сколько быстрее сдохнет батарейка если дополнительно каждую минуту при просыпании бросать текущее время в еепром?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|