Sonicare Brush Head NFC Data

By | 29 Mar 2026

Ever since stumbling over Cyrill Künzi’s article about the Sonicare brush head timer reset (which I’ve written about here), I’ve wondered what else is stored in the data.

This is what a dump of the Mifare Ultralight NTAG213‘s memory from a white Sonicare A3 Premium All-in-One head looks like:

The memory is organised into “pages” with each page holding 4 Bytes.

PageByte 0Byte 1Byte 2Byte 3
0x00UID0UID1UID2BCC0
0x01UID3UID4UID5UID6
0x02BCC1InternalLock & Block-Locking
0x03OTP
0x04 – 0x27USER PAYLOAD
0x28Dynamic Lock & Block-LockingRFU
0x29MIRRORRFUMIRROR_PAGEAUTH0
0x2AACCESSRFU
0x2BPassword
0x2CPassword ACKRFU
0x2D (Write-only)NFC Counter (LSB 0 – MSB 2)CNT_WR_CTRL
0x2E – 0x35 (Write-only)Signature

I’m mostly interested in the payload data, i.e. the data that Philips defined. This is what I’ve deduced so far:

AddressPage(s)Contents
0x10 – 0x110x04TLV record of type 0x03 (NDEF message) with length 0x20 (32 Bytes)
0x12 – 0x310x04 – 0x0CNDEF type 0x55 (URL) with prefix 0x02 (https://www.)
to philips.com/cfcbrushheadtap
0x320x0CTLV end marker 0xFE
0x7D0x1FUnknown 0x00 or 0x01 value
0x7E0x1FBrush head type (as they show up in the app):
0x01 = Premium Plaque Defence, White
0x02 = Premium Plaque Defence, Black
0x03 = Premium Gum Care, White
0x04 = Premium Gum Care, Black
0x05 = Premium White, White
0x06 = Premium White, Black
0x07 = Optimal Plaque Defence, White
0x08 = Optimal Gum Care, White
0x09 = Optimal White, White
0x0A = Optimal White, Black
0x0B = Optimal White (small), White
0x0C = InterCare, White
0x0D = InterCare (small), White
0x0E = TongueCare+, White
0x0F = TongueCare+, Black
0x10 = Premium All-in-One, White
0x11 = Premium All-in-One, Black
0x12 = SimplyClean, White
0x13 = ProResults, White
0x14 = Sensitive, White
0x15 = Sensitive, Black
0x16 = Gentle Clean, White

All other values seem to show up as whatever valid value was scanned last.
0x820x20Unknown 0x00, 0x02, or 0x04 value
0x830x20Unknown 0x01 or 0x02 value
0x84 – 0x850x21Intended total runtime for this head
Usually 0x5460 = 21600 seconds = 6 hours, or 180 brush sessions with each session assumed to being 2 minutes
0x86 – 0x8F0x21 – 0x23Brush head MFG code as ASCII, e.g. 241206 31K
(also printed on stem) – manufactured 6 Dec 2024, the 31K is probably the machine and location
0x90 – 0x910x24Accumulated runtime in seconds
Here: 0x52F4 = 21236 seconds, or almost 177 sessions
0x920x24Last intensity:
0x00 = Low
0x01 = Med
0x02 = High
0x930x24Last brush mode:
0x00 = Clean
0x01 = White+
0x02 = Gum Health
0x03 = Deep Clean+
(0x04 = Sensitive? (not supported by my model))
0x9F0x27Unknown 0x01 value

I will update the table once I find out new information.

Head Identifier?

This is a collection of data samples to try to figure out a way of identifying the different head types from the data.

Brush Type and ColourPage 0x1FPage 0x20*Page 0x27
A3 Premium All-in-One, White00 01 10 0000 00 04 0200 00 00 01
W DiamondClean, Black00 01 07 0000 00 00 0200 00 00 01
Unknown 100 00 00 0000 00 02 0100 00 00 01
Unknown 200 01 02 0000 00 00 0200 00 00 01

* read-only

Likes

Reposts

Leave a Reply

Your email address will not be published. Required fields are marked *

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)