در میکروکنترلرهای STM32، شرکت ST هنگام ساخت هر قطعه یک ID با طول ۹۶ بیت رو به عنوان شمارهی منحصر به فرد داخل حافظهی میکروکنترلر ذخیره میکنه تا هنگام انجام تستهای کنترلر کیفت پردازندهها بتونه بفهمه که اون قطعه از کجا اومده و از کدوم ویفر ساخته شده. پس راحتترین راه داشتن ID منحصر به فرد در میکروکنترلرهای STM32 اینه که ID ایجاد شده توسط شرکت ST رو بخونیم.
Unique ID ذخیره شده در میکروکنترلهای STM32 از سه بخش زیر تشکیل شده:
- مختصات X و Y روی ویفر که به شکل BCD ذخیره شده.
- یک عدد بسیار بزرگ.
- شمارهی ویفر.
آدرس ذخیره این ID در هر خانواده از پردازندههای ST متفاوته و مطابق جدول زیر است:
Device line | Starting address |
---|---|
F0, F3 | 0x1FFFF7AC |
F1 | 0x1FFFF7E8 |
F2, F4 | 0x1FFF7A10 |
F7 | 0x1FF0F420 |
L0 | 0x1FF80050 |
L0, L1, Cat.1, Cat.2 |
0x1FF80050 |
با توجه به ۳۲ بیتی بودن حافظهی میکروکنترلرهای STM32 میشه با استفاده از اشارهگرهای نوع (unsigned long (32bit به این ۹۶ بیت دیتا دسترسی پیدا کرد، به عنوان مثال برای پردازندهی STM32f103 از کد زیر استفاده میکنیم:
1
2
3
4
5
uint32_t id[3];
id[2] = *((unsigned long *) 0x1FFFF7E8);
id[1] = *((unsigned long *) 0x1FFFF7EC);
id[0] = *((unsigned long *) 0x1FFFF7F0);