#include #include #include #include #include "/sys/dev/iicbus/iic.h" #define EEPROM_WR_ADDR 0xA0 #define EEPROM_RD_ADDR 0xA1 #define COUNT 256 int main(int argc, char **argv) { int fd, ifd; struct iiccmd cmd; char data[256]; char buf[16]; int i; if (argc != 3) errx(1, "Usage: %s ", argv[0]); if ( (fd = open(argv[1], O_RDWR)) < 0) err(1, "Opening device: %s", argv[1]); if ( (ifd = open(argv[2], O_RDONLY)) < 0) err(1, "Opening file: %d", argv[2]); if (read(ifd, data, 256) != 256) err(1, "Error reading input data"); if (ioctl(fd, I2CRSTCARD, &cmd) != 0) err(1, "Ioctl I2CRSTCARD error"); for (i = 0; i < 256; ++i) { /* WRITE 0*/ cmd.slave = EEPROM_WR_ADDR; cmd.count = 1; cmd.buf = buf; cmd.last = 0; buf[0] = buf[1] = buf[2] = buf[3] = 0; if (ioctl(fd, I2CSTART, &cmd) != 0) err(1, "Ioctl I2CSTART error"); cmd.slave = EEPROM_WR_ADDR; cmd.count = 2; buf[0] = i; buf[1] = data[i]; cmd.buf = buf; cmd.last = 0; if (ioctl(fd, I2CWRITE, &cmd) != 0) err(1, "Write Error"); if (ioctl(fd, I2CSTOP) != 0) err(1, "Ioctl I2CSTOP error"); usleep(100000); printf("Writing byte: %d\n", i); } return 0; }