• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

I2C RTL00

pvvx

Активный участник сообщества
Замечено странное поведение у [inline]i2c_frequency(&i2cmaster, I2C_BUS_CLK)[/inline] в SDK3.5b
при установке частоты шины более 400 кГц (в примере 2MHz):
I2с_2MHz.gif
Адрес выдает на скорости 400 кГц, а далее работает на указанной в i2c_frequency().
В стандарте I2C есть Fast-mode Plus, там скорость первого символа может быть 1MHz(?).
На HS speed всё правильно - до времени T1 скорость 400 кГц.
I2с_HS.gif
Выходит, что Fast-mode Plus не поддерживается.
 
Последнее редактирование:

sharikov

Active member
Замечено странное поведение у [inline]i2c_frequency(&i2cmaster, I2C_BUS_CLK)[/inline] в SDK3.5b
Я не понимаю слово "SDK3.5b"
Известно SDK3.5a и про "b" никто не слыхал.

при установке частоты шины более 400 кГц (в примере 2MHz) Адрес выдает на скорости 400 кГц, а далее работает на указанной в i2c_frequency().
Какое поведение если поставить ниже 400KHz ? От частоты процессора зависит ?
 

pvvx

Активный участник сообщества
Я не понимаю слово "SDK3.5b"
Известно SDK3.5a и про "b" никто не слыхал.
Да я наверно всё время путаю... т.к. на нормальную версию оно не тянет, а на bety - пойдет :)
Какое поведение если поставить ниже 400KHz ? От частоты процессора зависит ?
200 кГц (i2c_frequency(&i2cmaster, 200000) )
I2с_200k.gif
Режимы в i2c_frequency() переключаются так:
Код:
        if (i2c_user_clk <= 100) {
            pSalI2CHND->I2CSpdMod = I2C_SS_MODE;
        }
        else if ((i2c_user_clk > 100) && (i2c_user_clk <= 400)) {
            pSalI2CHND->I2CSpdMod = I2C_FS_MODE;
        }
        else if (i2c_user_clk > 400) {
            pSalI2CHND->I2CSpdMod = I2C_HS_MODE;
        }
        else {
            pSalI2CHND->I2CSpdMod = I2C_SS_MODE;
        }
Т.е. можно исправить как захочется.
I2C аппаратный, в дизайне чипа у RTL-ов 4 шт контроллера I2С IOports и pinmap RTL8710AF . Ещё не капал, как к нему прикрутить DMA...
 
Последнее редактирование:
Сверху Снизу