Tengo curiosidad por saber qué figura en la hoja de datos de MCU (microcontrolador) revelaría la fuente de reloj mínima que podría usar para alimentar el controlador I2C para que pueda generar su línea de datos y CLK.
Buscando una respuesta para esta pregunta, me he topado con este párrafo aquí ,
Pregunta: Tengo un oscilador de 32.768kHz. Idealmente, me gustaría que la frecuencia de reloj del bus I2C se ejecute a 400 kHz o 100 kHz. Pero incluso con un valor de SSPADD = 0, el (reloj del modo maestro I2C) Fscl es de solo 8 kHz
Respuesta: El reloj I2C se genera al dividir el reloj frecuencia / 4, por lo que no hay manera de que pueda ser más rápido que un cuarto de su frecuencia de reloj.
Si se asume que es verdad, me gustaría saber la analogía detrás de esto.
En este caso, estoy usando Atmel SAMD21, sin embargo, honestamente no me importa si usa un MCU diferente como ejemplo.
En SAMD21, la velocidad estándar se ejecuta en una velocidad en baudios de 100 KHz y esta es la velocidad en baudios que me interesa conocer, a menos que desee ampliar su respuesta para obtener velocidades más rápidas.
SAMD21 utiliza los siguientes cálculos para eliminar una fuente de reloj incorrecta en su controlador I2C,
tmp_baud = (int32_t)(div_ceil(
fgclk - fscl * (10 + (fgclk * 0.000000001)* trise), 2 * fscl));
/* For High speed mode, set the SCL ratio of high:low to 1:2. */
if (config->transfer_speed == I2C_MASTER_SPEED_HIGH_SPEED) {
tmp_baudlow_hs = (int32_t)((fgclk * 2.0) / (3.0 * fscl_hs) - 1);
if (tmp_baudlow_hs) {
tmp_baud_hs = (int32_t)(fgclk / fscl_hs) - 2 - tmp_baudlow_hs;
} else {
tmp_baud_hs = (int32_t)(div_ceil(fgclk, 2 * fscl_hs)) - 1;
}
}
/* Check that baudrate is supported at current speed. */
if (tmp_baud > 255 || tmp_baud < 0 || tmp_baud_hs > 255 || tmp_baud_hs < 0) {
/* Baud rate not supported. */
tmp_status_code = STATUS_ERR_BAUDRATE_UNAVAILABLE;
}
siendo fgclk
la fuente del reloj (por ejemplo, 8MHz) y fscl
la velocidad en baudios de i2c Creo (por ejemplo, 100k) y trise=215
, que resulta en tmp_baud=35
y tmp_baud_hs=0
.