linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* i2cset question
@ 2009-04-17 14:33 Chris Cole
       [not found] ` <49E89342.1010807-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Chris Cole @ 2009-04-17 14:33 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA

Hey all, I found the i2c-tools and lm-sensors packages today...great 
stuff! I had a question about using i2cset properly. I'm trying to set 
the value of a digital potentiometer (maxim 5434L) over the i2cbus, and 
I can tell by using i2cdump that it's setting the register value 
properly...but I keep getting "Warning - readback failed" after i use 
i2cset. Here's the output of what I'm trying to do:

ccole@test:~$ sudo modprobe scx200_acb
ccole@test:~$ sudo modprobe i2c-dev
ccole@test:~$ sudo su -
root@test:~# i2cdetect -l
i2c-0    smbus         CS5536 ACB0                         SMBus adapter

root@test:~# i2cdetect 0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@test:~# i2cdump 0 0x50
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0, address 0x50, mode byte
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
50: 7f 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    ?23-B3S.........
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

root@test:~# i2cset 0 0x50 0x50 0x21
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
DANGEROUS! Writing to a serial EEPROM on a memory DIMM
may render your memory USELESS and make your system UNBOOTABLE!
I will write to device file /dev/i2c-0, chip address 0x50, data address
0x50, data 0x21, mode byte.
Continue? [y/N] y
Warning - readback failed

root@test:~# i2cdump 0 0x50
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0, address 0x50, mode byte
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
50: 21 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    !23-B3S.........
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

root@test:~# i2cset 0 0x50 0x50 0x00
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
DANGEROUS! Writing to a serial EEPROM on a memory DIMM
may render your memory USELESS and make your system UNBOOTABLE!
I will write to device file /dev/i2c-0, chip address 0x50, data address
0x50, data 0x00, mode byte.
Continue? [y/N] y
Warning - readback failed

root@test:~# i2cdump 0 0x50
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0, address 0x50, mode byte
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
50: 00 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    .23-B3S.........
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................


Thanks,
  Chris

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: i2cset question
       [not found] ` <49E89342.1010807-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2009-04-17 15:48   ` Jean Delvare
       [not found]     ` <20090417174845.471d4d9d-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
  2012-10-17 12:07     ` Javi
  0 siblings, 2 replies; 6+ messages in thread
From: Jean Delvare @ 2009-04-17 15:48 UTC (permalink / raw)
  To: Chris Cole; +Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA

Hi Chris,

On Fri, 17 Apr 2009 10:33:38 -0400, Chris Cole wrote:
> Hey all, I found the i2c-tools and lm-sensors packages today...great 
> stuff! I had a question about using i2cset properly. I'm trying to set 
> the value of a digital potentiometer (maxim 5434L) over the i2cbus, and 
> I can tell by using i2cdump that it's setting the register value 
> properly...but I keep getting "Warning - readback failed" after i use 
> i2cset. Here's the output of what I'm trying to do:
> 
> ccole@test:~$ sudo modprobe scx200_acb
> ccole@test:~$ sudo modprobe i2c-dev
> ccole@test:~$ sudo su -
> root@test:~# i2cdetect -l
> i2c-0    smbus         CS5536 ACB0                         SMBus adapter
> 
> root@test:~# i2cdetect 0
> WARNING! This program can confuse your I2C bus, cause data loss and worse!
> I will probe file /dev/i2c-0.
> I will probe address range 0x03-0x77.
> Continue? [Y/n] y
>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
> 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> 70: -- -- -- -- -- -- -- --
> root@test:~# i2cdump 0 0x50
> No size specified (using byte-data access)
> WARNING! This program can confuse your I2C bus, cause data loss and worse!
> I will probe file /dev/i2c-0, address 0x50, mode byte
> Continue? [Y/n] y
>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
> 00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
> 10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
> 20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
> 40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
> 50: 7f 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    ?23-B3S.........
> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

This is the SPD EEPROM of your memory module (512 MB of PC2700 DDR
SDRAM according to decode-dimms.) This is not your digital
potentiometer.

> 
> root@test:~# i2cset 0 0x50 0x50 0x21
> No size specified (using byte-data access)
> WARNING! This program can confuse your I2C bus, cause data loss and worse!
> DANGEROUS! Writing to a serial EEPROM on a memory DIMM
> may render your memory USELESS and make your system UNBOOTABLE!

As the warning says, you REALLY shouldn't do this!

> I will write to device file /dev/i2c-0, chip address 0x50, data address
> 0x50, data 0x21, mode byte.
> Continue? [y/N] y
> Warning - readback failed
> 
> root@test:~# i2cdump 0 0x50
> No size specified (using byte-data access)
> WARNING! This program can confuse your I2C bus, cause data loss and worse!
> I will probe file /dev/i2c-0, address 0x50, mode byte
> Continue? [Y/n] y
>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
> 00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
> 10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
> 20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
> 40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
> 50: 21 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    !23-B3S.........
> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> 
> root@test:~# i2cset 0 0x50 0x50 0x00
> No size specified (using byte-data access)
> WARNING! This program can confuse your I2C bus, cause data loss and worse!
> DANGEROUS! Writing to a serial EEPROM on a memory DIMM
> may render your memory USELESS and make your system UNBOOTABLE!
> I will write to device file /dev/i2c-0, chip address 0x50, data address
> 0x50, data 0x00, mode byte.
> Continue? [y/N] y
> Warning - readback failed
> 
> root@test:~# i2cdump 0 0x50
> No size specified (using byte-data access)
> WARNING! This program can confuse your I2C bus, cause data loss and worse!
> I will probe file /dev/i2c-0, address 0x50, mode byte
> Continue? [Y/n] y
>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
> 00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
> 10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
> 20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
> 40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
> 50: 00 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    .23-B3S.........
> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

You are very lucky that you didn't write to a byte location < 0x40,
that would have broken the checksum and you would no longer be able to
boot your system.

I encourage you to restore the value of byte 0x50 to what it originally
was and never ever again touch this SPD EEPROM.

The "readback failed" warning is presumably because it takes some time
to the EEPROM to write the new data and in the meantime you can't read
from it.

The MAX5434L has I2C address 0x28 or 0x29. It doesn't show on
i2cdetect. Check whether it's properly soldered. If it is, try i2cget
instead of i2cdetect, maybe the Maxim chip doesn't like the probes
i2cdetect does.

-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: i2cset question
       [not found]     ` <20090417174845.471d4d9d-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
