Unique Die Serial Number

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
ETRO_SSN583
Level 9
Level 9
250 likes received 100 sign-ins 5 likes given

There is a recurring problem in customer base, need for a unique silicon die

   

ID for each chip. This is not a Device ID, as currently implemented. Something

   

akin to this

   

 

   

http://www.maximintegrated.com/datasheet/index.mvp/id/2903?ver=E&t=al&utm_expid=50713806-2&utm_refer...

   

 

   

Would it be possible to implement thru programmer ? All PSOC Families ? Auto generated, say off a tax number, GPS

   

coordinates, or IP group number, something unique to the customer. Even a Cypress seed for those who are consultants,

   

the generated serial # stored in FLASH or EEPROM, and then protected as read only during programming.

   

 

   

Regards, Dana.

0 Likes
11 Replies
Rolf_Nooteboom
Level 5
Level 5
10 sign-ins 5 solutions authored First solution authored

 Dana,

   

PSoC3 and 5 do have a kind of die number. It's called PseudoID and it reflects the die date, number and x and y position. It's unique for each part however there's no 100% guarantee.

   

 

   

For PSoC1 there's no unique number. 

   

 

   

I've made software to program PSoC with an unique serial number for production.

   

 

   

i'll give you more details as soon as I am home (mobile atm)

   

 

   

Regards,

   

Rolf

0 Likes

Hi Rolf, I am using a PSoC1 and need to program unique IDs as I am using them in a wireless remote control application.  Can you share with me how I can do it please?  Thanks, Ron

0 Likes

Hi Ron,

   

  I have the same problem. Did you find the answer to it?

   

Thanks,

   

George

0 Likes
ETRO_SSN583
Level 9
Level 9
250 likes received 100 sign-ins 5 likes given

x and y position sounds like the coordinates of the die on the wafer ?

   

If so definitely would not be unique, wafer to wafer, same production

   

fab day.

   

 

   

I look forward to your post on how you did this.

   

 

   

Regards, Dana.

0 Likes
Rolf_Nooteboom
Level 5
Level 5
10 sign-ins 5 solutions authored First solution authored

 Hi Dana,

   

 

   

There are 8 bytes stored at the so called "Customer Tables" which might be of your interest. The Customer Tables are located in flash area at 0x000C0100u, consists of 64 bytes and are written during manufacturing time. The first 8 bytes belongs to the Pseudo Unique ID.

   

 

   

Please have a look at page 1639 of the PSoC® 3 Registers TRM: http://www.cypress.com/?rID=37833

   

 

   

0x000C0100u - Y location of die on the wafer (row number)

   

0x000C0101u - X location of die on the wafer (column number)

   

0x000C0102u - Wafer Number: 1 to 24

   

0x000C0103u - LSB of lot number/wafer start

   

0x000C0104u - MSB of lot number/wafer start

   

0x000C0105u - Work week: 1 to 53

   

0x000C0106u - [7:4] Fab Number: 4 or 5 & [3:0] Year: 0 to 9

   

0x000C0107u - Marketing part number - minor: 000 to 999

   

 

   

Be aware of the fact that the year can roll over from 9 to 0 and that there's no testing done if these values are correct programmed. So this number is not guaranteed to be unique.

   

 

   

Also have a look at your "cydevice.c" in your project, these locations are already defined:

   

#define CYDEV_FLSHID_CUST_TABLES_Y_LOC 0x000c0100u

   

etc..

   

 

   

To read these values within your firmware, you can just use the following:

   

unsigned char   ID_Y_LOC = CY_GET_XTND_REG8( (void far *) CYDEV_FLSHID_CUST_TABLES_Y_LOC);

   

 

   

To read these values from MiniProg3, you have to use the PP-COM component and do the following:

   

- Aquire the PSoC

   

- Read Wafer ID from customer tables

   

            pp.swdiow(0x4720, 0xB6);    // First initiation key

   

            pp.swdiow(0x4720, 0xDD);    // READ_HIDDEN_ROW opcode

   

            pp.swdiow(0x4720, 0x0A);    // READ_HIDDEN_ROW opcode

   

            pp.swdiow(0x4720, 0x00);    // Flash Array ID

   

            pp.swdiow(0x4720, 0x01);    // RowID of Protection bytes row

   

            byte Val; string PSoCpseudo = "";

   

            ReadIO(0x4720, out Val);

   

            for (int i = 0; i < 256; i++)

   

            {

   

                ReadIO(0x4720, out Val);

   

                if (i < 😎

   

                {

   

                    PSoCpseudo += Val.ToString("X2");

   

                }

   

            }

   

 Hope this helps you out!

   

 

   

Regards, Rolf

0 Likes
ETRO_SSN583
Level 9
Level 9
250 likes received 100 sign-ins 5 likes given

So it looks like, in the worst case, there will be 24 parts bearing the same ID.

   

But this may be good enough for many users.

   

 

   

Thanks Rolf.

   

 

   

Regards, Dana.

0 Likes
Rolf_Nooteboom
Level 5
Level 5
10 sign-ins 5 solutions authored First solution authored

 You're welcome!

   

 

   

Don't get how you get to 24? Anyway, the ID is not guaranteed to be unique, but for most applications it is not a problem. I use the Pseudo ID in an application where multiple PSoCs are communicating over a single bus and it works great!

   

 

   

For PSoC1 I use the PP_COM library with a custom made application to program the unique serial number on the fly. The program loads the lastest firmware from a server and puts the number at the right place in flash.

   

 

   

Regards!

   

Rolf

0 Likes
ETRO_SSN583
Level 9
Level 9
250 likes received 100 sign-ins 5 likes given

24 Wafers in  a lot can have all identical x. y, and......... So 24 parts can have

   

the same ID.

   

 

   

Thanks for all the other info, very helpful to the forum.

   

 

   

Regards, Dana.

0 Likes
Rolf_Nooteboom
Level 5
Level 5
10 sign-ins 5 solutions authored First solution authored

 Dana,

   

 

   

I don't know if the X and Y values range fully from 0-255. Probably there will fit less dies on one wafer.

   

Also when a new lot starts, the wafer number can be starting from 0 again, In the end, there will be as much identical x/y values as the total amount of wafers, and I guess there will be a lot wafers produced.

   

 

   

If you need a 16 bit value, maybe it's better to make two groups of 4 bytes and XOR those 4 bytes together to get 2x 1byte.

   

And to get an even more variation, you'd better use an 16 bit LFSR and shift all the 64 bits in!

   

 

   

regards,

   

Rolf

0 Likes
ETRO_SSN583
Level 9
Level 9
250 likes received 100 sign-ins 5 likes given

In a 24 wafer lot, each wafer will have N number of die. This varies wafer to wafer,

   

due to mask alignment. I wrote a program in 70's, FORTRAN, for a given die geometry

   

and scribe channel spacing, what min and max number of full die will be achieved. As

   

die size increased, the range narrowed as one would expect. The corollary is true as well.

   

 

   

Range of X, Y irrelevant in a sense, as each wafer has N die, therefore have N X,Y pairs,

   

therefore in a lot of W wafers there will be W die carrying the same X,Y pairing.

   

 

   

Regards, Dana.

0 Likes
pacr_284376
Level 5
Level 5
100 replies posted 10 solutions authored 50 sign-ins

Update for other people who were also looking for a solution - the function CyGetUniqueId is now implemented in CyBoot. I upgraded from PSocCreator 3.1SP2 to PSocCreator 3.3

   

More information : PSoc3/5LP System Reference Guide. There is nothing mentioned in this document about being a real unique number or a pseudo-unique number as discussed in this thread.

0 Likes