медленный EEPROM

Доброго здоровья, All!

атмел разродился ответом по поводу медленной записи. цитирую

Dear customer,

I assume that you refer to writing from your application code. The EE write takes longer than on M103, timing can be found from the data sheet. The timing is based on the internal RC, so you could speed it up by writing to OSCCAL. But this should be kept within specified limits in order to ensure proper operation. An interrupt based EE write may be a better way to get more efficient EE writes in your application.

для тех, кто не читает по-английски, позволю себе привести свой перевод, не вдаваясь в детали:

Да, запись в ЕЕПРОМ происходит медленнее, чем в мега103 (см. даташит). Подсчет времени производится на основании внутреннего осциллятора, поэтому его можно разогнать с использованием OSCCAL, но время должно быть сохранено в рамках указанных границ для обеспечения безошибочной работы. Использование прерывания записи ЕЕПРОМ может оказаться лучшим способом получить более эффективную запись в ЕЕПРОМ в вашем приложении.

В общем, в переводе на русский - идите лесом. А кто-то толком понял, как работать с OSCCAL? У меня чего-то от троекратного прочтения даташита никакой ясносности не возникло...

WBR, Сергей. ICQ: 101347299

Reply to
Sergei Tuchinski
Loading thread data ...

Хелло Sergei,

Как-то pаз (24 Oct 03 11:51) Sergei Tuchinski шустpо так забацал All:

ST> Использование прерывания записи ЕЕПРОМ

Более правильный (точный) перевод: "Использование записи в EEPROM по прерыванию".

Пpимите и пpоч. Tim

Reply to
Tim N. Tashpulatov

Доброго здоровья, Tim!

24 Oct 03 14:41, Tim N. Tashpulatov написал для Sergei Tuchinski:

ST>> Использование прерывания записи ЕЕПРОМ

TNT> Более правильный (точный) перевод: "Использование записи в EEPROM по TNT> прерыванию".

я же писал, не вдаваясь в детали :) правильный перевод будет "запись в ЕЕПРОМ с использованием прерывания". имеется в виду прерывание окончания записи в ЕЕПРОМ. Hо по-моему, это не так уж принципиально.

WBR, Сергей. ICQ: 101347299

Reply to
Sergei Tuchinski

Хелло Sergei,

Как-то pаз (25 Oct 03 09:23) Sergei Tuchinski шустpо так забацал Tim N. Tashpulatov:

ST>>> Использование прерывания записи ЕЕПРОМ

TNT>> Более правильный (точный) перевод: "Использование записи в TNT>> EEPROM по прерыванию".

ST> я же писал, не вдаваясь в детали :) правильный перевод будет "запись ST> в ЕЕПРОМ с использованием прерывания". имеется в виду прерывание ST> окончания записи в ЕЕПРОМ. Hо по-моему, это не так уж принципиально.

Согласен. Просто есть разница между "половой акт по прерыванию" и "прерывание полового акта" :)

Пpимите и пpоч. Tim

Reply to
Tim N. Tashpulatov

Hello Sergei!

24 Oct 03 11:51, Sergei Tuchinski wrote to All: [...] ST> А кто-то толком понял, как работать с OSCCAL? У меня чего-то от ST> троекратного прочтения даташита никакой ясносности не возникло...

Я смотрел на мегу8515, но до проверки/отладки еще руки не дошли. В общем, если хочешь его изменить, то новое значение требуется загрузить самому из своей программы (просто запись в порт). Мне это актуально, поскольку эти редиски при работе от внутреннего генератора все равно грузят калибровку для 1 МГц тактовой невзирая на реальную выбранную частоту. В AVReAl Саша очень грамотно предусмотрел возможность при программировании чипа автоматически считывать заказанную константу (их там 4 заводских) и прописывать ее прямо в код по желаемому адресу, хоть в качестве параметра команды ldi :-) Так что проблем с перетаскиванием заводских калибровок не ожидается. Hо если у тебя тактирование внешнее или от кварца, то не вижу смысла вообще трогать OSCCAL.

73 & Cheerio! Andy.
Reply to
Andy Chernyshenko

Доброго здоровья, Andy!

29 Oct 03 05:06, Andy Chernyshenko написал для Sergei Tuchinski:

AC> [...] ST>> А кто-то толком понял, как работать с OSCCAL? У меня чего-то от ST>> троекратного прочтения даташита никакой ясносности не возникло...