@ 2009-04-17 16:23       ` Chris Cole
       [not found]         ` <49E8AD1E.1070805-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Chris Cole @ 2009-04-17 16:23 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA

> You are very lucky that you didn't write to a byte location < 0x40,
> that would have broken the checksum and you would no longer be able to
> boot your system.
> 
> I encourage you to restore the value of byte 0x50 to what it originally
> was and never ever again touch this SPD EEPROM.
> 
> The "readback failed" warning is presumably because it takes some time
> to the EEPROM to write the new data and in the meantime you can't read
> from it.
> 
> The MAX5434L has I2C address 0x28 or 0x29. It doesn't show on
> i2cdetect. Check whether it's properly soldered. If it is, try i2cget
> instead of i2cdetect, maybe the Maxim chip doesn't like the probes
> i2cdetect does.
> 

Ok, I think we were getting confused about the MAX45434L data sheet 
addressing and thought the address of 0x50 corresponded to the chip. I 
now see that the address should be 0x28, however I know it's soldered 
properly and I still can't see it with i2cget...am I dead in the water 
or is there possibly another way to approach this?

Thanks,
   Chris

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: i2cset question
       [not found]         ` <49E8AD1E.1070805-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2009-04-17 16:33           ` Jean Delvare
  0 siblings, 0 replies; 6+ messages in thread
From: Jean Delvare @ 2009-04-17 16:33 UTC (permalink / raw)
  To: Chris Cole; +Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA

On Fri, 17 Apr 2009 12:23:58 -0400, Chris Cole wrote:
> > You are very lucky that you didn't write to a byte location < 0x40,
> > that would have broken the checksum and you would no longer be able to
> > boot your system.
> > 
> > I encourage you to restore the value of byte 0x50 to what it originally
> > was and never ever again touch this SPD EEPROM.
> > 
> > The "readback failed" warning is presumably because it takes some time
> > to the EEPROM to write the new data and in the meantime you can't read
> > from it.
> > 
> > The MAX5434L has I2C address 0x28 or 0x29. It doesn't show on
> > i2cdetect. Check whether it's properly soldered. If it is, try i2cget
> > instead of i2cdetect, maybe the Maxim chip doesn't like the probes
> > i2cdetect does.
> > 
> 
> Ok, I think we were getting confused about the MAX45434L data sheet 
> addressing and thought the address of 0x50 corresponded to the chip. I 
> now see that the address should be 0x28, however I know it's soldered 
> properly and I still can't see it with i2cget...am I dead in the water 
> or is there possibly another way to approach this?

You clearly have to solve your hardware problem first, and for that
there's nothing I can do. Maybe try another chip sample, or try on
another system.

-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: i2cset question
  2009-04-17 15:48   ` Jean Delvare
       [not found]     ` <20090417174845.471d4d9d-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
@ 2012-10-17 12:07     ` Javi
       [not found]       ` <loom.20121017T134619-899-eS7Uydv5nfjZ+VzJOa5vwg@public.gmane.org>
  1 sibling, 1 reply; 6+ messages in thread
