Я недавно писал, что нашел хороший исходник для работы с EEPROM микросхемами AT24C16.
Оказалось, что он выгодно отличается от «доступных аналогов» тем, что работает очень быстро. Как говорится, «самая быстрая запись в EEPROM на Диком Западе». 🙂
Это потому, что в этом коде есть интересная изюминка. Микросхемы эти обрабатывают запросы на запись/чтение довольно медленно. Микроконтроллер должен ждать окончания предыдущей операции прежде чем отправлять в микруху новый запрос. В 99% примеров кода, доступных в сети, народ тупо лепит задержку на пару миллисекунд. Но в этом коде нет никаких задержек, зато там есть это:
static void at24cxx_wait(int i2c_address)
{
int resault = 0;
do
{
Wire.beginTransmission(i2c_address);
resault = Wire.endTransmission();
} while (resault != 0);
}
Это, оказывается, позволяет избежать излишнего ожидания и приступать к следующей операции в ту же самую долю микросекунды, когда микросхема EEPROM готова принять очередной запрос. В результате запись происходит очень быстро. Минимум на порядок быстрее, чем вариант с задержками.
2048 байт (полная емкость) пишутся за 231 мс.