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
|
||||
Reference in New Issue
Block a user