From: Javi @ 2012-10-17 12:07 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA

Jean Delvare <khali@...> writes:

> 
> Hi Chris,
> 
> On Fri, 17 Apr 2009 10:33:38 -0400, Chris Cole wrote:
> > Hey all, I found the i2c-tools and lm-sensors packages today...great 
> > stuff! I had a question about using i2cset properly. I'm trying to set 
> > the value of a digital potentiometer (maxim 5434L) over the i2cbus, and 
> > I can tell by using i2cdump that it's setting the register value 
> > properly...but I keep getting "Warning - readback failed" after i use 
> > i2cset. Here's the output of what I'm trying to do:
> > 
> > ccole <at> test:~$ sudo modprobe scx200_acb
> > ccole <at> test:~$ sudo modprobe i2c-dev
> > ccole <at> test:~$ sudo su -
> > root <at> test:~# i2cdetect -l
> > i2c-0    smbus         CS5536 ACB0                         SMBus adapter
> > 
> > root <at> test:~# i2cdetect 0
> > WARNING! This program can confuse your I2C bus, cause data loss and worse!
> > I will probe file /dev/i2c-0.
> > I will probe address range 0x03-0x77.
> > Continue? [Y/n] y
> >      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
> > 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
> > 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 70: -- -- -- -- -- -- -- --
> > root <at> test:~# i2cdump 0 0x50
> > No size specified (using byte-data access)
> > WARNING! This program can confuse your I2C bus, cause data loss and worse!
> > I will probe file /dev/i2c-0, address 0x50, mode byte
> > Continue? [Y/n] y
> >      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
> > 00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
> > 10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
> > 20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
> > 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
> > 40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
> > 50: 7f 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    ?23-B3S.........
> > 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> > 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> > 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> 
> This is the SPD EEPROM of your memory module (512 MB of PC2700 DDR
> SDRAM according to decode-dimms.) This is not your digital
> potentiometer.
> 
> > 
> > root <at> test:~# i2cset 0 0x50 0x50 0x21
> > No size specified (using byte-data access)
> > WARNING! This program can confuse your I2C bus, cause data loss and worse!
> > DANGEROUS! Writing to a serial EEPROM on a memory DIMM
> > may render your memory USELESS and make your system UNBOOTABLE!
> 
> As the warning says, you REALLY shouldn't do this!
> 
> > I will write to device file /dev/i2c-0, chip address 0x50, data address
> > 0x50, data 0x21, mode byte.
> > Continue? [y/N] y
> > Warning - readback failed
> > 
> > root <at> test:~# i2cdump 0 0x50
> > No size specified (using byte-data access)
> > WARNING! This program can confuse your I2C bus, cause data loss and worse!
> > I will probe file /dev/i2c-0, address 0x50, mode byte
> > Continue? [Y/n] y
> >      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
> > 00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
> > 10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
> > 20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
> > 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
> > 40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
> > 50: 21 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    !23-B3S.........
> > 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> > 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> > 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > 
> > root <at> test:~# i2cset 0 0x50 0x50 0x00
> > No size specified (using byte-data access)
> > WARNING! This program can confuse your I2C bus, cause data loss and worse!
> > DANGEROUS! Writing to a serial EEPROM on a memory DIMM
> > may render your memory USELESS and make your system UNBOOTABLE!
> > I will write to device file /dev/i2c-0, chip address 0x50, data address
> > 0x50, data 0x00, mode byte.
> > Continue? [y/N] y
> > Warning - readback failed
> > 
> > root <at> test:~# i2cdump 0 0x50
> > No size specified (using byte-data access)
> > WARNING! This program can confuse your I2C bus, cause data loss and worse!
> > I will probe file /dev/i2c-0, address 0x50, mode byte
> > Continue? [Y/n] y
> >      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
> > 00: 80 08 07 0d 0b 01 40 00 04 60 70 00 82 08 00 01    ??????@.?`p.??.?
> > 10: 0e 04 0c 01 02 20 c0 75 70 00 00 48 30 48 2a 80    ????? ?up..H0H*?
> > 20: 80 80 45 45 00 00 00 00 00 3c 48 30 2d 55 00 01    ??EE.....<H0-U.?
> > 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 68    ..............?h
> > 40: 7f 7f 7f 7f 7f ba 00 00 00 56 4c 34 37 30 4c 36    ??????...VL470L6
> > 50: 00 32 33 2d 42 33 53 00 00 00 00 00 00 00 00 00    .23-B3S.........
> > 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> > 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
> > 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> > f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
> 
> You are very lucky that you didn't write to a byte location < 0x40,
> that would have broken the checksum and you would no longer be able to
> boot your system.
> 
> I encourage you to restore the value of byte 0x50 to what it originally
> was and never ever again touch this SPD EEPROM.
> 
> The "readback failed" warning is presumably because it takes some time
> to the EEPROM to write the new data and in the meantime you can't read
> from it.
> 
> The MAX5434L has I2C address 0x28 or 0x29. It doesn't show on
> i2cdetect. Check whether it's properly soldered. If it is, try i2cget
> instead of i2cdetect, maybe the Maxim chip doesn't like the probes
> i2cdetect does.
> 

Hi, Jean

I have the same problem than Chris. I am working with an ALIX motherboard with 
voyage linux distribution and I have connected a 24LC64 eeprom. When I try to 
write the epprom with i2cset command it doesn't work.
I am sure that the address of the eeprom is 0x51 because if I change it 
i2cdetect shows me it in the new address (the first test I did it was in the 
0x50 address, then I changed it to 0x51).
I loaded i2c-dev and i2c-core modules.

voyage:~# i2cdetect -l
i2c-0	smbus     	CS5536 ACB0                     	SMBus adapter
voyage:~# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
voyage:~# i2cdump -y 0 0x51
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

As you see the eeprom is empty. The first thing I don't understand is why 
i2cdump shows only 256 bytes and not all the eeprom (64K).
If I try to write it doesn't complain, but when I dump the memory again nothing 
changed.

voyage:~# i2cset -y 0 0x51 0x01 0xaa
voyage:~# i2cdump -y 0 0x51
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

The only way I see a change is writing in data address 0 with c mode, then in 
the next dump I see 00 in 0x00 address.. BUT if I repeat the dump it prints ff 
again!

voyage:~# i2cset -y 0 0x51 0 c
voyage:~# i2cdump -y 0 0x51
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
voyage:~# i2cdump -y 0 0x51
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

I have tried this with two different chips, the result was exactly the same.

Any idea? Any help will be apreciated!

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: i2cset question
       [not found]       ` <loom.20121017T134619-899-eS7Uydv5nfjZ+VzJOa5vwg@public.gmane.org>
