HOWTO: Downgrade iPhone OS from 3.0 to 2.2.1
This is what worked for me. I had an original iPhone (EDGE) that I updated to the OS 3.0 once it was publicly released. I then upgraded to an iPhone 3GS, so I decided to take the original iPhone back to 2.2.1 for app testing purposes. Some people have been able to restore by simply putting the phone in DFU mode and doing the restore. That didn't work for me - I would get either an error 20 or error 1600. After trying for about two hours, the following is what finally worked for me. A word of warning though - I do not use this phone as anything other than a test device now...so I can't speak to whether it would actually function as a phone after the downgrade. I assume it would, but perform this downgrade at your own risk...
Also, you'll need to be on a Mac with the iPhone SDK installed to do this...
1 ) Plug device into the Mac
2 ) Open Xcode Organizer
3 ) Put the device into DFU Mode (hold power + home for exactly 10 sec, release power - phone should disappear then reappear in Xcode)
4 ) Attempt to restore to 2.2.1 in Xcode (a second device with same name should appear in the organizer window and the original device should show "Waiting on device..." in Xcode)
5 ) While first device is restoring, start restore on second device (obviously there isn't a second physical device, just a relisting of your original device..just select it and do the restore the same way as you did in step 4) At this point, your phone's screen should turn white. If not, you may need to start over.
6 ) Close Xcode (you'll be prompted that the device is busy...quit anyway...twice)
7 ) Close iTunes (if it opened automatically when you connected the device)
8 ) Unplug the device
9 ) Open iTunes
10 ) Reconnect the device to the Mac
11 ) Option+Click Restore in iTunes (phone screen is still white at this point)
12 ) Choose 2.2.1 firmware and wait
You're done. Fun huh?
Again, try a regular DFU restore first, but if that doesn't work, these steps *may* work for you - I tried lots of less roundabout ways, but this was the only way that it worked for me.