Update F3 scripts and fix minor issues

This commit is contained in:
Julian Frohmüller
2026-07-18 17:17:52 +02:00
parent 8b34e25bf8
commit 00aae2dbfc
11 changed files with 692 additions and 1 deletions
+69
View File
@@ -0,0 +1,69 @@
# Seagate F3 CAP and Drive Info
# Retrieves comprehensive identification from a Seagate F3 drive:
# Ctrl+A - Package version, serial, model, servo FW
# Ctrl+L - Head count, preamp type, family ID
# T>J - CAP info (internal model, family ID, serials)
# T>V1 - User slip defect list (confirms translator loaded)
# Default baud: 38400, 8N1, no flow control.
#
# Useful when the drive label is missing or when you need
# detailed firmware/family information before repair.
echo "============================================"
echo " Seagate F3 CAP and Drive Info"
echo "============================================"
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo ""
echo "--- Drive Info (Ctrl+A) ---"
serialsend \x01
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "--- Detailed Drive Info (Ctrl+L) ---"
serialsend \x0c
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "--- CAP Info (J command) ---"
serialsend \x4a\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "--- User Slip List / Translator check (V1) ---"
serialsend \x56\x31\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "============================================"
echo " Info collection complete."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
+78
View File
@@ -0,0 +1,78 @@
# Seagate F3 Clear G-List
# Clears the Grown Defect List (G-List) on a Seagate F3 drive.
# Useful as a standalone step before translator regeneration
# or when G-List corruption is suspected.
# Default baud: 38400, 8N1, no flow control.
#
# WARNING: Sectors reallocated into the G-List will be lost.
# The LBAs they occupied will map back to the original (defective)
# physical sectors.
echo "============================================"
echo " Seagate F3 Clear G-List"
echo "============================================"
echo ""
echo "WARNING: Sectors in G-list will be lost from user data."
echo ""
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo ""
echo "--- G-List before clear (V4) ---"
serialsend \x56\x34\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "--- Resident G-List before clear (V80) ---"
serialsend \x56\x38\x30\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "=== Clearing G-List (i4,1,22) ==="
serialsend \x69\x34\x2c\x31\x2c\x32\x32\x0d
usleep 500000
serialread 1024
printbuffer 0 1024
echo ""
echo "--- G-List after clear (V4) ---"
serialsend \x56\x34\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "--- Resident G-List after clear (V80) ---"
serialsend \x56\x38\x30\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "============================================"
echo " G-List clear complete."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
+77
View File
@@ -0,0 +1,77 @@
# Seagate F3 Clear SMART
# Clears the SMART table on a Seagate F3 drive.
# Useful as a standalone step when SMART values show false errors
# or when clearing SMART resolves LED:000000BD / FAddr:00009887
# media cache related errors.
# Default baud: 38400, 8N1, no flow control.
#
# Steps: show current SMART, clear SMART, verify
#
# WARNING: This resets SMART attribute values. Power-on hours,
# error counts, and reallocated sector counts will be cleared.
# Use for diagnostics, not to conceal genuine drive health issues.
echo "============================================"
echo " Seagate F3 Clear SMART"
echo "============================================"
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo ""
echo "Changing to level 1..."
serialsend \x2f\x31\x0d
usleep 200000
echo "--- Current SMART Values (N5) ---"
serialsend \x4e\x35\x0d
usleep 500000
buffersize 2048
serialread 2048
printbuffer 0 2048
echo ""
echo "=== Clearing SMART (N1) ==="
serialsend \x4e\x31\x0d
usleep 500000
echo "--- Clear Response ---"
serialread 1024
printbuffer 0 1024
echo ""
echo "--- SMART After Clear (N5) ---"
serialsend \x4e\x35\x0d
usleep 500000
buffersize 2048
serialread 2048
printbuffer 0 2048
echo ""
echo "Returning to level T..."
serialsend \x2f\x54\x0d
usleep 200000
echo ""
echo "============================================"
echo " SMART clear complete."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
+67
View File
@@ -0,0 +1,67 @@
# Seagate F3 Head Resistance Test
# Tests read/write head resistance on a Seagate F3 drive.
# Run at level 7 with the X command.
# Default baud: 38400, 8N1, no flow control.
#
# Head resistance values are displayed as hex for each head.
# Normal range varies by family, but values significantly
# higher or lower than others may indicate a damaged head.
echo "============================================"
echo " Seagate F3 Head Resistance Test"
echo "============================================"
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo "Changing to level 7..."
serialsend \x2f\x37\x0d
usleep 300000
echo "--- Level Change ---"
serialread 1024
printbuffer 0 1024
echo ""
echo "Running head resistance test (X command)..."
serialsend \x58\x0d
usleep 500000
echo "--- Head Resistance Results ---"
serialread 2048
printbuffer 0 2048
echo ""
echo "Returning to level T..."
serialsend \x2f\x54\x0d
usleep 200000
echo "--- Level T ---"
serialread 1024
printbuffer 0 1024
echo ""
echo "============================================"
echo " Head resistance test complete."
echo " Each head shows a hex resistance value."
echo " Compare across heads -- outliers may be bad."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
@@ -0,0 +1,152 @@
# Seagate F3 Translator Regeneration
# Safe workflow for BSY/LED or translator corruption on Seagate F3 drives.
#
# PREREQUISITES:
# 1. Backup SA modules before running (especially 0x02B, 0x02A, 0x02C)
# using Y-Modem transfer (r command) via your terminal program.
# OSC serial commands do NOT support Y-Modem, so this must be done
# externally or skipped if you accept the risk.
# 2. Default baud: 38400, 8N1, no flow control.
# 3. Power-cycle the drive after this script completes.
#
# This script will:
# - Wake the terminal and display drive info
# - Snapshot defect lists (V1, V4, V10, V40, V80) for documentation
# - Clear G-list (i4,1,22)
# - Clear SMART (1>N1)
# - Regenerate translator (m0,6,2)
# - Verify translator loaded (V1)
# - Remind you to power-cycle
echo "============================================"
echo " Seagate F3 Translator Regeneration"
echo "============================================"
echo ""
echo "IMPORTANT: Back up SA modules before proceeding!"
echo " r0x2B,3,1 (translator module)"
echo " r0x2A,3,1 (related module)"
echo " r0x2C,3,1"
echo ""
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 2048
serialread 2048
printbuffer 0 2048
echo "Sending Ctrl+L for drive info..."
serialsend \x0c
usleep 300000
echo "--- Drive Info ---"
serialread 2048
printbuffer 0 2048
echo "--- Snapshot: User Slip List (V1) ---"
serialsend \x56\x31\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo "--- Snapshot: G-List before clear (V4) ---"
serialsend \x56\x34\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo "--- Snapshot: P-List (V10) ---"
serialsend \x56\x31\x30\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo "--- Snapshot: Non-resident G-List (V40) ---"
serialsend \x56\x34\x30\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo "--- Snapshot: Resident G-List (V80) ---"
serialsend \x56\x38\x30\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "=== Clearing G-List (i4,1,22) ==="
echo "WARNING: Sectors in G-list will be lost from user data."
echo " Comment out lines 93-95 to skip this step."
serialsend \x69\x34\x2c\x31\x2c\x32\x32\x0d
usleep 500000
serialread 1024
printbuffer 0 1024
echo ""
echo "=== Clearing SMART (1>N1) ==="
echo "Changing to level 1..."
serialsend \x2f\x31\x0d
usleep 200000
serialsend \x4e\x31\x0d
usleep 500000
serialread 1024
printbuffer 0 1024
echo "Returning to level T..."
serialsend \x2f\x54\x0d
usleep 200000
echo ""
echo "=== Regenerating Translator (m0,6,2) ==="
echo "This may take 30-120 seconds. Reading progress..."
serialsend \x6d\x30\x2c\x36\x2c\x32\x2c\x2c\x2c\x2c\x2c\x32\x32\x0d
usleep 5000000
echo "--- Initial status (5s) ---"
serialread 1024
printbuffer 0 1024
usleep 60000000
echo "--- Progress (65s) ---"
serialread 1024
printbuffer 0 1024
usleep 60000000
echo "--- Final status (125s) ---"
serialread 2048
printbuffer 0 2048
echo ""
echo "=== Verification: Translator check (V1) ==="
serialsend \x56\x31\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "=== Verification: G-List after regen (V4) ==="
serialsend \x56\x34\x0d
usleep 300000
serialread 2048
printbuffer 0 2048
echo ""
echo "============================================"
echo " Translator regeneration complete."
echo " POWER-CYCLE the drive before use."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
@@ -0,0 +1,53 @@
# Seagate F3 Restore F Parameters to Defaults
# Resets all F parameters (RWRecoveryFlags, BGMSFlags,
# PerformanceFlags, ReadRetries, etc.) to factory defaults.
# Default baud: 38400, 8N1, no flow control.
#
# Use after running tune_for_imaging to re-enable read retries,
# sparing, and background media scan without a power cycle.
#
# Command: T> F,,22
#
# WARNING: Also resets any custom F tuning that may have been
# set for data recovery purposes. Power-cycle after imaging
# is still recommended for complete reset.
echo "============================================"
echo " Seagate F3 Restore F Defaults"
echo "============================================"
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo ""
echo "=== Restoring F parameters to defaults (F,,22) ==="
serialsend \x46\x2c\x2c\x32\x32\x0d
usleep 300000
echo "--- Response ---"
serialread 1024
printbuffer 0 1024
echo ""
echo "============================================"
echo " F parameters restored to factory defaults."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
+59
View File
@@ -0,0 +1,59 @@
# Seagate F3 Spin Down
# Sends the spin down (sleep) command to a Seagate F3 drive.
# Changes to level 2 and issues the Z command.
# Default baud: 38400, 8N1, no flow control.
#
# Use before:
# - Transporting the drive
# - Swapping PCB
# - Safe hot-swap
# - Preparing for imaging (spin down + remove power)
echo "============================================"
echo " Seagate F3 Spin Down"
echo "============================================"
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo ""
echo "Changing to level 2..."
serialsend \x2f\x32\x0d
usleep 200000
echo "--- Level Change ---"
serialread 1024
printbuffer 0 1024
echo ""
echo "=== Spinning Down (Z) ==="
serialsend \x5a\x0d
usleep 500000
echo "--- Spin Down Response ---"
serialread 1024
printbuffer 0 1024
echo ""
echo "============================================"
echo " Drive should now be spun down (idle/standby)."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
+58
View File
@@ -0,0 +1,58 @@
# Seagate F3 Spin Up
# Sends the spin up command to a Seagate F3 drive.
# Changes to level 2 and issues the U command.
# Default baud: 38400, 8N1, no flow control.
#
# Use after spin down (Z) to restart the spindle motor.
# The drive should respond with "SpinUp" or similar
# confirmation before becoming ready for further commands.
echo "============================================"
echo " Seagate F3 Spin Up"
echo "============================================"
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo ""
echo "Changing to level 2..."
serialsend \x2f\x32\x0d
usleep 200000
echo "--- Level Change ---"
serialread 1024
printbuffer 0 1024
echo ""
echo "=== Spinning Up (U) ==="
serialsend \x55\x0d
usleep 2000000
echo "--- Spin Up Response ---"
serialread 2048
printbuffer 0 2048
echo ""
echo "============================================"
echo " Spin up command sent."
echo " Drive should be ready for operation."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
@@ -0,0 +1,78 @@
# Seagate F3 Tune for Imaging
# Disables retries, sparing, and background tasks so the drive
# won't hang or reallocate sectors during ddrescue/imaging.
# Run this BEFORE cloning a failing Seagate F3 drive.
# Default baud: 38400, 8N1, no flow control.
#
# Changes made (all reversible with F,,22 reset to defaults):
# RWRecoveryFlags = 00 (disable read/write sparing, enable ECC correction)
# BGMSFlags = 00 (disable background media scan)
# PerformanceFlags = 0060 (disable offline sparing, deferred realloc, idle activities)
# ReadRetries = 00 (disable read retries)
#
# Power-cycle the drive after imaging to restore defaults.
echo "============================================"
echo " Seagate F3 Tune for Imaging"
echo "============================================"
echo ""
echo "Disables retries/sparing/BGMS to prevent hangs."
echo "Power-cycle after imaging to restore defaults."
echo ""
if $gui_mode = 0
serialopen /dev/ttyUSB0 38400
else
serialopen
endif
usleep 200000
echo "Waking terminal (Ctrl+Z)..."
serialsend \x1a
usleep 500000
echo "--- Terminal Banner ---"
buffersize 1024
serialread 1024
printbuffer 0 1024
echo ""
echo "Setting RWRecoveryFlags = 00 (disable sparing, enable correction)..."
serialsend \x46\x22\x52\x57\x52\x65\x63\x6f\x76\x65\x72\x79\x46\x6c\x61\x67\x73\x22\x2c\x30\x30\x2c\x32\x32\x0d
usleep 300000
serialread 1024
printbuffer 0 1024
echo ""
echo "Setting BGMSFlags = 00 (disable background media scan)..."
serialsend \x46\x22\x42\x47\x4d\x53\x46\x6c\x61\x67\x73\x22\x2c\x30\x30\x2c\x32\x32\x0d
usleep 300000
serialread 1024
printbuffer 0 1024
echo ""
echo "Setting PerformanceFlags = 0060 (disable sparing/idle)..."
serialsend \x46\x22\x50\x65\x72\x66\x6f\x72\x6d\x61\x6e\x63\x65\x46\x6c\x61\x67\x73\x22\x2c\x30\x30\x36\x30\x2c\x32\x32\x0d
usleep 300000
serialread 1024
printbuffer 0 1024
echo ""
echo "Setting ReadRetries = 00 (disable read retries)..."
serialsend \x46\x22\x52\x65\x61\x64\x52\x65\x74\x72\x69\x65\x73\x22\x2c\x30\x30\x2c\x32\x32\x0d
usleep 300000
serialread 1024
printbuffer 0 1024
echo ""
echo "============================================"
echo " Tuning complete. Ready for imaging."
echo " POWER-CYCLE the drive after imaging"
echo " to restore default F parameters."
echo "============================================"
if $gui_mode = 0
serialclose
endif
echo "=== Done ==="
end
-1
View File
@@ -13,7 +13,6 @@ int asclepius_serial_port = -1;
bool asclepius_ext_connected = false;
int asclepius_ext_serial_port = -1;
char asclepius_ext_tty_device_ccc[256];
int asclepius_ext_baud_rate_ccc = 38400;
void (*asclepius_ext_output_ccc)(const char *text, int byte_count) = NULL;
+1
View File
@@ -7303,6 +7303,7 @@ void on_ext_terminal_script_clicked_ccc(GtkWidget *button)
_("_Cancel"), GTK_RESPONSE_CANCEL,
_("_Open"), GTK_RESPONSE_ACCEPT,
NULL);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(filechooser), OSC_SCRIPT_PATH);
if (gtk_dialog_run(GTK_DIALOG(filechooser)) == GTK_RESPONSE_ACCEPT)
{