Я пытаюсь записать данные во внешнюю EEPROM, используя EEPROM с микрочипом Arduino MEGA 2560 и 24LC256. Я не могу использовать стандартную библиотеку Wire, потому что мой адрес имеет длину 15 бит, а мои страницы имеют длину 64 байта, но библиотека Wire имеет только 32-байтовый буфер.
Поэтому я попытался загрузить библиотеку AVR, чтобы лучше контроль над происходящим, но я застрял в проблеме, которую не понимаю: программа не видит подключенную EEPROM (ie. Она ведет себя так же, если она подключена или не подключена к Arduino).
Дело в том, что я знаю, что мои чипы / кабели работают, потому что я могу видеть EEPROM при использовании программы 'Scan_For_I2 C'.
В любом случае мне пришлось немного изменить библиотеку, чтобы позволить ему скомпилировать (переместил все встроенные функции в .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) );
}
Для получения полной информации о коде, который я написал, библиотека используется, wirin g EEPROM и таблицы данных чипа, скачайте архив на Mediafire, по этой ссылке
Спасибо всем, кто мог бы помочь
РЕДАКТИРОВАТЬ: I нашел скан для I2 C код здесь .