Arduino не распознает внешнюю EEPROM при использовании avr lib - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь записать данные во внешнюю 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 код здесь .

...