|
发表于 2008-3-6 15:47:41
|
显示全部楼层
Bit Rate Generator Unit
This unit controls the period of SCL when operating in a Master mode. The SCL period
is controlled by settings in the TWI Bit Rate Register (TWBR) and the Prescaler bits in
the TWI Status Register (TWSR). Slave operation does not depend on Bit Rate or Prescaler
settings, but the CPU clock frequency in the Slave must be at least 16 times higher
than the SCL frequency. Note that Slaves may prolong the SCL low period, thereby
reducing the average TWI bus clock period. The SCL frequency is generated according
to the following equation:
这里是公式
• TWBR = Value of the TWI Bit Rate Register
• TWPS = Value of the prescaler bits in the TWI Status Register
Note: Note: Pull-up resistor values should be selected according to the SCL frequency and the
capacitive bus line load. See Table 120 on page 297 for value of pull-up resistor.
以上是最新英文中的说明,我没有找到关于你所说中文翻译的原本,在英文中也没看到相关的说明.
早先的英文手册中有这样的说明,主要是那时的I2C器件的SCL多为400K的,现在可以高多了,要根据你使用的I2C器件决定.
TWBR主要是设置主机控制的SCL的频率,当然与系统时钟有关,它相当一个可以微调的分频参数.在Start + SLA + R/W中,Start是DATA线上的下降沿,要比SCL的下降沿提前发出.当频率太高时,两者之间太小的话,经过I2C总线后,如果从机器件不能识别,从机就不能识别和响应主机的命令和控制了.所以不希望SCL太高.但SCL太低时,传送效率降低了.因此现在手册上给出的说明是根据I2C总线的电容选择合适的上拉电阻.这些都是细节的东西,如果彻底了解I2C的规程,就知道手册为何这样变化了.早先,I2C的器件SCL比较低,为了保险,提出了>10的简单方案.现在I2C器件的速度上去了,要提高SCL,当然强调>10就不合适了,所以要注意上拉电阻的使用.
具我所知,对EEPROM,FLASH写操作都是按页操作的,不同的是页的大小不同,AVR内部的EEPROM一页就是一个字节,而其它的器件可能一页为32\64\128\256等不同.如果你明白了我的例子,稍微修改程序,就可以对24C16操作了,原理相同.
你是否指挂在I2C总线上的器件损坏问题?如果主机发出命令后,在ACK位得不到正确的响应,说明I2C总线有问题,或器件损坏了. |
|