EEPROM

EEPROM stands for Electrically Erasable Programmable Read-Only Memory. It is a non-volatile memory that can be programmed and erased electrically. The nonvolatile memory available on the phyCORE-AM64x is a 32KB EEPROM with an I2C interface. It can be accessed through the I2C0 on the phyCORE-AM64x at address 0x50. EEPROM can be used to store configuration data or other general-purpose data. This guide will show you how to access the 2Kbit EEPROM featured on the phyCORE-AM64x development kit carrier board. To learn more information about the phyCORE-AM64x EEPROM system memory, please see section 6.1.2 in the Hardware Manual.

Note

The phyCORE-AM64x development kit provides access to two EEPROMs, one 32Kbit EEPROM on the SOM and a 2Kbit EEPROM on the carrier board.

EEPROM

Location

Reference

I2C Bus

Address

SOM

U7

i2c0

0x50

Carrier Board

U61

i2c1

0x51

Verifying EEPROM Initialization

  • First ensure that the EEPROM is initialized correctly by checking the boot log.

    Target (Linux)
    dmesg | grep -i "eeprom"
    
Expected Output
root@phyboard-electra-am64xx-2:~# dmesg | grep -i "eeprom"
[    5.729717] at24 0-0050: 4096 byte 24c32 EEPROM, writable, 32 bytes/write
[    5.766493] at24 1-0051: 256 byte 24c02 EEPROM, writable, 16 bytes/write

Writing to the EEPROM

  • Clear out the entirety of the EEPROM by writing zeros to it.

Target (Linux)
dd if=/dev/zero of=/sys/bus/i2c/devices/1-0051/eeprom bs=256 count=1
Expected Output
root@phyboard-electra-am64xx-2:~# dd if=/dev/zero of=/sys/bus/i2c/devices/1-0051/eeprom bs=256 count=1
1+0 records in
1+0 records out
256 bytes copied, 0.0777177 s, 3.3 kB/s
  • Now generate a 2Kbit file with random data. This will serve as the test file:

Target (Linux)
dd if=/dev/urandom of=/tmp/test.img bs=256 count=1
Expected Output
root@phyboard-electra-am64xx-2:~# dd if=/dev/urandom of=/tmp/test.img bs=256 count=1
1+0 records in
1+0 records out
256 bytes copied, 0.00022356 s, 1.1 MB/s
  • Write the test file to the EEPROM

Target (Linux)
dd if=/tmp/test.img of=/sys/bus/i2c/devices/1-0051/eeprom bs=512 count=1
Expected Output
root@phyboard-electra-am64xx-2:~# dd if=/tmp/test.img of=/sys/bus/i2c/devices/1-0051/eeprom bs=256 count=1
0+1 records in
0+1 records out
256 bytes copied, 0.077697 s, 3.3 kB/s

Reading from EEPROM

  • Read the contents of the EEPROM and store it to a file.

Target (Linux)
dd if=/sys/bus/i2c/devices/1-0051/eeprom of=/tmp/test_read.img  bs=256 count=1
Expected Output
root@phyboard-electra-am64xx-2:~# dd if=/sys/bus/i2c/devices/1-0051/eeprom of=/tmp/test_read.img  bs=256 count=1
1+0 records in
1+0 records out
256 bytes copied, 0.00670281 s, 38.2 kB/s
  • Make sure the output file was not corrupted during the transfer using md5sum. Both of the files should have matching MD5 hashes.

Target (Linux)
md5sum /tmp/test.img /tmp/test_read.img
Expected Output
root@phyboard-electra-am64xx-2:~# md5sum /tmp/test.img /tmp/test_read.img
192e08b78bc0100bcff74d324d1ccbde  /tmp/test.img
192e08b78bc0100bcff74d324d1ccbde  /tmp/test_read.img

Reading/Writing to the SOM EEPROM

The SOM EEPROM is used for PHYTEC’s Hardware Introspection, which allows to automatically load the correct software for the underlying SOM configuration.

Do not modify the content. The BSP does not use the Hardware Introspection.