Old USB-SATA powerswitch

From BitWizard WIKI
Jump to: navigation, search

USB SATA powerswitch

This is the documentation page for the USB SATA powerswitch PCB.


The USB SATA powerswitch PCB has an USB connector and connection points for 3 power rails. The brains of the PCB is an at90usb162 (or compatible) chip. The 12V power rail is switched with an IRF9333 FET, and the 5V and 3,3V rails are switched with FDS8884 FETs.

External resources


  • led1 is connected to VCC
  • led2 is connected to PD6
  • led3 is connected to PD5
  • led4 is connected to PD4
  • led5 is connected to PD3
  • led6 is connected to PD0 (12V FET)
  • led7 is connected to PD1 (5V FET)
  • led8 is connected to PD2 (3,3V FET)
  • led9 is connected to 12V in
  • led10 is connected to 5V in
  • led11 is connected to 3,3V in

Viewing with the USB connector on the left side, and the power pads on the lower side:

  • 12V OUT (12V IN for V1.1)
  • 12V IN (12V OUT for V1.1)
  • GND
  • GND
  • 5V IN
  • 5V OUT
  • GND
  • GND
  • 3,3V IN
  • 3,3V OUT

Mind the reversed order for the 12V pads on version 1.0, compared to the 5V and 3,3V pads!

Default operation

The device acts as a usb-serial port, and under Linux, will be available under /dev/ttyACMn (n=0 for the first device, 1 for the second, etc.).

At BitWizard, we use the following script for turning om our harddisks:

stty -echo -icrnl -onlcr < $tty
cat $tty &
(sleep 0.2; echo s0 ; sleep 0.2 ; echo s1 ; sleep 0.2 ; echo s2 ) > $tty
sleep 0.5
kill $pid

"s0" means "set output zero", which is the 12V output. "s1" id the 5V output, and "s2" is the 3V3 output. The four status LEDs are connected to output 3,4, 5, and 6. To turn off an output, simply send "c0", meaning "clear output zero".

Reading from the device is necessary, because it needs to dump its output. If you don't read it's output, the device may (or will) freeze.

John tells us that he uses the following windows script.

::port parameters
MODE COM3:96,N,8,1
::For reading info from COM port
type COM3
::For sending info to COM port
sleep -m 200
echo s2 > COM3
sleep -m 200
echo s1 > COM3
sleep -m 200
echo s0 > COM3

The "type COM3" line is controversial. I would expect that line to block and the script to stop processing there. On windows, it seems it works fine without it. Then, I think John put the line back, but maybe as "copy com3: con:". Apparently that does not block. Please let us know how your experience is.

The parameters like "baud rate" and parity are ignored in the device. I don't see the need for the "mode com3:96,N,8,1" line. Maybe the act of initializing is neccessary on windows. Or maybe it resets other parameters like is neccessary on Linux. (On Linux the echo needs to be off: otherwise the first character that is echoed from the device back to the PC starts bouncing back and forth between the PC and the device).

The devices are shipped with the following .hex file programmed:
File:Usb-sata powerswitch.hex
For info on how to flash this .hex into your controller, see the section on programming below.


This section describes how you get your program into the processor.

In general what you need to know is that the processor will boot into the code you programmed into it on powerup. Once you're done developing your program, that's the way you'll use it: Powerup, run.

If there is no program loaded or if you press the reset button the chip comes up in "firmware upload mode". This is done by a bootloader. You should take care not to overwrite or erase the bootloader, because there is no way to put the bootloader back once it is gone.


Get the dfu-programmer for atmel chips package. (link?)

On sufficiently recent Ubunu distributions that is as simple as:

 sudo apt-get  install dfu-programmer

I recommend creating a script called "dfu":

if [ -z "$CHIP" ]  ; then 

sudo dfu-programmer $chip erase
sudo dfu-programmer $chip flash --suppress-bootloader-mem $hex
sudo dfu-programmer $chip start

TODO: figure out how to get rid of the "sudo" commands here...

Now downloading and starting a program is as simple as pressing the reset button and then:

dfu <yourbinary>.hex

TODO: When I'm developing, I'm likely to modify the code, and when I want to program the chip I hit the "reset" button on the board. Then the computer will see my chip re-enumerate as the Atmel DFU chip. A simple script could watchout for that and invoke dfu <mycurrentbinary>.hex the moment the chip has enumerated. Once that's running downloading and starting the latest code becomes as simple as hitting the reset button.

Apparently the FLIP program is now available for Linux too. See below.


Get the "flip" program from Atmel. http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3886