@ 2012-10-17 12:43         ` Jean Delvare
  0 siblings, 0 replies; 6+ messages in thread
From: Jean Delvare @ 2012-10-17 12:43 UTC (permalink / raw)
  To: Javi; +Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA

Hi Javi,

On Wed, 17 Oct 2012 12:07:40 +0000 (UTC), Javi wrote:
> I have the same problem than Chris.

Actually I suspect this is a different problem.

> I am working with an ALIX motherboard with 
> voyage linux distribution and I have connected a 24LC64 eeprom. When I try to 
> write the epprom with i2cset command it doesn't work.

Because the 24LC64 uses a two-byte addressing model, while SMBus uses a
one-byte addressing model. This means you can't use this type of EEPROM
with an SMBus controller [1]. You need a full-featured I2C controller.
You may be able to achieve that on your system by using the scx200_i2c
driver instead of scx200_acb driver, or by using an extra pair of GPIO
pins with i2c-gpio.

If this isn't an option for you then you'll have to use a different
EEPROM model. AFAIK the 24C16 is the largest one using single-byte
addressing (it uses all 8 I2C addresses 0x50-0x57, and 256 * 8 * 8 =
16K.)

Note that you can't use i2cdump, i2cget and i2cset with 2-byte
addressed EEPROMs. You'll have to try the dedicated tools under
eepromer in the i2c-tools package [2]. For 2-byte addressed EEPROMs you
want either eeprog or eepromer. I seem to recall eeprog implements the
tricks described below for 2-byte addressed EEPROMs over SMBus.

[1] Actually you can write to such an EEPROM by abusing SMBus write
    transactions. All you have to do is pass the second address byte as
    the first data byte of either an SMBus write word transaction or,
    if your SMBus controller supports it, an I2C block write
    transaction. Then shift all data bytes by one position. For reads,
    you could use an SMBus write byte transaction to set the address
    and then SMBus receive byte transactions in a loop to retrieve the
    data bytes one by one. However this is racy and slow.

[2] Note that the primary hosting site for i2c-tools is currently down,
    you can use my mirror if needed:
    http://khali.linux-fr.org/mirror/i2c-tools/

-- 
Jean Delvare
http://khali.linux-fr.org/wishlist.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-10-17 12:43 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-17 14:33 i2cset question Chris Cole
     [not found] ` <49E89342.1010807-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-04-17 15:48   ` Jean Delvare
     [not found]     ` <20090417174845.471d4d9d-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-04-17 16:23       ` Chris Cole
     [not found]         ` <49E8AD1E.1070805-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-04-17 16:33           ` Jean Delvare
2012-10-17 12:07     ` Javi
     [not found]       ` <loom.20121017T134619-899-eS7Uydv5nfjZ+VzJOa5vwg@public.gmane.org>
2012-10-17 12:43         ` Jean Delvare

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).