It appears there is no end to things breaking and ending up in Kuzyatech lab. Today’s patient is a Seagate FreeAgent Theater+ media streaming box that decided to stop noticing USB drives. The box is a nice little device that can play audio and video content from the network or from one of the three local USB ports: front, rear or a dock-like middle one that’s used to connect Seagate’s own portable hard drive. Both front and back ports were dead. Well, time to take it apart! First thing we notice after taking four rubber feet and screws under them off, is that there is still another screw somewhere in the middle. As usually, it’s under the serial number label. But wait, there are two of them:
Once the middle screw is out, it’s an easy case to pop open:
No bulging caps on this one I am afraid! Though I did find one solder ball:
The back of the board is peculiar- big blob of solder under the processor transfers heat to metal lined case bottom:
Let’s look at the USB ports next:
Notice empty footprints for U23 -that’s where an ESD clamping chip normally goes.
Even HDMI is not much better:
The two ports that do not work both go to a USB hub GL850G)
So we now have a theory- no ESD protection on external USB ports, plus carpeted floors and dry air- something just might get taken out. It’s a bit difficult to diagnose just by looking at the boards. But here is something to the rescue: a white unused connector on the bottom edge of the board. There is a slight chance that’s a debug port, since traces connect it to the processor.
After poking at it with a scope, it’s pretty obvious that is is indeed a debug port. Pin 1 is ground, pin 2 is 3.3V and pin 3 has serial data wiggling at 115.2k baud. So out comes my trusty Bus Pirate, which in a UART mode also has a bridge mode, and we get something that looks like a Linux boot log!
It looks like we are dealing with a Realtek MIPS chipset, that boots Linux from an encrypted image: Full log. The part that jumps at me is
ehci_hcd ehci_hcd: port 2 reset error -145 hub 1-0:1.0: hub_port_status failed (err = -32) usb 1-2: device descriptor read/64, error -71
Looks like our USB hub is in trouble. Inserting USB flash drive into either port results in no changes to the debug output. No insertion events or filesystem mount notifications appear. Well, let’s see what else we can do. The system has three USB ports, two are on the hub and the third (HDD dock) goes directly to the main processor. So the next logical strep is to try the third port, except it’s a mini USB connector hidden well inside the dock. Seeing how that port and the rear one both use identical headers, it’s a simple matter of swapping cables on the board end. So now our rear port is connected directly to the processor. Let’s insert the flash drive into it and check the log:
Hotplug: "sda" has partitions. mount: Mounting /dev/scsi/host3/bus0/target0/lun0/part1 on /var/lock/hotplug/mount_tmp/.sda1 failed: Invalid argument mount: Mounting /dev/scsi/host3/bus0/target0/lun0/part1 on /var/lock/hotplug/mount_tmp/.sda1 failed: No such device 1 usb block device found device 0 is /sys/block/sda host=3, bus=0, target=0, lun=0, port=0 It's HIGH speed device! [System2ApDaemon.cpp,threadSys2ApExe,156]msg type = 4 ,msg len = 49 ,msg = 73 64 61 31 20 55 50 20 [Sys2ApBridge.cpp-CallBack_block_event-556] CMD - event_id = 4 MessageNumber = 1 ,MSG = sda1 UP /tmp/usbmounts/sda1 /tmp/ramfs/volumes/C: [ExtHddScanUtil.cpp,setExtHddStatus,232] msg_type = 0 , mount_disk='/tmp/usbmounts/sda1' , mount_label='/tmp/ramfs/volumes/C:' Some of the INQUIRY command's response: CBM Flash Disk 5.00 INQUIRY duration=0 millisecs, resid=0 removable = 1 port 0, sda has 1 partition(s) Hotplug: mount -t ufsd -o ro -o nls=utf8 -o umask=0 /dev/scsi/host3/bus0/target0/lun0/part1 /var/lock/hotplug/mount_tmp/.sda1 ret: 255 Hotplug: mount -t ntfs -o ro -o nls=utf8 -o umask=0 /dev/scsi/host3/bus0/target0/lun0/part1 /var/lock/hotplug/mount_tmp/.sda1 ret: 255 Hotplug: mount -t vfat -o ro,shortname=winnt -o utf8 -o umask=0 /dev/scsi/host3/bus0/target0/lun0/part1 /var/lock/hotplug/mount_tmp/.sda1 ret: 0
After another round of tests and confirmation that everything still works, we can close the case and declare it fixed for now. The only working port is the rear one, but that beats none. It also now has at least some degree of ESD protection and should last for a while. I did consider hacking things a bit more, such as wiring the harness to the front port after cutting its traces, but that was just messy.The other approach would be to chase faults with the hub chip, but seeing how it’s made by Genesis Logic, the parts are not very obtainable from reputable sources. Here is the block diagram of the system as I see it at this stage:
Conclusion: it appears bean counters won again. By saving probably 20-30 cents per unit, they managed to make them very susceptible to basic static ESD hits. But somebody got a bonus for being “efficient”..
Update March 2014: It is now possible to buy replacement GL850 chips on ebay from a Hong Kong seller for a few bucks.
Update April 2014. I’ve now received a replacement chip from the above vendor. This is how it came in:
It was taped (ugh, how much static is generated when tape is peeled off?!) to a piece of cardboard and stuck in a Ziploc bag. Figures. Since I did not have much to loose, I proceeded to install it anyways.
Well, no luck. I still get the same USB hub errors on Linux console and the two ports on the hub still do not work. I do get the 12MHz clock running on the chip, but not much else. So the replacement may indeed be damaged, or there is some other problem I have not discovered yet with the main board. To be continued…