[fpc-pascal] FPC/Lazarus on RPi4 - How to read/write I2C connected EEPROM?

Jeffrey A. Wormsley daworm at gmail.com
Mon Apr 3 14:42:12 CEST 2023


>
> i2c_read_reg works too inasmuch as it does not error out, but it returns FF
> whatever addres I read like the i2c-tools command does.
> I am not sure that it is correct though...
>

Yes this is expected, as eeproms erase to $FF.  You can write to the same
byte as many times as you want, as long as you only change 1 bits to 0
bits.  If you must change a 0 bit to a 1 bit, you have to erase back to $FF
first.  Be aware that erase means erasing the entire page, and not just a
single byte.  This is where things like "wear leveling" come into play,
because a page can only be erased a limited number of times (it used to be
around 10,000, but maybe newer devices have extended this).  How you manage
writes to eeprom can be tricky, best to use them for things that don't
change very often, such as configuration data.

Jeff

On Sun, Apr 2, 2023 at 3:30 PM Bo Berglund via fpc-pascal <
fpc-pascal at lists.freepascal.org> wrote:

> On Sun, 2 Apr 2023 07:31:43 +0200, Christo Crause via fpc-pascal
> <fpc-pascal at lists.freepascal.org> wrote:
>
> >On Sat, Apr 1, 2023 at 9:57?PM Bo Berglund via fpc-pascal <
> >fpc-pascal at lists.freepascal.org> wrote:
> >
> >> Question:
> >> Can I use Linux file system commands to read/write the data on the i2c
> >> EEPROM
> >> memory device and if so how from fpc?
> >>
> >
> >To some extent it is possible to handle i2c transactions as file
> read/write
> >operations, but some ioctl calls are required to configure e.g. the device
> >address [1]. Take note that only a subset of i2c functionality is
> available
> >using read/write calls. Lazi2cdev [2] uses this approach.
> >
> >For finer control over the i2c transactions (for example combined
> >write/read transactions) low level ioctl calls are available in Linux.  I
> >wrote an i2c class [3] using this approach.
> >
> >1. https://www.kernel.org/doc/html/latest/i2c/dev-interface.html
> >2. https://github.com/laz2wiringpi/lazI2cdev/blob/master/i2cdev_base.pas
> >3. https://github.com/ccrause/rpiplc_pas/blob/main/native/i2c.pas
>
> Hello again!
>
> I have now tested the two demos in github [3] and they seem to work OK.
>
> The i2cscan works and shows exactly the same as sudo i2cdetect -y 1 does
> from
> the i2c-tools package I installed via apt.
>
> i2c_read_reg works too inasmuch as it does not error out, but it returns FF
> whatever addres I read like the i2c-tools command does.
> I am not sure that it is correct though, for that I need to create an
> i2c_write
> demo app first so I can write values at different locations and read them
> back.
> The EEPROM has until now not been used so it is in its factory state with
> no
> data.
>
> Is there a reason that there is no i2c_write_reg demo in the github
> package?
>
> I will try to write one so I can test that as well...
>
>
> --
> Bo Berglund
> Developer in Sweden
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20230403/0c87ffcc/attachment.htm>


More information about the fpc-pascal mailing list