STM32 Unique ID Register on L1 parts

Last week I mentioned I was seeing duplicate “Unique” ID registers on some STM32L151 parts [1], and included some memory dumps of the three unique ID registers as proof.

However, I had foolishly assumed that on the L1 the Unique ID register was three contiguous 32 bit registers, as it is on the F0, F1, F2, F3 and F4. (The base address changes, but that’s normal and expected)

On the L1, the registers are actually at offset 0, offset 4, and offset 0x14. Thanks for nothing ST! :(
(Oh, and L1 Medium+ and High Density devices use a different base address too, good job)

Here’s some more complete memory dumps for the same three parts I was looking at last week.

UID31:0 UID63:32 UID95:64
Part A 0x0e473233 0x30343433 0x00290031
Part B 0x0e473233 0x30343433 0x00320032
Part C 0x0e473233 0x30343433 0x00380030

Reading other reference manuals, and seeing that the UID registers often have 8 bits of unsigned “Wafer number”, 7 bytes of ASCII Lot number, and 4 bytes of X/Y wafer coordinates in BCD, I would interpret my part “A” above as

Wafer Number Lot Number X/Y coords
Hex 0x0e 0x47323330343433 0x00290031
Natural 0x0e G230443 X=0029, Y=0031

For reference, here are some full dumps of that section of memory. “0x7b747800” is what I had been looking at as UID bits 95:64, note that there are other bits in this section with fixed values, no idea what they mean :)

Part A

(gdb) x /20x 0x1FF80050
0x1ff80050: 0x0e473233  0x30343433  0x7b747800  0x50505091
0x1ff80060: 0x00000011  0x00290031  0x11000000  0x11000011
0x1ff80070: 0x00000000  0x00000000  0x029f067e  0x035a0000
0x1ff80080: 0x035a0000  0x035a0000  0x035a0000  0x035a0000
0x1ff80090: 0x035a0000  0x035a0000  0x035a0000  0x035a0000
(gdb) 

Part B

(gdb) x /20x 0x1FF80050
0x1ff80050: 0x0e473233  0x30343433  0x7b747800  0x50505091
0x1ff80060: 0x00000011  0x00320032  0x11000000  0x11000011
0x1ff80070: 0x00000000  0x00000000  0x02a50685  0x035e0000
0x1ff80080: 0x035e0000  0x035e0000  0x035e0000  0x035e0000
0x1ff80090: 0x035e0000  0x035e0000  0x035e0000  0x035e0000
(gdb)

Part C

(gdb) x /20x 0x1FF80050
0x1ff80050: 0x0e473233  0x30343433  0x7b747800  0x50505091
0x1ff80060: 0x00000011  0x00380030  0x11000000  0x11000011
0x1ff80070: 0x00000000  0x00000000  0x02a50689  0x035e0000
0x1ff80080: 0x035e0000  0x035e0000  0x035e0000  0x035e0000
0x1ff80090: 0x035e0000  0x035e0000  0x035e0000  0x035e0000
(gdb)

[1] Again, these are STM32L151C6T6 parts, revision V, package markings “GH254 VG” and “CHN309”

  1. Here are the unique id of my STM32L1:

    marking:
    STM32L162
    RDT6
    GH228 VG
    CHN GH 243

    0x1ff80050: 2d92d26d e2b91d46 4ffcb003 ffff0000 00000000 00000000 00000000 00000000
    0x1ff80050: c22b3dd4 d3682c97 4ffcb003 ffff0000 00000000 00000000 00000000 00000000
    0x1ff80050: 394ec6b1 db2924d6 54fcab03 ffff0000 00000000 00000000 00000000 00000000
    0x1ff80050: 2d30d2cf e10a1ef5 4afcb503 ffff0000 00000000 00000000 00000000 00000000
    0x1ff80050: 45efba10 ded82127 4efcb103 ffff0000 00000000 00000000 00000000 00000000

    Looks like the UID take the first 3 words.
    For the 4 first words, high halfword are the complement of low halfword

    marking:
    STM32L152
    RBT6
    GH21Y VG
    CHN GH 238

    0x1ff80050: 19473231 36383833 8e8a8b00 50505091 00000011 002b0016 11000000 11000011
    0x1ff80050: 19473231 36383833 f3707100 50505091 00000011 00260033 11000000 11000011

  2. @Nicolas,
    meanwhile, did you get any confirmation that UID for your 162L chip is the one mentionned ?

    Because if I’ve well read the STM32Lxxx ref manual- page 40 & 41,(http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00240193.pdf) your STM32L162RDxxx is defined as a Cat4 device and its UID base address should be read here :0x1ff5000D (and not 0x1ff80050)
    can you confirm this please,
    cheers
    Rico

  3. @Rico,

    Thanks for noting my error, the UID base address for STM32L162RD is 0x1ff800d0. Here is the memory dump of a single STM32L162RD that correspond to the Wafer Number, Lot Number and X/Y coords.

    0x1ff80050: 2d30d2cf e10a1ef5 4afcb503 ffff0000 00000000 00000000 00000000 00000000
    0x1ff800d0: 04473134 30363239 78777400 060c1811 00000011 0022002c 11001100 11000011

  4. Hey! Great info!
    But, I just checked two stm3l151 devices with the following:
    10473334 35333935 00240036
    04473334 37333132 0030002C

    The second one makes me think the x/y data is not in BCD. Based on that I find:

    Die Batch x y
    16 G345395 36 54
    4 G347312 48 44

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>