I’ve found myself in a strong need of a SATA drive and the only ones I had on hand were two Seagate ST31000340AS 1000GBytes drives of the Barracuda 7200.11 clan that had silently died in my RAID array over the course of last year. I bought the replacements but it looked quite odd that the original ones died before reaching 18 months of age and I kept them safely in a box until I had time (and strong enough need) to try and figure out what’s wrong with them.
It turns out, I was not the only one having problems with these drives (far from it) and many people have successfully repaired them and posted enough detail on the Net for someone else to repeat the procedure. This post is not meant to be a detailed description of the procedure and the underlying issues with the drive’s firmware – there are many places where you can read about it and I’ll provide links below – this post describes just one way of doing it. I also wanted to illustrate that, although most instructions call for the use of a Serial-to-TTL adapter, there are other devices that can take its place. Also, most of instructions I’ve seen are based on Windows software and I thought Linux users like myself could use some more references
A disclaimer is in order here: if you bought your drive in retail and have no problem with sending it back to Seagate and waiting for them to fix the drive, they are happy to fix it for you provided by you are willing to jump through some (usual amount of) hoops. There is a thread at Seagate forums describing the procedure. Also, this fix only applies to drives stuck in BSY mode ( Seagate-talk for “busy”). It manifests itself in drive not being found in BIOS at all. I imagine there could be any number of issues with a HD – some people reported these drives a recognized in BIOS but with zero size – this fix will not work on those, only the ones bricked because of the BSY bug in the firmware.
The fix is based on communicating with the drive’s controller via the auxiliary serial port on the back. This is not a fully-featured RS-232 serial interface (no need for it in an internal device like the hard drive) and it operates on TTL signal level. However, it uses the same protocol that RS-232 does and therefore you can “talk” to it using the serial port terminal applications such as GTKTerm, cutecom, minicom and others (or “HyperTerminal” or putty if you’re on Windows). If you are running Ubuntu and don’t have a serial port terminal application installed, now is the time to type:
sudo apt-get install gtkterm
in your terminal.
The connector has pins on 2mm centers, not the more common 0.1inch (2.54mm), so it’s slightly smaller and it really is hard to find a matching female part. I got lucky and found some old CD-ROM cable from a Compaq PC in my odds and ends bin that looked like it could work.
The cable had the right amount of pins (3) and the right distance between pins in the smaller connector, but that was it. Everything else was wrong: the slot positions the pins took as well as the external size of the small connector was all wrong. After half an hour of toiling with an Exacto knife I was able to remove the contacts, rearrange them in the order needed as well as trim the body of the connector to just the right size to insert into the socket on the drive. I wish I had a more elegant solution (like the exact matching female end) but this had to do for expediency.
I did not have a specialized Serial-to-TTL adapter and also happened that I could not locate a USB-Serial converter that could be further converted into a suitable TTL adapter and so I had to look around for any USB-attached device that looked like it could do the job. The eureka moment came when I looked at a USB-powered LCD display I had laying around – a rather failed project because of the small size of the LCD display (16×2) that made it rather inconvenient to use for displaying songs playing in Rhythmbox (too much scrolling). The USB control board and the LCD display came from a Chinese company called “SURE Electronics”. Anyways, the device worked as intended, I just needed a larger display and so I switched to a different USB-LCD display, this time 20×2, and so the Sure Electronics display was just laying around doing nothing useful.
Flipping the control board around reveals a nicely labeled Serial TTL port that has no header soldered but appears to be connected to the Silicon Labs CP2102 RS232 serial adaptor IC. if you are using this or similar device, be careful and trace the connections from Tx and Rx pins – since this device was designed to only receive commands from PC and never send anything back, only the Tx circuit was completed (IC’s transmit labeled as Tx becomes the PIC’s receive so it’s actually a part of the device’s receiving circuit – the labeling could be confusing). The Rx circuit had two SMT resistors missing but in this application I saw no use for the resistors and simply shortened the pads with solder.
Now a small Linux-related digression. Upon plugging the device into a USB port the system immediately recognized it and assigned it to the /dev/ttyUSB0 device. GTKTerm also immediately saw the new device but the loopback test would not work! It took me an hour or so to figure out that, although the default usbserial Linux driver recognized the device, it actually needed the specialized cp210x driver to work properly.
The cp210x driver should be loaded before the device is plugged in or it won’t work. I only use this device occasionally and so I never cared to set this module up to load automatically but you can add it to /etc/modules if you use it often.
So, first run
lsmod | grep cp210x
if you don’t see cp210x mentioned in the output like this
BIGRIG:~$ lsmod | grep cp210x cp210x 13070 0 usbserial 39131 1 cp210x
then load it manually via
sudo modprobe cp210x
These are GTKTerm settings you should configure for talking to the hard drive:
Now that the interface part is ready, the hard drive needs to be prepared. You’ll need a Torx T6 driver to deal with the screws and approx. 1″ x 3″ piece of a cardstock (I used my business card from a previous job cut in half – nothing goes to waste here in the lab )
Undo all 6 screws holding the PCB to the drive body.
Remove the controller PCB
put the cardstock piece on the drive preventing the drive and the controller sides from coming in contact, then replace the PCB and tighten the top three screws (to hold the smaller motor connector firmly connected to the PCB)
This is how the drive looks like ready to be connected to. The bottom two screws are just positioned in place but not actually screwed in. The last screw is held in place with a piece of masking tape to ease the insertion later ( which will be done while the drive is live – so the fewer chances to drop a screw on a working HD the better)
Here is an unsightly picture of the entire rig assembled together and ready for application of the fix. The drive sits on top of a Mini-ITX case with a power supply I’m using to power the drive. Once fixed, it will be installed in there. The green croc cable is creating a common ground (bond, rather) between the GND connector on the USB adapter in the lower right corner and the metal of the Mini-ITX case. I’ve also been using the anti-static strap (yellow, below the drive) for just in case.
OK, so GTKTerm is up, USB-TTL adapter is powered via USB and recognized by the system, everything is hooked up and ready to go. Things that happen after that should happen in order, so I’ll begin an ordered list.
- Turn on the drive, watch for the sound of the plates spinning up. As soon as the drive has gone up to speed, hit
- Now go into Access Level 2 by typing /2
F3 T>/2[ENTER] F3 2>
- Wait 20-30 seconds before the next step
- Spin down the motor by typing Z
F3 2>Z[ENTER] Spin Down Complete Elapsed Time 0.148msecs F3 2>
If you see things like
Invalid Diagnostic Command
Then you haven’t waited long enough in the step #3. Simply power down the hard drive and start over. Until you remove the cardstock piece, starting over is easy – just power it down and restart from Step #1
- Once you see the “Spin Down Complete” confirmation, carefully slide the card stock from under the PCB, then replace and tighten all the three remaining screws. Remember that when you are doing it, the HD is live and you can short an unfortunate circuit if you drop a metal screw on it.
- Issue the Spin Up command by typing “U”:
F3 2>U[ENTER] Spin Up Complete Elapsed Time 9.593 secs F3 2>
Note that spin up takes longer than spin down, so give it time.
- Go to Control Level 1 by typing /1
F3 2>/1[ENTER] F3 1>
- Create a new S.M.A.R.T. sector by typing N1:
F3 1>N1[ENTER] F3 1>
- It’ll take a little while for the prompt to come back. When it does, power down the hard drive. Wait a few seconds (as is always recommended with electronics) and power it back on. Do the Ctrl-Z again and get the first prompt, then to partition regeneration (nothing gets deleted from the drive – not to worry)
F3 T>m0,2,2,0,0,0,0,22[ENTER] Max Wr Retries = 00, Max Rd Retries = 00, Max ECC T-LEvel = 00, Max Certify Rewrite Retries = 0000 user Partition Format 5% complete, Zone 00, Pass 00, LBA 00004339, ErrCode 00000080, Elapsed Time 0 mins 05 secs User Partition Format Successful - Elapsed Time 0 mins 05 secs F3 T>
Be sure to wait until you see the “Successful” confirmation
- Turn the drive off
From this point on things you type will be in bold. What you type is case sensitive!
You should now see a command line prompt from the drive like this:
If you don’t see the prompt but the loopback test of the USB-to-TTL adapter worked fine (short Tx and Rx, connect to the adapter and start typing with local echo in “OFF”. If you see what you type – loopback test worked), you may need to swap Tx and Rx wires. In many cases the labels are not very clear about which transmit or receive do they mark – the network’s or the device’s, which goes in opposite direction.
Let’s assume you got the prompt now.
Here is how the entire session looks like in GTKTerm:
You can now use your drive to back up the data from it.
Be sure to understand that the drive it not yet permanently fixed at this point even though it’s operational. The conditions that led to its breakdown in the first place are still there. To permanently fix the issue you will now have to proceed to Seagate’s site, find the proper version of the patched firmware and perform the update. The good news is: now that your drive is operational, you can actually perform the upgrade!
This repair would not be possible without the help of many Internet resources listed here:
- Thank you Brad Garcia for the wonderful set of Barracuda fix instructions
- Thank you Matthew Inkson of iRecon.net for the first useful reference on Barracuda fix I came across and for introducing me to a new word: “unbricking”
- Thank you good guys of MSFN Forums for the insanely useful (and equally long) thread about all aspects of the Barracuda issue (frankly, more detailed than I could ever hope to understand or ever retain in my head)
- And last but not least: thank you good engineers at Seagate for not cleaning all the bugs before releasing the product line (I know, competition pressure and all) but then allowing great people at your forums to help others to fix the issue.