Compare commits
14
Commits
461d383f9f
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afad9e813c | ||
|
|
51d6ae0c19 | ||
|
|
81729ff39e | ||
|
|
d62a31dbb6 | ||
|
|
0364ad516f | ||
|
|
82671e4017 | ||
|
|
e9a44cde63 | ||
|
|
8bb2b49238 | ||
|
|
f43b203270 | ||
|
|
272346629b | ||
|
|
d3c295670b | ||
|
|
29f1f73a01 | ||
|
|
7326734320 | ||
|
|
4606285ee9 |
@@ -0,0 +1 @@
|
||||
Cacao-backups/
|
||||
+3654
-2311
File diff suppressed because it is too large
Load Diff
+19425
-15012
File diff suppressed because it is too large
Load Diff
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.
@@ -1,11 +1,11 @@
|
||||
"Reference","Qty","Value","DNP","Exclude from BOM","Exclude from Board","Footprint","MPN"
|
||||
"C1,C4,C6,C8,C123","5","4.7uF","-- mixed values --","-- mixed values --","-- mixed values --","Capacitor_SMD:C_0805_2012Metric","GRM21BR61H475KE51L"
|
||||
"C1,C4,C6,C8,C123","5","4.7uF","","","","Capacitor_SMD:C_0805_2012Metric","GRM21BR61H475KE51L"
|
||||
"C2,C3","2","15pf","","","","Capacitor_SMD:C_0603_1608Metric","CC0603JRNPO9BN150"
|
||||
"C5,C7,C9,C10,C11,C12,C13,C14,C15,C16,C17,C91,C94,C96,C98,C100,C102,C105,C107,C109,C111,C114,C116,C118,C119,C122,C124,C125,C126,C127,C128,C129,C130,C139,C144,C148","36","0.1uF","","","","Capacitor_SMD:C_0603_1608Metric","KGM15BR71H104KT"
|
||||
"C18,C19,C20,C21,C42,C43,C44,C45,C66,C67,C68,C69","12","470pF/50V","","","","Capacitor_SMD:C_0603_1608Metric","CL10B471KB8NNNC"
|
||||
"C22,C24,C25,C27,C28,C30,C31,C33,C46,C48,C49,C51,C52,C54,C55,C57,C70,C72,C73,C75,C76,C78,C79,C81","24","33pF","","","","Capacitor_SMD:C_0603_1608Metric","C0603C330J1HACTU"
|
||||
"C23,C26,C29,C32,C47,C50,C53,C56,C71,C74,C77,C80,C121,C131","14","0.01uF","","","","Capacitor_SMD:C_0603_1608Metric","0603B103K101CT"
|
||||
"C34,C35,C36,C37,C38,C39,C40,C41,C58,C59,C60,C61,C62,C63,C64,C65,C82,C83,C84,C85,C86,C87,C88,C89,C90,C95,C97,C99,C101,C106,C108,C110,C115,C117,C142,C143,C145,C147","38","1uF","","","","Capacitor_SMD:C_0805_2012Metric","CL21B105KBFNFNE"
|
||||
"C18,C19,C28,C29,C42,C43,C44,C45,C66,C67,C68,C69","12","470pF/50V","","","","Capacitor_SMD:C_0603_1608Metric","CL10B471KB8NNNC"
|
||||
"C20,C22,C24,C25,C30,C32,C33,C37,C46,C48,C49,C51,C52,C54,C55,C57,C70,C72,C73,C75,C76,C78,C79,C81","24","33pF","","","","Capacitor_SMD:C_0603_1608Metric","C0603C330J1HACTU"
|
||||
"C21,C23,C31,C36,C47,C50,C53,C56,C71,C74,C77,C80,C121,C131","14","0.01uF","","","","Capacitor_SMD:C_0603_1608Metric","0603B103K101CT"
|
||||
"C26,C27,C34,C35,C38,C39,C40,C41,C58,C59,C60,C61,C62,C63,C64,C65,C82,C83,C84,C85,C86,C87,C88,C89,C90,C95,C97,C99,C101,C106,C108,C110,C115,C117,C142,C143,C145,C147","38","1uF","","","","Capacitor_SMD:C_0805_2012Metric","CL21B105KBFNFNE"
|
||||
"C92,C93,C103,C104,C112,C113,C120,C138,C146","9","10uF","","","","Capacitor_SMD:C_0805_2012Metric","CL21A106KOQNNNG"
|
||||
"C132,C140,C141","3","22uF","","","","Capacitor_SMD:C_0603_1608Metric","CL10A226MP8NUNE"
|
||||
"C133,C134","2","6.8nF","","","","Capacitor_SMD:C_0603_1608Metric","CL10B682JB8NNNC"
|
||||
@@ -18,11 +18,10 @@
|
||||
"IC1","1","SC1512-A4","","","","Samacsys:QFN40P1000X1000X90-81N-D","SC1512-A4"
|
||||
"IC2,IC3,IC4","3","TLV320ADC5140IRTWR","","","","Samacsys:QFN50P400X400X80-25N-D","TLV320ADC5140IRTWR"
|
||||
"IC5","1","AP63203WU-7","","","","Samacsys:AP63203WU7","AP63203WU-7"
|
||||
"IC6","1","APS6404L-3SQR-SN","","","","Snapeda:SOIC127P600X175-8N","APS6404L-3SQR-SN"
|
||||
"IC6","1","8MB RAM","","","","Package_SO:SOIC-8_3.9x4.9mm_P1.27mm","APS6404L-3SQR-SN"
|
||||
"IC7","1","LP5907MFX-3.3_NOPB","","","","Package_TO_SOT_SMD:SOT-23-5","LP5907MFX-3.3_NOPB"
|
||||
"J1","1","SWD connector","","","","Samacsys:SM03BSRSSTBLFSN","SM03B-SRSS-TB(LF)(SN)"
|
||||
"J2","1","Conn_01x18_Pin","","Excluded from BOM","","Connector_PinHeader_2.54mm:PinHeader_1x18_P2.54mm_Vertical",""
|
||||
"J3","1","Conn_01x10_Pin","","Excluded from BOM","","Connector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_Vertical",""
|
||||
"J4","1","USB-C","","","","Snapeda:TE_2340901-1","2340901-1"
|
||||
"J4","1","USB4216-03-A","","","","Samacsys:USB421603A","USB4216-03-A"
|
||||
"J5,J6,J7,J8,J9,J10,J11,J12,J13,J14,J15,J16","12","10118193-0001LF","","","","Snapeda:AMPHENOL_10118193-0001LF","10118193-0001LF"
|
||||
"J17","1","7499211122A","","","","Samacsys:7499410213","7499211122A"
|
||||
"J18","1","MSD-1-A","","","","Samacsys:MSD1A","MSD-1-A"
|
||||
@@ -44,10 +43,11 @@
|
||||
"R26,R27,R29","3","1.5K","","","","Resistor_SMD:R_0603_1608Metric","WR06X152 JTL"
|
||||
"R28","1","3.3K","","","","Resistor_SMD:R_0603_1608Metric","RC0603FR-073K3L"
|
||||
"R31,R32,R33,R34,R35","5","47K","","","","Resistor_SMD:R_0603_1608Metric","AC0603JR-0747KL"
|
||||
"R37","1","0ohm","","","","Resistor_SMD:R_0603_1608Metric","RC0603FR-070RL"
|
||||
"R38,R39,R40,R41","4","33R","","","","Resistor_SMD:R_0603_1608Metric","CR0603-FX-33R0ELF"
|
||||
"S1","1","RST switch","","","","Snapeda:SW_TL3315NF160Q","TL3315NF160Q"
|
||||
"S2","1","Bootsel switch","","","","Snapeda:SW_TL3315NF160Q","TL3315NF160Q"
|
||||
"U1","1","W5500","","","","Snapeda:QFP50P900X900X160-48N","W5500"
|
||||
"U2","1","TPS7A2033PDQNR","","","","Package_SON:Texas_X2SON-4_1x1mm_P0.65mm","TPS7A2033PDQNR"
|
||||
"Y1","1","12MHz","","","","Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm","MP12641"
|
||||
"Y2","1","ASTX-H12-22.5792MHZ-T","","","","Samacsys:ASTX-H12","ASTX-H12-22.5792MHZ-T"
|
||||
"Y3","1","XRCGB25M000F3M01R0","","","","Samacsys:XRCGB","XRCGB25M000F3M01R0"
|
||||
|
||||
|
+72512
-37095
File diff suppressed because it is too large
Load Diff
+8
-3
@@ -5,7 +5,7 @@
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"high_contrast_mode": 1,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
@@ -15,6 +15,7 @@
|
||||
"vias": 1.0,
|
||||
"zones": 0.15000000596046448
|
||||
},
|
||||
"prototype_zone_fills": false,
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
@@ -26,7 +27,7 @@
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": false
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
"vias",
|
||||
@@ -50,10 +51,11 @@
|
||||
"conflict_shadows",
|
||||
"shapes"
|
||||
],
|
||||
"visible_layers": "ffffffff_ffffffff_fffffff5_ffffffff",
|
||||
"visible_layers": "00000000_00000000_55557fdf_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"integration_disabled": false,
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
@@ -112,6 +114,7 @@
|
||||
"filter_text": "",
|
||||
"group_by_constraint": false,
|
||||
"group_by_netclass": false,
|
||||
"show_time_domain_details": false,
|
||||
"show_unconnected_nets": false,
|
||||
"show_zero_pad_nets": false,
|
||||
"sort_ascending": true,
|
||||
@@ -122,6 +125,7 @@
|
||||
"files": []
|
||||
},
|
||||
"schematic": {
|
||||
"hierarchy_collapsed": [],
|
||||
"selection_filter": {
|
||||
"graphics": true,
|
||||
"images": true,
|
||||
@@ -129,6 +133,7 @@
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pins": true,
|
||||
"ruleAreas": true,
|
||||
"symbols": true,
|
||||
"text": true,
|
||||
"wires": true
|
||||
|
||||
+81
-14
@@ -3,6 +3,8 @@
|
||||
"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,
|
||||
@@ -48,7 +50,23 @@
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
"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.2,
|
||||
"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": [
|
||||
@@ -77,6 +95,7 @@
|
||||
"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",
|
||||
@@ -94,15 +113,16 @@
|
||||
"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": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"silk_edge_clearance": "ignore",
|
||||
"silk_over_copper": "ignore",
|
||||
"silk_overlap": "ignore",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
@@ -112,10 +132,13 @@
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_dangling": "error",
|
||||
"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",
|
||||
@@ -188,8 +211,10 @@
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.15,
|
||||
0.2
|
||||
0.2,
|
||||
0.3,
|
||||
0.4,
|
||||
0.5
|
||||
],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
@@ -223,24 +248,39 @@
|
||||
"drill": 0.0
|
||||
},
|
||||
{
|
||||
"diameter": 0.45,
|
||||
"diameter": 0.6,
|
||||
"drill": 0.3
|
||||
},
|
||||
{
|
||||
"diameter": 1.0,
|
||||
"drill": 0.5
|
||||
}
|
||||
],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"bom_rev": "",
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
"mpn": "",
|
||||
"sch_revision": "V1.0"
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"component_class_settings": {
|
||||
"assignments": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"sheet_component_classes": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
@@ -430,11 +470,14 @@
|
||||
"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",
|
||||
"global_label_dangling": "warning",
|
||||
"ground_pin_not_ground": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"isolated_pin_label": "warning",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
@@ -457,6 +500,7 @@
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"stacked_pin_name": "warning",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"undefined_netclass": "error",
|
||||
@@ -489,13 +533,14 @@
|
||||
"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": 4
|
||||
"version": 5
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@@ -509,7 +554,7 @@
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"step": "Cacao.step",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
@@ -517,6 +562,10 @@
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"annotation": {
|
||||
"method": 0,
|
||||
"sort_order": 0
|
||||
},
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
@@ -792,6 +841,7 @@
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"bus_aliases": {},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
@@ -805,6 +855,7 @@
|
||||
"visible": false
|
||||
}
|
||||
],
|
||||
"hop_over_size_choice": 0,
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
@@ -828,6 +879,7 @@
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"reuse_designators": true,
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
@@ -836,12 +888,21 @@
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
"subpart_id_separator": 0,
|
||||
"top_level_sheets": [
|
||||
{
|
||||
"filename": "Cacao.kicad_sch",
|
||||
"name": "Cacao",
|
||||
"uuid": "fb1fbe84-f638-411c-9f0c-f98e7d82fde3"
|
||||
}
|
||||
],
|
||||
"used_designators": "",
|
||||
"variants": []
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"fb1fbe84-f638-411c-9f0c-f98e7d82fde3",
|
||||
"Root"
|
||||
"Cacao"
|
||||
],
|
||||
[
|
||||
"43b21752-e3ac-49d9-883f-489dab58ffcd",
|
||||
@@ -864,5 +925,11 @@
|
||||
"Memory"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
"text_variables": {},
|
||||
"tuning_profiles": {
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"tuning_profiles_impedance_geometric": []
|
||||
}
|
||||
}
|
||||
|
||||
+3934
-5640
File diff suppressed because it is too large
Load Diff
+288129
File diff suppressed because it is too large
Load Diff
+3483
-1844
File diff suppressed because it is too large
Load Diff
+1413
-700
File diff suppressed because it is too large
Load Diff
+1100
-347
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,187 @@
|
||||
# Cacao - Multi-Channel Signal Acquisition Board
|
||||
|
||||
Cacao is a compact 12-channel audio-frequency signal-acquisition board built around the RP2350. It explores how modern, accessible components can consolidate multi-channel acquisition, buffering, storage, and Ethernet communication onto a single 80 x 50 mm PCB.
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
The assembled board shown above had just come out of the reflow oven. Some visible solder bridges were cleaned up before the first bring-up.
|
||||
|
||||
## Overview
|
||||
|
||||
Cacao was developed independently as a proof of concept alongside an industrial R&D internship. The project acts as a technical calling card: a complete architecture, schematic, firmware stack, and dense PCB layout intended to demonstrate what can be achieved with a modern microcontroller and cost-effective audio-conversion hardware.
|
||||
|
||||
Twelve differential audio inputs are digitized by three TLV320ADC5140 ADCs synchronized to the same clock. The RP2350 acquires the resulting streams and can transmit them over a local network through a W5500 100BASE-TX Ethernet controller.
|
||||
|
||||
The current firmware has successfully demonstrated continuous simultaneous acquisition of all 12 channels at 44.1 kHz with 16-bit samples, streamed over Ethernet without requiring intermediate RAM buffering.
|
||||
|
||||
## Key Features
|
||||
|
||||
- RP2350 in the 80-pin package with internal flash
|
||||
- 12 differential audio-input channels
|
||||
- Three TLV320ADC5140 four-channel ADCs synchronized by a 2.5 ppm clock
|
||||
- Simultaneous 12-channel acquisition at 44.1 kHz / 16 bits per sample
|
||||
- W5500-based 100BASE-TX Ethernet output
|
||||
- Continuous network streaming of all 12 channels
|
||||
- 8 MB external RAM provisioned for acquisition buffering
|
||||
- MicroSD storage interface for standalone data capture
|
||||
- USB-C 5 V power input
|
||||
- 3.3 V buck supply for the digital electronics
|
||||
- Separate low-noise 3.3 V analog rail using an LP5907MFX-3.3/NOPB LDO
|
||||
- Four-layer, 80 x 50 mm PCB with more than 200 components
|
||||
- Components on both sides, with most passive components placed on the back
|
||||
|
||||
The Micro-USB connectors are used as compact keyed connectors for the differential analog channels and their 5 V amplifier supply. They are **not USB data ports**.
|
||||
|
||||
## Engineering Focus
|
||||
|
||||
The principal layout challenge was integrating 12 analog channels, three synchronized ADCs, local buffering, storage, Ethernet, and the required power architecture within an 80 x 50 mm footprint.
|
||||
|
||||
Particular attention was given to separating the low-noise analog supplies from the general digital rail, maintaining clean reference and return paths, and fitting a large number of passive components without increasing the board area.
|
||||
|
||||
The firmware also represents an important part of the project. The RP2350 has to receive multiple synchronized ADC data streams while simultaneously moving the acquired samples toward the Ethernet interface with minimal CPU and memory overhead.
|
||||
|
||||
Because of a V1 SPI pin-assignment issue, the W5500 currently runs through an RP2350 PIO implementation rather than the native SPI peripheral. Despite the reduced SPI bandwidth, the system can continuously acquire and transmit all 12 channels at 44.1 kHz / 16 bits over the local network.
|
||||
|
||||
This is not necessarily the absolute throughput limit of the architecture, but it is close to the useful range expected from the current PIO SPI implementation. A future revision will move the Ethernet interface to correctly assigned hardware SPI pins, providing additional bandwidth and reducing the amount of firmware required for the interface.
|
||||
|
||||
An alternative future configuration could also replace the W5500 and external RAM with a W6300 connected through QSPI, reducing the number of separate devices while retaining high-speed Ethernet communication.
|
||||
|
||||
## Assembly
|
||||
|
||||
The V1 PCBs were manufactured by Aisler. This was my first time using their service and the manufacturing quality was very good.
|
||||
|
||||
The PCBs arrived unassembled and I assembled three prototypes at school. The school has small manually controlled pick-and-place machines, which significantly speed up component placement compared with assembling the entire board using tweezers.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
The image above shows a bare Cacao PCB and a fully assembled board next to the existing acquisition hardware it was designed to compare against.
|
||||
|
||||
The other boards are blurred because they are property of the company where I worked. The comparison is nevertheless useful for showing the amount of functionality Cacao integrates onto a single board.
|
||||
|
||||
## Project Status
|
||||
|
||||
V1.0 has been manufactured, assembled, and brought up successfully.
|
||||
|
||||
The main architecture is operational:
|
||||
|
||||
- All power rails are working correctly
|
||||
- The RP2350 can be programmed through both USB and SWD
|
||||
- Ethernet communication through the W5500 is operational
|
||||
- The W5500 is currently driven using PIO SPI because of the V1 GPIO assignment
|
||||
- All three TLV320ADC5140 ADCs are operational and communicating correctly with the RP2350
|
||||
- All 12 analog channels are being sampled
|
||||
- All 12 channels have been acquired simultaneously at 44.1 kHz / 16 bits per sample
|
||||
- The complete 12-channel stream has been transmitted continuously over the local Ethernet network
|
||||
- The streaming test does not rely on the external RAM as an intermediate acquisition buffer
|
||||
- A corrected Micro-USB input has been tested with the intended external preamplifier and produces the expected signal level
|
||||
|
||||
The continuous Ethernet test indicates that the RP2350, ADC acquisition path, PIO SPI implementation, W5500, and network firmware can sustain the current target acquisition rate without accumulating an acquisition backlog.
|
||||
|
||||
### Not tested on V1
|
||||
|
||||
Two interfaces have not yet been functionally tested:
|
||||
|
||||
- External RAM
|
||||
- MicroSD storage
|
||||
|
||||
Part of the BOM could not be delivered before assembly, so the required components were not available for the first prototype batch.
|
||||
|
||||
The RAM interface also contains a V1 QSPI routing error, meaning the memory would require extensive rework even if the component were installed. This will therefore be corrected directly in the next PCB revision.
|
||||
|
||||
The SD card interface has a similar SPI pin-assignment issue to the W5500. Unlike the QSPI RAM issue, this can potentially be worked around using PIO SPI, as demonstrated successfully with the Ethernet interface. The SD card hardware itself was not available on the assembled V1 boards, however, so this path has not yet been validated.
|
||||
|
||||
### Still under evaluation
|
||||
|
||||
The remaining work on V1 is mostly characterization rather than basic bring-up:
|
||||
|
||||
- Determining the practical maximum Ethernet acquisition bandwidth using the current PIO SPI implementation
|
||||
- Quantifying analog-channel noise and signal integrity
|
||||
- Characterizing channel-to-channel consistency
|
||||
- Performing longer-duration reliability testing
|
||||
|
||||
Initial analog results are promising, but a more controlled measurement setup will be used before publishing quantitative results.
|
||||
|
||||
## Known V1 Issues
|
||||
|
||||
V1 successfully validated the main system architecture, but bring-up also identified several routing and connector issues that will be corrected in the next revision.
|
||||
|
||||
### RP2350 Peripheral Pin Assignment
|
||||
|
||||
The main routing issue in V1 comes from the RP2350 peripheral pin-selection constraints.
|
||||
|
||||
During the original schematic and PCB design I relied too heavily on the flexibility of the RP2350 GPIO mux. Although many peripherals can be mapped to several GPIOs, SPI signals still need to follow the valid peripheral pin functions defined for each GPIO.
|
||||
|
||||
This affected the W5500, SD card, and external QSPI RAM interfaces.
|
||||
|
||||
The W5500 connection should be changed as follows:
|
||||
|
||||
```text
|
||||
ETH_CS GPIO28 -> GPIO29
|
||||
ETH_SCLK GPIO29 -> GPIO30
|
||||
ETH_MISO GPIO30 -> GPIO28
|
||||
```
|
||||
|
||||
On V1 this is handled in firmware using a PIO-based SPI implementation. This has been sufficient to continuously stream all 12 channels at 44.1 kHz / 16 bits, although at a lower SPI clock than would be possible with the native hardware peripheral.
|
||||
|
||||
The SD card interface has the same general problem and will also be rerouted in the next revision.
|
||||
|
||||
### External RAM QSPI Routing
|
||||
|
||||
The external RAM has a more significant routing problem.
|
||||
|
||||
Unlike standard SPI peripherals, the RP2350 QSPI interface cannot simply be mapped to arbitrary GPIO pins. The external memory needs to use the dedicated QSPI signals.
|
||||
|
||||
The V1 connections therefore need to be changed as follows:
|
||||
|
||||
```text
|
||||
RAM_QSD3 GPIO16 -> QSPI_SD3
|
||||
RAM_QSD2 GPIO17 -> QSPI_SD2
|
||||
RAM_QSD1 GPIO18 -> QSPI_SD1
|
||||
RAM_QSD0 GPIO19 -> QSPI_SD0
|
||||
RAM_QSCLK GPIO20 -> QSPI_SCLK
|
||||
```
|
||||
|
||||
Because five of the six main signals would require modification, the RAM interface was not considered worth extensively reworking on the V1 prototype.
|
||||
|
||||
This will be corrected directly in the next PCB revision.
|
||||
|
||||
Interestingly, the current continuous Ethernet tests have also demonstrated that the external RAM is not required to sustain the present 12-channel 44.1 kHz / 16-bit streaming workload. It remains useful for additional buffering, standalone acquisition modes, and future higher-bandwidth configurations.
|
||||
|
||||
### Micro-USB Preamp Pinout
|
||||
|
||||
The analog inputs use Micro-USB connectors purely as compact keyed connectors. They do not follow the USB electrical standard and are connected to a custom external preamplifier.
|
||||
|
||||
During the original design I assigned the connector pins according to the conventional Micro-USB power arrangement, with 5 V on VBUS and ground on the normal GND pin.
|
||||
|
||||
The existing preamplifier hardware uses a different custom pinout:
|
||||
|
||||
```text
|
||||
uUSB Pin 1 VBUS -> GND
|
||||
uUSB Pin 4 NC -> GND
|
||||
uUSB Pin 5 GND -> 5V
|
||||
```
|
||||
|
||||
As a result, the V1 board does not correctly power the intended preamplifier when it is connected directly.
|
||||
|
||||
This issue was diagnosed during analog bring-up. Because the microphone and preamplifier combination could still produce a very small signal even without the expected supply arrangement, the failure initially appeared as an unexpectedly low analog amplitude rather than a completely inactive channel.
|
||||
|
||||
One connector was removed and rewired using bodge wires to reproduce the preamplifier's actual pinout. With this modification, the complete analog path operated correctly and produced the expected signal level.
|
||||
|
||||
The remaining channels can still be observed acquiring signals with the unmodified connector arrangement, which allowed the complete 12-channel digital acquisition and Ethernet pipeline to be validated. However, the connector pinout will be corrected in the next PCB revision before proper analog characterization of all channels.
|
||||
|
||||
## Next Revision
|
||||
|
||||
The next PCB revision will primarily focus on changes identified during V1 bring-up rather than a redesign of the architecture:
|
||||
|
||||
- Correct W5500 hardware SPI routing
|
||||
- Correct SD card SPI routing
|
||||
- Move the external RAM to the dedicated RP2350 QSPI pins
|
||||
- Correct the Micro-USB pinout for the existing preamplifier hardware
|
||||
- Complete analog performance characterization
|
||||
- Evaluate whether architectural changes such as the W6300 are worthwhile
|
||||
|
||||
The important result from V1 is that the core architecture has been validated: twelve synchronized analog channels can be acquired simultaneously by the RP2350 and continuously transmitted over Ethernet at 44.1 kHz / 16 bits per channel on a compact four-layer board.
|
||||
+108619
File diff suppressed because it is too large
Load Diff
+4717
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 347 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
+1
-1
@@ -1,4 +1,4 @@
|
||||
27224527517359889
|
||||
27224529244325889
|
||||
Audio_Module
|
||||
Reverb_BTDR-1H
|
||||
Digital Reverberation Unit, http://www.belton.co.kr/inc/downfile.php?seq=17&file=pdf (footprint from http://www.uk-electronic.de/PDF/BTDR-1.pdf)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user