commit 9310fe6abc93420f02aaf6f93405613cade1458c Author: Zack Buhman Date: Tue Nov 19 01:08:00 2024 -0600 initial diff --git a/benchmark.txt b/benchmark.txt new file mode 100644 index 0000000..6da4c36 --- /dev/null +++ b/benchmark.txt @@ -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 diff --git a/demos.txt b/demos.txt new file mode 100644 index 0000000..cfee3fd --- /dev/null +++ b/demos.txt @@ -0,0 +1,7 @@ +- code upload + +- framebuffer copy + +- VMU copy + +- GDB? diff --git a/ftdi_transfer_readme.txt b/ftdi_transfer_readme.txt new file mode 100644 index 0000000..15affa8 --- /dev/null +++ b/ftdi_transfer_readme.txt @@ -0,0 +1 @@ +- windows drivers / d2xx / vcp diff --git a/prototype-differences.txt b/prototype-differences.txt new file mode 100644 index 0000000..269a298 --- /dev/null +++ b/prototype-differences.txt @@ -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) diff --git a/questionnaire.txt b/questionnaire.txt new file mode 100644 index 0000000..de0d902 --- /dev/null +++ b/questionnaire.txt @@ -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. diff --git a/summary.txt b/summary.txt new file mode 100644 index 0000000..4aa016f --- /dev/null +++ b/summary.txt @@ -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