Teensy 3.5 & NCR 5380 based SCSI device emulator.
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
ScsiSoundTest2.mp3Sample of the upcoming TSE Sound Emulator addon.MPEG Video - 929.79 kB - 06/20/2020 at 18:21 |
|
|
NCR_53C94_53C95_53C96_Data_Sheet_Feb90.pdfNCR 53c94 DatasheetAdobe Portable Document Format - 2.86 MB - 12/26/2016 at 21:59 |
|
|
K64P144M120SF5RM.pdfKinetis MK64 Reference ManualAdobe Portable Document Format - 19.85 MB - 12/14/2016 at 22:32 |
|
|
SCSI Reference.pdfSCSI Command ReferenceAdobe Portable Document Format - 3.78 MB - 12/14/2016 at 22:32 |
|
|
NCR_5380_SCSI_Interface_Chip_Design_Manual_May85.pdfNCR 5380 DatasheetAdobe Portable Document Format - 2.99 MB - 12/14/2016 at 22:32 |
|
|
As I have had some time to further the project, I've done a redesign of the board (see the pictures section on the left) with room for two Teensy microcontrollers, and a header for a Pimoroni Pirate Audio (or other Raspberry Pi compatible I2S audio hats with optional screens) or a Raspberry Pi and whatever hats you want to use (forgoing the need for the second Teensy). Additionally there is a 20x30 prototyping area, and mounting holes that match up with 3.5" bottom screw positions for mounting (or you can use right-angle hardware.)
The previous OLED menu system is being brought out to a separate microcontroller to allow for some more advanced features.
Once the design has been validated, I'll upload the new design to the project files.
For $50 you should be able to build your own basic board with just the NCR5380, backend Teensy 3.5, and minimal passives / connectors.
For around $100 you can fully populate the board with two Teensy microcontrollers, and a front panel LCD / Audio module.
HDD sound simulator:
The frontend Teensy can generate simulated harddrive sounds (and eventually CD & tape mechanical sounds too!) in realtime, for those who miss such things. There is a sample recording in the Files section.
CDDA emulation:
You can have the frontend Teensy play back wav files from it's own SD card, though I might implement a pass-thru for the backend to send audio that is embedded in a bin/cue image. With a Teensy 3.5, this uses 16-24% of the CPU time on the frontend controller. The frontend Teensy can be a 3.5, 3.6 or 4.1. The 4.1 should be powerful enough to decode MP3 files in realtime, and can do S/PDIF audio (passthru to your sound card!) The backend however still needs to be a Teensy 3.5 to work safely with the NCR 5380.
240x240 UI:
Using the Pirate Audio hat, the screen can be much larger than the previous 64x32 or 128x32 OLED displays, and in 16-bit color too. There are multiple versions of the Pirate Audio hat, one with a line-out, and another with a small speaker. The UI on the front will let you mount/unmount images, change IDs and modes, control CDDA playback, etc. Some basic UI elements are implemented already to allow changing the volume of the CDDA and HDD sound simulation. I'll be uploading a video of the updated UI soon.
So I had some time to play with one of the TSE boards I had built up, and use it with an HP 712/100 PA-RISC system this past week. In doing so I found several bugs, and have made some changes to the project in response. Some of the changes that have been asked for relate to the missing flexbus defines in recent versions of the teensyduino SDK. The firmware repo now has a flexbus.h uploaded with those missing defines. When I get a chance to merge some of the changes between the various trees I have locally, I'll update the repo with the bugs I found last week fixed.
In the handling of SCSI messages, ABORT (6) wasn't handled correctly. Apparently the correct response is to drop everything and release the bus with no messages back to the initiator. And then there were bugs in the handling of reads & writes and conversion between different sector sizes. On classic mac these were not as easy to see, but on PA-RISC it was obvious that too much data was being transferred for the read requests.
As far as multi-target support, it has been made even more obvious to me that selecting one target immediately after deselecting another target when both are handled by the TSE is problematic. This is most evident when a host is scanning for drives at boot and it only finds the first one. I'm not sure yet what I can do there, but if you experience this, try leaving gaps of 1 or 2 IDs between your targets handled by the TSE.
I had planned on a 53c94 port, but as I found previously, that would only support one target ID per chip, and finding examples of target firmware for the 53c94 has been difficult. I do have a board that uses the 53c94 in a target role with a Z80 cpu, which I can run an emulator in circuit or a logic probe and dump all the I/O targeting the 53c94.
So even though this project has been quite dead for the past couple years, I haven't given up on it yet.
The new boards and chips have arrived, and over 200 solder joints later, the Teensy and 53c94 are talking, and menu buttons are working. Now to finish separating the 5380 code from the target service code the rest of the way, and write the 53c94 driver. There is one downside to the 53c94 that I didn't notice before, it only can listen on one device ID at a time. It can still do multiple LUNs per device, but this means most of the modes are mutually exclusive for older software where LUNs are not supported. So you could emulate a harddisk, cdrom, ethernet, or graphics adapter, but not any of them at the same time on a m68k mac. The 5380 is slower, but more versatile on this one point.
On another note, the SuperMac SuperView arrived, and I was able to get it working with the Quadra 630 in my collection (albeit very poorly, as it causes issues with the native graphics). I hope to reverse engineer that protocol soon and start work on the pi Zero software.
The start of the OLED Menu system is underway, you will be able to enable/disable individual devices, change device types (disk, cdrom, tape, ethernet, graphics), start/stop the target mode, eventually perform initiator mode tasks (save/restore disk images from/to real drives) and make various other changes to the device config without needing a computer attached.
I've adjusted the layout of the previous status screen to only take the top 8 pixels, and hopefully be a clearer representation of what is going on. Here you can see IDs 3,4,5 are enabled, and I've just disabled ID 2 from the menu system. There is no activity on any of the devices, as shown in the top row of dots. Detailed status such as SD Card size and partitions will be available via the menus.
I spent the day plotting out the schematic and board layout for the 53C94 based iteration. TSE94Desktop.sch and TSE94Desktop.brd can now be found in the hardware repo to the left.
Boards and parts are now on order and should be in the middle of January. Until then, work will progress on the 5380 based model.
That didn't take very long. Many thanks to MAMEDev, SCSI2SD, and the SCSI CD docs, optical drive emulation is working well enough to mount & verify a Debian install disc on my linux testbed.
This means that virtual disks/discs with sector sizes other than 512 bytes are supported now as well.
I also have a SuperMac SuperView SCSI graphics card on order, which I hope will arrive before things get crazy again at work.
I have assembled one of the first run of boards and it works beautifully, even with my terrible soldering job. I have found an mistake that prevents the OLED display from being mounted on the Teensy side of the board, as the uSD slot overlaps the pins. I suspect anyone who would be using the OLED display would probably have it on cable or would be fine with mounting it over the NCR 5380, so it isn't a huge deal yet.
Many thanks to Hackaday for the writeup: http://hackaday.com/2016/12/25/the-tiny-scsi-emulator/ !
Merry Christmas, Festivus, Yule, Chanukah, Holidays and a New Year!
Rev0 Boards arrived from OSHPark, now I have to dig up some 48 pin sockets from my collection to fit the Teensy 3.5
Just pushed a major change set to bitbucket, adding the initial SCSI/Link emulation and central configuration through config.h
I spent the day rethinking the architecture of TSE, and plotting out the eventual move to support other controllers and device emulations.
Still having issues with the Cabletron emulation, but it is being joined by DaynaPort SCSI/Link which hopefully is a little better documented.
I've split the ethernet controller driver out from the ethernet emulations so it will be possible to mix & match in the near future. Particle Photon / Spark Core have potential as WiFi bridges handling all the network duties and leaving the SCSI to the Teensy. RNDIS over USB is another option to explore.
Initiator implementation has been pushed up the stack a tiny bit, in case I end up implementing RFC 2143, which necessitates being both a target and an initiator, supporting full bus arbitration, and exciting things that direction. Outside of Linux hosts with a specific chipset and driver, I don't know of any other implementations of the standard. I still plan on TSE being usable as a standalone SCSI cloning box.
ScuzzyGraph & PowerView are on the radar for future implementation if I can get any sort of documentation or can reverse engineer one (donors?).
Transport mechanisms are another avenue to explore. Are there any tape / cd vaults that are documented well? It would be interesting to have an entire catalog of ISO images to choose from, and mount them from a native application. Even better if I don't have to write the front end.
I'm still waiting on my first batch of boards from OSHPark, so all testing has continued on the breadboards for now. I've dug out a sacrificial VaxStation motherboard (corroded by leaking caps, rodent contaminants) to steal a pair of 5380 chips from, and have one SCSI floppy controller to steal another from if needed.
With my Quadra 630 attached, (needed to run NetBSD) I have gotten much further with the ethernet support. The Cabletron diagnostics now recognize the device. Likely just due to the incomplete Mode Sense implementation, NetBSD and its related tools don't like my disk emulation. And on the unforeseen complications, I now have to put some form of mutex / locking on the ethernet and oled drivers, which pushes me closer to switching to an RTOS and changing how I handle the SCSI PHY.
UPDATE: I just suck at installing crusty drivers. The Cabletron MacOS driver isn't an extension like you would expect, instead it patches the System file with the actual driver, and has some sort of patched Ethertalk extension. I'm further along than before, but without having the original hardware to compare against, I'm just blindly implementing their protocols by reading the NetBSD driver source code. The driver goes through the process of adding a protocol and a multicast address to the frame filter, and asking for any available frames. If the stats DA is installed, it attempts to poll as well. I suspect the card returns some sort of "No data, ask later" response when there are no frames to retrieve, but can't find any reference in the NetBSD driver.
Create an account to leave a comment. Already have an account? Log In.
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
those undefined registers:
drvNCR5380: In function 'void ncr_Init()':
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
^
tgtOptical: In function 'uint8_t fromBCD(uint8_t)':
D:\TinySCSI\tgtOptical.ino:436:20: warning: 'uint8_t fromBCD(uint8_t)' was declared 'extern' and later 'static' [-fpermissive]
fromBCD(uint8_t val)
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
FB_CSAR0 = 0xA0000000;
^
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
FB_CSCR0 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
FB_CSMR0 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
FB_CSAR1 = 0xB0000000;
^
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
FB_CSCR1 = FB_CSCR_BLS | FB_CSCR_PS(1) | FB_CSCR_AA | FB_CSCR_ASET(1) | FB_CSCR_WS(3);
^
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
FB_CSMR1 = FB_CSMR_BAM(0) | FB_CSMR_V;
^
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
FB_CSPMCR = (1<<28) | (2<<12);
Could you not have maybe done this as a file or an offsite link?
....and.... myth busted. replication is NOT working due to those undefined registers. Hardware assembled on perforated test board, awaiting feedback on the aspect below, timeout encountered. Those variables are not defined anywhere in the entire teensyduino, even if they are specified inside the chip manual you attached to this project. It seems your project sparked some kind of a revolution inside the kinetis.h because it is stripped down of all references. Please advise.
Hey, sorry I haven't seen your messages here as I don't have much time to dedicate to these projects anymore. the FB_CS* registers are detailed in the Reference Manual for the K64 mcu. Not sure how my SDK at the time had these registers defined, but it should be fairly simple to transcribe the info from the pdf (check the files section above) to recreate the needed info.
Page 743 is the start of the info you are seeking.
Yes, I did. I found an older version of kinetis.h and I pasted the missing parts. After that, the PC encountered problems at SCSI drive detection process - it did not reach the boot stage. The PC was unable to probe the disk size. I stopped there because I had to start my own project - search hackaday for "pertec tape emulator" to see the details.
Hi.
First of all I wish to express my greatest respect for your work. It really really helps to understand scsi communication and data handling.
I am trying to replicate your project in order to replace the SD-Card with a 40-years old reel-to-reel magnetic tape drive. However.... I would like to ask you if this project ever worked.
TSE Laptop rev. 1 has a 2 x 20 pin connector, not the regular scsi-1 2 x 25 pin connector. Big trouble when using a standard 50-pin scsi1 cable.
Schematics are extremely hard to follow due to the lack of buses. Just renaming the pins is not helpful when trying to follow the logic at hardware level.
Regarding the software side - these references look like setup of some internal registers but there is absolutely nothing inside TeensyDuino libraries to confirm that.
Here is why:
drvNCR5380:146: error: 'FB_CSAR0' was not declared in this scope
drvNCR5380:147: error: 'FB_CSCR0' was not declared in this scope
drvNCR5380:147: error: 'FB_CSCR_BLS' was not declared in this scope
drvNCR5380:147: error: 'FB_CSCR_PS' was not declared in this scope
drvNCR5380:147: error: 'FB_CSCR_AA' was not declared in this scope
drvNCR5380:147: error: 'FB_CSCR_ASET' was not declared in this scope
drvNCR5380:147: error: 'FB_CSCR_WS' was not declared in this scope
drvNCR5380:148: error: 'FB_CSMR0' was not declared in this scope
drvNCR5380:148: error: 'FB_CSMR_BAM' was not declared in this scope
drvNCR5380:148: error: 'FB_CSMR_V' was not declared in this scope
drvNCR5380:149: error: 'FB_CSAR1' was not declared in this scope
drvNCR5380:150: error: 'FB_CSCR1' was not declared in this scope
drvNCR5380:151: error: 'FB_CSMR1' was not declared in this scope
drvNCR5380:152: error: 'FB_CSPMCR' was not declared in this scope
Hi, I am currently trying to build one Tiny Scsi Emulator, and bumped into the same trouble with those missing register values. Could you please share the correct additions you did to the kinetis.h file ? Thanks for your help !
I want two, one for my SE30 and one for my Quadra 950 … where or when can I buy this? I love it!
Soon... Soon... I wouldn't want to take advantage of folks though, and this is far from stable. There are times it works better than the SCSI2SD, and times it works worse.
Has this project died? Looked like it had some potential.
The 53C9x avenue might be dead, since it can only handle one SCSI ID. I have had contact with a couple other folks who have worked on similar projects and there is a possibility of making this into a commercial product in the future. Realistically, using a beaglebone looks like a better option in the long run, if I can ever manage to set aside time to figure out the best way to implement the SCSI PHY in the PRUs.
Please don't abandon this project! Lots of people are interested, it has a lot of potential!
Very nice and interesting project. I was wondering if there's any reason for choosing that MCU. I'm thinking about a similar implementation based on a STM32F4. Any ideas?
Sorry for taking so long to get back to you, yes the STM32 series would work well for this, most of the firmware could be ported over to something like ChibiOS or something similar quite easily. Ideally, you would use the FSMC to interface with the 5380. There are a few examples for using the FSMC to interface with LCD screens, and the setup needed for that would be a good starting place for rewriting the Teensy/Kinetis specific code.
No problem, and thank you for your reply. Well, I had the FSMC in mind for interfacing with the SPC, however, the problem is getting the DREQ/DACK handshake work with the STM32. It could be done, but it's tricky. I believe the MCU you chose provides external DREQ/DACK signals, right?
Not exactly, at least not that I have used. There isn't very much gain from implementing DMA operations, aside from relieving some CPU cycles on the MCU. The 5380 tops out well below the FSMC interface speeds, so you're going to saturate the 5380 long before you run out of cycles on the STM32. I've gotten some very good speeds on the STM32F4 discovery board when interfacing to a 16bit LCD, and still had plenty of CPU time left for other tasks. Now if you can get the 53CF94 interfaced to an STM32F4, there is a chance you might be stuck waiting on the SD card handler. Myself and others would love to see an inexpensive SCSI emulator that could handle 20MB/s.
Become a member to follow this project and never miss any updates
Hi David,
Would you be willing to maybe consider opening up this project, if it's abandoned? Say open for non-commercial, ie you would retain the rights to productise it in the future?