AC> Я смотрел на мегу8515, но до проверки/отладки еще руки не дошли. В общем, AC> если AC> хочешь его изменить, то новое значение требуется загрузить самому из своей AC> программы (просто запись в порт). Мне это актуально, поскольку эти редиски AC> при AC> работе от внутреннего генератора все равно грузят калибровку для 1 МГц AC> тактовой невзирая на реальную выбранную частоту. В AVReAl Саша очень AC> грамотно AC> предусмотрел возможность при программировании чипа автоматически AC> считывать заказанную константу (их там 4 заводских) и прописывать ее прямо AC> в AC> код по желаемому адресу, хоть в качестве параметра команды ldi :-) Так AC> что AC> проблем с перетаскиванием заводских калибровок не ожидается. Hо если у AC> тебя AC> тактирование внешнее или от кварца, то не вижу смысла вообще трогать AC> OSCCAL.

все это как раз более-менее понятно. непонятно: 1. откуда берутся оные заводские константы (не в прямом смысле, а кто их выдумывает-то?), 2. на что они влияют? почему их 4? (а не 16, например?) Для разных частот? тогда зачем значения у них одинаковые?

насчет не трогать - чувак из атмела рекомендовал использовать OSCCAL для разгона записи в ЕЕПРОМ...

WBR, Сергей. ICQ: 101347299

... Hе ковыряй в носу перочинным ножиком. Лезвие легко ржавеет.

Reply to
Sergei Tuchinski

Hello Sergei!

29 Oct 03 17:24, Sergei Tuchinski wrote to Andy Chernyshenko:

ST> все это как раз более-менее понятно.

Экстрасексы в отпуске - формулировать следовало конкретнее.

ST> непонятно: ST> 1. откуда берутся оные заводские константы (не в прямом смысле, а ST> кто их выдумывает-то?),

Выдумывает небритый мужик с завода, почесывая волосатую грудь :-) Скорее всего

- усредненное значение на партию по результатам испытаний. Сам термин "калибровочные" ничего не навевает? :-)

ST> 2. на что они влияют?

Hа тактовую частоту внутреннего RC генератора (описано в документации).

ST> почему их 4? (а не 16, например?)

Потому, что у генератора может быть 4 частоты (описано в документации).

ST> Для разных ST> частот?

Для каждой из.

ST> тогда зачем значения у них одинаковые?

А это уж как получится. Таки это _калибровочные_ значения (на пальцах: возможность увести частоту в +- от среднего значения).

ST> насчет не трогать - чувак из атмела рекомендовал использовать ST> OSCCAL ST> для разгона записи в ЕЕПРОМ...

Он не рекомендовал - отвечал на твое недовольство "медленно". И, на мой взгляд, был сильно неправ - пионеры прочитают, не вдумываясь, да как начнут разгонять... Рекомендовал же использовать прерывание по записи. Почитай повнимательнее в документации по поводу влияния этого RC генератора (штатно на

1 МГц) и подумай, а надо ль оно тебе?

73 & Cheerio! Andy.

Reply to
Andy Chernyshenko

Доброго здоровья, Andy!

29 Oct 03 22:25, Andy Chernyshenko написал для Sergei Tuchinski:

ST>> все это как раз более-менее понятно. AC> Экстрасексы в отпуске - формулировать следовало конкретнее.

виноват. спасибо, что со мной нянчишься

ST>> 1. откуда берутся оные заводские константы (не в прямом смысле, а ST>> кто их выдумывает-то?), AC> Выдумывает небритый мужик с завода, почесывая волосатую грудь :-) Скорее AC> всего AC> - усредненное значение на партию по результатам испытаний. Сам термин AC> "калибровочные" ничего не навевает? :-)

понято

ST>> 2. на что они влияют? AC> Hа тактовую частоту внутреннего RC генератора (описано в документации).

имелось в виду, КАК :) Впрочем, уже более-менее понятно

ST>> почему их 4? (а не 16, например?) AC> Потому, что у генератора может быть 4 частоты (описано в документации).

понято

ST>> тогда зачем значения у них одинаковые?

AC> А это уж как получится. Таки это _калибровочные_ значения (на пальцах: AC> возможность увести частоту в +- от среднего значения).

понято

ST>> насчет не трогать - чувак из атмела рекомендовал использовать ST>> OSCCAL ST>> для разгона записи в ЕЕПРОМ... AC> Он не рекомендовал - отвечал на твое недовольство "медленно". И, на мой AC> взгляд, был сильно неправ - пионеры прочитают, не вдумываясь, да как AC> начнут разгонять...

ну это проблемы пионеров

AC> Рекомендовал же использовать прерывание по записи. Почитай

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

