per-point switching: hardware bring-up, profiles, protocol doc

Verified on the bench that the modified master bitstream excites in every stage
and the RF switch routes: 16 traces per sweep, 62 dB between the two switch
positions of one master port, 9.9k measurements/s. Adds the built master image,
two run profiles, a verification script and librevna_protocol.md, and drops the
stale prototype driver copy that the firmware tree still carried.
This commit is contained in:
Ayzen
2026-09-15 14:41:54 +03:00
parent 3f6cfc9108
commit 62c0266a6b
30 changed files with 1392 additions and 2863 deletions
+41 -201
View File
@@ -1,7 +1,7 @@
{
"radar": {
"model": "librevna_multi",
"serial": "",
"serial": "206830985532",
"remote_host": "127.0.0.1",
"remote_port": 50209,
"driver_mode": "mock",
@@ -9,13 +9,14 @@
"visa_library": "",
"multi_device": {
"slave_serials": [
"20A1307D5532",
"2072306C5532"
"206930965532",
"206930A15532"
],
"force_external_reference": false,
"force_external_reference": true,
"recovery_attempts": 3,
"output_switch_positions": 1,
"input_switch_positions": 3
"input_switch_positions": 1,
"stimulus_switch_positions": 2
},
"kamil_adc": {
"project_dir": "",
@@ -62,7 +63,8 @@
"max_value": 35.0,
"step": 0.1,
"time_step": 20,
"delay_time": 3
"delay_time": 3,
"temp_tolerance_c": 0.03
}
},
"sweep": {
@@ -70,6 +72,7 @@
"stop_hz": 6000000000.0,
"if_bandwidth_hz": 50000.0,
"stimulus_power_dbm": -10.0,
"dwell_us": 2,
"points": 201
}
},
@@ -79,7 +82,7 @@
"driver_mode": "mock",
"driver": "h7992",
"radar_port": 1,
"positions": 2,
"positions": 4,
"default_position": 0,
"gpio_chip": "/dev/gpiochip0",
"pin_a": 17,
@@ -91,7 +94,7 @@
"driver_mode": "mock",
"driver": "h7992",
"radar_port": 2,
"positions": 12,
"positions": 4,
"default_position": 0,
"gpio_chip": "/dev/gpiochip0",
"pin_a": 22,
@@ -115,7 +118,7 @@
"settling_ms": 0,
"idle_sleep_ms": 2,
"continuous": true,
"processing_live_config_path": "/home/guriy/Documents/radar_system/python_app/runtime/processing_live.json",
"processing_live_config_path": "python_app/runtime/processing_live.json",
"locator_server": {
"device_id": 3,
"protocol_version": 1,
@@ -142,38 +145,6 @@
"input": 3,
"output": 0
},
{
"input": 4,
"output": 0
},
{
"input": 5,
"output": 0
},
{
"input": 6,
"output": 0
},
{
"input": 7,
"output": 0
},
{
"input": 8,
"output": 0
},
{
"input": 9,
"output": 0
},
{
"input": 10,
"output": 0
},
{
"input": 11,
"output": 0
},
{
"input": 0,
"output": 1
@@ -191,36 +162,36 @@
"output": 1
},
{
"input": 4,
"output": 1
"input": 0,
"output": 2
},
{
"input": 5,
"output": 1
"input": 1,
"output": 2
},
{
"input": 6,
"output": 1
"input": 2,
"output": 2
},
{
"input": 7,
"output": 1
"input": 3,
"output": 2
},
{
"input": 8,
"output": 1
"input": 0,
"output": 3
},
{
"input": 9,
"output": 1
"input": 1,
"output": 3
},
{
"input": 10,
"output": 1
"input": 2,
"output": 3
},
{
"input": 11,
"output": 1
"input": 3,
"output": 3
}
]
},
@@ -276,6 +247,18 @@
"x_m": -0.905,
"y_m": 0.0,
"z_m": 0.0
},
{
"output_pos": 2,
"x_m": 0.905,
"y_m": 0.0,
"z_m": 0.0
},
{
"output_pos": 3,
"x_m": -0.905,
"y_m": 0.0,
"z_m": 0.0
}
],
"rx_geometry": [
@@ -302,54 +285,6 @@
"x_m": 0.185,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 4,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 5,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 6,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 7,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 8,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 9,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 10,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
},
{
"input_pos": 11,
"x_m": 0.0,
"y_m": 0.0,
"z_m": 0.0
}
]
},
@@ -379,100 +314,5 @@
"capacity": 50,
"slot_size_bytes": 2097152
}
},
"gui": {
"version": 1,
"switches": {
"combo_mode": "text",
"combos_text": "0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,0:1,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1",
"single_input": "0",
"single_output": "0"
},
"processing": {
"selected_mode": "gpr",
"pass_through": {
"show_magnitude": true,
"show_phase": false,
"unwrap_phase": false,
"combo_filter": "",
"fixed_y_enabled": false,
"y_min_db": -100.0,
"y_max_db": 0.0
},
"bscan": {
"axis": "abs",
"cut_m": 0.0,
"max_depth_m": 3.0,
"gain": 1.0,
"start_freq_mhz": 100.0,
"stop_freq_mhz": 6000.0,
"subtract_mean_ascan": false
},
"gpr": {
"input_positions": "0,1,2,3",
"output_positions": "0,1",
"min_depth_m": 2.0,
"max_depth_m": 14.0,
"range_comp_power": 0.1,
"object_min_frac": 0.7,
"score_mode": "combined",
"motion_mode": "int_minus",
"look_angle_deg": 0.0,
"direction_sign": 1.0,
"speed_m_s": 0.0,
"ignore_socket_speed_enabled": false,
"max_detected_objects_to_draw": 5,
"draw_top_m_objects": 2,
"object_approach_min_frames": 3,
"start_freq_mhz": 3000.0,
"stop_freq_mhz": 6000.0,
"background_subtract_enabled": true,
"background_mean_count": 10,
"remove_sidelobe_objects_enabled": false,
"imaging_plane_y_m": 0.0,
"render_mode": "heatmap",
"visible_x_min_m": -2.0,
"visible_x_max_m": 2.0,
"visible_z_min_m": 0.0,
"visible_z_max_m": 14.0
},
"legacy_gpr": {
"mode": "point",
"input_positions": "0,1,2,3",
"output_positions": "0,1",
"min_depth_m": 2.0,
"max_depth_m": 14.0,
"comp_power": 0.2,
"start_freq_mhz": 3000.0,
"stop_freq_mhz": 6000.0,
"speed_m_s": 0.0,
"ignore_socket_speed_enabled": false,
"look_angle_deg": 0.0,
"apply_freq_phase_correction": true,
"reference_mode": "frame_center",
"snr_thresh": 4.5,
"snr_comp_max": 25.0,
"background_subtract_enabled": true,
"background_mean_count": 10,
"render_mode": "heatmap",
"min_visible_pair_count": 1,
"visible_x_min_m": -2.0,
"visible_x_max_m": 2.0,
"visible_z_min_m": 0.0,
"visible_z_max_m": 14.0
}
},
"data_actions": {
"save_count": 10,
"save_path": "python_app/data/snapshots",
"save_name": "snapshot_simulator",
"record_count": 100
},
"preprocess_dialog": {
"set_name": "smoke_cal",
"radar_config_dir": "",
"use_all_radar_configs": false,
"median_sweep_count": 5
}
}
}
}