Finalize I2C and SPI control architecture
This commit is contained in:
@@ -0,0 +1,316 @@
|
||||
# HubAudio — MCP23S17 GPIO Distribution
|
||||
|
||||
**Progetto:** HubAudio
|
||||
**Revisione:** definitiva
|
||||
**Data:** 2026-08-22
|
||||
|
||||
---
|
||||
|
||||
## Distribuzione GPIO
|
||||
|
||||
| IC | PORTA | GPIO | Segnale | Direzione | Pull |
|
||||
|---|---|---|---|---|---|
|
||||
| U34 | A | GPA0 | `SI4684_RESET` | OUT | UP |
|
||||
| U34 | A | GPA1 | `SI4684_SMODE` | OUT | - |
|
||||
| U34 | A | GPA2 | `SI4684_ANT_SEL` | OUT | - |
|
||||
| U34 | A | GPA3 | `SI4684_INT` | IN | - |
|
||||
| U34 | A | GPA4 | `ADAU1467_RESET` | OUT | UP |
|
||||
| U34 | A | GPA5 | `ADAU1467_SELFBOOT` | OUT/STRAP | UP |
|
||||
| U34 | A | GPA6 | `RESERVED` | — | - |
|
||||
| U34 | A | GPA7 | `MIC_SOURCE_SELECT` | OUT | - |
|
||||
| U34 | B | GPB0 | `MIC_DETECT` | IN | UP |
|
||||
| U34 | B | GPB1 | `LINE_IN_DETECT` | IN | UP |
|
||||
| U34 | B | GPB2 | `LINE_OUT_DETECT` | IN | UP |
|
||||
| U34 | B | GPB3 | `JACK_DETECT` | IN | UP |
|
||||
| U34 | B | GPB4 | `BQ25896_INT` | IN | UP |
|
||||
| U34 | B | GPB5 | `BQ25896_PG#` | IN | UP |
|
||||
| U34 | B | GPB6 | `BQ27441_GPOUT` | IN | UP |
|
||||
| U34 | B | GPB7 | `TPS63020_PG` | IN | UP |
|
||||
| U36 | A | GPA0 | `BT1035_RESET` | OUT | - |
|
||||
| U36 | A | GPA1 | `BT1035_SYSCTRL` | OUT | DOWN |
|
||||
| U36 | A | GPA2 | `UART_RESET` | OUT | UP |
|
||||
| U36 | A | GPA3 | `UART_INT` | IN | - |
|
||||
| U36 | A | GPA4 | `ETH_RST#` | OUT | UP |
|
||||
| U36 | A | GPA5 | `ANALOG_POWER_EN` | OUT | - |
|
||||
| U36 | A | GPA6 | `ETHERNET_POWER_EN` | OUT | - |
|
||||
| U36 | A | GPA7 | `BQ25896_PSEL` | OUT | - |
|
||||
| U36 | B | GPB0 | `INA228_ANALOG_ALERT` | IN | UP |
|
||||
| U36 | B | GPB1 | `INA228_DIGITAL_ALERT` | IN | UP |
|
||||
| U36 | B | GPB2 | `TEMP_PWR_ALERT` | IN | UP |
|
||||
| U36 | B | GPB3 | `TEMP_ESP32_ALERT` | IN | UP |
|
||||
| U36 | B | GPB4 | `TEMP_ETH_ALERT` | IN | UP |
|
||||
| U36 | B | GPB5 | `TEMP_CODEC_ALERT` | IN | UP |
|
||||
| U36 | B | GPB6 | `RESERVED` | — | - |
|
||||
| U36 | B | GPB7 | `RESERVED` | — | - |
|
||||
|
||||
---
|
||||
|
||||
# Pull-up / Pull-down
|
||||
|
||||
## Pull-UP
|
||||
|
||||
Le seguenti linee hanno pull-up esterno:
|
||||
|
||||
- `SI4684_RESET`
|
||||
- `ADAU1467_RESET`
|
||||
- `ADAU1467_SELFBOOT`
|
||||
- `MIC_DETECT`
|
||||
- `LINE_IN_DETECT`
|
||||
- `LINE_OUT_DETECT`
|
||||
- `JACK_DETECT`
|
||||
- `BQ25896_INT`
|
||||
- `BQ25896_PG#`
|
||||
- `BQ27441_GPOUT`
|
||||
- `TPS63020_PG`
|
||||
- `UART_RESET`
|
||||
- `ETH_RST#`
|
||||
- `INA228_ANALOG_ALERT`
|
||||
- `INA228_DIGITAL_ALERT`
|
||||
- `TEMP_PWR_ALERT`
|
||||
- `TEMP_ESP32_ALERT`
|
||||
- `TEMP_ETH_ALERT`
|
||||
- `TEMP_CODEC_ALERT`
|
||||
|
||||
Per le linee open-drain/status viene utilizzato come valore nominale:
|
||||
|
||||
**10 kΩ**
|
||||
|
||||
In particolare:
|
||||
|
||||
- `BQ27441_GPOUT` → 10 kΩ
|
||||
- `TPS63020_PG` → 10 kΩ
|
||||
- `INA228_ANALOG_ALERT` → 10 kΩ
|
||||
- `INA228_DIGITAL_ALERT` → 10 kΩ
|
||||
- `BQ25896_INT` → 10 kΩ
|
||||
- `BQ25896_PG#` → 10 kΩ
|
||||
- `TEMP_PWR_ALERT` → 10 kΩ
|
||||
- `TEMP_ESP32_ALERT` → 10 kΩ
|
||||
- `TEMP_ETH_ALERT` → 10 kΩ
|
||||
- `TEMP_CODEC_ALERT` → 10 kΩ
|
||||
|
||||
## Pull-DOWN
|
||||
|
||||
- `BT1035_SYSCTRL` → **10 kΩ verso GND**
|
||||
|
||||
## Nessun pull esterno
|
||||
|
||||
- `SI4684_SMODE`
|
||||
- `SI4684_ANT_SEL`
|
||||
- `SI4684_INT`
|
||||
- `MIC_SOURCE_SELECT`
|
||||
- `BT1035_RESET`
|
||||
- `UART_INT`
|
||||
- `ANALOG_POWER_EN`
|
||||
- `ETHERNET_POWER_EN`
|
||||
- `BQ25896_PSEL`
|
||||
- tutti i GPIO `RESERVED`
|
||||
|
||||
---
|
||||
|
||||
# Sensori di temperatura
|
||||
|
||||
Sono previsti sensori di temperatura **I²C** basati su **TMP117**.
|
||||
|
||||
I sensori sono distribuiti fisicamente sulla scheda per monitorare le zone termicamente più significative:
|
||||
|
||||
| Sensore | Zona | Posizione |
|
||||
|---|---|---|
|
||||
| `TEMP_PWR` | Dominio alimentazione | BOTTOM, vicino ai dispositivi di alimentazione |
|
||||
| `TEMP_ESP32` | ESP32 | vicino all'ESP32 |
|
||||
| `TEMP_ETH` | Ethernet / PHY | vicino al PHY Ethernet |
|
||||
| `TEMP_CODEC` | Codec TAC5212 | vicino al codec |
|
||||
|
||||
I sensori condividono il bus I²C e vengono identificati tramite il relativo indirizzo `ADDR`.
|
||||
|
||||
Ogni sensore dispone di:
|
||||
|
||||
- alimentazione locale
|
||||
- condensatore di bypass **100 nF**
|
||||
- `SDA`
|
||||
- `SCL`
|
||||
- `ADDR`
|
||||
- `ALERT`
|
||||
|
||||
### ALERT
|
||||
|
||||
L'uscita `ALERT` dei TMP117 viene utilizzata come segnalazione hardware verso il Device Manager:
|
||||
|
||||
- `TEMP_PWR_ALERT` → U36 GPB2
|
||||
- `TEMP_ESP32_ALERT` → U36 GPB3
|
||||
- `TEMP_ETH_ALERT` → U36 GPB4
|
||||
- `TEMP_CODEC_ALERT` → U36 GPB5
|
||||
|
||||
Le linee `ALERT` sono ingressi del MCP23S17 e utilizzano un pull-up esterno da **10 kΩ**.
|
||||
|
||||
Il Device Manager può quindi ricevere immediatamente una segnalazione di superamento della soglia termica senza dover effettuare continuamente il polling dei sensori.
|
||||
|
||||
---
|
||||
|
||||
## Note sui dispositivi
|
||||
|
||||
### SI4684
|
||||
|
||||
`SI4684_RESET` è il reset active-low del dispositivo.
|
||||
|
||||
Il pull-up garantisce il rilascio del reset dopo la fase di power-up.
|
||||
|
||||
### ADAU1467
|
||||
|
||||
`ADAU1467_RESET` è active-low.
|
||||
|
||||
`ADAU1467_SELFBOOT` deve essere HIGH per il self-boot dalla EEPROM.
|
||||
|
||||
### TAC5212
|
||||
|
||||
Il codec `XTAC5212IRGER` è il **TAC5212**.
|
||||
|
||||
Non esiste un reset hardware dedicato da collegare al MCP23S17; il reset è gestito tramite la configurazione software del dispositivo.
|
||||
|
||||
**U34 GPA6 = RESERVED.**
|
||||
|
||||
### BT1035
|
||||
|
||||
`BT1035_RESET` non necessita di pull-up esterno perché il modulo dispone del proprio pull-up interno.
|
||||
|
||||
`BT1035_SYSCTRL` richiede invece il pull-down esterno.
|
||||
|
||||
### BQ27441
|
||||
|
||||
`GPOUT` è open-drain e il datasheet raccomanda esplicitamente una resistenza di pull-up da **10 kΩ**.
|
||||
|
||||
### TPS63020
|
||||
|
||||
`PG` è un'uscita **open-drain**. Il pull-up è quindi necessario quando il segnale viene utilizzato come ingresso digitale dal MCP23S17.
|
||||
|
||||
### INA228
|
||||
|
||||
`ALERT` è la linea di alert del monitor e viene utilizzata come ingresso verso il MCP23S17; è prevista con pull-up esterno.
|
||||
|
||||
### TMP117
|
||||
|
||||
Il TMP117 è utilizzato come sensore di temperatura locale.
|
||||
|
||||
La comunicazione avviene tramite I²C. Il pin `ALERT` viene utilizzato per generare una segnalazione hardware verso il Device Manager tramite U36.
|
||||
|
||||
Ogni sensore dispone di un proprio indirizzo I²C tramite il pin `ADDR`.
|
||||
|
||||
---
|
||||
|
||||
# Regola generale
|
||||
|
||||
Ogni net deve avere **una sola resistenza fisica di pull-up/pull-down**.
|
||||
|
||||
Se una net viene condivisa da più dispositivi, non devono essere installate resistenze duplicate sui vari dispositivi.
|
||||
|
||||
Il pull-up interno del MCP23S17 non viene utilizzato come sostituto dei pull-up esterni delle linee di stato/open-drain.
|
||||
|
||||
Per le linee `ALERT` dei TMP117 viene mantenuto il pull-up esterno da **10 kΩ**.
|
||||
|
||||
---
|
||||
|
||||
# Distribuzione funzionale
|
||||
|
||||
## U34 PORTA — Audio / Radio Control
|
||||
|
||||
| GPIO | Funzione |
|
||||
|---|---|
|
||||
| GPA0 | SI4684 RESET |
|
||||
| GPA1 | SI4684 SMODE |
|
||||
| GPA2 | SI4684 ANT SEL |
|
||||
| GPA3 | SI4684 INT |
|
||||
| GPA4 | ADAU1467 RESET |
|
||||
| GPA5 | ADAU1467 SELFBOOT |
|
||||
| GPA6 | RESERVED |
|
||||
| GPA7 | MIC SOURCE SELECT |
|
||||
|
||||
## U34 PORTB — Detection / Power Status
|
||||
|
||||
| GPIO | Funzione |
|
||||
|---|---|
|
||||
| GPB0 | MIC DETECT |
|
||||
| GPB1 | LINE IN DETECT |
|
||||
| GPB2 | LINE OUT DETECT |
|
||||
| GPB3 | JACK DETECT |
|
||||
| GPB4 | BQ25896 INT |
|
||||
| GPB5 | BQ25896 PG# |
|
||||
| GPB6 | BQ27441 GPOUT |
|
||||
| GPB7 | TPS63020 PG |
|
||||
|
||||
## U36 PORTA — BT / UART / Ethernet / Power
|
||||
|
||||
| GPIO | Funzione |
|
||||
|---|---|
|
||||
| GPA0 | BT1035 RESET |
|
||||
| GPA1 | BT1035 SYSCTRL |
|
||||
| GPA2 | UART RESET |
|
||||
| GPA3 | UART INT |
|
||||
| GPA4 | ETH RESET |
|
||||
| GPA5 | ANALOG POWER EN |
|
||||
| GPA6 | ETHERNET POWER EN |
|
||||
| GPA7 | BQ25896 PSEL |
|
||||
|
||||
## U36 PORTB — Power / Temperature Monitoring
|
||||
|
||||
| GPIO | Funzione |
|
||||
|---|---|
|
||||
| GPB0 | INA228 ANALOG ALERT |
|
||||
| GPB1 | INA228 DIGITAL ALERT |
|
||||
| GPB2 | TEMP PWR ALERT |
|
||||
| GPB3 | TEMP ESP32 ALERT |
|
||||
| GPB4 | TEMP ETH ALERT |
|
||||
| GPB5 | TEMP CODEC ALERT |
|
||||
| GPB6 | RESERVED |
|
||||
| GPB7 | RESERVED |
|
||||
|
||||
---
|
||||
|
||||
# Tabella resistenze da inserire nello schematico
|
||||
|
||||
| Net | Resistenza | Collegamento |
|
||||
|---|---:|---|
|
||||
| `SI4684_RESET` | 10 kΩ | VIO → RESET |
|
||||
| `ADAU1467_RESET` | 10 kΩ | IOVDD → RESET |
|
||||
| `ADAU1467_SELFBOOT` | 10 kΩ | IOVDD → SELFBOOT |
|
||||
| `MIC_DETECT` | 10 kΩ | VIO → DETECT |
|
||||
| `LINE_IN_DETECT` | 10 kΩ | VIO → DETECT |
|
||||
| `LINE_OUT_DETECT` | 10 kΩ | VIO → DETECT |
|
||||
| `JACK_DETECT` | 10 kΩ | VIO → DETECT |
|
||||
| `BQ25896_INT` | 10 kΩ | VIO → INT |
|
||||
| `BQ25896_PG#` | 10 kΩ | VIO → PG# |
|
||||
| `BQ27441_GPOUT` | 10 kΩ | VDD → GPOUT |
|
||||
| `TPS63020_PG` | 10 kΩ | VOUT/VIO → PG |
|
||||
| `BT1035_SYSCTRL` | 10 kΩ | SYSCTRL → GND |
|
||||
| `UART_RESET` | 10 kΩ | VIO → RESET |
|
||||
| `ETH_RST#` | 10 kΩ | VIO → RESET# |
|
||||
| `INA228_ANALOG_ALERT` | 10 kΩ | VIO → ALERT |
|
||||
| `INA228_DIGITAL_ALERT` | 10 kΩ | VIO → ALERT |
|
||||
| `TEMP_PWR_ALERT` | 10 kΩ | VIO → ALERT |
|
||||
| `TEMP_ESP32_ALERT` | 10 kΩ | VIO → ALERT |
|
||||
| `TEMP_ETH_ALERT` | 10 kΩ | VIO → ALERT |
|
||||
| `TEMP_CODEC_ALERT` | 10 kΩ | VIO → ALERT |
|
||||
|
||||
---
|
||||
|
||||
# Stato
|
||||
|
||||
**U34:** assegnazione completa.
|
||||
|
||||
**U36:** assegnazione completa.
|
||||
|
||||
**TAC5212:** nessun GPIO dedicato al reset.
|
||||
|
||||
**BT1035_RESET:** nessun pull esterno.
|
||||
|
||||
**BT1035_SYSCTRL:** 10 kΩ pull-down.
|
||||
|
||||
**Linee open-drain/status:** pull-up 10 kΩ.
|
||||
|
||||
**TMP117:** 4 sensori I²C distribuiti nelle zone termicamente significative.
|
||||
|
||||
**TMP117 ALERT:** collegati al Device Manager tramite U36 GPB2–GPB5.
|
||||
|
||||
**U34 GPA6:** RESERVED.
|
||||
|
||||
**U36 GPB6–GPB7:** RESERVED.
|
||||
|
||||
**INTB U34/U36:** non collegati intenzionalmente.
|
||||
@@ -1,294 +1,176 @@
|
||||
# HubAudio SPI Control Architecture
|
||||
# HubAudio — SPI Bus Map
|
||||
|
||||
- Status: Draft
|
||||
- Date: 2026-08-01
|
||||
- Document Type: Architecture Specification
|
||||
**Progetto:** HubAudio
|
||||
**Revisione:** definitiva
|
||||
**Data:** 2026-08-23
|
||||
|
||||
## SPI Bus Architecture
|
||||
|
||||
# 1. Overview
|
||||
HubAudio utilizza un bus SPI principale con ESP32-S31-WROOM-3 come master.
|
||||
|
||||
The HubAudio system separates the control communication layer from the audio
|
||||
signal layer.
|
||||
|
||||
SPI is used exclusively for:
|
||||
|
||||
- device configuration
|
||||
- initialization
|
||||
- status monitoring
|
||||
- firmware loading procedures
|
||||
- parameter management
|
||||
|
||||
SPI is not used for real-time audio transport.
|
||||
|
||||
|
||||
The control architecture is based on independent SPI domains.
|
||||
|
||||
|
||||
CONTROL PLANE
|
||||
|
||||
System Controller
|
||||
|
||||
System Controller
|
||||
|
||||
|
|
||||
|
|
||||
SPI Control Bus
|
||||
|
||||
+-----------+-----------+
|
||||
| |
|
||||
|
||||
Audio Processor Radio Receiver
|
||||
|
||||
Audio Processor Radio Receiver
|
||||
Il bus principale condivide:
|
||||
|
||||
- `SPI_SCLK`
|
||||
- `SPI_MOSI`
|
||||
- `SPI_MISO`
|
||||
|
||||
Ogni slave dispone di una propria linea Chip Select (`CS`).
|
||||
|
||||
---
|
||||
|
||||
# 2. System Controller Control Domain
|
||||
## SPI Main Bus
|
||||
|
||||
The System Controller is the system supervisor.
|
||||
| IC | Dispositivo | Ruolo | CS |
|
||||
|---|---|---|---|
|
||||
| U5 | XTAC5212IRGER | Audio Codec | `SPI_CODEC_CS` |
|
||||
| U34 | MCP23S17-E/ML | Device Manager A | `SPI_DEV_MAN_A_CS` |
|
||||
| U36 | MCP23S17-E/ML | Device Manager B | `SPI_DEV_MAN_B_CS` |
|
||||
| U18 | ADAU1467WBCPZ300R | Audio DSP | `SPI_ADAU1467_CS` |
|
||||
| U12 | Si4684-A10-GM | Radio | `SPI_SI4684_CS` |
|
||||
| U10 | W25Q128JVS | Flash | `SPI_W25Q128_CS` |
|
||||
| U30 | SC16IS740IPW,128 | UART Bridge | `SPI_UART_CS` |
|
||||
|
||||
Its responsibilities are:
|
||||
### Shared SPI Signals
|
||||
|
||||
- system startup
|
||||
- peripheral initialization
|
||||
- configuration management
|
||||
- communication with external devices
|
||||
- firmware update coordination
|
||||
| Segnale | Funzione |
|
||||
|---|---|
|
||||
| `SPI_SCLK` | SPI Clock |
|
||||
| `SPI_MOSI` | Master Out / Slave In |
|
||||
| `SPI_MISO` | Master In / Slave Out |
|
||||
|
||||
Il master SPI è l'**ESP32-S31-WROOM-3 (U11)**.
|
||||
|
||||
The System Controller owns the main control SPI interface.
|
||||
|
||||
System Controller
|
||||
|
||||
SPI MASTER
|
||||
|
||||
|
|
||||
+---------+---------+
|
||||
| |
|
||||
|
||||
Audio Processor Radio Receiver
|
||||
|
||||
SPI SLAVE SPI SLAVE
|
||||
|
||||
|
||||
The control bus is independent from all audio data paths.
|
||||
Le linee `SPI_SCLK`, `SPI_MOSI` e `SPI_MISO` sono condivise tra gli slave
|
||||
del bus principale.
|
||||
|
||||
Le linee `CS` sono indipendenti e vengono utilizzate per selezionare
|
||||
un singolo slave alla volta.
|
||||
|
||||
---
|
||||
|
||||
# 3. Audio Processor SPI Domain
|
||||
|
||||
The Audio Processor contains its own SPI interface for external control.
|
||||
|
||||
The System Controller uses this interface for:
|
||||
|
||||
- DSP configuration
|
||||
- parameter updates
|
||||
- operational control
|
||||
- status reading
|
||||
|
||||
|
||||
The Audio Processor also manages its external program memory.
|
||||
|
||||
Audio Processor
|
||||
|
||||
+----------------------+
|
||||
|
|
||||
| SPI MASTER
|
||||
|
|
||||
v
|
||||
|
||||
Audio EEPROM
|
||||
|
||||
DSP Program Memory
|
||||
|
||||
|
||||
The System Controller does not directly access the EEPROM during normal operation.
|
||||
|
||||
The Audio Processor is responsible for loading its DSP configuration.
|
||||
## Chip Select
|
||||
|
||||
| CS | Slave |
|
||||
|---|---|
|
||||
| `SPI_CODEC_CS` | U5 — TAC5212 |
|
||||
| `SPI_DEV_MAN_A_CS` | U34 — MCP23S17 |
|
||||
| `SPI_DEV_MAN_B_CS` | U36 — MCP23S17 |
|
||||
| `SPI_ADAU1467_CS` | U18 — ADAU1467 |
|
||||
| `SPI_SI4684_CS` | U12 — Si4684 |
|
||||
| `SPI_W25Q128_CS` | U10 — W25Q128JVS |
|
||||
| `SPI_UART_CS` | U30 — SC16IS740 |
|
||||
|
||||
---
|
||||
|
||||
# 4. Radio Receiver SPI Domain
|
||||
# Private SPI Buses
|
||||
|
||||
The Radio Receiver is controlled by the System Controller through its SPI slave interface.
|
||||
Alcuni dispositivi dispongono di una memoria SPI dedicata e non fanno
|
||||
parte del bus SPI principale dell'ESP32.
|
||||
|
||||
The System Controller manages:
|
||||
## ADAU1467 — Private SPI
|
||||
|
||||
- initialization sequence
|
||||
- command exchange
|
||||
- configuration
|
||||
- firmware loading procedure
|
||||
| Master | Slave | Dispositivo |
|
||||
|---|---|---|
|
||||
| U18 | U24 | 25AA1024-I/SM |
|
||||
|
||||
**Master:** ADAU1467
|
||||
**Slave:** 25AA1024 SPI EEPROM
|
||||
|
||||
System Controller
|
||||
|
||||
SPI MASTER
|
||||
|
||||
|
|
||||
|
||||
Radio Receiver
|
||||
|
||||
|
|
||||
|
||||
Internal Firmware Management
|
||||
|
||||
|
|
||||
|
||||
Internal RAM
|
||||
|
||||
|
||||
The Radio Receiver remains responsible for its internal operational memory.
|
||||
La memoria U24 utilizza il bus SPI privato dell'ADAU1467.
|
||||
|
||||
U24 **non** è uno slave del bus SPI principale dell'ESP32 e pertanto non
|
||||
possiede una linea `CS` appartenente al namespace `SPI_*` del bus principale.
|
||||
|
||||
---
|
||||
|
||||
# 5. SPI Bus Isolation Principle
|
||||
## Si4684 — Private SPI
|
||||
|
||||
The HubAudio architecture intentionally avoids a single shared SPI bus.
|
||||
| Master | Slave | Dispositivo |
|
||||
|---|---|---|
|
||||
| U12 | U27 | W25Q16JW |
|
||||
|
||||
The design uses:
|
||||
**Master:** Si4684
|
||||
**Slave:** W25Q16JW SPI Flash
|
||||
|
||||
System Controller
|
||||
|
||||
+-------------+
|
||||
|
||||
| |
|
||||
|
||||
SPI-A SPI-B
|
||||
|
||||
| |
|
||||
|
||||
Audio Processor Radio Receiver
|
||||
|
||||
|
||||
Advantages:
|
||||
|
||||
- no chip-select conflicts
|
||||
- independent timing
|
||||
- reduced electrical loading
|
||||
- easier firmware management
|
||||
- simpler debugging
|
||||
La memoria U27 utilizza il bus SPI privato del Si4684.
|
||||
|
||||
U27 **non** è uno slave del bus SPI principale dell'ESP32 e pertanto non
|
||||
possiede una linea `CS` appartenente al namespace `SPI_*` del bus principale.
|
||||
|
||||
---
|
||||
|
||||
# 6. Boot Sequence
|
||||
# SPI Topology
|
||||
|
||||
The expected startup sequence is:
|
||||
```text
|
||||
ESP32-S31-WROOM-3
|
||||
U11
|
||||
│
|
||||
┌─────────────┼─────────────┐
|
||||
│ │ │
|
||||
SPI_SCLK SPI_MOSI SPI_MISO
|
||||
│ │ │
|
||||
┌─────────┴─────────────┴─────────────┴─────────┐
|
||||
│ SPI MAIN BUS │
|
||||
│ │
|
||||
├── U5 TAC5212 ← SPI_CODEC_CS │
|
||||
├── U34 MCP23S17 ← SPI_DEV_MAN_A_CS │
|
||||
├── U36 MCP23S17 ← SPI_DEV_MAN_B_CS │
|
||||
├── U18 ADAU1467 ← SPI_ADAU1467_CS │
|
||||
├── U12 Si4684 ← SPI_SI4684_CS │
|
||||
├── U10 W25Q128JVS ← SPI_W25Q128_CS │
|
||||
└── U30 SC16IS740 ← SPI_UART_CS │
|
||||
│
|
||||
└────────────────────────────────────────────────┘
|
||||
|
||||
|
||||
PRIVATE SPI BUS PRIVATE SPI BUS
|
||||
ADAU1467 Si4684
|
||||
U18 U12
|
||||
│ │
|
||||
│ SPI │ SPI
|
||||
▼ ▼
|
||||
U24 25AA1024 U27 W25Q16JW
|
||||
SPI Slave Summary
|
||||
Bus Master Slave Device
|
||||
Main SPI ESP32 U11 U5 TAC5212
|
||||
Main SPI ESP32 U11 U34 MCP23S17
|
||||
Main SPI ESP32 U11 U36 MCP23S17
|
||||
Main SPI ESP32 U11 U18 ADAU1467
|
||||
Main SPI ESP32 U11 U12 Si4684
|
||||
Main SPI ESP32 U11 U10 W25Q128JVS
|
||||
Main SPI ESP32 U11 U30 SC16IS740
|
||||
Private SPI ADAU1467 U18 U24 25AA1024
|
||||
Private SPI Si4684 U12 U27 W25Q16JW
|
||||
Design Rules
|
||||
SPI_SCLK, SPI_MOSI e SPI_MISO del bus principale sono condivisi tra
|
||||
tutti gli slave del bus.
|
||||
Ogni slave del bus principale deve avere una propria linea CS.
|
||||
Deve essere attivo un solo CS alla volta durante una transazione SPI.
|
||||
U24 e U27 non appartengono al bus SPI principale.
|
||||
U24 è controllata direttamente dall'ADAU1467.
|
||||
U27 è controllata direttamente dal Si4684.
|
||||
I Chip Select dei bus privati non devono essere confusi con i CS
|
||||
del bus SPI principale dell'ESP32.
|
||||
La nomenclatura SPI_*_CS identifica esclusivamente le linee Chip Select
|
||||
del bus SPI principale.
|
||||
Main SPI Chip Select Map
|
||||
SPI_CODEC_CS → U5 TAC5212
|
||||
SPI_DEV_MAN_A_CS → U34 MCP23S17
|
||||
SPI_DEV_MAN_B_CS → U36 MCP23S17
|
||||
SPI_ADAU1467_CS → U18 ADAU1467
|
||||
SPI_SI4684_CS → U12 Si4684
|
||||
SPI_W25Q128_CS → U10 W25Q128JVS
|
||||
SPI_UART_CS → U30 SC16IS740
|
||||
Stato
|
||||
|
||||
Power ON
|
||||
SPI principale: 7 slave.
|
||||
|
||||
|
|
||||
SPI privato ADAU1467: 1 slave.
|
||||
|
||||
System Controller boot
|
||||
SPI privato Si4684: 1 slave.
|
||||
|
||||
|
|
||||
Totale dispositivi SPI: 9.
|
||||
|
||||
Initialize SPI buses
|
||||
Master SPI principale: ESP32-S31-WROOM-3.
|
||||
|
||||
|
|
||||
|
||||
Configure Audio Processor
|
||||
|
||||
|
|
||||
+--> ADAU loads DSP program from Audio EEPROM
|
||||
|
||||
|
|
||||
|
||||
Configure Radio Receiver
|
||||
|
||||
|
|
||||
+--> Firmware initialization
|
||||
|
||||
|
|
||||
|
||||
Enable Audio Domain
|
||||
|
||||
|
|
||||
|
||||
Audio Processor starts audio processing
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 7. Separation Between Domains
|
||||
|
||||
|
||||
## Control Domain
|
||||
|
||||
|
||||
System Controller
|
||||
|
||||
|
|
||||
|
|
||||
|
||||
SPI
|
||||
|
||||
|
|
||||
|
||||
Peripheral configuration
|
||||
|
||||
|
||||
|
||||
## Audio Domain
|
||||
|
||||
|
||||
Audio Sources
|
||||
|
||||
|
|
||||
|
|
||||
|
||||
I2S
|
||||
|
||||
|
|
||||
|
||||
Audio Processor
|
||||
|
||||
|
|
||||
|
||||
Audio Outputs
|
||||
|
||||
|
||||
|
||||
The two domains interact only through configuration and status information.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 8. Design Rules
|
||||
|
||||
SPI signals require:
|
||||
|
||||
- controlled routing
|
||||
- clean reference plane
|
||||
- appropriate termination where required
|
||||
- separation from high-speed clock signals
|
||||
|
||||
|
||||
Critical signals:
|
||||
|
||||
- SCLK
|
||||
- MOSI
|
||||
- MISO
|
||||
- CS
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 9. Design Philosophy
|
||||
|
||||
The System Controller is the system coordinator.
|
||||
|
||||
The Audio Processor is the audio processor.
|
||||
|
||||
The Radio Receiver is a specialized audio peripheral.
|
||||
|
||||
Each component controls its own functional domain while remaining part of the
|
||||
complete HubAudio system.
|
||||
Master SPI privati: ADAU1467 e Si4684.
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
# Tabella Indirizzi I2C
|
||||
|
||||
| Dispositivo | Funzione / Nome | Configurazione Pin Indirizzo | Indirizzo I2C (Hex) |
|
||||
|:------------------|:------------------|:-------------------------------|:----------------------|
|
||||
| TCA9555 #1 | POWER_CONTROLLER | A2=GND, A1=GND, A0=GND | 0x20 |
|
||||
| TCA9555 #2 | AUDIO_CONTROL | A2=GND, A1=GND, A0=VCC | 0x21 |
|
||||
| INA228 | DIGITAL | A1=GND, A0=GND | 0x40 |
|
||||
| INA228 | AUDIO | A1=GND, A0=VCC | 0x41 |
|
||||
| EEPROM 24AA025E48 | Memoria | A2=GND, A1=GND, A0=GND | 0x50 |
|
||||
| TLV320AIC3104 | Audio Codec | ADDR = GND | 0x18 |
|
||||
| SC16IS740 | RX | A1=GND, A0=GND | 0x48 |
|
||||
| SC16IS740 | TX | A1=GND, A0=VCC | 0x49 |
|
||||
| BQ27441 | Fuel Gauge | Indirizzo fisso | 0x55 |
|
||||
| BQ25896 | Fuel manager. | Indirizzo fissi | 0x6B
|
||||
@@ -0,0 +1,96 @@
|
||||
# HubAudio — I²C Bus Map
|
||||
|
||||
**Progetto:** HubAudio
|
||||
**Revisione:** definitiva
|
||||
**Data:** 2026-08-23
|
||||
|
||||
## Dispositivi I²C
|
||||
|
||||
| IC | Componente | Configurazione indirizzo | Indirizzo I²C (7-bit) |
|
||||
|---|---|---|---:|
|
||||
| U1 | BQ25896RTWR | Indirizzo fisso | `0x6B` |
|
||||
| U2 | BQ27441DRZR-G1B | Indirizzo fisso | `0x55` |
|
||||
| U4 | INA228AQDGSRQ1 | A0 = 0, A1 = 0 | `0x40` |
|
||||
| U8 | INA228AQDGSRQ1 | A0 = 0, A1 = 1 | `0x41` |
|
||||
| U17 | 24AA025E64 | A2 = 0, A1 = 0, A0 = 0 | `0x50` |
|
||||
| U20 | TPS22994RUKT | ADDR3 = 0, ADDR2 = 0, ADDR1 = 0 | `0x20` |
|
||||
| U23 | TPS22994RUKT | ADDR3 = 0, ADDR2 = 0, ADDR1 = 1 | `0x21` |
|
||||
| U31 | TMP117NAIDRVR | ADDR = GND | `0x48` |
|
||||
| U32 | TMP117NAIDRVR | ADDR = VCC | `0x49` |
|
||||
| U33 | TMP117NAIDRVR | ADDR = SDA | `0x4A` |
|
||||
| U37 | TMP117NAIDRVR | ADDR = SCL | `0x4B` |
|
||||
|
||||
## Address Map
|
||||
|
||||
| Indirizzo | IC | Dispositivo |
|
||||
|---:|---|---|
|
||||
| `0x20` | U20 | TPS22994 |
|
||||
| `0x21` | U23 | TPS22994 |
|
||||
| `0x40` | U4 | INA228 — Analog |
|
||||
| `0x41` | U8 | INA228 — Digital |
|
||||
| `0x48` | U31 | TMP117 — Power |
|
||||
| `0x49` | U32 | TMP117 — ESP32 |
|
||||
| `0x4A` | U33 | TMP117 — DSP |
|
||||
| `0x4B` | U37 | TMP117 — Codec |
|
||||
| `0x50` | U17 | 24AA025E64 |
|
||||
| `0x55` | U2 | BQ27441 |
|
||||
| `0x6B` | U1 | BQ25896 |
|
||||
|
||||
## TMP117
|
||||
|
||||
I quattro TMP117 utilizzano tutte le quattro configurazioni disponibili del
|
||||
pin `ADDR`:
|
||||
|
||||
- **U31 — Power:** `ADDR → GND` → `0x48`
|
||||
- **U32 — ESP32:** `ADDR → VCC` → `0x49`
|
||||
- **U33 — DSP:** `ADDR → SDA` → `0x4A`
|
||||
- **U37 — Codec:** `ADDR → SCL` → `0x4B`
|
||||
|
||||
Ogni TMP117 dispone di un condensatore di bypass locale da **100 nF**.
|
||||
|
||||
## INA228
|
||||
|
||||
- **U4 — Analog:** A0 = 0, A1 = 0 → `0x40`
|
||||
- **U8 — Digital:** A0 = 0, A1 = 1 → `0x41`
|
||||
|
||||
## TPS22994
|
||||
|
||||
- **U20:** ADDR3 = 0, ADDR2 = 0, ADDR1 = 0 → `0x20`
|
||||
- **U23:** ADDR3 = 0, ADDR2 = 0, ADDR1 = 1 → `0x21`
|
||||
|
||||
## EEPROM
|
||||
|
||||
**U17 — 24AA025E64**
|
||||
|
||||
```text
|
||||
A2 = GND
|
||||
A1 = GND
|
||||
A0 = GND
|
||||
|
||||
→ 0x50
|
||||
|
||||
Indirizzi fissi
|
||||
|
||||
U1 — BQ25896: 0x6B
|
||||
|
||||
U2 — BQ27441: 0x55
|
||||
|
||||
Verifica collisioni
|
||||
|
||||
Non risultano collisioni tra gli indirizzi I²C assegnati.
|
||||
|
||||
Totale dispositivi I²C: 11
|
||||
|
||||
Indirizzi utilizzati: 11
|
||||
|
||||
0x20
|
||||
0x21
|
||||
0x40
|
||||
0x41
|
||||
0x48
|
||||
0x49
|
||||
0x4A
|
||||
0x4B
|
||||
0x50
|
||||
0x55
|
||||
0x6B
|
||||
File diff suppressed because it is too large
Load Diff
+4007
-1256
File diff suppressed because it is too large
Load Diff
@@ -260,7 +260,36 @@
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [],
|
||||
"erc_exclusions": [
|
||||
[
|
||||
"pin_to_pin|685800|622300|785f2c25-acb1-472d-acc0-e1cab8fec402|9abfd2d8-7ee0-413c-a1c8-43a9e9bc6128|/841d8022-3a94-443e-97aa-a99a12889684/e2542609-1b92-4554-8024-978841ad00fe|/841d8022-3a94-443e-97aa-a99a12889684/e2542609-1b92-4554-8024-978841ad00fe|/841d8022-3a94-443e-97aa-a99a12889684/e2542609-1b92-4554-8024-978841ad00fe",
|
||||
""
|
||||
],
|
||||
[
|
||||
"pin_to_pin|698500|939800|7b8823a2-1477-435a-a959-685c5902fa3b|90ac4f69-3dba-4e31-a249-c1acb1de964a|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab",
|
||||
""
|
||||
],
|
||||
[
|
||||
"pin_to_pin|698500|965200|90ac4f69-3dba-4e31-a249-c1acb1de964a|b28aca99-2435-4594-aa2d-04511d1d55b0|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab",
|
||||
""
|
||||
],
|
||||
[
|
||||
"pin_to_pin|889000|254000|91d3a23a-d736-4642-96f0-baac86cfb42f|3e42570a-20d3-4c77-8538-4b5e1602fb31|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab",
|
||||
""
|
||||
],
|
||||
[
|
||||
"pin_to_pin|889000|381000|976386d4-8920-4cbc-95cc-5f9f6df47b29|544d8c64-8045-4f5f-800f-ba9db5369f74|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab",
|
||||
""
|
||||
],
|
||||
[
|
||||
"pin_to_pin|889000|406400|544d8c64-8045-4f5f-800f-ba9db5369f74|e7e5e0db-e45e-482e-b906-820655170c35|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab",
|
||||
""
|
||||
],
|
||||
[
|
||||
"power_pin_not_driven|889000|355600|f24317f3-949b-4017-ab0a-bbd04ae8b759|00000000-0000-0000-0000-000000000000|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|/841d8022-3a94-443e-97aa-a99a12889684/be5acd16-8a33-4b43-9869-78b6acaaceab|",
|
||||
""
|
||||
]
|
||||
],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
@@ -517,20 +546,7 @@
|
||||
"version": 5
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": {
|
||||
"unconnected-(R1-Pad1)": [
|
||||
"3V3_DIGITAL"
|
||||
],
|
||||
"unconnected-(R10-Pad2)": [
|
||||
"3V3_DIGITAL"
|
||||
],
|
||||
"unconnected-(R3-Pad1)": [
|
||||
"3V3_DIGITAL"
|
||||
],
|
||||
"unconnected-(R7-Pad2)": [
|
||||
"3V3_DIGITAL"
|
||||
]
|
||||
},
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
@@ -767,6 +783,42 @@
|
||||
"label": "#",
|
||||
"name": "${ITEM_NUMBER}",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "OC_FARNELL",
|
||||
"name": "OC_FARNELL",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "SUPPLIER",
|
||||
"name": "SUPPLIER",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "PNM",
|
||||
"name": "PNM",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "OC_NEWARK",
|
||||
"name": "OC_NEWARK",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MPN",
|
||||
"name": "MPN",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "SNAPEDA_PN",
|
||||
"name": "SNAPEDA_PN",
|
||||
"show": false
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
@@ -817,7 +869,7 @@
|
||||
"uuid": "841d8022-3a94-443e-97aa-a99a12889684"
|
||||
}
|
||||
],
|
||||
"used_designators": "J_BAT1,IC1,Z1,REF1,J_POW_BTN1,Q10-13,BOOT1,RN1-10,Y1-3,D1-18,#PWR1-193,U1-36,C1-175,FB1-4,FB14-15,SW1-2,X1,L1-20,RESET1,J1-15,TP3-8,JP3-4,R1-74,R82,R85-121,R130-132",
|
||||
"used_designators": "#FLG1-25,J_BAT1,IC1,Z1,REF1,J_POW_BTN1,Q10-13,BOOT1,RN1-10,Y1-3,D1-18,#PWR1-314,U1-40,C1-194,FB1-4,FB14-15,SW1-2,X1,L1-24,RESET1,J1-15,TP3-8,JP3-4,R1-121,R130-132",
|
||||
"variants": []
|
||||
},
|
||||
"sheets": [
|
||||
@@ -834,13 +886,17 @@
|
||||
"PowerDistribution"
|
||||
],
|
||||
[
|
||||
"73d0f4ca-0905-4c0c-8fc0-a6a4eb5485f1",
|
||||
"AudioProcessor"
|
||||
"742c418a-6d63-4161-86e8-dcba5886fcf4",
|
||||
"PowerDistribution_2"
|
||||
],
|
||||
[
|
||||
"f8fd2832-13ed-4270-9e98-2ba7eddd8eec",
|
||||
"Main Controller"
|
||||
],
|
||||
[
|
||||
"73d0f4ca-0905-4c0c-8fc0-a6a4eb5485f1",
|
||||
"AudioProcessor"
|
||||
],
|
||||
[
|
||||
"d420ee58-604a-4bed-a2ea-d2f985c9aaa0",
|
||||
"Si4684"
|
||||
@@ -851,7 +907,7 @@
|
||||
],
|
||||
[
|
||||
"81d9e142-f3fa-46a0-96de-196a5f9efcbd",
|
||||
"Coder"
|
||||
"Codec"
|
||||
],
|
||||
[
|
||||
"19d2c6b9-23fc-454e-a8be-1c2c66c2d1f5",
|
||||
@@ -865,10 +921,6 @@
|
||||
"3648ee4f-401f-4d8b-b4da-4aabdf3a7fdf",
|
||||
"Antenna"
|
||||
],
|
||||
[
|
||||
"742c418a-6d63-4161-86e8-dcba5886fcf4",
|
||||
"AudioDomainController"
|
||||
],
|
||||
[
|
||||
"e2542609-1b92-4554-8024-978841ad00fe",
|
||||
"DeviceManager"
|
||||
|
||||
@@ -5,6 +5,16 @@
|
||||
(uuid "841d8022-3a94-443e-97aa-a99a12889684")
|
||||
(paper "A4")
|
||||
(lib_symbols)
|
||||
(text ".global 0"
|
||||
(exclude_from_sim no)
|
||||
(at 58.42 139.954 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
(uuid "fac08d31-ec59-4aa6-a235-3aabea6446ef")
|
||||
)
|
||||
(sheet
|
||||
(at 85.09 25.4)
|
||||
(size 43.18 24.13)
|
||||
@@ -92,7 +102,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "9")
|
||||
(page "10")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -138,7 +148,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "11")
|
||||
(page "12")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -184,7 +194,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "10")
|
||||
(page "11")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -230,7 +240,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "4")
|
||||
(page "6")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -251,7 +261,7 @@
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "742c418a-6d63-4161-86e8-dcba5886fcf4")
|
||||
(property "Sheetname" "AudioDomainController"
|
||||
(property "Sheetname" "PowerDistribution_2"
|
||||
(at 26.67 102.1584 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
@@ -287,7 +297,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "12")
|
||||
(page "4")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -333,7 +343,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "7")
|
||||
(page "8")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -354,7 +364,7 @@
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "81d9e142-f3fa-46a0-96de-196a5f9efcbd")
|
||||
(property "Sheetname" "Coder"
|
||||
(property "Sheetname" "Codec"
|
||||
(at 85.09 65.3284 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
@@ -379,7 +389,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "8")
|
||||
(page "9")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -471,7 +481,7 @@
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "6")
|
||||
(page "7")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
+3897
-1458
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1276
-453
File diff suppressed because it is too large
Load Diff
+1332
-1001
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1540
-2001
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user