[GH-ISSUE #430] Chroma 2.9" tag MAC address reset to 00000000 after flashing firmware 0x10 #1360

Closed
opened 2026-03-20 19:07:32 +01:00 by sascha_hemi · 6 comments
Owner

Originally created by @classabbyamp on GitHub (Jan 15, 2025).
Original GitHub issue: https://github.com/OpenEPaperLink/OpenEPaperLink/issues/430

Originally assigned to: @skiphansen on GitHub.

Describe the bug

The tag MAC is zeroed after flashing the OEPL firmware

To Reproduce
Steps to reproduce the behavior:

  1. Download https://github.com/OpenEPaperLink/OpenEPaperLink/blob/master/binaries/Tag/chroma29_full_0010.bin
  2. Flash with a cc debugger and cc-tool -e -w chroma29_full_0010.bin -v
  3. Reassemble tag and watch it boot
  4. Notice tag MAC has changed from the number on the case to 00000000

Expected behavior

The tag MAC should stay consistent

Screenshots

2025-01-15 10 42 00 10 22 10 15 56794f358b59

I now have at least 2 tags that have the same MAC, so the AP shows them as 1 but updates them both with the same image.

Originally created by @classabbyamp on GitHub (Jan 15, 2025). Original GitHub issue: https://github.com/OpenEPaperLink/OpenEPaperLink/issues/430 Originally assigned to: @skiphansen on GitHub. **Describe the bug** The tag MAC is zeroed after flashing the OEPL firmware **To Reproduce** Steps to reproduce the behavior: 1. Download https://github.com/OpenEPaperLink/OpenEPaperLink/blob/master/binaries/Tag/chroma29_full_0010.bin 2. Flash with a cc debugger and `cc-tool -e -w chroma29_full_0010.bin -v` 3. Reassemble tag and watch it boot 4. Notice tag MAC has changed from the number on the case to 00000000 **Expected behavior** The tag MAC should stay consistent **Screenshots** ![2025-01-15 10 42 00 10 22 10 15 56794f358b59](https://github.com/user-attachments/assets/619dd47c-d479-47c2-97e4-a0ee565906d1) I now have at least 2 tags that have the same MAC, so the AP shows them as 1 but updates them both with the same image.
sascha_hemi added the bug label 2026-03-20 19:07:32 +01:00
Author
Owner

@skiphansen commented on GitHub (Jan 18, 2025):

If you encountered this when flashing the tag for the first time the EEPROM was probably already corrupt. We've seen this on a few TAGs recently.

I'll eventually add a Wiki page on recovering from a corrupted EEPROM, in the mean time this Python script can be used to patch chroma29_full_0010.bin with the correct SN for your tag and then you can reflash it to recover.

Please give it a try and let me know if you have any questions.

<!-- gh-comment-id:2599847862 --> @skiphansen commented on GitHub (Jan 18, 2025): If you encountered this when flashing the tag for the first time the EEPROM was probably already corrupt. We've seen this on a few TAGs recently. I'll eventually add a Wiki page on recovering from a corrupted EEPROM, in the mean time this [Python script](https://github.com/OpenEPaperLink/Tag_FW_Chroma/tree/master/Chroma_Tag_FW/patch_sn) can be used to patch chroma29_full_0010.bin with the correct SN for your tag and then you can reflash it to recover. Please give it a try and let me know if you have any questions.
Author
Owner

@classabbyamp commented on GitHub (Jan 23, 2025):

Thanks, that works. I wrote myself a short script to flash a bunch of tags with this patching script:

#!/bin/bash

set -e

ORIG_FILENAME="$1"

if ! [ -f "$ORIG_FILENAME" ]; then
    echo "file '${ORIG_FILENAME}' does not exist!" 1>&2
    exit 1
fi

TAG_SN="$2"

if [ -z "$TAG_SN" ]; then
    read -r -p "Enter tag serial (like JAxxxxxxxxB): " TAG_SN
fi

if [ -z "$TAG_SN" ]; then
    echo "missing serial number!" 1>&2
    exit 1
fi

FILENAME="${ORIG_FILENAME%.*}_${TAG_SN}.${ORIG_FILENAME##*.}"

cp "$ORIG_FILENAME" "$FILENAME"

# clean up after ourselves
trap 'rm -f "$FILENAME"' EXIT INT KILL

echo "=> patching firmware..."
python3 patch_sn.py "$FILENAME" "$TAG_SN"

echo "=> flashing tag..."
cc-tool -e -w "$FILENAME" -v
<!-- gh-comment-id:2610663912 --> @classabbyamp commented on GitHub (Jan 23, 2025): Thanks, that works. I wrote myself a short script to flash a bunch of tags with this patching script: ```bash #!/bin/bash set -e ORIG_FILENAME="$1" if ! [ -f "$ORIG_FILENAME" ]; then echo "file '${ORIG_FILENAME}' does not exist!" 1>&2 exit 1 fi TAG_SN="$2" if [ -z "$TAG_SN" ]; then read -r -p "Enter tag serial (like JAxxxxxxxxB): " TAG_SN fi if [ -z "$TAG_SN" ]; then echo "missing serial number!" 1>&2 exit 1 fi FILENAME="${ORIG_FILENAME%.*}_${TAG_SN}.${ORIG_FILENAME##*.}" cp "$ORIG_FILENAME" "$FILENAME" # clean up after ourselves trap 'rm -f "$FILENAME"' EXIT INT KILL echo "=> patching firmware..." python3 patch_sn.py "$FILENAME" "$TAG_SN" echo "=> flashing tag..." cc-tool -e -w "$FILENAME" -v ```
Author
Owner

@skiphansen commented on GitHub (Jan 23, 2025):

Great, thanks for the feedback. I would be interested to know what percentage of your tags had corrupted EEPROMs.

<!-- gh-comment-id:2611184043 --> @skiphansen commented on GitHub (Jan 23, 2025): Great, thanks for the feedback. I would be interested to know what percentage of your tags had corrupted EEPROMs.
Author
Owner

@classabbyamp commented on GitHub (Jan 24, 2025):

I had ~5 do it so I started using the patching script for all of them. I've flashed ~20, had one get stuck with the wrong mac (accidentally flashed with the wrong number) but otherwise successful.

<!-- gh-comment-id:2611255101 --> @classabbyamp commented on GitHub (Jan 24, 2025): I had ~5 do it so I started using the patching script for all of them. I've flashed ~20, had one get stuck with the wrong mac (accidentally flashed with the wrong number) but otherwise successful.
Author
Owner

@skiphansen commented on GitHub (Jan 24, 2025):

As you have discovered the firmware only resets the SN if it's corrupt or the default, once it has a valid SN an update with a different SN is ignored.

We can recover that one as well, but not easily. My chroma_shell utility could be used to erase the first sector of the EEPROM and then you could reflash with a patched image again and you should be good to go.

If you want to do that you'll need a Linux system and a serial port connected to the tag.

<!-- gh-comment-id:2612695383 --> @skiphansen commented on GitHub (Jan 24, 2025): As you have discovered the firmware only resets the SN if it's corrupt or the default, once it has a valid SN an update with a different SN is ignored. We can recover that one as well, but not easily. My [chroma_shell](https://github.com/skiphansen/dmitrygr-einkTags/tree/master/chroma_shell) utility could be used to erase the first sector of the EEPROM and then you could reflash with a patched image again and you should be good to go. If you want to do that you'll need a Linux system and a serial port connected to the tag.
Author
Owner

@skiphansen commented on GitHub (Feb 1, 2025):

I've added documentation to the Wiki. Closing issue.

<!-- gh-comment-id:2629008780 --> @skiphansen commented on GitHub (Feb 1, 2025): I've added documentation to the [Wiki](https://github.com/OpenEPaperLink/OpenEPaperLink/wiki/Restoring-Lost-Serial-Numbers-in-Chroma-Tags). Closing issue.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/OpenEPaperLink#1360