Я использую I2C, и я ранее писал здесь сомнения по поводу I2C. Я использую контроллеры PIC и использую их компилятор C18. Я использовал их библиотеки для создания функции для записи данных в EEPROM через I2C, и когда я перепроверил строки SCL, они колебались.
Я создал функцию для записи в EEPROM, но я упустил задержки, поскольку в техническом описании указано, что «требуется минимальная задержка 5 мс для каждой операции записи в I2C».
Я верю, что это вызывает проблемы. Проблема в том, что SCL не остается на уровне 100 кГц, а колеблется между 54 кГц и 100 кГц, но никогда не выходит за его пределы. Это потому, что управляющий байт, адрес и данные отправляются по функции?
float ee_write_float(unsigned char ee_addr, float f)
{
void i2c_init(); //initialize I2c
unsigned char *p = (unsigned char *)&f;
unsigned char i;
for (i = sizeof f; i != 0; --i)
{
EEByteWrite(EE_I2C_ADDR, ee_addr++, *p++);
}
}
Насколько важны дела для операций записи I2C?
Может ли это быть причиной проблемы?
Должен ли я поставить задержку после функции EEByteWrite для компенсации?
Отмечено: SCL становится несколько стабильным после того, как скорость передачи данных снижается до 20 кГц, а затем колеблется между 17 кГц и 19 кГц. Я был бы очень рад, если бы вы нашли какую-либо разумную причину для устранения этой проблемы ... или любые ценные предложения будут приветствоваться от всего сердца.
В I2C часы переключаются только по мере необходимости для передачи или приема данных. Нет необходимости в непрерывном тактовом сигнале, поэтому следует ожидать изменения наблюдаемой частоты. Спецификация 100 кГц — это максимальная тактовая частота, а не средняя или непрерывная тактовая частота.
Энергонезависимая память, такая как флэш-память и EEPROM, требует относительно длительного периода времени для записи данных в память, и 5 мс звучит примерно так. Вы не должны пытаться выполнить несколько операций записи, не учитывая эту задержку между ними. Из-за этого вы не можете выполнять более 200 операций записи в секунду и по-прежнему разрешать 5 мс на операцию.
Если у вас все работает правильно, вы должны ожидать появления всплеска тактовых импульсов 100 кГц каждые 5 мс или около того.
Питер Джей
Новичок91
Питер Джей
Новичок91
Джон Ю
Скотт Сейдман