Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af79aef796 | ||
|
|
8b0a33e9e8 | ||
|
|
26a766f766 | ||
|
|
3056e81669 | ||
|
|
f12b9f43bf | ||
|
|
8345567a3d | ||
|
|
a066103feb | ||
|
|
9ef514ee67 | ||
|
|
9ecf793fae |
+16
@@ -0,0 +1,16 @@
|
||||
|
||||
# Local datasheets — not committed
|
||||
datasheets/
|
||||
|
||||
# KiCad generated / local files
|
||||
**/~*.lck
|
||||
**/*.lck
|
||||
**/_restore_backup_*/
|
||||
|
||||
# Generated reports / exports
|
||||
hardware/kicad/HubAudio/ERC.rpt
|
||||
hardware/kicad/HubAudio/ERC.txt
|
||||
hardware/kicad/HubAudio/*.asc
|
||||
hardware/kicad/HubAudio/*.csv
|
||||
hardware/kicad/HubAudio/export_project_*.csv
|
||||
|
||||
@@ -1,2 +1,151 @@
|
||||
# HubAudio# HubAudio
|
||||
# HubAudio
|
||||
|
||||
## Professional Embedded Audio Platform
|
||||
|
||||
HubAudio is a modular embedded audio platform designed around a clear separation of hardware domains:
|
||||
|
||||
- System control
|
||||
- Audio processing
|
||||
- Digital radio
|
||||
- Wireless audio
|
||||
- Clock management
|
||||
- Power management
|
||||
|
||||
The primary design objective is maintainability.
|
||||
|
||||
The architecture follows the principle:
|
||||
|
||||
> Code and hardware design must fit in the engineer's head.
|
||||
|
||||
Complexity is introduced only when it provides a measurable improvement in reliability, flexibility or performance.
|
||||
|
||||
---
|
||||
|
||||
# Project Goals
|
||||
|
||||
HubAudio is intended to provide:
|
||||
|
||||
- High quality digital audio routing
|
||||
- Multiple audio sources and destinations
|
||||
- Expandable DSP processing
|
||||
- Robust embedded operation
|
||||
- Professional PCB architecture
|
||||
- Long-term maintainability
|
||||
|
||||
---
|
||||
|
||||
# Core Architecture
|
||||
|
||||
## Main Domains
|
||||
|
||||
SYSTEM DOMAIN
|
||||
|
||||
ESP32-S3
|
||||
|
|
||||
Control / Network / UI
|
||||
|
|
||||
|
|
||||
AUDIO CONTROL BUS
|
||||
|
||||
|
||||
AUDIO DOMAIN
|
||||
|
||||
ADAU1467
|
||||
|
||||
+-------------+-------------+
|
||||
| | |
|
||||
I2S SPDIF Bluetooth
|
||||
| | |
|
||||
Si4684 IO Codec BT Module
|
||||
Radio
|
||||
|
||||
---
|
||||
|
||||
# Hardware Philosophy
|
||||
|
||||
The system is divided into independent domains:
|
||||
|
||||
## System Domain
|
||||
|
||||
Responsible for:
|
||||
|
||||
- Connectivity
|
||||
- User interface
|
||||
- Configuration
|
||||
- Network services
|
||||
- OTA updates
|
||||
|
||||
Main component:
|
||||
|
||||
- ESP32-S3
|
||||
|
||||
|
||||
## Audio Domain
|
||||
|
||||
Responsible for:
|
||||
|
||||
- Routing
|
||||
- DSP processing
|
||||
- Mixing
|
||||
- Sample rate management
|
||||
|
||||
Main component:
|
||||
|
||||
- Analog Devices ADAU1467
|
||||
|
||||
|
||||
## RF Domain
|
||||
|
||||
Responsible for:
|
||||
|
||||
- Digital radio reception
|
||||
- Wireless communication
|
||||
|
||||
|
||||
## Power Domain
|
||||
|
||||
Responsible for:
|
||||
|
||||
- Battery operation
|
||||
- USB power
|
||||
- Voltage regulation
|
||||
- Monitoring
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Repository Structure
|
||||
|
||||
|
||||
HubAudio/
|
||||
|
||||
├── docs/
|
||||
│
|
||||
├── hardware/
|
||||
│
|
||||
├── firmware/
|
||||
│
|
||||
├── simulation/
|
||||
│
|
||||
├── research/
|
||||
│
|
||||
└── tools/
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Design Rules
|
||||
|
||||
1. Prefer simple architectures.
|
||||
2. Avoid unnecessary abstraction.
|
||||
3. Separate noisy and sensitive domains.
|
||||
4. Document every architectural decision.
|
||||
5. Choose components for lifecycle, not only price.
|
||||
|
||||
---
|
||||
|
||||
# Status
|
||||
|
||||
Architecture phase.
|
||||
|
||||
Hardware implementation follows documented decisions.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -37,13 +37,14 @@ The Audio Processor is responsible for:
|
||||
- audio clock generation
|
||||
- synchronization of external audio peripherals
|
||||
|
||||
The Audio Processor is considered the audio domain master.
|
||||
The Audio Processor is the sole timing and routing master of the Audio Domain.
|
||||
|
||||
The System Controller participates in the Audio Domain as a digital audio source. It does not act as the audio timing master or routing controller. Its role inside the audio domain is equivalent to other digital audio sources.
|
||||
|
||||
The System Controller has a dual role:
|
||||
|
||||
- audio source inside the Audio Domain
|
||||
system supervisor inside the Control Domain
|
||||
- system supervisor inside the Control Domain
|
||||
|
||||
It operates as system supervisor and is responsible for:
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ audio transport interface.
|
||||
|
||||
## Decision
|
||||
|
||||
The SPI architecture is divided into independent functional domains.
|
||||
The SPI architecture is divided into independent control domains.
|
||||
|
||||
The System Controller operates as the master of the system control SPI bus.
|
||||
|
||||
@@ -88,8 +88,7 @@ commands exchanged on the external SPI control interface.
|
||||
|
||||
Internal RAM
|
||||
|
||||
The System Controller controls the initialization process but does not directly access
|
||||
the internal operational memory of the Radio Receiver.
|
||||
The System Controller supervises the Radio Receiver initialization process. Internal firmware loading remains under the responsibility of the Radio Receiver boot architecture.
|
||||
|
||||
## Consequences
|
||||
|
||||
|
||||
@@ -41,13 +41,15 @@ External audio devices operate as I2S slaves whenever supported.
|
||||
|
||||
## Audio Input Allocation
|
||||
|
||||
| Audio Processor Port | Device | Function |
|
||||
|| Audio Processor Input | Device | Function |
|
||||
|---|---|---|
|
||||
| SDATA_IN0 | System Controller | Network audio stream |
|
||||
| SDATA_IN1 | Radio Receiver | Radio audio |
|
||||
| SDATA_IN2 | DECODEC | Optical digital input |
|
||||
| SDATA_IN3 | Bluetooth RX | Wireless audio input |
|
||||
| SPDIFIN | Optical Interface | Optical digital audio input |
|
||||
| SDATA_IN2 | Bluetooth RX | Wireless audio input |
|
||||
|
||||
The ADAU1467 internal audio routing matrix allows any digital audio input
|
||||
to be routed to the DSP core, ASRCs, serial outputs or SPDIF output.
|
||||
|
||||
System Controller --------
|
||||
Radio Receiver ---------
|
||||
@@ -57,11 +59,13 @@ BT RX ---------/
|
||||
|
||||
## Audio Output Allocation
|
||||
|
||||
| Audio Processor Port | Device | Function |
|
||||
## Audio Output Allocation
|
||||
|
||||
| Audio Processor Output | Device | Function |
|
||||
|---|---|---|
|
||||
| SDATA_OUT0 | CODEC/DAC | Analog audio output |
|
||||
| SDATA_OUT1 | Bluetooth TX | Wireless audio output |
|
||||
| SDATA_OUT2 | ENCODEC | Optical digital output |
|
||||
| SPDIFOUT | Optical Interface | Optical digital audio output |
|
||||
| SDATA_OUT3 | Reserved | Future expansion |
|
||||
|
||||
Audio Processor
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# ADR-004 – Power Domain Architecture
|
||||
|
||||
- **Status:** Accepted
|
||||
- **Date:** YYYY-MM-DD
|
||||
- **Date:** 2026-08-02
|
||||
|
||||
# Context
|
||||
|
||||
|
||||
@@ -0,0 +1,771 @@
|
||||
# DigiRadio — Clock Architecture and I²S Clock-Domain Implementation
|
||||
|
||||
**Document ID:** ARCH-CLOCK-001
|
||||
**Status:** Design Baseline
|
||||
**Revision:** 2.0
|
||||
**Date:** 2026-08-15
|
||||
**Scope:** ADAU1467, Si4684, ESP32-S31-WROOM3, TLV320AIC3104IRHBR, BT1035, S/PDIF
|
||||
|
||||
---
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
This document defines the DigiRadio digital-audio clock architecture and the physical implementation rules for the I²S clock signals.
|
||||
|
||||
The architecture is based on the **ADAU1467** as the central DSP and audio-clock hub.
|
||||
|
||||
The design objectives are:
|
||||
|
||||
- one primary 12.288 MHz audio reference;
|
||||
- 48 kHz primary audio sample rate;
|
||||
- removal of the dedicated Si4684 crystal by supplying its external reference from the ADAU1467;
|
||||
- use of the TLV320AIC3104 as the analog audio codec;
|
||||
- independent BCLK/LRCLK pairs for the individual I²S interfaces;
|
||||
- no external BCLK/LRCLK splitter or "clock mixing" network;
|
||||
- explicit separation of ADAU1467 input and output clock domains;
|
||||
- use of ADAU1467 internal clock-domain architecture rather than electrically tying unrelated clock signals together.
|
||||
|
||||
This document is an **implementation document**: it defines how the clock architecture shall be translated into the KiCad schematic and PCB.
|
||||
|
||||
---
|
||||
|
||||
# 2. Architectural Principle
|
||||
|
||||
The fundamental design principle is:
|
||||
|
||||
> **Each external I²S peripheral receives its own BCLK/LRCLK pair from the corresponding ADAU1467 serial-port clock domain.**
|
||||
|
||||
The PCB shall **not electrically combine BCLK or LRCLK signals belonging to different serial ports**.
|
||||
|
||||
The ADAU1467 internally generates and manages the required audio clock domains.
|
||||
|
||||
Therefore, the PCB must not contain a global:
|
||||
|
||||
```text
|
||||
BCLK ─┬─ Device 1
|
||||
├─ Device 2
|
||||
├─ Device 3
|
||||
└─ Device 4
|
||||
|
||||
or:
|
||||
|
||||
|
||||
LRCLK ─┬─ Device 1
|
||||
├─ Device 2
|
||||
├─ Device 3
|
||||
└─ Device 4
|
||||
|
||||
unless a specific group of peripherals has deliberately been assigned to the same physical clock source and the electrical topology has been explicitly designed for that purpose.
|
||||
The default DigiRadio implementation is one BCLK/LRCLK pair per I²S interface.
|
||||
|
||||
3. Master Reference Clock
|
||||
3.1 Primary reference
|
||||
The DigiRadio primary audio reference is:
|
||||
|
||||
|
||||
12.288 MHz
|
||||
|
||||
generated by a passive crystal connected to the ADAU1467 oscillator/MCLK input.
|
||||
Architecture:
|
||||
|
||||
|
||||
12.288 MHz crystal
|
||||
│
|
||||
▼
|
||||
ADAU1467 MCLK/XTAL
|
||||
│
|
||||
▼
|
||||
PLL
|
||||
│
|
||||
▼
|
||||
Clock Generators
|
||||
│
|
||||
├── audio clock domains
|
||||
└── CLKOUT
|
||||
|
||||
The 12.288 MHz reference is appropriate for a 48 kHz audio system because:
|
||||
|
||||
|
||||
12.288 MHz / 256 = 48 kHz
|
||||
|
||||
|
||||
4. ADAU1467 Clock Architecture
|
||||
The ADAU1467 contains the clock-generation infrastructure required for a multi-peripheral audio system.
|
||||
The important architectural distinction is:
|
||||
|
||||
|
||||
ADAU1467 INPUT CLOCK DOMAINS
|
||||
≠
|
||||
ADAU1467 OUTPUT CLOCK DOMAINS
|
||||
|
||||
Even if two domains are configured to exactly the same nominal frequency, they are not to be treated as the same physical PCB clock net.
|
||||
The ADAU1467 provides multiple serial input and output ports and multiple clock domains, allowing different peripherals to be assigned independently.
|
||||
This is the reason a separate BCLK/LRCLK splitter IC is not required by the baseline architecture.
|
||||
|
||||
5. Primary Audio Rate
|
||||
The primary DigiRadio audio rate is:
|
||||
|
||||
|
||||
Fs = 48 kHz
|
||||
|
||||
For stereo I²S with 32-bit slots:
|
||||
|
||||
|
||||
BCLK = 48,000 × 32 × 2
|
||||
= 3,072,000 Hz
|
||||
= 3.072 MHz
|
||||
|
||||
Therefore the baseline values are:
|
||||
Signal
|
||||
Frequency
|
||||
Master reference
|
||||
12.288 MHz
|
||||
LRCLK / WCLK
|
||||
48 kHz
|
||||
BCLK
|
||||
3.072 MHz
|
||||
I²S slot width
|
||||
32 bit
|
||||
Channels
|
||||
2
|
||||
These values are the baseline. Individual devices must still be configured according to their own I²S timing and supported formats.
|
||||
|
||||
6. Global Clock Tree
|
||||
The logical architecture is:
|
||||
|
||||
|
||||
12.288 MHz
|
||||
passive crystal
|
||||
│
|
||||
▼
|
||||
┌────────────────┐
|
||||
│ ADAU1467 │
|
||||
│ │
|
||||
│ MCLK / PLL │
|
||||
│ Clock Generators│
|
||||
│ │
|
||||
│ DSP @ 48 kHz │
|
||||
└───────┬────────┘
|
||||
│
|
||||
┌───────────────┴────────────────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
CLKOUT 12.288 MHz I²S clock domains
|
||||
│ │
|
||||
┌────┴────┐ ┌──────────┼──────────┐
|
||||
│ │ │ │ │
|
||||
▼ ▼ ▼ ▼ ▼
|
||||
Si4684 AIC3104 Si4684 BT1035 Codec
|
||||
XTALI MCLK I²S IN I²S OUT I²S
|
||||
|
||||
The 12.288 MHz reference and the I²S BCLK/LRCLK signals are separate functions.
|
||||
|
||||
7. Si4684 Reference Clock
|
||||
7.1 External reference
|
||||
The Si4684 supports an external reference clock through XTALI.
|
||||
The DigiRadio design shall use:
|
||||
|
||||
|
||||
ADAU1467 CLKOUT
|
||||
│
|
||||
│ 12.288 MHz
|
||||
▼
|
||||
Si4684 XTALI
|
||||
|
||||
The Si4684 shall be configured for the appropriate external-clock mode.
|
||||
The firmware configuration must explicitly set:
|
||||
|
||||
|
||||
XTAL_FREQ = 12,288,000 Hz
|
||||
|
||||
and the correct external-clock CLK_MODE.
|
||||
The Si4684 crystal oscillator configuration parameters shall not be blindly reused for external-clock operation.
|
||||
7.2 Crystal removal
|
||||
The Si4684's dedicated crystal is therefore not part of the baseline design.
|
||||
The only primary 12.288 MHz crystal in the DigiRadio design is the one associated with the ADAU1467.
|
||||
7.3 Electrical validation
|
||||
Before schematic/PCB freeze, verify:
|
||||
• ADAU1467 CLKOUT output level;
|
||||
• Si4684 XTALI input limits;
|
||||
• frequency;
|
||||
• duty cycle;
|
||||
• rise/fall time;
|
||||
• startup sequence;
|
||||
• signal integrity;
|
||||
• routing noise coupling.
|
||||
|
||||
8. Si4684 I²S Input
|
||||
The Si4684 audio data enters the ADAU1467.
|
||||
Baseline:
|
||||
|
||||
|
||||
Si4684 ADAU1467
|
||||
|
||||
DOUT ──────────────────────► Serial IN
|
||||
BCLK ◄────────────────────── Serial IN clock
|
||||
LRCLK ◄────────────────────── Serial IN frame clock
|
||||
|
||||
The Si4684 is configured as an I²S slave.
|
||||
The BCLK/LRCLK pair used by the Si4684 belongs to the selected ADAU1467 input clock domain.
|
||||
It shall not be physically connected to the BCLK/LRCLK pair used by an ADAU1467 output port merely because both operate at 48 kHz.
|
||||
|
||||
9. ESP32-S31-WROOM3 I²S Input
|
||||
The ESP32 audio stream enters the ADAU1467.
|
||||
Preferred configuration:
|
||||
|
||||
|
||||
ADAU1467 = I²S clock master
|
||||
ESP32 = I²S clock slave
|
||||
|
||||
Physical connection:
|
||||
|
||||
|
||||
ESP32 DATA ─────────────────► ADAU1467 Serial IN
|
||||
|
||||
ADAU1467 BCLK_x ────────────► ESP32 BCLK
|
||||
ADAU1467 LRCLK_x ───────────► ESP32 LRCLK
|
||||
|
||||
The ESP32 BCLK/LRCLK pair is a dedicated clock pair for that serial interface.
|
||||
It is not to be joined to the Si4684 BCLK/LRCLK pair on the PCB.
|
||||
The final ESP32 firmware shall use:
|
||||
|
||||
|
||||
Fs = 48 kHz
|
||||
slot width = 32 bit
|
||||
I²S slave mode
|
||||
|
||||
where supported by the selected ESP32 I²S implementation.
|
||||
|
||||
10. TLV320AIC3104 Codec
|
||||
The codec is:
|
||||
|
||||
|
||||
TLV320AIC3104IRHBR
|
||||
|
||||
It provides:
|
||||
• stereo ADC;
|
||||
• stereo DAC;
|
||||
• Line In;
|
||||
• Line Out;
|
||||
• headphone output path;
|
||||
• digital I²S interface;
|
||||
• internal clock/PLL circuitry.
|
||||
|
||||
11. Codec MCLK
|
||||
The codec can use the same 12.288 MHz clock reference.
|
||||
Preferred connection:
|
||||
|
||||
|
||||
ADAU1467 CLKOUT
|
||||
│
|
||||
│ 12.288 MHz
|
||||
▼
|
||||
TLV320AIC3104 MCLK
|
||||
|
||||
At 48 kHz:
|
||||
|
||||
|
||||
12.288 MHz / 256 = 48 kHz
|
||||
|
||||
This provides a clean and deterministic clock relationship between the ADAU1467 and codec.
|
||||
The codec's PLL/divider configuration must be programmed according to the TLV320AIC3104 datasheet.
|
||||
|
||||
12. Codec ADC — Line In to ADAU1467
|
||||
The analog input path is:
|
||||
|
||||
|
||||
LINE IN
|
||||
│
|
||||
▼
|
||||
TLV320AIC3104 ADC
|
||||
│
|
||||
│ DOUT
|
||||
▼
|
||||
ADAU1467 Serial IN
|
||||
|
||||
The digital clock connection is:
|
||||
|
||||
|
||||
ADAU1467 BCLK_CODEC_IN
|
||||
│
|
||||
└──────────────► AIC3104 BCLK
|
||||
|
||||
ADAU1467 LRCLK_CODEC_IN
|
||||
│
|
||||
└──────────────► AIC3104 WCLK/LRCLK
|
||||
|
||||
and:
|
||||
|
||||
|
||||
AIC3104 DOUT ─────────► ADAU1467 Serial IN
|
||||
|
||||
The codec ADC interface is therefore an ADAU1467 input serial port.
|
||||
|
||||
13. Codec DAC — ADAU1467 to Line Out / Headphone
|
||||
The output path is:
|
||||
|
||||
|
||||
ADAU1467 Serial OUT
|
||||
│
|
||||
│ DIN
|
||||
▼
|
||||
TLV320AIC3104 DAC
|
||||
│
|
||||
├──► LINE OUT
|
||||
│
|
||||
└──► HEADPHONE AMPLIFIER
|
||||
│
|
||||
▼
|
||||
Headphone Jack
|
||||
|
||||
Clocking:
|
||||
|
||||
|
||||
ADAU1467 BCLK_CODEC_OUT
|
||||
│
|
||||
└──────────────► AIC3104 BCLK
|
||||
|
||||
ADAU1467 LRCLK_CODEC_OUT
|
||||
│
|
||||
└──────────────► AIC3104 WCLK/LRCLK
|
||||
|
||||
Data:
|
||||
|
||||
|
||||
ADAU1467 Serial OUT DATA ──► AIC3104 DIN
|
||||
|
||||
The codec output clock pair is a dedicated ADAU1467 output clock-domain pair.
|
||||
|
||||
14. Important: Codec Input and Output Clocks
|
||||
Even though the codec ADC and DAC operate at the same nominal:
|
||||
|
||||
|
||||
48 kHz / 3.072 MHz
|
||||
|
||||
the schematic shall not assume that the codec ADC and DAC automatically share one physical BCLK/LRCLK net.
|
||||
The preferred implementation is:
|
||||
|
||||
|
||||
ADAU1467 INPUT CLOCK DOMAIN
|
||||
│
|
||||
├── BCLK_CODEC_IN
|
||||
└── LRCLK_CODEC_IN
|
||||
│
|
||||
▼
|
||||
AIC3104 ADC
|
||||
|
||||
|
||||
ADAU1467 OUTPUT CLOCK DOMAIN
|
||||
│
|
||||
├── BCLK_CODEC_OUT
|
||||
└── LRCLK_CODEC_OUT
|
||||
│
|
||||
▼
|
||||
AIC3104 DAC
|
||||
|
||||
Whether the final AIC3104 implementation can safely use one common physical clock pair for both directions is a specific codec-interface configuration decision and must be made from the TLV320AIC3104 timing/master/slave requirements.
|
||||
The architecture does not require us to tie the two domains together.
|
||||
|
||||
15. BT1035
|
||||
The BT1035 is an I²S output peripheral.
|
||||
Preferred configuration:
|
||||
|
||||
|
||||
ADAU1467 = I²S master
|
||||
BT1035 = I²S slave
|
||||
|
||||
Physical connections:
|
||||
|
||||
|
||||
ADAU1467 BCLK_BT
|
||||
└──────────────► BT1035 BCLK
|
||||
|
||||
ADAU1467 LRCLK_BT
|
||||
└──────────────► BT1035 LRCLK
|
||||
|
||||
ADAU1467 DATA_BT
|
||||
└──────────────► BT1035 I²S DATA
|
||||
|
||||
Baseline:
|
||||
|
||||
|
||||
48 kHz
|
||||
32 bit
|
||||
BCLK = 3.072 MHz
|
||||
|
||||
The BT1035 interface is an ADAU1467 output clock domain.
|
||||
It shall not share a PCB BCLK/LRCLK net with the codec unless deliberately configured and electrically verified.
|
||||
|
||||
16. S/PDIF Input
|
||||
S/PDIF is handled by the dedicated ADAU1467 S/PDIF input.
|
||||
|
||||
|
||||
S/PDIF IN
|
||||
│
|
||||
▼
|
||||
ADAU1467 S/PDIF RX
|
||||
│
|
||||
▼
|
||||
ASRC / DSP clock domain
|
||||
|
||||
There is no external BCLK/LRCLK connection.
|
||||
The recovered S/PDIF clock is not physically combined with the I²S clock network.
|
||||
|
||||
17. S/PDIF Output
|
||||
Likewise:
|
||||
|
||||
|
||||
ADAU1467 S/PDIF TX
|
||||
│
|
||||
▼
|
||||
S/PDIF OUT
|
||||
|
||||
No external BCLK/LRCLK is required.
|
||||
|
||||
18. Clock-Domain Allocation
|
||||
The following is the proposed logical allocation.
|
||||
Input side
|
||||
Device
|
||||
ADAU interface
|
||||
Clock ownership
|
||||
Si4684
|
||||
Serial IN 0
|
||||
ADAU1467 input clock domain
|
||||
ESP32-S31-WROOM3
|
||||
Serial IN 1
|
||||
ADAU1467 input clock domain
|
||||
AIC3104 ADC
|
||||
Serial IN 2
|
||||
ADAU1467 input clock domain
|
||||
S/PDIF
|
||||
Dedicated S/PDIF IN
|
||||
Recovered S/PDIF clock / ASRC
|
||||
Output side
|
||||
Device
|
||||
ADAU interface
|
||||
Clock ownership
|
||||
BT1035
|
||||
Serial OUT 0
|
||||
ADAU1467 output clock domain
|
||||
AIC3104 DAC
|
||||
Serial OUT 1
|
||||
ADAU1467 output clock domain
|
||||
S/PDIF
|
||||
Dedicated S/PDIF OUT
|
||||
ADAU1467 S/PDIF subsystem
|
||||
The exact serial-port numbers are implementation assignments and shall be finalized against the ADAU1467 pinout and PCB placement.
|
||||
|
||||
19. No Clock "Mishmash"
|
||||
The following shall be considered a design rule:
|
||||
Do not electrically connect unrelated BCLK or LRCLK signals merely because they have the same frequency.
|
||||
For example, these are logically different:
|
||||
|
||||
|
||||
BCLK_SI4684
|
||||
BCLK_ESP32
|
||||
BCLK_CODEC_IN
|
||||
BCLK_BT
|
||||
BCLK_CODEC_OUT
|
||||
|
||||
Even if all are:
|
||||
|
||||
|
||||
3.072 MHz
|
||||
|
||||
they are separate clock nets.
|
||||
Likewise:
|
||||
|
||||
|
||||
LRCLK_SI4684
|
||||
LRCLK_ESP32
|
||||
LRCLK_CODEC_IN
|
||||
LRCLK_BT
|
||||
LRCLK_CODEC_OUT
|
||||
|
||||
remain separate nets.
|
||||
This provides:
|
||||
• deterministic ownership;
|
||||
• no contention between clock drivers;
|
||||
• cleaner PCB routing;
|
||||
• easier debugging;
|
||||
• easier clock-domain changes;
|
||||
• easier future support for different sample rates.
|
||||
|
||||
20. Internal ADAU1467 Clock Relationship
|
||||
The important distinction is:
|
||||
|
||||
|
||||
PHYSICAL PCB CONNECTION
|
||||
≠
|
||||
LOGICAL CLOCK RELATIONSHIP
|
||||
|
||||
The ADAU1467 can derive several clock domains from the same master reference.
|
||||
Therefore:
|
||||
|
||||
|
||||
BCLK_A = 3.072 MHz
|
||||
BCLK_B = 3.072 MHz
|
||||
BCLK_C = 3.072 MHz
|
||||
|
||||
does not imply:
|
||||
|
||||
|
||||
BCLK_A = physical net BCLK_B = physical net BCLK_C
|
||||
|
||||
They are independently generated/assigned clock-domain signals.
|
||||
The synchronization relationship is established by the ADAU1467 clock-generation architecture.
|
||||
|
||||
21. PCB Net Naming
|
||||
The schematic shall use explicit net names.
|
||||
Recommended names:
|
||||
|
||||
|
||||
MCLK_12M288
|
||||
SI4684_BCLK
|
||||
SI4684_LRCLK
|
||||
SI4684_SDOUT
|
||||
|
||||
ESP32_BCLK
|
||||
ESP32_LRCLK
|
||||
ESP32_SDOUT
|
||||
|
||||
CODEC_ADC_BCLK
|
||||
CODEC_ADC_LRCLK
|
||||
CODEC_ADC_SDOUT
|
||||
|
||||
BT_BCLK
|
||||
BT_LRCLK
|
||||
BT_SDIN
|
||||
|
||||
CODEC_DAC_BCLK
|
||||
CODEC_DAC_LRCLK
|
||||
CODEC_DAC_SDIN
|
||||
|
||||
SPDIF_IN
|
||||
SPDIF_OUT
|
||||
|
||||
Do not use a generic:
|
||||
|
||||
|
||||
BCLK
|
||||
LRCLK
|
||||
|
||||
label for the entire board unless that net is intentionally a single shared physical clock.
|
||||
|
||||
22. PCB Routing Rules
|
||||
22.1 MCLK_12M288
|
||||
Route:
|
||||
|
||||
|
||||
ADAU1467 CLKOUT
|
||||
│
|
||||
├──► Si4684 XTALI
|
||||
└──► AIC3104 MCLK
|
||||
|
||||
The two loads may be fed from the same source only after checking the ADAU1467 CLKOUT drive capability and total input capacitance.
|
||||
Keep the clock routes short and away from switching-regulator nodes.
|
||||
22.2 BCLK/LRCLK
|
||||
Each clock pair shall be routed independently:
|
||||
|
||||
|
||||
ADAU1467
|
||||
│
|
||||
├── SI4684_BCLK / LRCLK
|
||||
│
|
||||
├── ESP32_BCLK / LRCLK
|
||||
│
|
||||
├── CODEC_ADC_BCLK / LRCLK
|
||||
│
|
||||
├── BT_BCLK / LRCLK
|
||||
│
|
||||
└── CODEC_DAC_BCLK / LRCLK
|
||||
|
||||
Avoid unnecessary stubs.
|
||||
Use source termination if required by signal-integrity analysis.
|
||||
|
||||
23. Why No External Clock Splitter?
|
||||
A clock splitter is not required simply because several peripherals use 48 kHz.
|
||||
The ADAU1467 already provides the required clock-generation architecture.
|
||||
Adding an external clock splitter would introduce:
|
||||
• another active clock component;
|
||||
• additional propagation delay;
|
||||
• additional jitter;
|
||||
• additional power consumption;
|
||||
• another configuration dependency;
|
||||
• another possible failure point.
|
||||
It should therefore be added only if electrical analysis proves that a specific fanout requirement cannot be met by the ADAU1467 clock outputs.
|
||||
|
||||
24. Why Not Share BCLK/LRCLK Everywhere?
|
||||
Sharing clock signals is technically possible in some I²S designs, but it is not the baseline DigiRadio architecture.
|
||||
The risks of indiscriminate sharing are:
|
||||
• conflicting clock drivers;
|
||||
• accidental master/master configuration;
|
||||
• long PCB branches;
|
||||
• uncontrolled stubs;
|
||||
• difficult debugging;
|
||||
• inability to independently change one interface;
|
||||
• confusion between ADAU input and output clock domains.
|
||||
The ADAU1467 gives us enough clock-domain infrastructure to avoid these problems.
|
||||
Therefore the design deliberately favors independent clock pairs.
|
||||
|
||||
25. Master/Slave Policy
|
||||
The baseline policy is:
|
||||
Device
|
||||
I²S role
|
||||
ADAU1467
|
||||
Master
|
||||
Si4684
|
||||
Slave
|
||||
ESP32-S31-WROOM3
|
||||
Slave
|
||||
TLV320AIC3104
|
||||
Slave where supported/configured
|
||||
BT1035
|
||||
Slave
|
||||
This avoids multiple external clock masters.
|
||||
Any deviation must be documented as an explicit architecture change.
|
||||
|
||||
26. Sample-Rate Conversion
|
||||
If an external source operates at a sample rate different from 48 kHz:
|
||||
|
||||
|
||||
External clock domain
|
||||
│
|
||||
▼
|
||||
ADAU1467 Serial Port
|
||||
│
|
||||
▼
|
||||
ASRC
|
||||
│
|
||||
▼
|
||||
48 kHz DSP domain
|
||||
|
||||
The external BCLK/LRCLK must remain local to that interface.
|
||||
It shall not be forced onto the main 48 kHz clock net.
|
||||
|
||||
27. Final Logical Architecture
|
||||
|
||||
|
||||
12.288 MHz
|
||||
ADAU CRYSTAL
|
||||
│
|
||||
▼
|
||||
┌───────────────┐
|
||||
│ ADAU1467 │
|
||||
│ │
|
||||
│ PLL │
|
||||
│ Clock Gen. │
|
||||
│ DSP │
|
||||
└───────┬───────┘
|
||||
│
|
||||
┌──────────────┼───────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
CLKOUT INPUT DOMAINS OUTPUT DOMAINS
|
||||
12.288 MHz │ │
|
||||
│ │ │
|
||||
┌─────┴─────┐ │ ┌────┼─────┐
|
||||
│ │ │ │ │
|
||||
▼ ▼ ▼ ▼ ▼
|
||||
Si4684 AIC3104 Si4684 BT1035 AIC3104
|
||||
XTALI MCLK I²S IN I²S OUT I²S OUT
|
||||
▲ │ │
|
||||
│ │ │
|
||||
ESP32 I²S BCLK/LR BCLK/LR
|
||||
▲
|
||||
│
|
||||
ESP32 DATA
|
||||
|
||||
S/PDIF remains on the dedicated ADAU1467 interfaces.
|
||||
|
||||
28. Implementation Sequence
|
||||
The schematic implementation shall proceed in this order:
|
||||
1 Place ADAU1467.
|
||||
2 Place the 12.288 MHz crystal and its oscillator network.
|
||||
3 Define ADAU1467 PLL and clock-generator configuration.
|
||||
4 Define serial input clock domains.
|
||||
5 Assign Si4684 to an input serial port.
|
||||
6 Assign ESP32 to an input serial port.
|
||||
7 Assign AIC3104 ADC to an input serial port.
|
||||
8 Define output clock domains.
|
||||
9 Assign BT1035 to an output serial port.
|
||||
10 Assign AIC3104 DAC to an output serial port.
|
||||
11 Connect ADAU1467 CLKOUT to Si4684 XTALI.
|
||||
12 Connect ADAU1467 CLKOUT to AIC3104 MCLK if the final loading analysis permits.
|
||||
13 Route every BCLK/LRCLK pair as a separate named net.
|
||||
14 Verify that no two clock outputs are accidentally shorted.
|
||||
15 Verify all master/slave settings.
|
||||
16 Verify SigmaStudio serial-port and clock-domain assignments against the schematic.
|
||||
17 Perform signal-integrity review before PCB release.
|
||||
|
||||
29. Verification Checklist
|
||||
Master clock
|
||||
• 12.288 MHz crystal connected to ADAU1467.
|
||||
• ADAU1467 PLL configuration verified.
|
||||
• 12.288 MHz CLKOUT configuration verified.
|
||||
• CLKOUT loading verified.
|
||||
Si4684
|
||||
• Dedicated crystal removed.
|
||||
• XTALI driven from ADAU1467 CLKOUT.
|
||||
• External-clock mode configured.
|
||||
• XTAL_FREQ = 12,288,000 Hz.
|
||||
• I²S slave mode configured.
|
||||
• Dedicated SI4684_BCLK net.
|
||||
• Dedicated SI4684_LRCLK net.
|
||||
ESP32
|
||||
• I²S slave mode verified.
|
||||
• Dedicated ESP32_BCLK net.
|
||||
• Dedicated ESP32_LRCLK net.
|
||||
• 48 kHz / selected slot format verified.
|
||||
TLV320AIC3104
|
||||
• MCLK = 12.288 MHz verified.
|
||||
• ADC serial input assigned.
|
||||
• DAC serial output assigned.
|
||||
• Master/slave mode verified.
|
||||
• ADC BCLK/LRCLK routing verified.
|
||||
• DAC BCLK/LRCLK routing verified.
|
||||
• Headphone path verified.
|
||||
BT1035
|
||||
• I²S slave mode verified.
|
||||
• 48 kHz / 32-bit configuration verified.
|
||||
• Dedicated BT_BCLK.
|
||||
• Dedicated BT_LRCLK.
|
||||
S/PDIF
|
||||
• Dedicated ADAU1467 S/PDIF IN.
|
||||
• Dedicated ADAU1467 S/PDIF OUT.
|
||||
• No BCLK/LRCLK connection required.
|
||||
PCB
|
||||
• No unintended common BCLK net.
|
||||
• No unintended common LRCLK net.
|
||||
• No master/master connection.
|
||||
• Clock routes kept short.
|
||||
• Switching-node coupling checked.
|
||||
• Signal integrity checked.
|
||||
|
||||
30. Design Decision
|
||||
The DigiRadio clock architecture is therefore based on the following definitive principles:
|
||||
1 One primary 12.288 MHz crystal on the ADAU1467.
|
||||
2 ADAU1467 is the central audio clock master.
|
||||
3 Main audio rate is 48 kHz.
|
||||
4 Baseline I²S BCLK is 3.072 MHz for stereo 32-bit slots.
|
||||
5 Si4684 receives 12.288 MHz externally from ADAU1467 CLKOUT.
|
||||
6 The Si4684 dedicated crystal is removed.
|
||||
7 TLV320AIC3104 may receive the same 12.288 MHz master reference on MCLK.
|
||||
8 Each I²S peripheral receives its own BCLK/LRCLK pair.
|
||||
9 Input and output ADAU1467 clock domains are treated as distinct.
|
||||
10 BCLK/LRCLK signals are not electrically mixed on the PCB.
|
||||
11 No generic BCLK/LRCLK splitter is required by the architecture.
|
||||
12 S/PDIF uses the dedicated ADAU1467 interfaces.
|
||||
13 ASRC is used when an external source belongs to an incompatible/asynchronous clock domain.
|
||||
14 All clock-domain assignments must be explicitly reflected in both SigmaStudio and KiCad.
|
||||
|
||||
31. References
|
||||
Primary references to be kept with the DigiRadio repository:
|
||||
• Analog Devices — ADAU1463/ADAU1467 Data Sheet.
|
||||
• Analog Devices — ADAU1467 product and evaluation-board documentation.
|
||||
• Silicon Labs — Si468x Receiver Programming Guide (AN649).
|
||||
• Silicon Labs — Si4684 hardware/reference documentation.
|
||||
• Texas Instruments — TLV320AIC3104 Data Sheet.
|
||||
• Feasycom — BT1035 Programming User Guide.
|
||||
• DigiRadio SigmaStudio project and generated DSP configuration.
|
||||
Vendor documents stored in the repository shall be treated as the implementation references. If a newer revision is added, this architecture document shall be reviewed before schematic freeze.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,291 @@
|
||||
# ARCH-PCB-001 — Layer Architecture & Routing Strategy
|
||||
|
||||
**Project:** HubAudio
|
||||
**PCB:** 6-layer mixed-signal audio/RF board
|
||||
**Status:** Architecture baseline
|
||||
**Revision:** 1.0
|
||||
**Date:** 2026-08-24
|
||||
|
||||
---
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
This document defines the layer architecture and routing strategy for the HubAudio PCB.
|
||||
|
||||
The objectives are:
|
||||
|
||||
- minimize EMI and crosstalk;
|
||||
- provide short and well-defined return paths for high-speed signals;
|
||||
- preserve signal integrity for audio, clock, SPI, USB, Ethernet and RF interfaces;
|
||||
- isolate slow control signals from critical high-speed routing;
|
||||
- simplify placement and routing decisions;
|
||||
- maintain a consistent PCB architecture throughout layout.
|
||||
|
||||
The layer assignment is an architectural constraint, not merely a routing preference.
|
||||
|
||||
---
|
||||
|
||||
## 2. PCB Stackup
|
||||
|
||||
The PCB uses a 6-layer stackup with 35 µm copper on all copper layers.
|
||||
|
||||
| Layer | Type | Primary Function |
|
||||
|---|---|---|
|
||||
| **L1 — F.Cu** | Copper | Components + high-speed / critical signals |
|
||||
| **L2 — In1.Cu** | Copper | **GND plane** |
|
||||
| **L3 — In2.Cu** | Copper | Slow signals / control |
|
||||
| **L4 — In3.Cu** | Copper | **POWER plane** |
|
||||
| **L5 — In4.Cu** | Copper | **GND plane** |
|
||||
| **L6 — B.Cu** | Copper | Components + slow / secondary signals |
|
||||
|
||||
### Dielectric structure
|
||||
|
||||
| Interface | Dielectric |
|
||||
|---|---:|
|
||||
| L1 ↔ L2 | 0.10 mm prepreg |
|
||||
| L2 ↔ L3 | 0.535 mm core |
|
||||
| L3 ↔ L4 | 0.10 mm prepreg |
|
||||
| L4 ↔ L5 | 0.535 mm core |
|
||||
| L5 ↔ L6 | 0.10 mm prepreg |
|
||||
|
||||
Total nominal PCB thickness is approximately **1.58 mm**, compatible with a nominal 1.6 mm PCB construction.
|
||||
|
||||
---
|
||||
|
||||
## 3. Layer Philosophy
|
||||
|
||||
The PCB follows this hierarchy:
|
||||
|
||||
```text
|
||||
L1 HIGH-SPEED / CRITICAL SIGNALS
|
||||
L2 GND
|
||||
L3 SLOW SIGNALS / CONTROL
|
||||
L4 POWER
|
||||
L5 GND
|
||||
L6 SECONDARY / SLOW SIGNALS
|
||||
|
||||
The fundamental principle is:
|
||||
|
||||
Keep high-speed and sensitive signals on the outer layers, directly adjacent to a solid GND reference plane.
|
||||
|
||||
L1 is therefore treated as the primary high-speed routing layer.
|
||||
|
||||
L6 may be used for secondary and slow routing, with L5 providing the adjacent GND reference.
|
||||
|
||||
4. L1 — High-Speed / Critical Signals
|
||||
|
||||
L1 is the preferred layer for signals where signal integrity, edge rate, impedance or electromagnetic coupling is important.
|
||||
|
||||
Preferred signals
|
||||
I²S
|
||||
SPI
|
||||
clocks
|
||||
USB
|
||||
Ethernet
|
||||
RF
|
||||
other high-speed digital interfaces
|
||||
critical audio clocks
|
||||
Examples
|
||||
ADAU1467 audio clocks
|
||||
I²S BCLK
|
||||
I²S LRCLK / WCLK
|
||||
I²S SDATA
|
||||
SPI clock and data
|
||||
12.288 MHz audio reference
|
||||
Ethernet PHY high-speed signals
|
||||
USB signals
|
||||
RF paths
|
||||
Rule
|
||||
|
||||
High-speed signals should remain on L1 whenever practical.
|
||||
|
||||
Avoid unnecessary layer changes.
|
||||
|
||||
When a layer transition is unavoidable, provide an appropriate nearby GND stitching via to preserve the return-current path.
|
||||
|
||||
5. L2 — Ground Plane
|
||||
|
||||
L2 is the primary continuous GND reference plane.
|
||||
|
||||
It should remain as continuous and uninterrupted as possible.
|
||||
|
||||
L2 provides the primary return-current reference for signals routed on L1.
|
||||
|
||||
Rules
|
||||
Do not route ordinary signals through L2.
|
||||
Avoid unnecessary splits or voids.
|
||||
Do not create isolated copper islands without a defined purpose.
|
||||
Provide GND vias close to layer-transition vias for high-speed signals.
|
||||
Maintain particularly clean GND under clock, I²S, SPI, USB and other fast L1 routing.
|
||||
6. L3 — Slow Signals / Control
|
||||
|
||||
L3 is dedicated primarily to low-speed digital signals.
|
||||
|
||||
Typical signals include:
|
||||
|
||||
GPIO
|
||||
RESET
|
||||
ENABLE
|
||||
INTERRUPT
|
||||
power-control signals
|
||||
configuration signals
|
||||
low-speed control interfaces
|
||||
miscellaneous control lines
|
||||
other signals where controlled impedance is not required
|
||||
|
||||
L3 should not be the preferred routing layer for high-speed signals.
|
||||
|
||||
The relatively large dielectric spacing to L2 makes L3 less suitable than L1 for high-speed routing.
|
||||
|
||||
7. L4 — Power Plane
|
||||
|
||||
L4 is dedicated to power distribution.
|
||||
|
||||
Typical power domains may include:
|
||||
|
||||
3V3_DIG
|
||||
3V3_AUDIO
|
||||
1V8
|
||||
1V2
|
||||
other required regulated or switched rails
|
||||
|
||||
Power domains shall be partitioned logically according to the power architecture.
|
||||
|
||||
Power routing should avoid unnecessarily crossing sensitive signal regions.
|
||||
|
||||
The power plane must not be treated as a generic signal-routing layer unless specifically required.
|
||||
|
||||
8. L5 — Ground Plane
|
||||
|
||||
L5 is the secondary continuous GND plane.
|
||||
|
||||
It provides the primary reference for signals routed on L6.
|
||||
|
||||
L5 should remain as continuous as practical.
|
||||
|
||||
Together, L2 and L5 form the principal internal ground structure of the PCB.
|
||||
|
||||
9. L6 — Secondary / Slow Routing
|
||||
|
||||
L6 is intended primarily for:
|
||||
|
||||
I²C
|
||||
GPIO
|
||||
slow control signals
|
||||
secondary communication lines
|
||||
connections to components located on the bottom side
|
||||
signals that do not require controlled impedance
|
||||
I²C
|
||||
|
||||
I²C is preferentially routed on L6.
|
||||
|
||||
This keeps I²C away from the critical high-speed routing on L1 and allows bottom-side components to be connected without consuming valuable TOP routing space.
|
||||
|
||||
10. Communication-Signal Policy
|
||||
|
||||
Communication signals are classified according to electrical speed and sensitivity rather than simply by protocol name.
|
||||
|
||||
High-speed / critical
|
||||
|
||||
Preferred on L1:
|
||||
|
||||
I²S
|
||||
SPI
|
||||
clock signals
|
||||
USB
|
||||
Ethernet
|
||||
RF
|
||||
Low-speed / control
|
||||
|
||||
Preferred on L3 or L6:
|
||||
|
||||
I²C
|
||||
GPIO
|
||||
RESET
|
||||
ENABLE
|
||||
INTERRUPT
|
||||
power-control signals
|
||||
configuration interfaces
|
||||
Important exception
|
||||
|
||||
The layer policy is architectural, not an absolute prohibition.
|
||||
|
||||
A signal may use another layer when required by routing topology, component placement or congestion. However, deviations should be minimized and should have a clear reason.
|
||||
|
||||
11. TOP-Layer Routing Policy
|
||||
|
||||
L1 should not become a general-purpose routing layer.
|
||||
|
||||
The preferred priority is:
|
||||
|
||||
RF
|
||||
critical clocks
|
||||
I²S
|
||||
SPI
|
||||
USB / Ethernet high-speed signals
|
||||
other critical signals
|
||||
ordinary signals only when necessary
|
||||
|
||||
Slow GPIO and control signals should not normally be routed on L1.
|
||||
|
||||
This preserves the TOP layer for the signals that benefit most from the 0.10 mm L1–L2 geometry.
|
||||
|
||||
12. Layer Transition Rules
|
||||
|
||||
When a high-speed signal changes layer:
|
||||
|
||||
minimize the number of transitions;
|
||||
avoid unnecessary vias;
|
||||
provide a nearby GND stitching via;
|
||||
preserve the return-current path;
|
||||
avoid crossing GND-plane discontinuities.
|
||||
|
||||
For slow signals, layer transitions are less critical and may be used freely when useful for routing.
|
||||
|
||||
13. Placement Implications
|
||||
|
||||
Component placement shall support the layer architecture.
|
||||
|
||||
L1 placement
|
||||
|
||||
Critical components should be positioned so that their high-speed connections can be routed primarily on L1.
|
||||
|
||||
Examples:
|
||||
|
||||
ADAU1467
|
||||
audio codec
|
||||
Si4684
|
||||
BT1058
|
||||
Ethernet PHY
|
||||
USB interface
|
||||
clock sources
|
||||
Bottom placement
|
||||
|
||||
Bottom-side components should preferentially connect using L6 where practical.
|
||||
|
||||
I²C and other low-speed buses should therefore be planned around bottom-side placement where advantageous.
|
||||
|
||||
14. Design Rule
|
||||
|
||||
The following rule is the fundamental routing constraint for this PCB:
|
||||
|
||||
L1 is for high-speed and critical signals. L2 is their primary GND reference. L3 is for slow control. L4 is power. L5 is GND. L6 is for secondary and slow routing.
|
||||
|
||||
This rule should be applied consistently during placement and routing.
|
||||
|
||||
15. Final Layer Assignment
|
||||
┌──────────────────────────────────────────┐
|
||||
│ L1 F.Cu COMPONENTS / HIGH-SPEED │
|
||||
├──────────────────────────────────────────┤
|
||||
│ L2 In1 GND │
|
||||
├──────────────────────────────────────────┤
|
||||
│ L3 In2 SLOW SIGNAL / CONTROL │
|
||||
├──────────────────────────────────────────┤
|
||||
│ L4 In3 POWER │
|
||||
├──────────────────────────────────────────┤
|
||||
│ L5 In4 GND │
|
||||
├──────────────────────────────────────────┤
|
||||
│ L6 B.Cu COMPONENTS / SLOW SIGNAL │
|
||||
└──────────────────────────────────────────┘
|
||||
|
||||
Architecture status: BASELINE — use as the routing reference for placement and PCB layout.
|
||||
@@ -0,0 +1,65 @@
|
||||
# Mappatura Hardware e Pinout: ESP32-S31-WROOM-3
|
||||
|
||||
Questo documento raccoglie la configurazione completa e definitiva dei pin per il modulo **ESP32-S31-WROOM-3** utilizzata nel layout del PCB.
|
||||
|
||||
---
|
||||
|
||||
## 1. Tabella Definitiva Mappatura Hardware
|
||||
|
||||
| Periferica / Blocco | Segnale Hardware | GPIO ESP32-S31 | Pin Schema | Note e Connessioni Hardware |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| **ETHERNET (RMII / LAN8720A)** | `ETH_50MHZ_CLOCK` | **GPIO13** | **Pin 19** | Ingresso Clock 50 MHz da oscillatore |
|
||||
| | `ETH_TXD0` | **GPIO8** | **Pin 14** | Dati TX Bit 0 |
|
||||
| | `ETH_TXD1` | **GPIO9** | **Pin 15** | Dati TX Bit 1 |
|
||||
| | `ETH_TXEN` | **GPIO12** | **Pin 18** | Transmit Enable |
|
||||
| | `ETH_RXD0` | **GPIO19** | **Pin 25** | Dati RX Bit 0 |
|
||||
| | `ETH_RXD1` | **GPIO18** | **Pin 24** | Dati RX Bit 1 |
|
||||
| | `ETH_CRS_DV` | **GPIO15** | **Pin 21** | Carrier Sense / Data Valid |
|
||||
| | `ETH_MDC` | **GPIO5** | **Pin 11** | Clock Gestione PHY |
|
||||
| | `ETH_MDIO` | **GPIO6** | **Pin 12** | Dati Gestione PHY (Pull-up 1.5 kΩ ~ 4.7 kΩ) |
|
||||
| | `ETH_RST#` | **GPIO7** | **Pin 13** | Reset Hardware LAN8720A |
|
||||
| | `ETH_RXER` | **GPIO10** | **Pin 16** | Receive Error / Config. Indirizzo PHY0 |
|
||||
| | `ETH_INT#` | **GPIO4** | **Pin 10** | Interruzione PHY (Pull-up 10 kΩ) |
|
||||
| **SPI BUS (Master)** | `SPI_MOSI` | **GPIO2** | **Pin 6** | Dati in Uscita (Condiviso Si4684 + ADAU1467)[cite: 1] |
|
||||
| | `SPI_MISO` | **GPIO3** | **Pin 7** | Dati in Ingresso (Condiviso Si4684 + ADAU1467)[cite: 1] |
|
||||
| | `SPI_CLK` | **GPIO1** | **Pin 9** | Clock Serial SPI[cite: 1] |
|
||||
| | `SPI_SI4684_CS` | **GPIO16** | **Pin 22** | Chip Select Radio Si4684[cite: 1] |
|
||||
| | `SPI_ADAU1467_CS` | **GPIO17** | **Pin 23** | Chip Select DSP ADAU1467[cite: 1] |
|
||||
| **I2C BUS (Master)** | `I2C_SDA` | **GPIO50** | **Pin 60** | (Pull-up 4.7 kΩ) |
|
||||
| | `I2C_SCL` | **GPIO51** | **Pin 61** | (Pull-up 4.7 kΩ) |
|
||||
| **I2S_0 (Slave)** | `I2S0_BCLK` | **GPIO42** | **Pin 52** | Bit Clock (Ingresso da Master esterno)[cite: 1] |
|
||||
| | `I2S0_LRCLK` | **GPIO43** | **Pin 53** | Frame Sync / WS (Ingresso da Master)[cite: 1] |
|
||||
| | `I2S0_DATA` | **GPIO44** | **Pin 54** | Dati Audio 1[cite: 1] |
|
||||
| **I2S_1 (Slave)** | `I2S1_BCLK` | **GPIO46** | **Pin 56** | Bit Clock (Ingresso da Master esterno)[cite: 1] |
|
||||
| | `I2S1_LRCLK` | **GPIO47** | **Pin 57** | Frame Sync / WS (Ingresso da Master)[cite: 1] |
|
||||
| | `I2S1_DATA` | **GPIO48** | **Pin 58** | Dati Audio 2[cite: 1] |
|
||||
| **UART BT1035** | `BT_TX` | **GPIO52** | **Pin 62** | Collegare a **RXD** del modulo BT1035 |
|
||||
| | `BT_RX` | **GPIO53** | **Pin 63** | Collegare a **TXD** del modulo BT1035 |
|
||||
| | `BT_RTS` *(Opz.)* | **GPIO54** | **Pin 64** | Controllo di flusso (Collegare a **CTS** del BT1035) |
|
||||
| | `BT_CTS` *(Opz.)* | **GPIO55** | **Pin 65** | Controllo di flusso (Collegare a **RTS** del BT1035) |
|
||||
| **INTERRUPTS & IO** | `PCA_POWER_INT` | **GPIO11** | **Pin 17** | Interruzione da espansore I2C PCA9555 (Power Unit)[cite: 1] |
|
||||
| | `SPARE_IO0` | **GPIO16** | **Pin 22** | GPIO libero / Riserva[cite: 1] |
|
||||
| | `SPARE_IO1` | **GPIO17** | **Pin 23** | GPIO libero / Riserva[cite: 1] |
|
||||
| **SYSTEM & BOOT** | `ESP_EN` | **EN** | **Pin 5** | Reset Hardware (Pull-up 10 kΩ + Cap 1 µF verso GND)[cite: 1] |
|
||||
| | `ESP_BOOT` | **GPIO61** | **Pin 71** | Strapping Pin / Pulsante BOOT (Pull-up interno)[cite: 1] |
|
||||
| | `USB_DP` | **USB_DP** | **Pin 40** | USB Data+ (Coppia differenziale 90 Ω)[cite: 1] |
|
||||
| | `USB_DM` | **USB_DM** | **Pin 41** | USB Data- (Coppia differenziale 90 Ω)[cite: 1] |
|
||||
|
||||
---
|
||||
|
||||
## 2. Note di Progettazione Hardware
|
||||
|
||||
### USB Serial / JTAG Integrato
|
||||
* Per programmazione e debug è sufficiente un singolo connettore **USB Type-C** direttamente collegato a `USB_DP` (Pin 40) e `USB_DM` (Pin 41)[cite: 1].
|
||||
* Inserire **due resistenze da 5.1 kΩ** su CC1 e CC2 verso GND sul connettore Type-C.
|
||||
|
||||
### Bus SPI
|
||||
* I dispositivi controllati in SPI sono 2: **Si4684** (`CS0` su `GPIO13`) e **ADAU1467** (`CS1` su `GPIO14`)[cite: 1].
|
||||
* Aggiungere resistori di **pull-up esterni da 10 kΩ a 3.3V** sulle linee CS per garantire lo stato HIGH durante il boot.
|
||||
|
||||
### Bus I2C
|
||||
* Il codec **TLV320AIC3104** (indirizzo `0x18`) è controllato via I2C (`GPIO50` per SDA e `GPIO51` per SCL).
|
||||
* Prevedere due resistori di pull-up esterni da **2.2 kΩ a 4.7 kΩ** verso 3.3V.
|
||||
|
||||
### Interfacce I2S Audio
|
||||
* Entrambi i canali I2S sono configurati in modalità **Slave**. I segnali di clock `BCLK` e `LRCLK` provengono dai rispettivi dispositivi Master esterni[cite: 1].
|
||||
@@ -0,0 +1,506 @@
|
||||
# HubAudio PCB Floor Plan
|
||||
|
||||
- Status: Draft
|
||||
- Date: 2026-08-01
|
||||
- Document Type: Hardware Architecture
|
||||
|
||||
|
||||
# 1. Overview
|
||||
|
||||
This document defines the preliminary PCB floor plan for the HubAudio
|
||||
single-board audio platform.
|
||||
|
||||
The PCB integrates:
|
||||
|
||||
- System Controller
|
||||
- Audio Processor
|
||||
- Radio Receiver
|
||||
- Wireless Audio Interfaces
|
||||
- Digital Audio Interfaces
|
||||
- Power Management
|
||||
- Battery Operation Support
|
||||
|
||||
|
||||
The floor plan follows the fundamental HubAudio architecture:
|
||||
|
||||
|
||||
ESP32-S3 manages the Control Domain.
|
||||
|
||||
ADAU1467 manages the Audio Domain.
|
||||
|
||||
The Clock Distribution Layer provides synchronization
|
||||
for digital audio peripherals.
|
||||
|
||||
|
||||
The PCB layout must preserve separation between:
|
||||
|
||||
- Control Domain
|
||||
- Audio Domain
|
||||
- Clock Domain
|
||||
- Power Domain
|
||||
|
||||
|
||||
The objective is to create a compact portable audio platform while
|
||||
maintaining:
|
||||
|
||||
- audio signal integrity
|
||||
- clock stability
|
||||
- RF performance
|
||||
- power efficiency
|
||||
- battery operation capability
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 2. PCB Constraints
|
||||
|
||||
|
||||
## 2.1 Target Dimensions
|
||||
|
||||
|
||||
The HubAudio board is designed as a compact single-board platform.
|
||||
|
||||
|
||||
Preferred PCB size:
|
||||
Layer 1
|
||||
Component placement
|
||||
Critical digital signals
|
||||
Audio routing
|
||||
|
||||
Layer 2
|
||||
Continuous GND plane
|
||||
|
||||
Layer 3
|
||||
Power distribution
|
||||
|
||||
Layer 4
|
||||
Control signals
|
||||
Low speed routing
|
||||
Auxiliary signals
|
||||
|
||||
|
||||
A 6-layer PCB remains an optional evolution only if required after
|
||||
routing verification.
|
||||
|
||||
|
||||
The transition to 6 layers must be justified by:
|
||||
|
||||
- routing density
|
||||
- clock integrity
|
||||
- RF isolation requirements
|
||||
- power distribution constraints
|
||||
|
||||
|
||||
The initial architecture target remains:
|
||||
4 Layer PCB
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 4. Functional PCB Zones
|
||||
|
||||
|
||||
The PCB is divided into five functional areas.
|
||||
|
||||
|
||||
## 4.1 Control Zone
|
||||
|
||||
|
||||
Contains:
|
||||
|
||||
- ESP32-S3
|
||||
- USB interface
|
||||
- programming interface
|
||||
- user interface connections
|
||||
|
||||
|
||||
Responsibilities:
|
||||
|
||||
- network connectivity
|
||||
- streaming control
|
||||
- configuration management
|
||||
- firmware updates
|
||||
|
||||
|
||||
Placement requirements:
|
||||
|
||||
- close to PCB edge
|
||||
- antenna clearance
|
||||
- separated from switching regulators
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4.2 Audio Processing Zone
|
||||
|
||||
|
||||
Contains:
|
||||
|
||||
- ADAU1467
|
||||
- Audio EEPROM
|
||||
- Clock circuitry
|
||||
- Audio domain support components
|
||||
|
||||
|
||||
The ADAU1467 is the physical center of the Audio Domain.
|
||||
|
||||
|
||||
Responsibilities:
|
||||
|
||||
- DSP processing
|
||||
- routing
|
||||
- mixing
|
||||
- synchronization
|
||||
|
||||
|
||||
Critical signals:
|
||||
|
||||
- MCLK
|
||||
- BCLK
|
||||
- LRCLK
|
||||
- I2S DATA
|
||||
|
||||
|
||||
must remain short.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4.3 Radio Zone
|
||||
|
||||
|
||||
Contains:
|
||||
|
||||
- Si4684
|
||||
- RF interface
|
||||
- antenna related components
|
||||
|
||||
|
||||
Placement requirements:
|
||||
|
||||
- close to RF input
|
||||
- separated from switching noise
|
||||
- local power filtering
|
||||
|
||||
|
||||
The Si4684 operates as a digital audio peripheral
|
||||
inside the Audio Domain.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4.4 Audio Interface Zone
|
||||
|
||||
|
||||
Contains:
|
||||
|
||||
- Bluetooth interfaces
|
||||
- Optical interfaces
|
||||
- CODEC/DAC stages
|
||||
|
||||
|
||||
Interfaces:
|
||||
I2S
|
||||
|
|
||||
ADAU1467
|
||||
|
||||
|
||||
Placement requirements:
|
||||
|
||||
- close to PCB edge
|
||||
- short I2S paths
|
||||
- controlled supply filtering
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4.5 Power Zone
|
||||
|
||||
|
||||
Contains:
|
||||
|
||||
- Battery input
|
||||
- USB power input
|
||||
- Charger
|
||||
- PMIC
|
||||
- Regulators
|
||||
- Filtering components
|
||||
|
||||
|
||||
Placement:
|
||||
|
||||
PCB edge area
|
||||
|
||||
|
||||
Power path:
|
||||
|
||||
Battery / USB
|
||||
|
||||
|
|
||||
|
||||
Protection
|
||||
|
||||
|
|
||||
|
||||
Charger
|
||||
|
||||
|
|
||||
|
||||
PMIC
|
||||
|
||||
|
|
||||
|
||||
Regulators
|
||||
|
||||
|
|
||||
|
||||
Digital / Analog domains
|
||||
|
||||
|
||||
|
||||
The Power Zone must remain physically separated from:
|
||||
|
||||
- clock circuitry
|
||||
- RF section
|
||||
- sensitive audio signals
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 5. Preliminary Floor Plan
|
||||
|
||||
|
||||
Conceptual arrangement:
|
||||
|
||||
|
||||
|
||||
+--------------------------------+
|
||||
| |
|
||||
| ESP32-S3 Si4684 |
|
||||
| CONTROL RADIO |
|
||||
| |
|
||||
| |
|
||||
| CLOCK |
|
||||
| BUFFER |
|
||||
| | |
|
||||
| | |
|
||||
| ADAU1467 |
|
||||
| AUDIO PROCESSOR |
|
||||
| |
|
||||
| |
|
||||
| BT RX SPDIF CODEC BT TX |
|
||||
| AUDIO INTERFACE |
|
||||
|
||||
|
||||
|
||||
BATTERY / PMIC / CHARGER
|
||||
POWER DOMAIN
|
||||
|
||||
+--------------------------------+
|
||||
|
||||
PCB TARGET:
|
||||
|
||||
90 mm x 70 mm
|
||||
|
||||
|
||||
|
||||
This arrangement keeps the ADAU1467 physically central.
|
||||
|
||||
The placement minimizes:
|
||||
|
||||
- I2S length
|
||||
- clock distribution length
|
||||
- audio routing complexity
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 6. ADAU1467 Placement
|
||||
|
||||
|
||||
The ADAU1467 is the physical center of the digital audio subsystem.
|
||||
|
||||
|
||||
This follows the architecture decision:
|
||||
|
||||
|
||||
|
||||
ADAU1467 = Audio Domain Master
|
||||
|
||||
|
||||
|
||||
Placement rules:
|
||||
|
||||
- central PCB position
|
||||
- shortest clock paths
|
||||
- shortest I2S paths
|
||||
- local decoupling network
|
||||
- separated from switching regulators
|
||||
|
||||
|
||||
The ADAU1467 area includes:
|
||||
|
||||
- DSP processor
|
||||
- clock interface
|
||||
- SPI configuration interface
|
||||
- audio EEPROM
|
||||
|
||||
|
||||
Critical signals:
|
||||
|
||||
|
||||
MCLK
|
||||
BCLK
|
||||
LRCLK
|
||||
I2S DATA
|
||||
|
||||
|
||||
|
||||
must be routed with priority.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 7. ESP32-S3 Placement
|
||||
|
||||
|
||||
The ESP32-S3 belongs to the Control Domain.
|
||||
|
||||
|
||||
Placement rules:
|
||||
|
||||
- PCB edge placement
|
||||
- antenna keep-out area
|
||||
- USB accessibility
|
||||
- separation from analog audio
|
||||
|
||||
|
||||
The ESP32-S3 interfaces:
|
||||
|
||||
Control:
|
||||
|
||||
|
||||
SPI
|
||||
|
||||
|
||||
|
||||
Audio:
|
||||
|
||||
|
||||
I2S Source
|
||||
|
||||
|
||||
|
||||
The ESP32-S3 is not the audio clock master.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 8. Clock Distribution Placement
|
||||
|
||||
|
||||
The Clock Distribution Layer provides:
|
||||
|
||||
- MCLK
|
||||
- BCLK
|
||||
- LRCLK
|
||||
|
||||
|
||||
Architecture:
|
||||
|
||||
|
||||
ADAU1467
|
||||
|
||||
Audio Clock Master
|
||||
|
||||
|
|
||||
|
||||
Clock Buffer
|
||||
|
||||
|
|
||||
|
||||
+-----------+-----------+
|
||||
|
||||
| | |
|
||||
|
||||
CODEC Si4684 BT
|
||||
|
||||
|
||||
|
||||
Clock traces must have priority routing.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 9. Routing Priorities
|
||||
|
||||
|
||||
Routing priority:
|
||||
|
||||
|
||||
1. Clock signals
|
||||
|
||||
|
||||
MCLK
|
||||
BCLK
|
||||
LRCLK
|
||||
|
||||
|
||||
|
||||
2. I2S audio buses
|
||||
|
||||
|
||||
3. SPI control
|
||||
|
||||
|
||||
4. Power distribution
|
||||
|
||||
|
||||
5. Low-speed signals
|
||||
|
||||
|
||||
Clock and audio signals must avoid:
|
||||
|
||||
- switching regulator nodes
|
||||
- RF traces
|
||||
- high current battery paths
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 10. Summary
|
||||
|
||||
|
||||
The HubAudio PCB follows the architectural separation:
|
||||
|
||||
|
||||
|
||||
CONTROL DOMAIN
|
||||
|
||||
ESP32-S3
|
||||
|
||||
SPI
|
||||
|
||||
AUDIO DOMAIN
|
||||
|
||||
ADAU1467
|
||||
|
||||
I2S
|
||||
|
||||
CLOCK DOMAIN
|
||||
|
||||
Clock Distribution
|
||||
|
||||
POWER DOMAIN
|
||||
|
||||
Battery / PMIC / Regulators
|
||||
|
||||
|
||||
|
||||
The floor plan defines a compact single-board implementation
|
||||
optimized for:
|
||||
|
||||
- portability
|
||||
- battery operation
|
||||
- audio integrity
|
||||
- future expansion
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,9 @@
|
||||
# KiCad lock / temporary files
|
||||
*.lck
|
||||
*.kicad_prl
|
||||
|
||||
# KiCad history
|
||||
.history/
|
||||
|
||||
# KiCad automatic restore/backup directories
|
||||
_restore_backup_*/
|
||||
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
@@ -0,0 +1,962 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_barcodes": false,
|
||||
"apply_defaults_to_fp_dimensions": false,
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": true,
|
||||
"text_position": 0,
|
||||
"units_format": 0
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 2.2,
|
||||
"height": 2.2,
|
||||
"width": 2.2
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"border_display_style": 2,
|
||||
"border_hatch_pitch": 0.5,
|
||||
"corner_radius": 0.0,
|
||||
"corner_smoothing": 0,
|
||||
"fill_mode": 0,
|
||||
"hatch_gap": 1.5,
|
||||
"hatch_orientation": 0.0,
|
||||
"hatch_smoothing_level": 0,
|
||||
"hatch_smoothing_value": 0.1,
|
||||
"hatch_thickness": 1.0,
|
||||
"min_clearance": 0.0,
|
||||
"min_island_area": 10.0,
|
||||
"min_thickness": 0.25,
|
||||
"pad_connection": 1,
|
||||
"remove_islands": 0,
|
||||
"thermal_relief_gap": 0.5,
|
||||
"thermal_relief_spoke_width": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"creepage": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_filters_mismatch": "ignore",
|
||||
"footprint_symbol_field_mismatch": "warning",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_to_hole": "warning",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"mirrored_text_on_front_layer": "warning",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"missing_tuning_profile": "warning",
|
||||
"net_conflict": "warning",
|
||||
"nonmirrored_text_on_back_layer": "warning",
|
||||
"npth_inside_courtyard": "error",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "error",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_on_edge_cuts": "error",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_not_centered_on_via": "ignore",
|
||||
"track_on_post_machined_layer": "error",
|
||||
"track_segment_length": "error",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"tuning_profile_track_geometries": "ignore",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_groove_width": 0.0,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.2,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpthpad": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_onsmdpad": true,
|
||||
"td_ontrackend": false,
|
||||
"td_onvia": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"bom_rev": "",
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": "",
|
||||
"sch_revision": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"component_class_settings": {
|
||||
"assignments": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"sheet_component_classes": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [
|
||||
[
|
||||
"pin_not_driven|1028700|571500|5aed3465-8802-4bb1-af20-9beded65052b|00000000-0000-0000-0000-000000000000|/841d8022-3a94-443e-97aa-a99a12889684/745494b9-3131-4c41-9bde-4edc5dc71949|/841d8022-3a94-443e-97aa-a99a12889684/745494b9-3131-4c41-9bde-4edc5dc71949|",
|
||||
""
|
||||
],
|
||||
[
|
||||
"pin_to_pin|1054100|1016000|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|1054100|990600|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|1993900|622300|9abfd2d8-7ee0-413c-a1c8-43a9e9bc6128|610e2897-31d2-4893-bcde-6d8bb47ccbf4|/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/745494b9-3131-4c41-9bde-4edc5dc71949",
|
||||
""
|
||||
],
|
||||
[
|
||||
"pin_to_pin|533400|254000|f67bcafa-68b0-43ba-9d50-0c7061228323|7ae32c33-d2a5-47e8-9d37-526d78b295da|/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/19d2c6b9-23fc-454e-a8be-1c2c66c2d1f5",
|
||||
""
|
||||
],
|
||||
[
|
||||
"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
|
||||
},
|
||||
"pin_map": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
],
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"field_name_whitespace": "warning",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"ground_pin_not_ground": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"isolated_pin_label": "warning",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"stacked_pin_name": "warning",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"undefined_netclass": "error",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "HubAudio.kicad_pro",
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"tuning_profile": "",
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 5
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"specctra_dsn": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"annotation": {
|
||||
"method": 0,
|
||||
"sort_order": 0
|
||||
},
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from BOM",
|
||||
"name": "${EXCLUDE_FROM_BOM}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from Board",
|
||||
"name": "${EXCLUDE_FROM_BOARD}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Arrow Price/Stock",
|
||||
"name": "Arrow Price/Stock",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Availability",
|
||||
"name": "Availability",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Check_prices",
|
||||
"name": "Check_prices",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Description_1",
|
||||
"name": "Description_1",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "DIGIKEY-PURCHASE-URL",
|
||||
"name": "DIGIKEY-PURCHASE-URL",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Height",
|
||||
"name": "Height",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "LCSC Part #",
|
||||
"name": "LCSC Part #",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MANUFACTURER",
|
||||
"name": "MANUFACTURER",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Manufacturer_Name",
|
||||
"name": "Manufacturer_Name",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Manufacturer_Part_Number",
|
||||
"name": "Manufacturer_Part_Number",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MAXIMUM_PACKAGE_HEIGHT",
|
||||
"name": "MAXIMUM_PACKAGE_HEIGHT",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MF",
|
||||
"name": "MF",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MFANUFACTURER",
|
||||
"name": "MFANUFACTURER",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Mouser Part Number",
|
||||
"name": "Mouser Part Number",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Mouser Price/Stock",
|
||||
"name": "Mouser Price/Stock",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MOUSER-PURCHASE-URL",
|
||||
"name": "MOUSER-PURCHASE-URL",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MP",
|
||||
"name": "MP",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Package",
|
||||
"name": "Package",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "PARTREV",
|
||||
"name": "PARTREV",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Price",
|
||||
"name": "Price",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "SnapEDA_Link",
|
||||
"name": "SnapEDA_Link",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "STANDARD",
|
||||
"name": "STANDARD",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "TEXAS_INSTRUMENTS-PURCHASE-URL",
|
||||
"name": "TEXAS_INSTRUMENTS-PURCHASE-URL",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Arrow Part Number",
|
||||
"name": "Arrow Part Number",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Description",
|
||||
"name": "Description",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"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
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Sim.Pins",
|
||||
"name": "Sim.Pins",
|
||||
"show": false
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": true,
|
||||
"name": "",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"bus_aliases": {},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"hop_over_size_choice": 0,
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.375,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.15
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
"meta": {
|
||||
"version": 1
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"reuse_designators": true,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0,
|
||||
"top_level_sheets": [
|
||||
{
|
||||
"filename": "HubAudio.kicad_sch",
|
||||
"name": "HubAudio",
|
||||
"uuid": "841d8022-3a94-443e-97aa-a99a12889684"
|
||||
}
|
||||
],
|
||||
"used_designators": "#FLG1-25,J_BAT1,IC1,Z1,REF1,J_POW_BTN1,Q10-13,BOOT1,RN1-10,Y1-4,D1-18,#PWR1-340,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": [
|
||||
[
|
||||
"841d8022-3a94-443e-97aa-a99a12889684",
|
||||
"HubAudio"
|
||||
],
|
||||
[
|
||||
"be5acd16-8a33-4b43-9869-78b6acaaceab",
|
||||
"POWER"
|
||||
],
|
||||
[
|
||||
"053bca48-5035-4024-8ecb-077401773123",
|
||||
"PowerDistribution"
|
||||
],
|
||||
[
|
||||
"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"
|
||||
],
|
||||
[
|
||||
"745494b9-3131-4c41-9bde-4edc5dc71949",
|
||||
"BT-Unit"
|
||||
],
|
||||
[
|
||||
"81d9e142-f3fa-46a0-96de-196a5f9efcbd",
|
||||
"Codec"
|
||||
],
|
||||
[
|
||||
"19d2c6b9-23fc-454e-a8be-1c2c66c2d1f5",
|
||||
"USB"
|
||||
],
|
||||
[
|
||||
"39e3244b-d985-4139-b8d4-9cd3139f9b10",
|
||||
"Ethernet"
|
||||
],
|
||||
[
|
||||
"3648ee4f-401f-4d8b-b4da-4aabdf3a7fdf",
|
||||
"Antenna"
|
||||
],
|
||||
[
|
||||
"e2542609-1b92-4554-8024-978841ad00fe",
|
||||
"DeviceManager"
|
||||
]
|
||||
],
|
||||
"text_variables": {},
|
||||
"tuning_profiles": {
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"tuning_profiles_impedance_geometric": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,587 @@
|
||||
(kicad_sch
|
||||
(version 20260306)
|
||||
(generator "eeschema")
|
||||
(generator_version "10.0")
|
||||
(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)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "053bca48-5035-4024-8ecb-077401773123")
|
||||
(property "Sheetname" "PowerDistribution"
|
||||
(at 85.09 24.6884 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "powerdistribution.kicad_sch"
|
||||
(at 85.09 50.1146 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "3")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 135.89 66.04)
|
||||
(size 41.91 26.67)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "19d2c6b9-23fc-454e-a8be-1c2c66c2d1f5")
|
||||
(property "Sheetname" "USB"
|
||||
(at 135.89 65.3284 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "USB.kicad_sch"
|
||||
(at 135.89 93.2946 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "10")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 236.22 67.31)
|
||||
(size 38.1 22.86)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "3648ee4f-401f-4d8b-b4da-4aabdf3a7fdf")
|
||||
(property "Sheetname" "Antenna"
|
||||
(at 236.22 66.5984 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "antenna.kicad_sch"
|
||||
(at 236.22 90.7546 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "12")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 187.96 66.04)
|
||||
(size 36.83 26.67)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "39e3244b-d985-4139-b8d4-9cd3139f9b10")
|
||||
(property "Sheetname" "Ethernet"
|
||||
(at 187.96 65.3284 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "ethernet.kicad_sch"
|
||||
(at 187.96 93.2946 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "11")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 135.89 25.4)
|
||||
(size 41.91 24.13)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "73d0f4ca-0905-4c0c-8fc0-a6a4eb5485f1")
|
||||
(property "Sheetname" "AudioProcessor"
|
||||
(at 135.89 24.6884 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "audio-processor.kicad_sch"
|
||||
(at 135.89 50.1146 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "6")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 26.67 102.87)
|
||||
(size 50.8 24.13)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "742c418a-6d63-4161-86e8-dcba5886fcf4")
|
||||
(property "Sheetname" "PowerDistribution_2"
|
||||
(at 26.67 102.1584 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "audiodomaincontroller.kicad_sch"
|
||||
(at 26.67 127.5846 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(property "Field2" ""
|
||||
(at 26.67 102.87 0)
|
||||
(hide yes)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "4")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 26.67 66.04)
|
||||
(size 49.53 25.4)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "745494b9-3131-4c41-9bde-4edc5dc71949")
|
||||
(property "Sheetname" "BT-Unit"
|
||||
(at 26.67 65.3284 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "BT-Unit.kicad_sch"
|
||||
(at 26.67 92.0246 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "8")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 85.09 66.04)
|
||||
(size 43.18 25.4)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "81d9e142-f3fa-46a0-96de-196a5f9efcbd")
|
||||
(property "Sheetname" "Codec"
|
||||
(at 85.09 65.3284 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "Codec.kicad_sch"
|
||||
(at 85.09 92.0246 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "9")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 26.67 25.4)
|
||||
(size 50.8 25.4)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "be5acd16-8a33-4b43-9869-78b6acaaceab")
|
||||
(property "Sheetname" "POWER"
|
||||
(at 26.67 24.6884 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "POWER.kicad_sch"
|
||||
(at 26.67 51.3846 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "2")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 236.22 25.4)
|
||||
(size 38.1 24.13)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "d420ee58-604a-4bed-a2ea-d2f985c9aaa0")
|
||||
(property "Sheetname" "Si4684"
|
||||
(at 236.22 24.6884 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "Si4684.kicad_sch"
|
||||
(at 236.22 50.1146 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "7")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 85.09 102.87)
|
||||
(size 43.18 24.13)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "e2542609-1b92-4554-8024-978841ad00fe")
|
||||
(property "Sheetname" "DeviceManager"
|
||||
(at 85.09 102.1584 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "device-manager.kicad_sch"
|
||||
(at 85.09 127.5846 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "13")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet
|
||||
(at 186.69 25.4)
|
||||
(size 39.37 24.13)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(stroke
|
||||
(width 0.1524)
|
||||
(type solid)
|
||||
)
|
||||
(fill
|
||||
(color 0 0 0 0)
|
||||
)
|
||||
(uuid "f8fd2832-13ed-4270-9e98-2ba7eddd8eec")
|
||||
(property "Sheetname" "Main Controller"
|
||||
(at 186.69 24.6884 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left bottom)
|
||||
)
|
||||
)
|
||||
(property "Sheetfile" "main-controller.kicad_sch"
|
||||
(at 186.69 50.1146 0)
|
||||
(show_name no)
|
||||
(do_not_autoplace no)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(instances
|
||||
(project "HubAudio"
|
||||
(path "/841d8022-3a94-443e-97aa-a99a12889684"
|
||||
(page "5")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(sheet_instances
|
||||
(path "/"
|
||||
(page "1")
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
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
Executable
+177
@@ -0,0 +1,177 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import csv
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def norm(value):
|
||||
return (value or "").strip().strip('"').strip()
|
||||
|
||||
|
||||
def read_kicad_bom(path):
|
||||
with open(path, "r", encoding="utf-8-sig", newline="") as f:
|
||||
return list(csv.DictReader(f))
|
||||
|
||||
|
||||
def read_lcsc_export(path):
|
||||
with open(path, "r", encoding="utf-8-sig", newline="") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
header = None
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
if line.startswith("LCSC#;"):
|
||||
header = i
|
||||
break
|
||||
|
||||
if header is None:
|
||||
raise RuntimeError("Non trovo la sezione 'LCSC Matching Results'.")
|
||||
|
||||
return list(
|
||||
csv.DictReader(
|
||||
lines[header:],
|
||||
delimiter=";"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def build_lcsc_map(rows):
|
||||
result = {}
|
||||
|
||||
for row in rows:
|
||||
mpn = norm(row.get("Mrf#", ""))
|
||||
lcsc = norm(row.get("LCSC#", ""))
|
||||
status = norm(row.get("Matched status", ""))
|
||||
url = norm(row.get("Product Link", ""))
|
||||
|
||||
if not mpn:
|
||||
continue
|
||||
|
||||
# IMPORTANTE:
|
||||
# accettiamo automaticamente solo Exact Matches
|
||||
if status == "Exact Matches" and lcsc:
|
||||
result[mpn] = {
|
||||
"lcsc": lcsc,
|
||||
"status": status,
|
||||
"url": url,
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
if len(sys.argv) != 3:
|
||||
print()
|
||||
print("Uso:")
|
||||
print(
|
||||
" python3 add_lcsc_to_bom.py "
|
||||
"HubAudio.csv export_project_20260822_065729.csv"
|
||||
)
|
||||
print()
|
||||
sys.exit(1)
|
||||
|
||||
bom_file = Path(sys.argv[1])
|
||||
lcsc_file = Path(sys.argv[2])
|
||||
|
||||
if not bom_file.exists():
|
||||
print(f"ERRORE: BOM non trovata: {bom_file}")
|
||||
sys.exit(1)
|
||||
|
||||
if not lcsc_file.exists():
|
||||
print(f"ERRORE: export LCSC non trovato: {lcsc_file}")
|
||||
sys.exit(1)
|
||||
|
||||
print("Leggo BOM KiCad...")
|
||||
bom = read_kicad_bom(bom_file)
|
||||
|
||||
print("Leggo export LCSC...")
|
||||
lcsc_rows = read_lcsc_export(lcsc_file)
|
||||
|
||||
lcsc_map = build_lcsc_map(lcsc_rows)
|
||||
|
||||
# Manteniamo tutte le colonne originali di KiCad
|
||||
columns = list(bom[0].keys())
|
||||
|
||||
for column in [
|
||||
"LCSC#",
|
||||
"LCSC_Status",
|
||||
"LCSC_URL",
|
||||
]:
|
||||
if column not in columns:
|
||||
columns.append(column)
|
||||
|
||||
exact = 0
|
||||
missing = 0
|
||||
|
||||
for row in bom:
|
||||
|
||||
# Prima scelta: PNM
|
||||
mpn = norm(row.get("PNM", ""))
|
||||
|
||||
# Fallback: Value
|
||||
if not mpn:
|
||||
mpn = norm(row.get("Value", ""))
|
||||
|
||||
match = lcsc_map.get(mpn)
|
||||
|
||||
if match:
|
||||
|
||||
row["LCSC#"] = match["lcsc"]
|
||||
row["LCSC_Status"] = "Exact Matches"
|
||||
row["LCSC_URL"] = match["url"]
|
||||
|
||||
exact += 1
|
||||
|
||||
else:
|
||||
|
||||
row["LCSC#"] = ""
|
||||
row["LCSC_Status"] = ""
|
||||
row["LCSC_URL"] = ""
|
||||
|
||||
missing += 1
|
||||
|
||||
output = bom_file.with_name(
|
||||
bom_file.stem + "_Pinscope_BOM.csv"
|
||||
)
|
||||
|
||||
with open(
|
||||
output,
|
||||
"w",
|
||||
encoding="utf-8-sig",
|
||||
newline=""
|
||||
) as f:
|
||||
|
||||
writer = csv.DictWriter(
|
||||
f,
|
||||
fieldnames=columns,
|
||||
quoting=csv.QUOTE_ALL
|
||||
)
|
||||
|
||||
writer.writeheader()
|
||||
writer.writerows(bom)
|
||||
|
||||
print()
|
||||
print("=" * 50)
|
||||
print(" LCSC → PINSCOPE BOM")
|
||||
print("=" * 50)
|
||||
print()
|
||||
print(f"BOM originale : {bom_file.name}")
|
||||
print(f"Export LCSC : {lcsc_file.name}")
|
||||
print(f"Output : {output.name}")
|
||||
print()
|
||||
print(f"Righe BOM : {len(bom)}")
|
||||
print(f"Exact Match : {exact}")
|
||||
print(f"Senza LCSC : {missing}")
|
||||
print()
|
||||
print("Solo 'Exact Matches' sono stati accettati.")
|
||||
print("Partial Matches NON sono stati inseriti.")
|
||||
print("No Matches NON sono stati inseriti.")
|
||||
print()
|
||||
print(f"FILE CREATO: {output}")
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
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
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
@@ -0,0 +1,4 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "HubAudio") (type "KiCad") (uri "/Users/michelebigi/Development/HubAudio/hardware/kicad/HubAudio/") (options "") (descr ""))
|
||||
)
|
||||
Binary file not shown.
Binary file not shown.
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