AC> повнимательнее в документации по поводу влияния этого RC генератора AC> (штатно на AC> 1 МГц) и подумай, а надо ль оно тебе?

а если я OSCCAL писать не буду в своей программе, какое значение у него будет? 00? То бишь, наимедленнейший вариант? То бишь, OSCCAL HАДО писать? А которую из констант, если в даташите указано, что тактируется запись в EEPROM от 1-МГц осциллятора HЕЗАВИСИМО от фьюзов? а я вообще использую внешний резонатор...

WBR, Сергей. ICQ: 101347299

... Умно отвечают только тому, кто умно спрашивает

Reply to
Sergei Tuchinski

Hello Sergei!

30 Oct 03 09:21, Sergei Tuchinski wrote to Andy Chernyshenko: [...] ST>>> 2. на что они влияют? AC>> Hа тактовую частоту внутреннего RC генератора (описано в AC>> документации).

ST> имелось в виду, КАК :) Впрочем, уже более-менее понятно

Ты настойчиво не желаешь ознакомиться с документацией :-)

=== When OSCCAL is zero, the lowest available frequency is chosen. Writing non-zero values to this register will increase the frequency of the internal Oscillator. Writing $FF to the register gives the highest available frequency. ===

Далее смотри таблицу 14 на странице 38 в доке на мегу8515 (например).

[...]

AC>> Рекомендовал же использовать прерывание по записи. Почитай

ST> только непонятно, как это на практике реализовывать. Строить ST> произвольную очередь на запись в буфер?

Если нет возможности заморозить все процессы на время записи всех значений - а почему бы и нет? Самое правильное решение, IMHO. В смысле не очередь, а именно заполнять буфер, из которого потом и будет переписываться в EEPROM.

ST> А с той скоростью, с какой он ST> пишется, нет гарантии ни на непереполнение буфера,

Hе вижу проблем. Интересно, приходилось ли тебе передавать большой поток через тот же UART через выделенный буфер передатчика (или принимать через буфер приемника)? И как там решал _ту_же_самую_ задачу? ;-) Вариант - через флаг разрешения записи в буфер или прямым анализом размера буфера, по вкусу. Кто пишет в буфер, тот анализирует разрешение записи. Кто пишет из буфера в EEPROM, тот манипулирует разрешением/запретом в зависимости от степени заполнения (например, тот самый обработчик прерывания по факту записи в EEPROM).

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

ST> ни на блокировку ST> задач из-за отсутствия доступа к ЕЕПРОМ...

Хм-м-м... А тебя не смущает, что прочие процедуры (или прерывания) не могут исполняться во время активности текущей? ;-)

AC>> повнимательнее в документации по поводу влияния этого RC AC>> генератора (штатно на 1 МГц) и подумай, а надо ль оно тебе?

ST> а если я OSCCAL писать не буду в своей программе, какое значение у ST> него будет? 00? То бишь, наимедленнейший вариант? То бишь, OSCCAL HАДО ST> писать?

=== During Reset, the 1 MHz calibrated value which is located in the signature row High Byte (address 0x00) is automatically loaded into the OSCCAL Register. If the internal RC is used at ather frequencies, the calibration values must be loaded manually. ===

ST> А которую из констант,

Соответствующую выбранной частоте, в случае использования внутреннего RC генератора.

ST> если в даташите указано, что ST> тактируется запись в EEPROM от 1-МГц осциллятора HЕЗАВИСИМО от ST> фьюзов?

Ты про

Note: 1. Uses 1 MHz clock, independent of CKSEL Fuse settings.

? Hу так о том и речь, что тактирование записи в EEPROM происходит на частоте 1 МГц (без учета сдвига из-за калибровки). Hо вот чтобы получить этот 1 МГц в случае работы от RC генератора на другой частоте из сетки 1-2-4-8 и требуется загрузить калибровочную константу, соответствующую этой частоте (для компенсации расброса). Деление на 2-4-8 контроллер сделает сам, для приведения к 1 МГц.

Иными словами, если выбрать тактовую 2 МГц, не загружать калибровку этой частоты (автоматически загрузится для 1 МГц), и при этом поиметь сдвиг частоты на 50% (все цифры условны), то и контроллер будет работать на 2.5 МГц, и тактировка записи в EEPROM на 1.5 МГц.

Я это понял так, хотя, честно говоря, тоже не сразу :-)

ST> а я вообще использую внешний резонатор...

Так я тебе и талдычу: забей ты на калибровку, она тебе вовсе не нужна ;-)

73 & Cheerio! Andy.
Reply to
Andy Chernyshenko

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.