This commit is contained in:
Zack Buhman 2024-11-19 01:08:00 -06:00
commit 9310fe6abc
6 changed files with 288 additions and 0 deletions

112
benchmark.txt Normal file
View File

@ -0,0 +1,112 @@
64K
bilbo@localhost ~ $ dd if=/dev/random of=random bs=64K count=1
1+0 records in
1+0 records out
65536 bytes (66 kB, 64 KiB) copied, 0.000637442 s, 103 MB/s
for i in `seq 1 10`; do ./tools/ftdi_transfer write 0xac010000 random |& grep -E 'measured|crc'; done
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.426 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
remote crc: 2af6d258; local crc 2af6d258
measured write time : 0.425 seconds
1MB
dd if=/dev/random of=random bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00464291 s, 226 MB/s
for i in `seq 1 10`; do ./tools/ftdi_transfer write 0xac010000 random |& grep -E 'measured|crc'; done
remote crc: de34b971; local crc de34b971
measured write time : 6.666 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.666 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.663 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.667 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.667 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.667 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.665 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.667 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.664 seconds
remote crc: de34b971; local crc de34b971
measured write time : 6.666 seconds
8MB:
dd if=/dev/random of=random bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.0240846 s, 348 MB/s
for i in `seq 1 10`; do ./tools/ftdi_transfer write 0xac010000 random |& grep -E 'measured|crc'; done
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.247 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.271 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.245 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.242 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.242 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.251 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.271 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.245 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.242 seconds
remote crc: 1c92e87c; local crc 1c92e87c
measured write time : 53.270 seconds
15MB:
dd if=/dev/random of=random bs=15M count=1
1+0 records in
1+0 records out
15728640 bytes (16 MB, 15 MiB) copied, 0.0500857 s, 314 MB/s
for i in `seq 1 10`; do ./tools/ftdi_transfer write 0xac010000 random |& grep -E 'measured|crc'; done
remote crc: 55797d82; local crc 55797d82
measured write time : 99.868 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.868 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.870 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.865 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.822 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.869 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.819 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.821 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.871 seconds
remote crc: 55797d82; local crc 55797d82
measured write time : 99.866 seconds

7
demos.txt Normal file
View File

@ -0,0 +1,7 @@
- code upload
- framebuffer copy
- VMU copy
- GDB?

1
ftdi_transfer_readme.txt Normal file
View File

@ -0,0 +1 @@
- windows drivers / d2xx / vcp

41
prototype-differences.txt Normal file
View File

@ -0,0 +1,41 @@
This is a pre-production prototype. It does not represent the final product.
The production version will include (at least) the following changes:
- PCB schematic: The SH7091 SCIF is able to use the RTS2 and CTS2 signals as
GPIO. However, if RTS and CTS are routed to ADBUS on the FT232H, it is not
possible to simultaneously configure ADBUS signals as both UART and GPIO. For
this reason, a new PCB revision will instead route RTS/CTS to the FT232H
ACBUS. This will allow simultaneous RX/TX UART on ADBUS and GPIO on ACBUS. The
intent is to allow for more interesting out-of-band signaling, in addition to
what is possible with a plain UART.
- PCB schematic: rearranged all ACBUS connections; LEDs moved from ACBUS8/ACBUS9
to ACBUS0/ACBUS1; G-RESET moved from ACBUS1 to ACBUS5; SCK moved from ACBUS0
to ACBUS6.
- PCB layout: increase the size of the serial connector footprint pads
- PCB layout: increase clearance between passive components and serial connector footprint
- PCB layout: complete redraw
- PCB layout: changed USB connector type from USB Mini-B to USB Type-C
- PCB layout: replaced FT232HL with FT232HQ due to component shortage
- Serial connector: shield tin-plating applied at the factory
- Serial connector: conductive pin tin-plating applied at the factory
- Serial connector: increase thickness of shield pins
- Serial connector: slightly redimensioned to reduce grinding required for a
perfect fit in the female connector
- Serial connector: holes at the front of the pin guides were removed; this is
to prevent inconsistent bridging seen in some earlier samples
Other changes that are under consideration:
- possible inclusion of a Nylon case/enclosure for the PCB (depending on feedback/demand)

37
questionnaire.txt Normal file
View File

