Files
sonicare/README.md
T
Michael Huber 8074cd4ad8 [PATCH] Add usage counter reset with AUTHLIM warning
Adds the ability to reset the brush head's usage counter to zero.

Flow: Read head -> press Right ("Reset") -> confirm warning dialog ->
hold head to Flipper again. The app authenticates with the derived
password via the poller's AuthRequest event and writes the official
reset payload (00 00 02 00) to page 0x24.

The confirm dialog warns about the NTAG213 AUTHLIM feature which
permanently locks the tag after 3 wrong password attempts.
2026-08-08 15:45:58 +01:00

37 lines
1.6 KiB
Markdown

Sonicare Brush Head ID
======================
Each modern brush head for a Philips Sonicare contains a Mifare Ultralight NFC chip (NTAG213).
The chip not only signals to the head unit what type of brush it is (to pre-select the recommended
mode) but also the recommended lifespan. Usually 6 hours, which resemble 180 brushes (2 minutes
each), and, assuming 2 brushes per day, this is 90 days = 3 months. The time after which you should
replace your toothbrush (or the head in this case).
The main unit also writes the time you've used the head back into the NFC chip. If you reach the
6 hours, the "replace head" indicator will light up.
The NFC chip is write-protected with a password that can be derived from the UID and MFG code. The
[algorithm for this](https://gist.github.com/atc1441/41af75048e4c22af1f5f0d4c1d94bb56) has been
reverse-engineered by [atc1441](https://github.com/atc1441).
Features
--------
This Flipper Zero app will scan the NFC chip and show the UID, MFG code, lifespan, as well as
the used time. It'll also generate the NFC password.
It can also **reset the usage counter** of the brush head. After reading a head, press the
right button ("Reset"), confirm the warning dialog, and hold the head to the Flipper again.
> **Warning:** The NTAG213 in the brush heads permanently disables all write access after
> **3 wrong password attempts** (AUTHLIM). The password is derived correctly from UID + MFG,
> but if authentication fails for any reason, do NOT retry more than twice.
TODO
----
* determine brush head type from [data](https://blog.mbirth.uk/2026/03/29/sonicare-brush-head-nfc-data.html)
* allow writing other data (different type)