Decodificación UID STM32

3

En mi proyecto necesito hacer un UID de 96 bits legible, en el manual de referencia se describe cómo se codifica el número:

struct Uid {
    uint16_t X;  // x-coordinate
    uint16_t Y;  // y-coordinate
    uint8_t WAF;  // Wafer number
    char LOT[7];  // Lot number
};

Mi pregunta es cómo se codifican las coordenadas x e y. si 0x0000 está en medio de la oblea o en el lado.

aquí hay algunos ejemplos que veo en la coordenada X: 0x0000 , 0x0001 , 0x0006 , 0x8001 , 0x8004 , 0x801f , .... algunos números han establecido el bit MSB.

En la coordenada Y siempre veo números en los que el MSB NO está configurado, como: 0x0001 , 0x0003 , 0x0005 , 0x001f , 0x0030 , 0x003f , ...

No tengo tantas muestras para leer muchos números y obtener mejores estadísticas de numeración, de modo que mi pregunta es ¿qué significa si el número ha establecido el bit MSB en coordenadas? Creo que esto es una señal, pero no estoy seguro.

La razón por la que me interesa esto es que necesito disminuir el tamaño de este número y eliminar algunos bits de este UID, mi idea es eliminar los bits 11-14 de cada coordenada para mantener la posición y (probablemente) firmar y hacer esto Número más pequeño y aún único. Necesito reducirlo solo en 8 bits.

MCU es STM32F0xx

ACTUALIZACIÓN : Tengo una estadística pequeña de 75 unidades de STM32F031 y aquí hay valores únicos para:

X: 0003, 0008, 0009, 000a, 000b, 000e, 0010, 0013, 0014, 0015, 0016, 0018, 001c, 0021, 0024, 002a, 8001, 8002, 801b, 801c, 801d, 8020
Y: 0003, 0005, 0006, 0007, 000c, 000f, 0010, 0011, 0013, 0014, 0016, 0017, 0018, 0019, 001a, 001b, 001e, 001f, 0020, 0022, 0024, 0028, 0029, 002a, 002c, 002d, 002e, 0030, 0032, 0033, 0034, 0035, 0037, 0038, 0039, 003a, 003c, 003f, 0042, 0044, 0045, 0046, 0047, 0048, 0049, 004b, 004e
WAF: 0b, 0c, 0d, 0e, 18

Parece que X e Y y WAFER no es BCD, pero el bit HEX y MSB en la coordenada X probablemente será el signo

    
pregunta vlk

1 respuesta

0

Si todo lo que necesita para reducir el número de bits, pero no sabe cuáles son significativos, siempre puede "jorarlos" juntos. por ejemplo, xor bytes superiores e inferiores: 0x801f -> 0x80 ^ 0x1f = 0x9f

Esto requiere que sus bytes altos y bajos sean independientes (por ejemplo, si los números tienen un paso de 0x101, entonces el algoritmo no funcionará bien). Pero a partir de tus datos, parece que estarás bien.

    
respondido por el theamk

Lea otras preguntas en las etiquetas