Вдогонку к заметке про EEPROM

Я недавно писал, что нашел хороший исходник для работы с 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 мс.

Рис. 1

Добавить комментарий