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...
 
Последнее редактирование:
Сверху Снизу