A ver, estos dias he estado leyendo sobre i2c y me he enterado mejor de como funciona el protocolo, a parte que viendo varios ejemplillos he podido ver como hacerlo. El problema estaba en la forma de acceder al buffer del slave, ya sea para leer o escrivir, en mi caso la escritura no era el problema, el problema era de lectura.
Para leer correctamente el buffer debe d hacerse de esta forma
i2c_start();
i2c_write(address); // direccion de slave
i2c_write(pos);
i2c_start();
i2c_write(address+1);
a=i2c_read(0);
i2c_stop();
Para escribir debe hacerse de esta forma
i2c_start();
i2c_write(address); // direccion de slave
i2c_write(pos); // posicion del buffer
i2c_write(data); //dato
i2c_stop();