_VoRoN_ 0 17 августа, 2006 Опубликовано 17 августа, 2006 · Жалоба Если кто сталкивался с такой проблемой, поделитесь пожалуйста опытом, касательно изменения существующих программ под новый чип, особенно в части взаимодействия с EEPROM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy-L 0 18 августа, 2006 Опубликовано 18 августа, 2006 · Жалоба Если кто сталкивался с такой проблемой, поделитесь пожалуйста опытом, касательно изменения существующих программ под новый чип, особенно в части взаимодействия с EEPROM. Посмотрите по ссылке в статье п. 17.2 отличия ЭСППЗУ http://www.ineltek.ru/html.cgi/txt/publ/_ineltek/recom.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
K_AV 0 19 августа, 2006 Опубликовано 19 августа, 2006 · Жалоба Объясните непонятливому, как пользоваться этой "страничной" записью в EEPROM, если мне вовсе не требуется писать все 32 бита. Требуется только 1 или 2. Просто пишем в буфер любое требуемое кол-во байт (не более 32) и разрешаем сброс буфера в EEPROM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_VoRoN_ 0 22 августа, 2006 Опубликовано 22 августа, 2006 · Жалоба Если кто сталкивался с такой проблемой, поделитесь пожалуйста опытом, касательно изменения существующих программ под новый чип, особенно в части взаимодействия с EEPROM. Посмотрите по ссылке в статье п. 17.2 отличия ЭСППЗУ http://www.ineltek.ru/html.cgi/txt/publ/_ineltek/recom.htm Да, на эту ссылку я уже натыкался, но вот проблемы это не решило. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
K_AV 0 22 августа, 2006 Опубликовано 22 августа, 2006 · Жалоба Мне в другом месте уже пояснили (не относительно этого чипа, а в общем) таким образом: Это только _возможность_ писать целую страницу целиком (т.е. НЕ 32 байта, а ДО 32 байт за раз). Косвенно это подтверждается тем, что в даташите написано, что при работе программы (изнутри чипа) обеспечивается автоматическое стирание при записи каждого байта EEPROM. Я попробовал - побайтная запись изнутри программы в отдельные ячейки EEPROM заработала в старой программе (написанной для 89S8252)без дополнительных переделок программы. Все, что сделал - поправил символические имена регистров спецфункций (раньше регистр управления был общий для EEPROM и WDT, теерь - раздельный). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_VoRoN_ 0 23 августа, 2006 Опубликовано 23 августа, 2006 · Жалоба Мне в другом месте уже пояснили (не относительно этого чипа, а в общем) таким образом: Это только _возможность_ писать целую страницу целиком (т.е. НЕ 32 байта, а ДО 32 байт за раз). Косвенно это подтверждается тем, что в даташите написано, что при работе программы (изнутри чипа) обеспечивается автоматическое стирание при записи каждого байта EEPROM. Я попробовал - побайтная запись изнутри программы в отдельные ячейки EEPROM заработала в старой программе (написанной для 89S8252)без дополнительных переделок программы. Все, что сделал - поправил символические имена регистров спецфункций (раньше регистр управления был общий для EEPROM и WDT, теерь - раздельный). А как вы осуществляли проверку состояния (rdy/bsy)? И начало и окончание записи, или только окончание? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_VoRoN_ 0 23 августа, 2006 Опубликовано 23 августа, 2006 · Жалоба Заработала побайтная запись. Действительно необходимо ожидать начала и окончания записи. А так, отличия от at 89S8252 только в регистрах настроек eeprom и сторожевого таймера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pretorianec 0 4 декабря, 2006 Опубликовано 4 декабря, 2006 · Жалоба Заработала побайтная запись. Действительно необходимо ожидать начала и окончания записи. А так, отличия от at 89S8252 только в регистрах настроек eeprom и сторожевого таймера. Если быть точным, то надо сначала записать 1 байт, потом проверить RDY/BUSY == 1, потом RDY/BUSY == 0, а затем RDY/BUSY = 1, и только после этого что-то делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Tумблер- 0 8 декабря, 2006 Опубликовано 8 декабря, 2006 · Жалоба Если быть точным, то надо сначала записать 1 байт, потом проверить RDY/BUSY == 1, потом RDY/BUSY == 0, а затем RDY/BUSY = 1, и только после этого что-то делать. У жука 8253 почему-то медленно сбрасывается флаг RDY/BUSY. Поэтому, после начала записи надо дождаться RDY=0, потом дождаться RDY=1. Это будет означать, что байт записан и можно начинать следующую операцию записи. Например, приблизительно так (IAR C): /*-------------------------------------*/ void eeprom_rdy (void) { for (;;) {if ((EECON & (1 << EERDY)) != 0) break;} } /*-------------------------------------*/ void eeprom_rdy0 (void) { for (;;) {if ((EECON & (1 << EERDY)) == 0) break;} } /*-------------------------------------*/ write_byte (word ad, byte dat) { data byte *pxdata; pxdata = (byte *) (0x010000 | ad); DI EECON |= (1 << EEMEN) | (1 << EEMWE); EI *pxdata = dat; eeprom_rdy0 (); eeprom_rdy (); DI EECON &= ~((1 << EEMEN) | (1 << EEMWE)); EI } /*-------------------------------------*/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться