3 ms·
It looks like the Raspberry Pi is generally accepted to be capable of ~14MHz reliably in a true GPIO mode, so at least on paper it should be able to handle SCSI
by wolrah 7y ago
It looks like the Raspberry Pi is generally accepted to be capable of ~14MHz reliably in a true GPIO mode, so at least on paper it should be able to handle SCSI-1 and SCSI-2 "Fast SCSI" speeds. It's not clear to me which variant this project supports.
The Pi has enough GPIO pins to support the 16 bit SCSI-2 "Fast Wide SCSI" variant but the schematics here are just for 8 bit "narrow" SCSI.
There are also certain pins on the Pi with specific hardware I/O capabilities that can transfer data faster which can be bodged in to working for a lot of things they aren't intended for, see also the RGB LED control setups and such, but I don't think those will be relevant to this use case.
- spamizbad 7y agoWhy are the gpio pins so slow? Is it assuming overhead from an OS on the Pi or something?
- throwaway2048 7y agoBecause GPIO for communication protocols is what is termed "bit banging", normally for high speed communication stuff you have a dedicated ASIC that handles all the low level signaling itself and presents a high level (possibly DMA) interface to the CPU. With bit banging/gpio you are using the CPU itself to write/read the raw binary signal of the GPIO, usually with no buffering. This involves tight loops and polling and is slow because the CPU must marshal and construct all signaling (including timing!) in a synchronous way, bit by bit, rather than just dumping a block of data into memory somewhere and having a high level ASIC deal with it (or reading said block). A good analogy might be writing your friend a long note and then having him read (The high level interface) it vs phoning your friend and sharing the note, one letter at a time.(the low level bit banging interface), which do you suppose would be faster, and less demanding of your attention?
- wolrah 7y agoOn top of all that, remember that this project is doing that reliably enough to use as a disk while sharing CPU time with the rest of the system. It's not running on a RTOS or doing bare metal trickery, so achieving tight timing is really hard and you end up wasting a lot of CPU time just doing that.