I've done a bit more research and took apart a slim DVD-RW drive. Tearing down the drive and researching the physical means data is stored and read gave me some insights. While simple in theory, these devices use complicated means of electro-mechanical control and error correction to focus the optical lens, account for disk wobble/oscillations, and perform error corrections. The complexity of these subsystems makes directly controlling the DVD reader unfeasible given the time frame of the project and the skill sets of the project team. I think this would be more inline with a mechatronics or electrical engineering capstone project. Further, this is already performed by the on-board microcontroller so it wouldnāt make sense to try and reinvent the wheel here.
This leads me to think that it would be much easier to drive the optical drive via the on-board controller. I researched how this is done conventionally and it seems there are a number of industry standard protocols and connections used. An overview of optical drive specifications is provided in the following article: Optical Drive - OSDev Wiki
Starting from the article linked just above, I was able to determine the types of industry standard specifications and protocols that enable general computing devices to identify, communicate, and operate optical data storage devices. These are provided below:
-
SCSI Hardware Interface Standard: All optical drives read and write data to and from an optical disc using the SCSI protocol which consists of a library of commands that are sent to the optical drive. The onboard optical drive controller uses these commands as instructions to be executed. What the drive needs to do to execute these instructions depends on the drive. The takeaway is that this firmware is packaged within the optic drive and we donāt need to worry about it.
-
ISO 9660: All optic drives used as data storage drives use the ISO 9660 file system, the specifications of which are available for free under ECMA-119. Some USB thumb drives and hard disks also use this file system. This is an older standard thatās falling out of use.
-
UDF: Used by windows in the Live-File-System, used to create rewritable file system on DVD-RW discs that enable conventional file handling within the windows ecosystem. This is likely the standard that should be used for this effort.
-
ATAPI: ATAPI is used to issue SCSI commands to CD-ROM, CD-RW, and DVD drives.This standard uses an identifier command used by a general computing device to determine what type of drive has been connected.
-
IDE: Integrated Drive Electronics (IDE) standard for internal data drive hardware connection including DVD optical drives using the ATAPI standard. Composed of a 40-pin hardware interface. This standard is older and falling out of use. However, it is well established and well documented.
-
AHCI: Used to interface with SATA drives. Newer standard that is less established. More difficult to find documentation on. However, this may have advantages for this effort: āSystem designers can easily access SATA drives using system memory and memory mapped registers, without the need for manipulating the annoying task files as IDE do.ā
https://wiki.osdev.org/AHCI
- SATA: A hardware connection standard for internal drives that use the AHCI protocol.
During my research, I came across a number of projects and efforts that might provide a feasible path forward. See below.
- ATAPIDUINO project: DIY Arduino ATAPI CD-ROM controller
This project developed an Arduino to 40-pin IDE expander using the Arduino I2C bus. ATAPIDUINO uses an Arduino to turn a basic CD-ROM into a CD player. This approach uses the IDE interface directly.
- A disk reader and an arduino makes a CD player: An Arduino And A CD-ROM Drive Makes A CD Player | Hackaday
This project uses the prior work done under ATAPIDUINO to make a simple music player using an old CD-ROM and an Arduino.
Current thinking: I believe the following approach is feasible:
Step 1. Use an Arduino I2C to 40-pin IDE adaptor (based on the ATAPIDUINO project) to send SCSI commands to an IDE DVD Optical Disc Reader.
-
Do not worry about writing data to disk. Only reading data.
-
Learn how SCSI commands can be used to make the DVD reader perform specific operations.
-
Develop an approach for getting the disc reader to read and output files from a DVD-RW disc using these commands.
Step 2. Devise a method for receiving and storing the data output from the IDE Optical Disk Reader to an onboard memory module.
- Assume the data files will be formatted as UDF.
Alternative approaches might include using a SATA drive instead or even a USB drive, if need be. However, given the ATAPIDUINO effort, I believe the IDE DVD drive approach is the best option assuming we can source a (hopefully still in production) DVD drive that will work with this method.
If anyone can readily identify any specific technical hurdles that we will encounter here, your input is appreciated.