首页 > 解决方案 > 使用 avr lib 时,Arduino 无法识别外部 EEPROM

问题描述

我正在尝试使用 Arduino MEGA 2560 和 24LC256 Microchip EEPROM 在外部 EEPROM 中写入数据。我不能使用标准的 Wire 库,因为我的地址是 15 位长,我的页面是 64 字节长,但 Wire 库只有一个 32 字节的缓冲区。

因此,我尝试下载 AVR 库以更好地控制正在发生的事情,但我遇到了一个我不明白的问题:程序看不到连接的 EEPROM(即,如果它是或现在,它的行为方式相同未连接到 Arduino)。

问题是我知道我的芯片/电缆正在工作,因为我在使用“Scan_For_I2C”程序时能够看到 EEPROM。

无论如何,我不得不稍微修改一下库以允许它编译(将所有内联函数移动到 .h 中,因为它们最初位于 .c 中)但我已经能够在这个函数调用中查明问题:

//! Send an I2C start condition in Master mode
inline void i2cSendStart(void)
{
    // send start condition
    outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWSTA));
    TWCR &= ~(1<<TWSTA);
}

在哪里 :

#ifndef inb
#define inb(addr)           (addr)
#endif

#ifndef BV
#define BV(bit)         (1<<(bit))
#endif

我可以通过调用这个来检测问题:

//! Get current I2c bus status from TWSR
inline u08 i2cGetStatus(void)
{
    // retrieve current i2c status from i2c TWSR
    return( inb(TWSR) );
}

有关我编写的代码、使用的库、EEPROM 的接线和芯片的数据表的完整详细信息,请使用此链接在 Mediafire上下载存档

感谢任何可能提供帮助的人


编辑:我在这里找到了 I2C 代码的扫描。

标签: arduinoavreeprom

解决方案


推荐阅读