Такая проблема подключена у меня к тини2313 eeprom 24c256, мне требуется писать туда массивы по 50 байт.
Вот так проходит настройка I2С
Код
[/*SETUP PORTB I2C (PB4 - SDA; PB3 - SCL)*/
#asm
.equ __i2c_port=0x18;PORTB
.equ __sda_bit=4
.equ __scl_bit=3
#endasm
#include <tiny2313.h>
#include <delay.h>
#include <i2c.h>
#define EEPROM_BUS_ADDRESS 0xa0x
Так пишет
Код
void eeprom_write(unsigned int address, unsigned char data)
{
unsigned char sSREG;
sSREG = SREG;
#asm("cli")
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write((unsigned char)address>>8);
i2c_write((unsigned char)address);
i2c_write(data);
i2c_stop();
SREG=sSREG;
delay_ms(11);
}
Так читает:
Код
unsigned char eeprom_read(unsigned int address)
{
unsigned char data;
unsigned char sSREG;
sSREG=SREG;
#asm("cli")
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write((unsigned char)address>>8);
i2c_write((unsigned char)address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
SREG = sSREG;
#asm("sei")
return data;
}
в цикле я записываю так
eeprom_write(n, mass[i]) Так вот, дает он мне записать только 200 байтов, потом происходит непонятно что и он опять начинает писать с первой ячейки затирая всю информацию.