#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
void dump(uint8_t *dt, uint32_t n) {
uint16_t clm = 0;
uint8_t data;
uint8_t sum;
uint8_t vsum[16];
uint8_t total =0;
uint32_t saddr =0;
uint32_t eaddr =n-1;
printf("----------------------------------------------------------\n");
uint16_t i;
for (i=0;i<16;i++) vsum[i]=0;
uint32_t addr;
for (addr = saddr; addr <= eaddr; addr++) {
data = dt[addr];
if (clm == 0) {
sum =0;
printf("%05x: ",addr);
}
sum+=data;
vsum[addr % 16]+=data;
printf("%02x ",data);
clm++;
if (clm == 16) {
printf("|%02x \n",sum);
clm = 0;
}
}
printf("----------------------------------------------------------\n");
printf(" ");
for (i=0; i<16;i++) {
total+=vsum[i];
printf("%02x ",vsum[i]);
}
printf("|%02x \n\n",total);
}
int main(int argc, char **argv) {
int addr;
int fd;
int data;
int i;
uint8_t buf[256];
printf("argc=%d\n",argc);
if (argc == 1) {
printf("%s i2c_address\n",argv[0]);
return 0;
}
addr = strtol(argv[1],NULL,16);
printf("i2c address=%d\n",addr);
fd = wiringPiI2CSetup(addr);
// clear all data
for(i=0;i<256;i++) {
wiringPiI2CWriteReg8(fd,i,0);
delay(2);
}
for(i=0;i<256;i++) {
buf[i] = wiringPiI2CReadReg8(fd,i);
}
dump(buf,256);
// write sequence data
for(i=0;i<256;i++) {
wiringPiI2CWriteReg8(fd,i,i);
delay(2);
}
for(i=0;i<256;i++) {
buf[i] = wiringPiI2CReadReg8(fd,i);
}
dump(buf,256);
}
|