CH585 CH584 I2C时钟配置(超1MHz 最高1.8MHz)

  1. I2C的R16_I2C_CTRL2寄存器描述:

[5:0] FREQ :允许的范围在2~36MHz之间。必须设置在000010b 到100100b 之间

   RB_I2C_FREQ决定SCL的建立时间和SDA的保持时间,理论上I2C

频率可以达到一分频,实际频率可在36MHz之上,可使用最高80MHz。

  1.  I2C的R16_I2C_CKCFGR寄存器描述:

[11:0] CCR RW :时钟分频系数域,决定SCL 时钟的频率波形。

RB_I2C_CCR决定SCL高电平维持多少个系统主时钟周期。

其计算公式如下:(Tclk为FREQ时钟周期,Tscl为I2C的scl时钟周期,Thigh和Tlow分别为scl一个周期种的高低电平占比,Fclk为FREQ时钟频率,Fscl为I2C的scl时钟频率)

I2C标准模式或SMBus模式下:(100kHz及其以下

Thigh = CCR ×TPCLK1

Tlow = CCR ×TPCLK1

即:Tscl = Thigh+ Tlow = 2 * CCR ×Tclk

  假设FREQ = 60,即频率为60MHz,需要得到100KHz频率,即:

    CCR =  =   =  = 300

I2C快速模式下:

如果DUTY = 0:

Thigh = CCR ×Tclk

Tlow = 2 × CCR ×Tclk

即:Tscl = Thigh+ Tlow = 3 * CCR ×Tclk

 

如果DUTY = 1:

Thigh = 9 × CCR ×Tclk

Tlow = 16 × CCR ×Tclk

即:Tscl = Thigh+ Tlow = 25 * CCR ×Tclk

例如:在快速模式下,FREQ = 80,产生800kHz的SCL的频率:

  CCR =  =   =  = 4

注: 1. CCR允许设定的最小值为0x04,在快速DUTY = 0 模式下允许的最小值为0x0A(测试值,具体分频系数往极限调整时会受到建立时间和保持时间的影响,极限情况很可能采不到数据,比如在电平拉升的这段时间采,可能原本高电平采到低电平;在快速DUTY = 1 模式下允许的最小值为0x01;

2. 只有在关闭I2C时(PE = 0)才能设置CCR寄存器;

3. Fclk应当是10MHz的整数倍,这样可以正确产生400kHz的快速时钟。

 

3.I2C例程实际收发速率:

      中断收发:    4.55702ms/200字节   (351k bit/s)

      非中断收发:  4.51829ms/200字节   (354k bit/s)

  注:该实际速度计算时按一字节8bit计算,没有将应答位时间计入(即一字节9bit),实际上只浪费了装填数据的时间,收发速度接近400k bit/s

posted @ 2024-12-26 11:02  debugdabiaoge  阅读(514)  评论(0)    收藏  举报