Requirements for Rockbox DAP: (2020-10-18 @ 23:21) * Physical/Case 1) Small, eg Sansa Clip+ or ClipZip (tiny 1" screen) 2) Medium, eg AGPTek Rocker (1.8" screen) 3) Large, eg iPod 5/5.5/6g, xDuoo X3ii (2.5" screen) Demand exists for all three classes, though feature expectations go up with each size (and price point). * 10 physical buttons/keys * Four directional keys (Up, Down, Left, Right) logically arranged * Play/Pause/Select (ideally in the center of the direction keys) * Power * Home / Back * Vol Up & Vol Down * Physical control lock switch strongly preferred but not needed * Ideally use dedicated GPIOs for each key to allow for simultaneous keypress; Alternatively ADC-based keys are okay if we also tie all ADC-attached keys to a GPIO inputs. Note power and lock must be dedicated GPIOs. * Note that the Sansa Clip series manages to get 9 buttons in its tiny form factor, lacking only a lock switch. Physical case size is not an excuse to skimp on controls. * Hard reset circuit; either dedicated button or hold button [combo] for 10s. * Display * LCD or OLED * No touch/digitizer * Color screens should be at least 16-bit (eg RGB565) * Decent viewing angle * Physical size and resolution will depend on final form factor: * 128x64 min for small * 160x128 min for medium * 320x240 min for large * Backlight/brightness control (via native display or SoC PWM) * Must support display shutdown (via GPIO) * "standard" parallel LCD bus preferred, I2C/SPI LCD acceptable if system DMA controller can auto-refresh display at 30hz or better * uSD card slot * SD2.0 (4-bit) support, ideally UHS-1 capable * USB-C port for charging and data * USB 2.0 High Speed or faster * OTG support, can switch between host and device modes * Audio * I2S/SAI-attached codec capable of 24bit/192KHz audio. * I2C-based control path * Reasonably decent audio path (eg isolated power supplies, don't cheap out on decoupling/filtering) -- especially on medium to large form factors. * Independent PLL for audio clocks (most SoCs do this) * Support both headphone and true line out modes * Dual jacks strongly preferred for large form factor * Jack(s) detect physical plug insertion (GP Input) * Any external analog output must be mutable (GPO controled) * Audio DMA must be capable of double-buffered circular operation * Debug * UART test points * JTAG/SWD/etc test points * SoC-supported USB-based recovery mode strongly desired * Battery * Capacity depends on physical device size * Voltage/Charge level monitor (via ADC) * Sized to operate player for 8-12 hours with screen off. * RTC * 32KHz XTAL * Alarm wakeup Nice to have: * Bluetooth * "Classic" BT audio only * UART attached * I2S audio (bi-directional capable) * A2DP (v1.2+) and AVRCP (v1.3+) * AAC/AptX support desired * FM Radio tuner * I2S audio, I2C for control * Uses headphone cord as antenna * DAB support * HD radio support (probably not realistic in our power budget) * Recording support * Built-in microphone * Line in * USB audio * FM Radio (if equipped) * Bluetooth (if equipped) Requirements for MCU-based player: (ie bare-metal, no operating system) * MCU * Single-core ARM Cortex-M4 (or equivalent/better) * FPU not needed, but DSP/SIMD can help if available * MMU not needed * 400-500MHz ideal clock speed, 160MHz minimum viable for single core * Dynamic clock control * Priority-aware interrupt controller * (STM32H7 family seems ideal, F7 family is similar but slower/smaller) * RAM: * 256KB (or more) of fast on-chip RAM * 1MB on-chip RAM preferred if we don't have flash for XIP * 8MB external RAM minimum, 32MB ideal, over 64MB is wasted * Flash: * 128KB for minimal bootloader code * 1MB needed for execute-in-place Note that while this is our preferred route, we understand it probably does not make sense economically, due to relatively high BOM versus an integrated SoC with stacked or on-package DRAM. Requirements for full CPU/Linux-based player: * CPU * Single-core, 500MHz-1GHz range (any CPU arch) * FPU not needed, but DSP/SIMD can help * Must support dynamic downclocking for power savings * >1GHz or Multicore CPU will be wasted * RAM: * 32MB absolute minimum, 64M-128MB ideal, over 256MB is probably wasted All else being equal, more RAM is better than less RAM * Flash: * If SoC supports SD card boot, small serial I2C eeprom (eg 1 kbit) for serial number and BT Mac address. * Otherwise, 64MB NAND flash minimum, over 128MB is probably wasted. Will be read-only at runtime to prolong flash life * SoC: * Full source code to bootloader and linux kernel is MUST-HAVE * Mainline/Upstream support strongly preferred but not strictly necessary * Display controller driver connected to standard fbdev layer * Audio controller driver connected to standard ASoC layer * DMA driver fully supported in scatter-gather Note that battery life is more important than raw performance. That said it is likely that the analog audio path will be the largest power consumer. We would prefer to port Rockbox to the bare metal hardware, using the Linux code only as a reference. However, the system should be powerful enough to provide a good user experience even when running rockbox on top of Linux. Fast bootup time is strongly desired. If we do build on top of a Linux system, we anticipate that we will create our own cut-down Linux distribution rather than relying on a vendor reference/example system. **** SoCs identified that look like good fits: * Ingenic X1000/X1000e * MIPS32r2 @1GHz, 32/64MB SiP RAM * Allwinner V3/V3x (aka Sochip S3/S3L) * Cortex-A7 @ 1.2GHz, 128/64MB SiP RAM * Allwinner F1C100s/F1C200s (aka F1C600 / F1C500) * ARM926EJ-S @ 500MHz, 32/64MB SiP RAM All have Mainline Linux support. The F1C series in particular is _very_ cheap and is still plenty capable for our needs.