#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; struct iiccmd cmd; char buf[256]; int i; if (argc != 2) errx(1, "Usage: %s ", argv[0]); if ( (fd = open(argv[1], O_RDWR)) < 0) err(1, "Opening device: %s", argv[1]); if (ioctl(fd, I2CRSTCARD, &cmd) != 0) err(1, "Ioctl I2CRSTCARD error"); /* 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 = 1; 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"); /* Read COUNT Bytes */ cmd.slave = EEPROM_RD_ADDR; cmd.count = COUNT; cmd.buf = 0; 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_RD_ADDR; cmd.count = COUNT; cmd.buf = buf; cmd.last = 0; if (ioctl(fd, I2CREAD, &cmd) != 0) err(1, "Read Error"); if (ioctl(fd, I2CSTOP) != 0) err(1, "Ioctl I2CSTOP error"); for (i=0; i < COUNT; ++i) printf("%c", buf[i]); return 0; }