Especificaciones clave
El firmware se ejecuta desde la flash interna y trabaja completamente desde memoria sin estados de espera, manteniendo la latencia baja incluso al actualizar la pantalla OLED.
Configuración de reloj
- El oscilador interno de 8 MHz alimenta el Digital Frequency Locked Loop (DFLL).
- El DFLL multiplica a 48 MHz para la CPU y los periféricos síncronos.
- El controlador de reloj genérico divide los 48 MHz para:
- I²C a 1 MHz (SERCOM3) usado por EEPROM y OLED
- SERCOM1 a 2 MHz para el SPI del controlador táctil
- Referencia de 32 kHz para timing en milisegundos (vía
SysTick)
Asignación de periféricos
El multiplexor
PORT asigna cada SERCOM a pines específicos; consulta el diseño en KiCad para los números de pad exactos.
Mapa de memoria
- Bootloader (8 KB) – Cargador compatible con UF2 para flasheo de fábrica y actualizaciones de la comunidad.
- Aplicación (240 KB máx.) – Firmware de ZeroKeyUSB; actualmente usa menos del 30% de la flash disponible.
- Emulación EEPROM no se usa; todos los datos persistentes viven en el M24C64-W externo.
- Buffers en SRAM:
- 512 bytes para el frame buffer del OLED
- 128 bytes para los informes HID USB
- 96 bytes de scratch para bloques AES
Alimentación y reposo
- El MCU corre en modo activo mientras está conectado; el consumo se mantiene por debajo de 25 mA para toda la placa.
- Tras 60 segundos de inactividad el firmware atenúa el OLED y pone la CPU en Standby manteniendo USB activo.
- La actividad táctil o USB despierta el chip en menos de 3 ms.
Responsabilidades del firmware
- Autenticar el PIN maestro usando rutinas AES.
- Orquestar las interacciones de menú, pantalla y táctil.
- Gestionar las operaciones de lectura/escritura de EEPROM con seguimiento de wear-level.
- Generar informes HID USB y procesar comandos CDC.
- Calcular códigos TOTP usando aritmética entera (no se requiere coma flotante).