🔮 comunicación invisible 🔮
Dispositivo para leer y emitir señales infrarrojas y de radiofrecuencia. Basado en la EDU-CIAA-NXP, que cuenta con un procesador LPC4337.
Para instalar
- Utilizar Visual Studio Code.
- Instalar las extensiones recomendadas: C/C++ y Cortex Debug.
- Instalar la toolchain de ARM para embebidos.
- Descargar para tu sistema operativo (por ejemplo, x86_64 Linux hosted cross toolchains).
- Procurar que el target sea bare-metal, denominado
arm-none-eabi. - Extraer en
/opt/gcc-arm-embedded. - Añadir
/opt/gcc-arm-embedded/bina tu PATH.
- Instalar OpenOCD v0.12.0 o superior.
# Debian/Ubuntu sudo apt install openocd # Arch sudo pacman -S openocd
Luego, todos los comandos se encuentran en el Makefile:
make all # para compilar
make download # para bajar a la placa
make clean # para limpiar la salida En la carpeta scripts/custom se encuentran algunos scripts útiles para el desarrollo. Se necesita tener la herramienta uv para manejar los paquetes de Python. Luego, se puede correr los scripts con:
cd scripts/custom
uv sync # para instalar las dependencias
uv run sprites.py # genera el archivo sprites.c
uv run terminal.py --help # abre una terminal serial con la placa
uv run signals.py --help # analiza un archivo .sigSe utilizó la última versión del firmware_v3 para la CIAA en el momento de iniciar el proyecto (hash 548bcbf, publicada el 8 de abril de 2025). Sobre la misma se aplicarion los siguientes parches:
-
libs/lpc_fatfs_disks/sapi/src/sapi_sdcard.c
case FSSDC_CardStatus_Ready: g_sdcard->status = SDCARD_Status_ReadyUnmounted; - // Automount - if (!sdcardMount( true )) - { - Board_UARTPutSTR ("sapi_sdcard: Automount failed!\r\n"); - } + // El montaje se realiza desde la capa de aplicación para evitar + // bloqueos durante la secuencia de inicialización. break;
-
libs/lpc_fatfs_disks/source/fssdc.c
#ifndef FSSDC_SUPPORTS_HOT_INSERTION + // Sin pin CD, la extracción no actualiza automáticamente STA_NOINIT. + // Forzar re-inicialización en cada InitSPI para soportar reinserción. + g_diskStats |= STA_NOINIT; g_diskStats &= ~STA_NODISK; Board_UARTPutSTR ("FSSDC: [InitSPI] New card status: Inserted.\r\n"); newCardStatus (FSSDC_CardStatus_Inserted); FSSDC_FatFs_DiskInitialize (); #endif
-
libs/sapi/sapi_v0.6.2/soc/core/src/sapi_cyclesCounter.c
/*==================[macros and definitions]=================================*/ + + // Debug Exception and Monitor Control Register (DEMCR). + #define SAPI_DEMCR_REG (HW_REG_32_RW(0xE000EDFC)) + #define SAPI_DEMCR_TRCENA (1UL << 24)
bool_t cyclesCounterInit( uint32_t clockSpeed ) { //Asigna a la variable local ClockSpeed el valor recibido como argumento. ClockSpeed = clockSpeed; + // Habilita el bloque de trazas para que DWT_CYCCNT funcione sin debugger. + SAPI_DEMCR_REG |= SAPI_DEMCR_TRCENA; + // Reinicia contador para evitar estado previo indefinido. + DWT_CYCCNT = 0; //Iniciar el contador de ciclos de clock. DWT_CTRL |= 1; // *DWT_CTRL |= 1; return TRUE; }