Proteger una máquina no es un trámite único. Un producto mecatrónico tiene diferentes capas, y cada una se defiende con un escudo legal distinto ante el Instituto Mexicano de la Propiedad Industrial (IMPI) o instancias internacionales.
Paso 1: El NDA (Non-Disclosure Agreement).
Antes de mandar tus archivos a fabricar a la ensambladora EMS (Día 317), debes hacerles firmar un Acuerdo de Confidencialidad. Un contrato formal donde establecen que los planos de PCB, la lista BOM y los archivos hexadecimales no pueden compartirse con terceros bajo pena de demanda mercantil.
Paso 2: Registrar ante IMPI.
La industria tecnológica en Guadalajara, considerada el Silicon Valley de México, respeta a quien tiene papeles. No puedes vender tu equipo legalmente a grandes corporativos gaseros si no presentas tu título de Marca Registrada. Protege el nombre de tu máquina; el trámite se puede iniciar en línea y cuesta menos de 3,000 pesos.
Paso 3: Quemar los Puentes (RDP en STM32).
Toda placa STM32 sale de fábrica en Nivel 0 (RDP 0). Significa que los pines de Debug (SWDIO / SWCLK) están activos. Cualquiera con un ST-Link de $5 USD puede hacer un "Memory Dump" de tu flash y clonar tu código. Antes de enviar tu máquina al cliente, debes programar en C una rutina que ajuste los Option Bytes de la memoria Flash al Nivel 1 (RDP 1).
Escribiremos una función defensiva brutal. Cuando el Despachador se enciende por primera vez en la línea de ensamble, verifica si su memoria está expuesta. Si lo está, el propio código activa el cerrojo de Nivel 1 y se reinicia, volviéndose inaccesible desde el exterior.
/**
* @file hardware_crypto_lock.c
* @brief Rutina de bloqueo de silicio mediante RDP (Read Out Protection)
*/
#include "stm32f4xx_hal.h"
#include <stdio.h>
// =========================================================================
// RUTINA DE BLINDAJE DE PROPIEDAD INTELECTUAL
// =========================================================================
/**
* @brief Evalúa y activa el RDP Level 1.
* @note En Nivel 1, el depurador (Debugger) se desconecta. Si un atacante
* intenta conectar un ST-Link, el hardware borrará masivamente la Flash (Mass Erase)
* destruyendo el código y el K-Factor antes de permitir el acceso.
*/
void Security_Enforce_RDP_Level_1(void) {
FLASH_OBProgramInitTypeDef OBInit;
printf("\r\n[SYS] Verificando estado de seguridad del Silicio (RDP)...\r\n");
// 1. Obtener la configuración actual de los Option Bytes
HAL_FLASHEx_OBGetConfig(&OBInit);
// 2. Evaluar si la placa está abierta a robos (Nivel 0)
if (OBInit.RDPLevel == OB_RDP_LEVEL_0) {
printf(" [!] ALERTA CRÍTICA: Silicio expuesto (RDP Nivel 0).\r\n");
printf(" Bloqueando microcontrolador ahora...\r\n");
// Desbloquear la interfaz Flash y los Option Bytes para escritura
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
// Configurar el Nivel 1
OBInit.OptionType = OPTIONBYTE_RDP;
OBInit.RDPLevel = OB_RDP_LEVEL_1;
// Cargar los nuevos bytes y lanzarlos (esto reinicia el sistema)
if (HAL_FLASHEx_OBProgram(&OBInit) != HAL_OK) {
printf(" [X] Fallo al programar los Option Bytes.\r\n");
// Entrar a bucle de fallo
while(1);
}
// Ordenar al sistema que aplique el cerrojo
HAL_FLASH_OB_Launch();
// (El sistema se reinicia aquí. Nunca llega a las líneas de abajo)
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
} else if (OBInit.RDPLevel == OB_RDP_LEVEL_1) {
printf(" [V] Silicio Bloqueado (RDP Nivel 1). Propiedad Intelectual Segura.\r\n");
} else {
// Nivel 2: Inalterable. Ni siquiera tú podrás borrarlo jamás.
printf(" [V] MÁXIMA SEGURIDAD (RDP Nivel 2). MODO PRODUCCIÓN DEFINITIVO.\r\n");
}
}
// Dentro del main.c:
int main(void) {
HAL_Init();
SystemClock_Config();
// Lo primero que hace la máquina es verificar su propia armadura legal.
Security_Enforce_RDP_Level_1();
// ... Continuar con el boot normal del sistema
while(1) {
}
}
Objetivo del día: Blindaje de Activos Intangibles (IP) y Estrategia Legal.
Un ingeniero puede ser un genio de los circuitos, pero si ignora la Propiedad Intelectual, terminará trabajando gratis para sus competidores. A lo largo de la Fase 5, hemos integrado los requisitos de la normativa OIML y NOM-005 en la estructura física y lógica de la máquina. Diseñaste una rutina de doble llave para el calibrador oficial (Día 307) y una arquitectura de Punto Fijo que preserva centavos en cada venta. Esos algoritmos y ese ruteo de KiCad son el núcleo de tu ventaja competitiva.
Al programar la rutina `Security_Enforce_RDP_Level_1()`, has llevado la defensa más allá del papel. Has convertido al propio microcontrolador en un guardián suicida de tu código. Si un competidor abre la placa y conecta sondas a los pines de depuración buscando copiar la compilación en C de tu tesis, el chip ARM ejecutará un *Mass Erase* instantáneo por hardware, borrándose a sí mismo hasta quedar en blanco antes de entregar un solo byte de tus algoritmos de compensación térmica o facturación. Esta es la diferencia entre un prototipo escolar y un producto industrial maduro listo para las implacables reglas del mercado.