Build Instructions
Install the prerequisites with "sudo apt install cmake" - you need at least version 3.10 of cmake. Run the following commands here, or in the top-level directory to build and install all the utilities:
- cmake .
- make
- sudo make install
Usage
-
Copy
eeprom_settings.txt
(oreeprom_v1_settings.txt
for a V1 HAT) tomyhat_eeprom.txt
. -
Edit
myhat_eeprom.txt
to suit your specific HAT. -
Run
eepmake myhat_eeprom.txt myhat.eep
(oreepmake -v1 myhat_eeprom.txt myhat.eep
for a V1 HAT) to create the .eep binary. -
If
eepmake
has generated a product UUID for you, it is a good idea to patch your myhat_eeprom.txt to include and hence preserve it (or useeepdump
to regenerate it).
Flashing the EEPROM image Follow these steps on the Raspberry Pi after installing the tools and building the .eep file:
- Disable EEPROM write protection
- Sometimes this requires a jumper on the board
- Sometimes this is a GPIO
- Check your schematics
- Make sure you can talk to the EEPROM
- In the HAT specification, the HAT EEPROM is connected to pins that can be driven by I2C0.
However, this is the same interface as used by the camera and displays, so use of it by the ARMs is discouraged.
The
eepflash.sh
script gets around this problem by instantiating a software driven I2C interface using those pins as GPIOs, calling iti2c-9
:
sudo dtoverlay i2c-gpio i2c_gpio_sda=0 i2c_gpio_scl=1 bus=9
-
Install i2cdetect
sudo apt install i2c-tools
-
As explained in the HAT+ specification, HAT EEPROMs can have a variety of (hexadecimal) I2C addresses:
- 50: standard HAT+ (or legacy HAT)
- 51: stackable HAT+ (e.g. Raspberry Pi M.2 M Key HAT)
- 52: stackable Power HAT+ (MODE0)
- 53: stackable Power HAT+ (MODE1)
The examples below assume a standard HAT+/HAT, so be prepared to substitute the correct address for another type.
-
Check with
i2cdetect -y 9
(should be at address 0x50)
Normally, you can skip this step, and assume things are working.i2cdetect -y 9 0x50 0x50 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:
- In the HAT specification, the HAT EEPROM is connected to pins that can be driven by I2C0.
However, this is the same interface as used by the camera and displays, so use of it by the ARMs is discouraged.
The
- Flash eep file
sudo ./eepflash.sh -w -t=24c32 -a=0x50 -f=eeprom.eep
- Enable EEPROM write protection, by undoing step 1 (putting back jumper, or resetting GPIO)
The tools support two string representations:
- A single, simple string with no CR/NL, no NUL-termination, and no embedded double-quotes.
- A multiline string using minimal escaping:
- String begins with a single
"
followed by CR/NL (carriage return/newline) - NULs are escaped as \0, and followed by an extra NL (because they end a string)
- Backslashes are escaped (
\\
) - NLs and TABs are included verbatim
- CRs are escaped (
\r
) - The multiline string is terminated by
\"
- Any literal, unescaped CRs found in the string are ignored
eepmake
attempts to display dt_blob and custom_data blocks as simple strings, falling back to multiline strings, ultimately resorting to hexadecimal data.
If in doubt, put the text in a file, add it using the -c
option in eepmake
, and use eepdump
to see what it looks like. To confirm that blobs data is encoded and preserved correctly, use the -b <prefix>
option to eepdump
to save the blob data as separate files.
Examples:
dt_blob "rpi-dacpro"
custom_data "
This is the start of a long string.
End this line with a carriage return\r
NUL-terminated\0
\"
custom_data "
NL and NUL-terminated
\0
\"
# This one could have been a simple string
custom_data "
End text with no NL\"
custom_data "
End text with NL
\"