zombi 0 3 сентября, 2012 Опубликовано 3 сентября, 2012 · Жалоба к сожалению...но сильным быть-то и не надо, самую малость понимать уже хватило бы. :laughing: Как это делается на Си, не разбирался, т.к. под АВР пишу на ассемблере :beer: Спасибо _Артём_ и V_G, тереь становится яснее. Попытаюсь слегка резюмировать то что я понял. Поправте ещё раз ежели не прав. Итак, страничный буфер еепром это один 32-х байтных массив при записи в который почемуто происходит лог. И . В режиме отображения в область данных писать в этот буфер можно по любым адресам 0x1000-0x17FF (старшие биты адреса игнорируются). Количество этих записей не ограничено, ни что не мешает выполнить сто раз запись по одному и томуже адресу. Для записи буфера в страницу еепром необходимо выполнить команду NVM с ADDR равным любому адресу записываемой страницы (младшие биты адреса игнорируются). PS. похоже что при записи буфера в страницу еепром игнорируются не только 5 младших адресов а и адреса старше A10. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 3 сентября, 2012 Опубликовано 3 сентября, 2012 · Жалоба Вы бы еще ревизию чипа читали перед использованием eeprom. В xmega128a1 до ревизии чипа H, был неприятный баг. У меня проявлялся следующим образом (тоже использовал map ram), при записи в eeprom контроллер прыгал на произвольный адрес flash. Нормально запустить получилось, только когда применил workaround из errata. Запись в eeprom - впадение ядра в idle - просыпание по прерыванию об окончании записи в eeprom. Первые партии xmega разных серий страдали этой бажиной, потом они ее пофиксили. Здесь как повезет. Мне два таких попалось, потом нормальные стали приходить. Немного о причинах введения NVM контроллера. На мой взгляд одна из причин это организация постраничного доступа. В AVR постраничный доступ был доступен только через программатор. Мне в софте приходится сливать в eeprom большие массивы данных, в xmega это не в пример быстрее происходит из-за постраничной организации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 3 сентября, 2012 Опубликовано 3 сентября, 2012 · Жалоба Первые партии xmega разных серий страдали этой бажиной, потом они ее пофиксили. Капец! С освоением хмег не спешил, ждал когда побольше багов выловят. У меня все rev.H. Проверяю по старту и ругаюсь на более раннюю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба 1. Одна из причин введения специализированного NVM - как раз введение режима отображения на память. Да. конечно полезная штука. я тоже хотел ею воспользоваться чтоб дополнительно сэкономить на озу. чип мега 128а3 задумка была при постоянном включенном маппинге работать с калибровочными таблицами. Но к сожалению, так и не удалось довести до релиза. Хаотически появлялись глюки с записью в еепром. 3 месяца гонял свой софт из шкуры вылез, но так и не добился устойчивой работы NVM. Пришлось по старинке грузить таблицы в озу. Причины сбоев так и не смог опредлить. Да и с включенным маппингом студия4+avr Jtag mkII+ активное окно: содержимое EEPROM - тоже дурит не по детски. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 8 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба Да и с включенным маппингом студия4+avr Jtag mkII+ активное окно: содержимое EEPROM - тоже дурит не по детски. Я применяю atxmega32a4, никаких подобных проблем не встречал. При отладке в Студии4 иногда затирается ячейка 0 EEPROM, но эта штука где-то описана. EEPROM у меня используется на запись относительно часто, каждый раз при выключении питания пишется страница статуса (32 байта), 100 мкФ по питанию вполне хватает для удержания питания на время записи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба Я применяю atxmega32a4, никаких подобных проблем не встречал. При отладке в Студии4 иногда затирается ячейка 0 EEPROM, но эта штука где-то описана. В IAR в отладке тоже что-то подобное наблюдал с нулевой ячейкой. Не могли бы Вы сказать где проблема описана, есть желание почитать об этом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба А как узнать время записи страницы еепром при тактировании проца от внутр. 32 MHz? В DS на хмега128A (п. 33.4 Flash and EEPROM Memory Characteristics Table 33-4. Programming time) указано 6 ms но только для внутр. 2 MHz. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба При отладке в Студии4 иногда затирается ячейка 0 EEPROM, но эта штука где-то описана. Вернулся старый глюк meg, про который все уже забыли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба Я бы сказал глюк at90s, т.к. в мегах ИМХО его уже не было. Я до сих пор во всех AVR проектах нулевой байт eeprom'a резервирую:-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба Да нет это проявляется только при отладке и при включенном мапинге и открытом окне содержимого еепрома (покрайне мере у меня 100 % затирание ячейки- одна или несколько уже не помню) я так понимаю студия читает содержимое еепрома не используя маппинг если за этим следить (руками ставить\убирать флаг) то проблем нет хотя конечно напрягает. EEPROM у меня используется на запись относительно часто, каждый раз при выключении питания пишется страница статуса (32 байта), 100 мкФ по питанию вполне хватает для удержания питания на время записи. если не сложно не могли бы вы показать код того момента, когда происходит запись еепрома (особенно когда произходит переключения с маппинга на нормальный режим) если конечно не напрягает :-) если асм - это даже лучше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 8 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба если не сложно не могли бы вы показать код того момента, когда происходит запись еепрома (особенно когда произходит переключения с маппинга на нормальный режим) Я не использую нормальный режим и на него соответственно не переключаюсь 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 9 сентября, 2012 Опубликовано 9 сентября, 2012 · Жалоба Спасибо за код. то есть вы работаете с постоянно включенном маппинге не знаю почему, но я всегда считал, что запись в еепром должна производиться при выключенном маппинге может отсюда все мои проблемы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 9 сентября, 2012 Опубликовано 9 сентября, 2012 · Жалоба При переходе в спящие режимы запись в еепром останавливается или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 10 сентября, 2012 Опубликовано 10 сентября, 2012 · Жалоба Да нет это проявляется только при отладке и при включенном мапинге и открытом окне содержимого еепрома (покрайне мере у меня 100 % затирание ячейки- одна или несколько уже не помню) Аналогичное поведение в IAR. При переходе в спящие режимы запись в еепром останавливается или нет? В IDLE продолжает писать. В power save\down с памяти снимается тактовая, так что не должен писать, остальные не пробовал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 10 сентября, 2012 Опубликовано 10 сентября, 2012 · Жалоба В IDLE продолжает писать. В power save\down с памяти снимается тактовая, так что не должен писать, остальные не пробовал. ОК. Еще вопрос: При выключении питания проц уходит в power save и питается от резервного CR2032, просыпаясь раз в секунду инкрементирует счётчик времени и проверяет не появилось ли основное питание. Всё ОК, пол года полёт нормальный. Но есть одна проблемка. Если отключить и резервное питание то по сбросу счётчику времени кирдык. Сейчас при сбросе просто инициализирую счётчик временем прожига проца. Но хочется что бы время не сбрасывалось а хотябы просто останавливалось. Планирую раз в минуту писать счётчик в еепром. Время стирания/записи страницы еепром 12ms и потребление 30mA. Как прикинуть на сколько быстрее сдохнет батарейка если дополнительно каждую минуту при просыпании бросать текущее время в еепром? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться