1. 连续向24C02写超过8个byte出现错误。 解决办法: 24C02每行为8个字节,原来的I2C驱动是逢16个字节换行,把I2C驱动改为逢8换行。应用EEPROM需要注意这个问题: 除了24C02逢8个字节需要换行写,24C04/08/16都是逢16个字节换行,若不换行会导致覆盖当前行的内容,例如24C02从0x03单元开始连续写20个字节,在写到第6个字节需要换行,写到第14个字节又要换行。 ;24C02 1Page * 32rows * 8bytes * 8 bit = 256bytes = 2kbits ;24C04 2Page * 16rows * 16bytes * 8 bit = 512bytes = 4kbits ;24C08 4Page * 16rows * 16bytes * 8 bit = 1024bytes = 8kbits ;24C16 8Page * 16rows * 16bytes * 8 bit = 2048bytes = 16kbits 2. EEPROM的SDA,SCL都应该接下拉电阻为什么不行。 解决办法: 对于SDA,SCL的外部上拉电阻,SDA一定要上拉,否则不能读取到ACK,但是SCL可以接上拉,也可以接下拉,原来的I2C驱动只支持SCL上拉,在I2C总线忙判断SDA,SCL都为高时才认为总线Ready, 经过条件编译,把驱动修改为当SCL下拉时,判断SDA为高,SCL为低认为总线Ready否则Busy,若SDA,SCL都为上拉时,判断SDA,SCL都为高认为总线Ready否则Busy,同时适应SCL上下拉两种情况。
|