@ -0,0 +1,37 @@
- Would you pay $50 USD + $8 (US) shipping for this adapter?
Commentary: The serial connector is the main bottleneck on lowering the price.
- What is your favorite USB connector:
- USB Type-B (full-size)
- USB Mini-B
- USB Micro-B
- USB Type-C
Commentary: I think USB Mini-B has a good balance between connector strength
and size. USB Type-C might be more popular though.
- Would you pay $10 for a high-quality plastic case for this serial adapter?
Commentary: I think the exposed PCB has a nice aesthetic. I am also concerned
about the clearance between the Dreamcast serial port and the Dreamcast AV
port. It is deliberate that this serial adapter PCB is nearly as narrow as
possible.
- The maximum configurable Dreamcast SCIF speed is 1.5Mbit/s. However, it may be
possible to achieve faster speeds by overclocking the SCIF via the SCIF
external clock input. If a 1.5Mbit/s adapter is priced at $50 USD, would you
pay $100 for an adapter with that can transmit and receive at an overclocked
2.0Mbit/s?
Commentary: I think this is a funny idea, but I doubt people want to pay for
it. It is almost certainly a better idea to make a G2 bus (modem connector)
peripheral for this instead.
- Do you think there should be a similarly-priced serial adapter product for
Sega Saturn?
Commentary: Sega Saturn is slightly more interesting because there are three
completely separate serial interfaces on the same connector. This is a perfect
use-case for the FT4232H quad-channel UART chip.

90
summary.txt Normal file
View File

@ -0,0 +1,90 @@
Product summary:
Dreamcast USB-UART adapter, featuring new durable Dreamcast serial connector.
Does not contain recycled/scavenged components from any Sega-original product.
Usable as a COM/tty port with generic software (FTDI VCP drivers required on
Windows; usable with no configuration on Linux). Custom software is also
provided for more advanced functionality.
What can you do with it?
This product is primarily intended for people interested in developing new
software for Sega Dreamcast.
For Dreamcast units with boot ROMs that will load software from CD-R (e.g: VA0,
VA1).
Example/suggested use-cases include:
- copy newly-written software from a PC to Dreamcast RAM for rapid compile/test cycles
- create dumps of Dreamcast texture memory (framebuffer "screenshots", Holly/emulator development, application debugging)
- SH4 debugging via GDB
- serial printf debugging
- interactive text console via a terminal emulator (minicom/picocom/screen/putty)
Many other data transfer use-cases are possible, including VMU save backups and
CD-ROM/GD-ROM backups.
Features:
- Capable of sustained data transfer at 1.5 Mbit/s, read and write (the
maximum configurable speed of the Dreamcast SCIF)
- Dreamcast global reset, user-controllable via USB (reset the Dreamcast
without pressing the power button)
- Two LEDs, user-controllable via USB (by default configured as TX/RX activity LEDs)
Transfer benchmarks:
Benchmarks are performed using the `ftdi_transfer` open source transfer program
on Linux.
- 50 kbyte @ 0.425±0.001 seconds (idealized time: 0.419 seconds)
- 1 Mbyte @ 6.666±0.002 seconds (idealized time: 6.711 seconds)
- 8 Mbyte @ 53.253±0.015 seconds (idealized time: 53.687 seconds)
- 15 Mbyte @ 99.854±0.026 seconds (idealized time: 100.663 seconds)
The integrity of the bytes transferred in each transfer are checked and
verified. Each test is repeated and averaged 10 times.
The results where the benchmarked speed is faster than the idealized time are
not a mistake. This occurs because FT232H chip is transmitting at 1573770
bits/sec, which is 0.721% faster than the Dreamcast's 1562500 bit/s. The SH7091
manual specifies (receive) speeds within 1% of the configured rate are
acceptable. Because the SH7091 SCIF performs 16x oversampling of the received
serial data and resynchronizes on every start bit, this effectively means that
the SCIF is being "overclocked" by 0.721% when the receive line is driven by a
FT232H.
The results where the benchmarked speed is slower than the idealized time is
because the round trip time of an extra USB transaction is included in the
benchmark measurement. This extra USB transaction is used to retrieve the CRC32
checksum of the transmitted data, as computed by the Dreamcast. The extra USB
transaction is also used to positively affirm the serial transfer is complete
(and not simply queued in the FT232H transmit buffer). This USB transaction
latency is relatively constant, and becomes insignificant with larger transfers.
Technical specifications:
Dreamcast serial connector:
- Aluminium shield/shroud (SLM 3d-printed)
- Aluminium conductive pins (laser-cut sheet metal)
- Plastic pin-housing (SLA 3d-printed)
USB UART PCB:
- FTDI FT232H USB UART
- 93LC56BT 2kbit configuration EEPROM
- custom 4-layer PCB