El Microchip ATSAMD21G18 es el núcleo de ZeroKeyUSB. Combina una CPU ARM Cortex-M0+ de 32 bits, un controlador USB integrado y suficientes periféricos para coordinar la pantalla, las entradas táctiles y la EEPROM externa.Documentation Index
Fetch the complete documentation index at: https://docs.zerokeyusb.com/llms.txt
Use this file to discover all available pages before exploring further.
Especificaciones clave
| Característica | Valor |
|---|---|
| CPU | ARM Cortex-M0+ a 48 MHz |
| Flash | 256 KB (el firmware ocupa ~60 KB) |
| SRAM | 32 KB |
| USB | Dispositivo Full-Speed con soporte compuesto HID + CDC |
| GPIO | 38 pines de propósito general |
| Timers | 9 (TC/TCC) usados para PWM, debouncing y temporización TOTP |
| ADC | 12 bits, usado para sampling de entropía del IV |
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
| Periférico | SERCOM | Función |
|---|---|---|
| SERCOM0 | USART | Canal serie CDC (TX/RX en los pads USB) |
| SERCOM1 | SPI | Controlador táctil (TS06) |
| SERCOM2 | I²C | Reservado/cabeceras de debug |
| SERCOM3 | I²C | EEPROM (M24C64-W) + pantalla OLED (SSD1306) |
| SERCOM4 | Sin usar | Disponible para expansiones futuras |
| SERCOM5 | USB | Interfaz USB nativa Full-Speed |
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).