Compare commits
86 Commits
v1.0-20210
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
8012d85d23 | ||
|
a09d5dbf13 | ||
|
d420244da9 | ||
|
c5c4c51667 | ||
|
bc114096ac | ||
|
41455971d4 | ||
|
1205f4ad6e | ||
|
382052a5a0 | ||
|
1714acb3a2 | ||
|
8d84bc8ece | ||
|
0abf96bd82 | ||
|
4ab58d0fff | ||
|
3429bab34b | ||
|
7d1227a193 | ||
|
b8bdb3fe37 | ||
|
7c51723a2b | ||
|
4f4a9b1a33 | ||
|
b8580bd4e6 | ||
|
cb123509d2 | ||
|
2f14c0fed2 | ||
|
968f3336af | ||
|
5aeb32e928 | ||
|
cf468bcbde | ||
|
0c04852ad8 | ||
|
178cffa658 | ||
|
494a803890 | ||
|
c2bac1a9d0 | ||
|
f4bb40a094 | ||
|
f980aa6f91 | ||
|
e880015516 | ||
|
7ec0ad2a66 | ||
|
8f44ace571 | ||
|
42f7375caf | ||
|
ed3ad3c281 | ||
|
92c17b12ca | ||
|
178cc1561c | ||
|
a17a216c43 | ||
|
89b619efb0 | ||
|
3a2f8ec660 | ||
|
b4d1654b32 | ||
|
d5a6ac0b9c | ||
|
12743b6fb8 | ||
|
809421e2f2 | ||
|
b3a250bb8a | ||
|
1b0fff73e9 | ||
|
979448853d | ||
|
302c98a267 | ||
|
b54ecdee72 | ||
|
c52cc33bb4 | ||
|
c709fa35d9 | ||
|
09a79fccae | ||
|
698f73c88b | ||
|
8b30041f41 | ||
|
dd06c9f214 | ||
|
fe77bd5a2f | ||
|
6652cba50a | ||
|
dbcd23f985 | ||
|
45f58fa9ae | ||
|
4759218ae8 | ||
|
349161b13f | ||
|
f59fedd682 | ||
|
054637bd6a | ||
|
3b83116368 | ||
|
bb3e26bd23 | ||
|
8711299b8f | ||
|
4c4d0146c5 | ||
|
2cdbd10dcf | ||
|
17558b5260 | ||
|
ba78e9b06c | ||
|
c0b323cbea | ||
|
5a5716decc | ||
|
43f5b9b704 | ||
|
660ca705d2 | ||
|
15f941e0aa | ||
|
83f040dc40 | ||
|
65cc6244a3 | ||
|
a8fe1b31af | ||
|
f024ba79a9 | ||
|
671590dd95 | ||
|
e2522d0506 | ||
|
7c4a1b3c9f | ||
|
ec22ecd777 | ||
|
0e691b76d0 | ||
|
e093dc8c9c | ||
|
f7aa848a62 | ||
|
44a4d89add |
3
.gitignore
vendored
|
@ -1,3 +0,0 @@
|
|||
.pio
|
||||
.DS_Store
|
||||
.vscode/
|
7
.vscode/extensions.json
vendored
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||
// for the documentation about the extensions.json format
|
||||
"recommendations": [
|
||||
"platformio.platformio-ide"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 3.1 MiB |
|
@ -1,12 +0,0 @@
|
|||
# Mounts
|
||||
|
||||
## `BlueSCSI-1.0-b_V2.stl` - Current
|
||||
|
||||
* Added more support on the side holes
|
||||
* Adjusted so 50pin headers dont hit standoff
|
||||
|
||||
## `BlueSCSI-1.0-b.stl`
|
||||
|
||||
An internal mount for the BlueSCSI 1.0-b. Provides side and bottom mounts.
|
||||
|
||||
BlueSCSI 3D files © 2021 by Eric Helgeson is licensed under Attribution-NonCommercial 4.0 International
|
BIN
ArdSCSinoV2.png
Before Width: | Height: | Size: 727 KiB |
BIN
GreenSCSI Manual.pdf
Normal file
BIN
GreenSCSI-DeadBug.jpg
Normal file
After Width: | Height: | Size: 3.6 MiB |
2
LICENSE
|
@ -39,4 +39,4 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
|
199
README.adoc
|
@ -1,199 +0,0 @@
|
|||
# BlueSCSI
|
||||
:toc: macro
|
||||
|
||||
BlueSCSI & ArdSCSino are hardware that reproduces SCSI devices (hard disks) with an Arduino STM32F103C (aka Blue Pill.)
|
||||
|
||||
`BlueSCSI` created by https://github.com/erichelgeson[erichelgeson] is a fork of `ArdSCSino-stm32` which adds:
|
||||
|
||||
* Usability Improvements
|
||||
* Mac specific functionality
|
||||
* Enable/Disable Passive SCSI termination
|
||||
* An alternative power source if not able to be powered by the SCSI bus
|
||||
* Documentation
|
||||
* Open Hardware (KiCad & Grebers)
|
||||
|
||||
`ArdSCSino-stm32` created by https://github.com/ztto/ArdSCSino-stm32[ztto] is the STM32 version of `ArdSCSino`
|
||||
|
||||
`ArdSCSino` created by https://twitter.com/h_koma2[Tambo (TNB Seisakusho)]
|
||||
|
||||
image::docs/buynow.png[link=https://gum.co/bluescsi-1b, 150]
|
||||
image::docs/discordbanner.png[https://discord.gg/GKcvtgU7P9, 150]
|
||||
|
||||
Join us in #bluescsi on https://discord.gg/GKcvtgU7P9[Discord] or open an issue on this repo.
|
||||
|
||||
toc::[]
|
||||
|
||||
## Compatibility
|
||||
|
||||
If your computer is not listed below - it may be compatible but there is no guarantee it will work. This device is designed and tested to work with pre-PowerPC Macs.
|
||||
|
||||
### Compatible
|
||||
|
||||
#### Tested by Me
|
||||
|
||||
SE, SE/30, Classic, Classic II, Mac II's, Color Classic, LC I/II/III, LC 475, LC 575
|
||||
|
||||
#### Partially Compatible
|
||||
|
||||
Mac Plus (1.0-c and above) - Only System 7 currenty works.
|
||||
|
||||
PowerPC - Some have had luck booting but is not recommended.
|
||||
|
||||
#### Reported by others
|
||||
|
||||
https://68kmla.org/forums/topic/61045-arduino-scsi-device-work-in-progress/?do=findComment&comment=663077[IIcx], https://68kmla.org/forums/topic/61045-arduino-scsi-device-work-in-progress/?do=findComment&comment=664446[PowerBook 100 (with custom adapter)]
|
||||
|
||||
## Performance
|
||||
|
||||
Tested on a Color Classic with https://macintoshgarden.org/apps/scsi-director-pro-40[SCSI Director Pro 4]
|
||||
```
|
||||
1024KB/Sec Write
|
||||
900KB/Sec Read
|
||||
1.01ms Seek
|
||||
```
|
||||
|
||||
## Assembly
|
||||
|
||||
++++
|
||||
See <a href="docs/assembly.md">docs/assembly.md</a>
|
||||
++++
|
||||
|
||||
## Usage
|
||||
|
||||
Hard Disk image files are placed in the root directory of a `ExFat` or `FAT32` formatted SD card. https://twitter.com/theory_retro/status/1376571371694723076[`ExFat` may be much faster]. Use a premade or blank disk below. These images are compatible with the RaSCSI device and Basilisk II emulator.
|
||||
|
||||
The naming convention is as follows (file name max 32 characters). Note you may mount multiple drives at a time to different SCSI ID's.
|
||||
|
||||
`HDxy_512.hda`
|
||||
```
|
||||
HD - Hard Disk
|
||||
x - SCSI ID to attach to. 0-7 (though 7 on a Macintosh is the System)
|
||||
y - LUN id usually 0.
|
||||
512 - Sector size. Usually 512. 256, 512, & 1024 supported.
|
||||
```
|
||||
|
||||
### Examples
|
||||
|
||||
`HD10_512.hda` - Hard Disk at SCSI ID 1, LUN 0, sector size of 512.
|
||||
|
||||
`HD51_512 System 6.0.8L LC.hda` - Hard Disk at SCSI ID 5, LUN 1, sector size of 512. Text between block size and .hda is ignored.
|
||||
|
||||
#### Bad
|
||||
|
||||
`HD99_712 foo bar fizz buzz bang.hda` Over 32 chars and invalid SCSI/LUN/Block size
|
||||
|
||||
If no image files are found PC13 will pulse on and off. Check the LOG.txt on the root of the SD card for any errors.
|
||||
|
||||
### Premade Images
|
||||
|
||||
Premade images are handy to just drop onto your SD card and go. You can use an emulator such as https://www.emaculation.com/doku.php/basiliskii_osx_setup[Basilisk II] on your modern machine to get software from places like the https://macintoshgarden.com[Macintosh Garden] to your vintage mac.
|
||||
|
||||
* Premade from savagetaylor.com (Use images from the "Drive" section) - https://www.savagetaylor.com/downloads/downloads-macintosh/
|
||||
* Premade from RaSCSI work as well - http://macintoshgarden.org/apps/rascsi-68kmla-edition
|
||||
|
||||
### Blanks
|
||||
|
||||
These are blank, formatted drives. If you want to install an OS or software on an empty drive, use one of these.
|
||||
|
||||
* Preformatted HFS blank images in various sizes - https://github.com/erichelgeson/BlueSCSI/tree/main/docs/MacHD.zip
|
||||
|
||||
### Custom Disk Images (Advanced)
|
||||
|
||||
This technique is useful when you would like a disk image larger than the pre-built images in the previous section.
|
||||
|
||||
The following instructions demonstrates the process using https://ss64.com/osx/dd.html[dd] on a modern Mac:
|
||||
|
||||
1. Open terminal.
|
||||
2. The following command will create a blank disk image. You can modify the command to suit your use.
|
||||
* `dd if=/dev/zero of=example.hda bs=1m count=500`
|
||||
* The `count` field defines the number of megabytes (`bs=1m`) the total disk image should be.
|
||||
* The output file from the command is "example.hda". This can be changed in the `of=example.hda` field.
|
||||
3. Place the new blank disk image in the root directory of your SD card.
|
||||
4. If you do not already have a tool to format SCSI drives, https://macintoshgarden.org/apps/lido-756[download LIDO]. You can use an emulator such as https://www.emaculation.com/doku.php/basiliskii_osx_setup[Basilisk II] to move files to the image to prepare your installation.
|
||||
5. After booting into your target machine with the working Mac OS disk image on your BlueSCSI from step 3, format the blank disk.
|
||||
|
||||
### Termination
|
||||
|
||||
To enable termination place the two jumpers on the TERM block. Termination should be enabled if it is the last device in the SCSI chain, otherwise remove the jumpers if it is not.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Check Log Files
|
||||
|
||||
If your device is not working - check the `LOG.txt` in the root of the SD card.
|
||||
|
||||
### Performance is slower than expected
|
||||
|
||||
Use ExFat instead of FAT32
|
||||
|
||||
Try a different SD card. Cheap/old SD cards can affect performance.
|
||||
|
||||
### Version Specific
|
||||
|
||||
<<docs/troubleshooting-1.0-b.adoc,Version 1.0-b>>
|
||||
|
||||
<<docs/troubleshooting-1.0-c.adoc,Version 1.0-c>>
|
||||
|
||||
## Hardware Versions
|
||||
|
||||
### 1.1-a (in testing)
|
||||
|
||||
* Other SCSI connection types
|
||||
* More silk screen art
|
||||
|
||||
### 1.0-c (Latest)
|
||||
|
||||
* Fixed issue with diode footprint being too small
|
||||
* Fixed issue with external power and `TERMPOWER`
|
||||
|
||||
### 1.0-b
|
||||
|
||||
First release
|
||||
|
||||
## Development (Advanced)
|
||||
|
||||
Below is for users who wish to edit or develop on the BluePill - normal users should not need to worry about this.
|
||||
|
||||
### Setup PlatformIO IDE
|
||||
|
||||
Open the project in https://platformio.org/platformio-ide[PlatformIO IDE] and everything is pre-configured.
|
||||
|
||||
## Flashing
|
||||
|
||||
When flashing you have two options:
|
||||
|
||||
Flash by setting up the IDE and re-compiling and programming. If you are a developer and plan to contribute this method is what you should use.
|
||||
|
||||
You may also flash the `.bin` file directly from https://www.st.com/en/development-tools/stm32cubeprog.html[STM32CubeProgrammer]. Use this method if you are not a developer and just wish to get the code to the BluePill.
|
||||
|
||||
### Using STLink v2 (prefered)
|
||||
|
||||
1. Remove SD Card
|
||||
2. Make sure the STLink is up to date - https://www.st.com/en/development-tools/stsw-link007.html[Latest Firmware]
|
||||
3. Connect pins `SWDIO`(2), `GND`(4), `SWCLK`(6), and `3.3v`(8) from the programmer to the Blue Pill. NOTE: These are not the same as Serial ports.
|
||||
4. Run the https://docs.platformio.org/en/latest/integration/ide/vscode.html#project-tasks[PlatformIO: Upload] task.
|
||||
5. You should see the LED `PC_13` flashing indicating no SD Card detected.
|
||||
6. Insert SD Card, boot on your favorite Mac!
|
||||
|
||||
#### Trouble Shooting
|
||||
|
||||
If the device is not detected you may need to hold reset, click program, once it is detected release reset.
|
||||
|
||||
If you are unable to get the device in DFU mode for programming you may need to use https://www.st.com/en/development-tools/stm32cubeprog.html[STM32CubeProgrammer] to erase the chip.
|
||||
|
||||
### Alterantive upload methods
|
||||
|
||||
See the https://docs.platformio.org/en/latest/boards/ststm32/bluepill_f103c8.html#uploading[uploading] documentation on PlatformIO for alterantives.
|
||||
|
||||
### Using USB HID
|
||||
|
||||
Note: I have not been able to get this method to work. Please contribute to this document if you do.
|
||||
|
||||
## Notes
|
||||
|
||||
### Making Gerbers for JLCPCB
|
||||
|
||||
https://support.jlcpcb.com/article/44-how-to-export-kicad-pcb-to-gerber-files
|
||||
|
||||
|
||||
BlueSCSI(TM) - Eric Helgeson - All rights reserved.
|
16
README.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
# GreenSCSI
|
||||
![DeadBug assembly of a Teensy 3.5 directly on a 50 pin SCSI header!](/GreenSCSI-DeadBug.jpg "GreenSCSI Teensy 3.5 Dead Bug")
|
||||
|
||||
|
||||
GreenSCSI, BlueSCSI & ArdSCSino are hardware that reproduce SCSI devices (hard disks) with Arduino like devices.
|
||||
|
||||
`GreenSCSI` created by https://github.com/dkgrizzly [dkgrizzly] is a fork of `BlueSCSI` which adds:
|
||||
|
||||
* Teensy 3.5 (Kinetis K64...) support
|
||||
* Better LUN handling
|
||||
|
||||
`BlueSCSI` created by https://github.com/erichelgeson [erichelgeson] is a fork of `ArdSCSino-stm32`
|
||||
|
||||
`ArdSCSino-stm32` created by https://github.com/ztto/ArdSCSino-stm32 [ztto] is the STM32 version of `ArdSCSino`
|
||||
|
||||
`ArdSCSino` created by https://twitter.com/h_koma2 [Tambo (TNB Seisakusho)]
|
4202
case/GreenSCSI-bottom.stl
Normal file
1402
case/GreenSCSI-top.stl
Normal file
|
@ -1,27 +0,0 @@
|
|||
# BlueSCSI 1.0-b to 1.0-c
|
||||
:toc: macro
|
||||
|
||||
## Introduction
|
||||
|
||||
1.0-c was a small change to fix an issue with machines that provide low or no `TERMPOWER` over the SCSI bus. If you recived a Fully Assembled BlueSCSI after April 1st, 2021 then this was done for you. If you have a kit labled 1.0-b you can make these modifications to become a 1.0-c.
|
||||
|
||||
## Steps
|
||||
|
||||
### Disconnect `TERMPOWER` from 220 Pull Up Jupmer
|
||||
|
||||
Use a cutting tool to cut the small trace between the `TERMPOWR` and 220 Pull Up Jumper pictured below.
|
||||
|
||||
Make sure continiutiy from `TERMPOWER` to the diode still flows correctly but is disconnected from the jumper.
|
||||
|
||||
image::images/1.0-b-bodge-1.jpg[]
|
||||
|
||||
### Connect 5V to 220 Pull Up Jupmer
|
||||
|
||||
Now we will provide pull up from the 5v provided by the BluePill.
|
||||
|
||||
image::images/1.0-b-bodge-2.png[]
|
||||
|
||||
### Complete!
|
||||
|
||||
Thats it! 5v to the Pull Up resistors will now work when powered externally.
|
||||
|
BIN
docs/MacHD.zip
|
@ -1 +0,0 @@
|
|||
BlueSCSI Documentation © 2021 by Eric Helgeson is licensed under Attribution-NonCommercial 4.0 International
|
|
@ -1,54 +0,0 @@
|
|||
# Assembly
|
||||
|
||||
## Before you start
|
||||
|
||||
Read through all instructions before starting.
|
||||
|
||||
## Building
|
||||
|
||||
1. Solder on the surface mount SD Card holder. Use the [Drag Solder](https://youtu.be/Z_KL4fWOMug) technique.
|
||||
- Once on, check continuity of all connections. Fixing this after the BluePill is on will be difficult.
|
||||
- Ensure the SD card fits and you dont have too much solder on the sides or contacts
|
||||
2. Solder the dioeds to the **bottom** of the board. Be sure they are flush as possible to the bottom.
|
||||
![Diode Orientation](images/diodes.png)
|
||||
3. Solder the header pins on to the BluePill. Then BluePill pill to the BlueSCSI PCB.
|
||||
- Correct orientation is having the USB connector of the BluePill should be over the SD Card holder.
|
||||
4. Solder on the resistor nets. Pin one is marked on the board and the resistors.
|
||||
- 220 RNETS (`RN1` & `RN3`) are closest to the BluePill
|
||||
- Note PIN one on each - they are opposite of eachtoher. See photo.
|
||||
- 330 RNETS (`RN2` & `RN4`) are furthest from the BluePill
|
||||
- Note PIN one on each - they are opposite of eachtoher. See photo.
|
||||
![Orientation RNETs and BluePill](images/orientation.png)
|
||||
5. Solder on the Termination Jumpers & place the jumpers on to enable Termiation
|
||||
6. Solder the 50 Pin headers on.
|
||||
1. Note Pin 1 and Box header on the silk screen.
|
||||
7. Optional - Solder on the berg connector. Only needed if your machine does not supply enough power via the SCSI bus.
|
||||
8. Optional - Solder on the debug headers near the SD card. Only nessissarry if re-programming.
|
||||
|
||||
### Fully Assembled
|
||||
![Fully Assembled](images/assembled.png)
|
||||
|
||||
### Version 1.0-b BOM
|
||||
|
||||
STM32F103C8T6 (U1) aka BluePill board. Beware of fake/scams. Look for reviews. Amazon, ebay, etc.
|
||||
|
||||
Mouser Cart https://www.mouser.com/ProjectManager/ProjectDetail.aspx?State=EDIT&ProjectGUID=db967d46-a51a-4a0e-a350-8f503b2f02cf
|
||||
|
||||
* 2x 330 (RN2, RN4) Resistor nets https://www.mouser.com/ProductDetail/652-4610X-1LF-330
|
||||
|
||||
* 2x 220 (RN1, RN3) Resistor nets https://www.mouser.com/ProductDetail/652-4610X-1LF-220
|
||||
|
||||
* 2x Diodes https://www.mouser.com/ProductDetail/583-1N5818-T
|
||||
|
||||
* SD Card Holder (J1) https://www.mouser.com/ProductDetail/538-104031-0811
|
||||
|
||||
* Headers https://www.mouser.com/ProductDetail/872-920-0011-01
|
||||
|
||||
* 50 PIN SCSI header https://www.mouser.com/ProductDetail/517-30350-6002/
|
||||
- May substitute with 2 rows of headers from above.
|
||||
- **Note on Right angle connectors** - it appears Right angle headers are notched differently then the pin out. Be sure to note PIN 1/red stripe on the cable match up.
|
||||
|
||||
### Optional
|
||||
|
||||
Floppy/Berg Power header https://www.mouser.com/ProductDetail/571-1718254
|
||||
- Required if your machine does not supply power via TERM POWER. For example a Mac Plus or Mac with a Analog/PSU board that has not been recapped.
|
BIN
docs/buynow.png
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 743 KiB |
Before Width: | Height: | Size: 17 MiB |
Before Width: | Height: | Size: 488 KiB |
|
@ -1,26 +0,0 @@
|
|||
# Troubleshooting 1.0-b
|
||||
:toc: macro
|
||||
|
||||
NOTE: If your BlueSCSI was shipped after April 3rd, 2021 please refer to the 1.0-c troubleshooting guide.
|
||||
|
||||
## Green LED Flashes on and off
|
||||
|
||||
This indicates BlueSCSI could not find any files on the SD card or communicate with the SD card.
|
||||
|
||||
Ensure your files are named properly (case sensitive) following the naming convetion in the readme.
|
||||
|
||||
If you recived a kit - verify all connections and that the outside of the SD holder is grounded.
|
||||
|
||||
## LOG.txt is empty
|
||||
|
||||
This indicates the BlueSCSI could communicate with the SD Card but found no files. Check your naming convention.
|
||||
|
||||
## Slow performance
|
||||
|
||||
Ensure you are using a good SD card. SD card quality can vary widely.
|
||||
|
||||
Format your card as ExFat - users have seen quite a jump in performance.
|
||||
|
||||
## (Kit Only) Verify you are not using a fake
|
||||
|
||||
https://github.com/keirf/Greaseweazle/wiki/STM32-Fakes[How to tell if your STM32 is fake]
|
|
@ -1,24 +0,0 @@
|
|||
# Troubleshooting 1.0-c
|
||||
:toc: macro
|
||||
|
||||
## Review the LOG.txt
|
||||
|
||||
There should logs that indicate what BlueSCSI did at startup.
|
||||
|
||||
## Green LED Flashes on and off 3x
|
||||
|
||||
This indicates BlueSCSI could not find any files on the SD card or communicate with the SD card.
|
||||
|
||||
Ensure your files are named properly (case sensitive) following the naming convetion in the readme.
|
||||
|
||||
If you recived a kit - verify all connections and that the outside of the SD holder is grounded.
|
||||
|
||||
## Slow performance
|
||||
|
||||
Ensure you are using a good SD card. SD card quality can vary widely.
|
||||
|
||||
Format your card as ExFat - users have seen quite a jump in performance.
|
||||
|
||||
## (Kit Only) Verify you are not using a fake
|
||||
|
||||
https://github.com/keirf/Greaseweazle/wiki/STM32-Fakes[How to tell if your STM32 is fake]
|
220
hardware/mvp/GreenSCSI-cache.lib
Normal file
|
@ -0,0 +1,220 @@
|
|||
EESchema-LIBRARY Version 2.4
|
||||
#encoding utf-8
|
||||
#
|
||||
# Connector_Generic_Conn_01x02
|
||||
#
|
||||
DEF Connector_Generic_Conn_01x02 J 0 40 Y N 1 F N
|
||||
F0 "J" 0 100 50 H V C CNN
|
||||
F1 "Connector_Generic_Conn_01x02" 0 -200 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_1x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -50 -95 0 -105 1 1 6 N
|
||||
S -50 5 0 -5 1 1 6 N
|
||||
S -50 50 50 -150 1 1 10 f
|
||||
X Pin_1 1 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Generic_Conn_01x04
|
||||
#
|
||||
DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N
|
||||
F0 "J" 0 200 50 H V C CNN
|
||||
F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_1x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -50 -195 0 -205 1 1 6 N
|
||||
S -50 -95 0 -105 1 1 6 N
|
||||
S -50 5 0 -5 1 1 6 N
|
||||
S -50 105 0 95 1 1 6 N
|
||||
S -50 150 50 -250 1 1 10 f
|
||||
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||
X Pin_2 2 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
|
||||
X Pin_4 4 -200 -200 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Generic_Conn_01x22
|
||||
#
|
||||
DEF Connector_Generic_Conn_01x22 J 0 40 Y N 1 F N
|
||||
F0 "J" 0 1100 50 H V C CNN
|
||||
F1 "Connector_Generic_Conn_01x22" 0 -1200 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_1x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -50 -1095 0 -1105 1 1 6 N
|
||||
S -50 -995 0 -1005 1 1 6 N
|
||||
S -50 -895 0 -905 1 1 6 N
|
||||
S -50 -795 0 -805 1 1 6 N
|
||||
S -50 -695 0 -705 1 1 6 N
|
||||
S -50 -595 0 -605 1 1 6 N
|
||||
S -50 -495 0 -505 1 1 6 N
|
||||
S -50 -395 0 -405 1 1 6 N
|
||||
S -50 -295 0 -305 1 1 6 N
|
||||
S -50 -195 0 -205 1 1 6 N
|
||||
S -50 -95 0 -105 1 1 6 N
|
||||
S -50 5 0 -5 1 1 6 N
|
||||
S -50 105 0 95 1 1 6 N
|
||||
S -50 205 0 195 1 1 6 N
|
||||
S -50 305 0 295 1 1 6 N
|
||||
S -50 405 0 395 1 1 6 N
|
||||
S -50 505 0 495 1 1 6 N
|
||||
S -50 605 0 595 1 1 6 N
|
||||
S -50 705 0 695 1 1 6 N
|
||||
S -50 805 0 795 1 1 6 N
|
||||
S -50 905 0 895 1 1 6 N
|
||||
S -50 1005 0 995 1 1 6 N
|
||||
S -50 1050 50 -1150 1 1 10 f
|
||||
X Pin_1 1 -200 1000 150 R 50 50 1 1 P
|
||||
X Pin_10 10 -200 100 150 R 50 50 1 1 P
|
||||
X Pin_11 11 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_12 12 -200 -100 150 R 50 50 1 1 P
|
||||
X Pin_13 13 -200 -200 150 R 50 50 1 1 P
|
||||
X Pin_14 14 -200 -300 150 R 50 50 1 1 P
|
||||
X Pin_15 15 -200 -400 150 R 50 50 1 1 P
|
||||
X Pin_16 16 -200 -500 150 R 50 50 1 1 P
|
||||
X Pin_17 17 -200 -600 150 R 50 50 1 1 P
|
||||
X Pin_18 18 -200 -700 150 R 50 50 1 1 P
|
||||
X Pin_19 19 -200 -800 150 R 50 50 1 1 P
|
||||
X Pin_2 2 -200 900 150 R 50 50 1 1 P
|
||||
X Pin_20 20 -200 -900 150 R 50 50 1 1 P
|
||||
X Pin_21 21 -200 -1000 150 R 50 50 1 1 P
|
||||
X Pin_22 22 -200 -1100 150 R 50 50 1 1 P
|
||||
X Pin_3 3 -200 800 150 R 50 50 1 1 P
|
||||
X Pin_4 4 -200 700 150 R 50 50 1 1 P
|
||||
X Pin_5 5 -200 600 150 R 50 50 1 1 P
|
||||
X Pin_6 6 -200 500 150 R 50 50 1 1 P
|
||||
X Pin_7 7 -200 400 150 R 50 50 1 1 P
|
||||
X Pin_8 8 -200 300 150 R 50 50 1 1 P
|
||||
X Pin_9 9 -200 200 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Generic_Conn_02x25_Odd_Even
|
||||
#
|
||||
DEF Connector_Generic_Conn_02x25_Odd_Even J 0 40 Y N 1 F N
|
||||
F0 "J" 50 1300 50 H V C CNN
|
||||
F1 "Connector_Generic_Conn_02x25_Odd_Even" 50 -1300 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_2x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -50 -1195 0 -1205 1 1 6 N
|
||||
S -50 -1095 0 -1105 1 1 6 N
|
||||
S -50 -995 0 -1005 1 1 6 N
|
||||
S -50 -895 0 -905 1 1 6 N
|
||||
S -50 -795 0 -805 1 1 6 N
|
||||
S -50 -695 0 -705 1 1 6 N
|
||||
S -50 -595 0 -605 1 1 6 N
|
||||
S -50 -495 0 -505 1 1 6 N
|
||||
S -50 -395 0 -405 1 1 6 N
|
||||
S -50 -295 0 -305 1 1 6 N
|
||||
S -50 -195 0 -205 1 1 6 N
|
||||
S -50 -95 0 -105 1 1 6 N
|
||||
S -50 5 0 -5 1 1 6 N
|
||||
S -50 105 0 95 1 1 6 N
|
||||
S -50 205 0 195 1 1 6 N
|
||||
S -50 305 0 295 1 1 6 N
|
||||
S -50 405 0 395 1 1 6 N
|
||||
S -50 505 0 495 1 1 6 N
|
||||
S -50 605 0 595 1 1 6 N
|
||||
S -50 705 0 695 1 1 6 N
|
||||
S -50 805 0 795 1 1 6 N
|
||||
S -50 905 0 895 1 1 6 N
|
||||
S -50 1005 0 995 1 1 6 N
|
||||
S -50 1105 0 1095 1 1 6 N
|
||||
S -50 1205 0 1195 1 1 6 N
|
||||
S -50 1250 150 -1250 1 1 10 f
|
||||
S 150 -1195 100 -1205 1 1 6 N
|
||||
S 150 -1095 100 -1105 1 1 6 N
|
||||
S 150 -995 100 -1005 1 1 6 N
|
||||
S 150 -895 100 -905 1 1 6 N
|
||||
S 150 -795 100 -805 1 1 6 N
|
||||
S 150 -695 100 -705 1 1 6 N
|
||||
S 150 -595 100 -605 1 1 6 N
|
||||
S 150 -495 100 -505 1 1 6 N
|
||||
S 150 -395 100 -405 1 1 6 N
|
||||
S 150 -295 100 -305 1 1 6 N
|
||||
S 150 -195 100 -205 1 1 6 N
|
||||
S 150 -95 100 -105 1 1 6 N
|
||||
S 150 5 100 -5 1 1 6 N
|
||||
S 150 105 100 95 1 1 6 N
|
||||
S 150 205 100 195 1 1 6 N
|
||||
S 150 305 100 295 1 1 6 N
|
||||
S 150 405 100 395 1 1 6 N
|
||||
S 150 505 100 495 1 1 6 N
|
||||
S 150 605 100 595 1 1 6 N
|
||||
S 150 705 100 695 1 1 6 N
|
||||
S 150 805 100 795 1 1 6 N
|
||||
S 150 905 100 895 1 1 6 N
|
||||
S 150 1005 100 995 1 1 6 N
|
||||
S 150 1105 100 1095 1 1 6 N
|
||||
S 150 1205 100 1195 1 1 6 N
|
||||
X Pin_1 1 -200 1200 150 R 50 50 1 1 P
|
||||
X Pin_10 10 300 800 150 L 50 50 1 1 P
|
||||
X Pin_11 11 -200 700 150 R 50 50 1 1 P
|
||||
X Pin_12 12 300 700 150 L 50 50 1 1 P
|
||||
X Pin_13 13 -200 600 150 R 50 50 1 1 P
|
||||
X Pin_14 14 300 600 150 L 50 50 1 1 P
|
||||
X Pin_15 15 -200 500 150 R 50 50 1 1 P
|
||||
X Pin_16 16 300 500 150 L 50 50 1 1 P
|
||||
X Pin_17 17 -200 400 150 R 50 50 1 1 P
|
||||
X Pin_18 18 300 400 150 L 50 50 1 1 P
|
||||
X Pin_19 19 -200 300 150 R 50 50 1 1 P
|
||||
X Pin_2 2 300 1200 150 L 50 50 1 1 P
|
||||
X Pin_20 20 300 300 150 L 50 50 1 1 P
|
||||
X Pin_21 21 -200 200 150 R 50 50 1 1 P
|
||||
X Pin_22 22 300 200 150 L 50 50 1 1 P
|
||||
X Pin_23 23 -200 100 150 R 50 50 1 1 P
|
||||
X Pin_24 24 300 100 150 L 50 50 1 1 P
|
||||
X Pin_25 25 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_26 26 300 0 150 L 50 50 1 1 P
|
||||
X Pin_27 27 -200 -100 150 R 50 50 1 1 P
|
||||
X Pin_28 28 300 -100 150 L 50 50 1 1 P
|
||||
X Pin_29 29 -200 -200 150 R 50 50 1 1 P
|
||||
X Pin_3 3 -200 1100 150 R 50 50 1 1 P
|
||||
X Pin_30 30 300 -200 150 L 50 50 1 1 P
|
||||
X Pin_31 31 -200 -300 150 R 50 50 1 1 P
|
||||
X Pin_32 32 300 -300 150 L 50 50 1 1 P
|
||||
X Pin_33 33 -200 -400 150 R 50 50 1 1 P
|
||||
X Pin_34 34 300 -400 150 L 50 50 1 1 P
|
||||
X Pin_35 35 -200 -500 150 R 50 50 1 1 P
|
||||
X Pin_36 36 300 -500 150 L 50 50 1 1 P
|
||||
X Pin_37 37 -200 -600 150 R 50 50 1 1 P
|
||||
X Pin_38 38 300 -600 150 L 50 50 1 1 P
|
||||
X Pin_39 39 -200 -700 150 R 50 50 1 1 P
|
||||
X Pin_4 4 300 1100 150 L 50 50 1 1 P
|
||||
X Pin_40 40 300 -700 150 L 50 50 1 1 P
|
||||
X Pin_41 41 -200 -800 150 R 50 50 1 1 P
|
||||
X Pin_42 42 300 -800 150 L 50 50 1 1 P
|
||||
X Pin_43 43 -200 -900 150 R 50 50 1 1 P
|
||||
X Pin_44 44 300 -900 150 L 50 50 1 1 P
|
||||
X Pin_45 45 -200 -1000 150 R 50 50 1 1 P
|
||||
X Pin_46 46 300 -1000 150 L 50 50 1 1 P
|
||||
X Pin_47 47 -200 -1100 150 R 50 50 1 1 P
|
||||
X Pin_48 48 300 -1100 150 L 50 50 1 1 P
|
||||
X Pin_49 49 -200 -1200 150 R 50 50 1 1 P
|
||||
X Pin_5 5 -200 1000 150 R 50 50 1 1 P
|
||||
X Pin_50 50 300 -1200 150 L 50 50 1 1 P
|
||||
X Pin_6 6 300 1000 150 L 50 50 1 1 P
|
||||
X Pin_7 7 -200 900 150 R 50 50 1 1 P
|
||||
X Pin_8 8 300 900 150 L 50 50 1 1 P
|
||||
X Pin_9 9 -200 800 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
2038
hardware/mvp/GreenSCSI.kicad_pcb
Normal file
33
hardware/mvp/GreenSCSI.pro
Normal file
|
@ -0,0 +1,33 @@
|
|||
update=22/05/2015 07:44:53
|
||||
version=1
|
||||
last_client=kicad
|
||||
[general]
|
||||
version=1
|
||||
RootSch=
|
||||
BoardNm=
|
||||
[pcbnew]
|
||||
version=1
|
||||
LastNetListRead=
|
||||
UseCmpFile=1
|
||||
PadDrill=0.600000000000
|
||||
PadDrillOvalY=0.600000000000
|
||||
PadSizeH=1.500000000000
|
||||
PadSizeV=1.500000000000
|
||||
PcbTextSizeV=1.500000000000
|
||||
PcbTextSizeH=1.500000000000
|
||||
PcbTextThickness=0.300000000000
|
||||
ModuleTextSizeV=1.000000000000
|
||||
ModuleTextSizeH=1.000000000000
|
||||
ModuleTextSizeThickness=0.150000000000
|
||||
SolderMaskClearance=0.000000000000
|
||||
SolderMaskMinWidth=0.000000000000
|
||||
DrawSegmentWidth=0.200000000000
|
||||
BoardOutlineThickness=0.100000000000
|
||||
ModuleOutlineThickness=0.150000000000
|
||||
[cvpcb]
|
||||
version=1
|
||||
NetIExt=net
|
||||
[eeschema]
|
||||
version=1
|
||||
LibDir=
|
||||
[eeschema/libraries]
|
374
hardware/mvp/GreenSCSI.sch
Normal file
|
@ -0,0 +1,374 @@
|
|||
EESchema Schematic File Version 4
|
||||
EELAYER 30 0
|
||||
EELAYER END
|
||||
$Descr A4 11693 8268
|
||||
encoding utf-8
|
||||
Sheet 1 1
|
||||
Title ""
|
||||
Date ""
|
||||
Rev ""
|
||||
Comp ""
|
||||
Comment1 ""
|
||||
Comment2 ""
|
||||
Comment3 ""
|
||||
Comment4 ""
|
||||
$EndDescr
|
||||
$Comp
|
||||
L Connector_Generic:Conn_02x25_Odd_Even P4
|
||||
U 1 1 61981AC2
|
||||
P 2900 4150
|
||||
F 0 "P4" H 2950 5567 50 0000 C CNN
|
||||
F 1 "SCSI" H 2950 5476 50 0000 C CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_2x25_P2.54mm_Horizontal" H 2900 4150 50 0001 C CNN
|
||||
F 3 "~" H 2900 4150 50 0001 C CNN
|
||||
1 2900 4150
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Connector_Generic:Conn_01x04 P3
|
||||
U 1 1 6198359E
|
||||
P 7950 4800
|
||||
F 0 "P3" H 7950 5050 50 0000 C CNN
|
||||
F 1 "Teensy" H 7950 4450 50 0000 C CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 7950 4800 50 0001 C CNN
|
||||
F 3 "~" H 7950 4800 50 0001 C CNN
|
||||
1 7950 4800
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Connector_Generic:Conn_01x22 P1
|
||||
U 1 1 61983D48
|
||||
P 6700 4100
|
||||
F 0 "P1" H 6700 5250 50 0000 C CNN
|
||||
F 1 "Teensy" H 6700 2850 50 0000 C CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x22_P2.54mm_Vertical" H 6700 4100 50 0001 C CNN
|
||||
F 3 "~" H 6700 4100 50 0001 C CNN
|
||||
1 6700 4100
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Connector_Generic:Conn_01x22 P2
|
||||
U 1 1 61984761
|
||||
P 8250 4100
|
||||
F 0 "P2" H 8250 5250 50 0000 C CNN
|
||||
F 1 "Teensy" H 8250 2850 50 0000 C CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x22_P2.54mm_Vertical" H 8250 4100 50 0001 C CNN
|
||||
F 3 "~" H 8250 4100 50 0001 C CNN
|
||||
1 8250 4100
|
||||
-1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
2700 2950 2450 2950
|
||||
Wire Wire Line
|
||||
2450 2950 2450 3050
|
||||
Wire Wire Line
|
||||
2450 4050 2700 4050
|
||||
Wire Wire Line
|
||||
2700 4250 2450 4250
|
||||
Wire Wire Line
|
||||
2450 4250 2450 4350
|
||||
Wire Wire Line
|
||||
2450 5350 2700 5350
|
||||
Wire Wire Line
|
||||
2700 5250 2450 5250
|
||||
Connection ~ 2450 5250
|
||||
Wire Wire Line
|
||||
2450 5250 2450 5350
|
||||
Wire Wire Line
|
||||
2700 5150 2450 5150
|
||||
Connection ~ 2450 5150
|
||||
Wire Wire Line
|
||||
2450 5150 2450 5250
|
||||
Wire Wire Line
|
||||
2700 5050 2450 5050
|
||||
Connection ~ 2450 5050
|
||||
Wire Wire Line
|
||||
2450 5050 2450 5150
|
||||
Wire Wire Line
|
||||
2700 4950 2450 4950
|
||||
Connection ~ 2450 4950
|
||||
Wire Wire Line
|
||||
2450 4950 2450 5050
|
||||
Wire Wire Line
|
||||
2700 4850 2450 4850
|
||||
Connection ~ 2450 4850
|
||||
Wire Wire Line
|
||||
2450 4850 2450 4950
|
||||
Wire Wire Line
|
||||
2700 4750 2450 4750
|
||||
Connection ~ 2450 4750
|
||||
Wire Wire Line
|
||||
2450 4750 2450 4850
|
||||
Wire Wire Line
|
||||
2700 4650 2450 4650
|
||||
Connection ~ 2450 4650
|
||||
Wire Wire Line
|
||||
2450 4650 2450 4750
|
||||
Wire Wire Line
|
||||
2700 4550 2450 4550
|
||||
Connection ~ 2450 4550
|
||||
Wire Wire Line
|
||||
2450 4550 2450 4650
|
||||
Wire Wire Line
|
||||
2700 4450 2450 4450
|
||||
Connection ~ 2450 4450
|
||||
Wire Wire Line
|
||||
2450 4450 2450 4550
|
||||
Wire Wire Line
|
||||
2700 4350 2450 4350
|
||||
Connection ~ 2450 4350
|
||||
Wire Wire Line
|
||||
2450 4350 2450 4450
|
||||
Wire Wire Line
|
||||
2700 3050 2450 3050
|
||||
Connection ~ 2450 3050
|
||||
Wire Wire Line
|
||||
2450 3050 2450 3150
|
||||
Wire Wire Line
|
||||
2700 3150 2450 3150
|
||||
Connection ~ 2450 3150
|
||||
Wire Wire Line
|
||||
2450 3150 2450 3250
|
||||
Wire Wire Line
|
||||
2700 3250 2450 3250
|
||||
Connection ~ 2450 3250
|
||||
Wire Wire Line
|
||||
2450 3250 2450 3350
|
||||
Wire Wire Line
|
||||
2700 3350 2450 3350
|
||||
Connection ~ 2450 3350
|
||||
Wire Wire Line
|
||||
2450 3350 2450 3450
|
||||
Wire Wire Line
|
||||
2700 3450 2450 3450
|
||||
Connection ~ 2450 3450
|
||||
Wire Wire Line
|
||||
2450 3450 2450 3550
|
||||
Wire Wire Line
|
||||
2700 3550 2450 3550
|
||||
Connection ~ 2450 3550
|
||||
Wire Wire Line
|
||||
2450 3550 2450 3650
|
||||
Wire Wire Line
|
||||
2700 3650 2450 3650
|
||||
Connection ~ 2450 3650
|
||||
Wire Wire Line
|
||||
2450 3650 2450 3750
|
||||
Wire Wire Line
|
||||
2700 3750 2450 3750
|
||||
Connection ~ 2450 3750
|
||||
Wire Wire Line
|
||||
2450 3750 2450 3850
|
||||
Wire Wire Line
|
||||
2700 3850 2450 3850
|
||||
Connection ~ 2450 3850
|
||||
Wire Wire Line
|
||||
2450 3850 2450 3950
|
||||
Wire Wire Line
|
||||
2700 3950 2450 3950
|
||||
Connection ~ 2450 3950
|
||||
Wire Wire Line
|
||||
2450 3950 2450 4050
|
||||
Wire Wire Line
|
||||
2150 4150 2700 4150
|
||||
Wire Wire Line
|
||||
3200 2950 3750 2950
|
||||
Wire Wire Line
|
||||
3200 3050 3750 3050
|
||||
Wire Wire Line
|
||||
3200 3150 3750 3150
|
||||
Wire Wire Line
|
||||
3200 3250 3750 3250
|
||||
Wire Wire Line
|
||||
3200 3350 3750 3350
|
||||
Wire Wire Line
|
||||
3200 3450 3750 3450
|
||||
Wire Wire Line
|
||||
3200 3550 3750 3550
|
||||
Wire Wire Line
|
||||
3200 3650 3750 3650
|
||||
Wire Wire Line
|
||||
3200 3750 3750 3750
|
||||
Wire Wire Line
|
||||
3200 5350 3750 5350
|
||||
Wire Wire Line
|
||||
3200 5250 3750 5250
|
||||
Wire Wire Line
|
||||
3200 5150 3750 5150
|
||||
Wire Wire Line
|
||||
3200 5050 3750 5050
|
||||
Wire Wire Line
|
||||
3200 4950 3750 4950
|
||||
Wire Wire Line
|
||||
3200 4850 3750 4850
|
||||
Wire Wire Line
|
||||
3200 4750 3750 4750
|
||||
Wire Wire Line
|
||||
3200 4650 3750 4650
|
||||
Wire Wire Line
|
||||
3200 4450 3750 4450
|
||||
Wire Wire Line
|
||||
3450 4350 3200 4350
|
||||
Wire Wire Line
|
||||
3450 3850 3200 3850
|
||||
Wire Wire Line
|
||||
3450 3950 3200 3950
|
||||
Wire Wire Line
|
||||
3450 4050 3200 4050
|
||||
Wire Wire Line
|
||||
3450 4250 3200 4250
|
||||
Wire Wire Line
|
||||
3450 4350 3450 4250
|
||||
Wire Wire Line
|
||||
3450 4250 3450 4050
|
||||
Connection ~ 3450 4250
|
||||
Wire Wire Line
|
||||
3450 4050 3450 3950
|
||||
Connection ~ 3450 4050
|
||||
Wire Wire Line
|
||||
3450 3950 3450 3850
|
||||
Connection ~ 3450 3950
|
||||
Text Label 2500 4050 0 50 ~ 0
|
||||
GND
|
||||
Text Label 2500 5350 0 50 ~ 0
|
||||
GND
|
||||
Text Label 3250 4050 0 50 ~ 0
|
||||
GND
|
||||
Text Label 2150 4150 0 50 ~ 0
|
||||
TERMPWR
|
||||
Text Label 3750 2950 2 50 ~ 0
|
||||
~DB0
|
||||
Text Label 3750 3050 2 50 ~ 0
|
||||
~DB1
|
||||
Text Label 3750 3150 2 50 ~ 0
|
||||
~DB2
|
||||
Text Label 3750 3250 2 50 ~ 0
|
||||
~DB3
|
||||
Text Label 3750 3350 2 50 ~ 0
|
||||
~DB4
|
||||
Text Label 3750 3450 2 50 ~ 0
|
||||
~DB5
|
||||
Text Label 3750 3550 2 50 ~ 0
|
||||
~DB6
|
||||
Text Label 3750 3650 2 50 ~ 0
|
||||
~DB7
|
||||
Text Label 3750 3750 2 50 ~ 0
|
||||
~DBP
|
||||
Text Label 3750 4450 2 50 ~ 0
|
||||
~ATN
|
||||
Text Label 3750 4650 2 50 ~ 0
|
||||
~BSY
|
||||
Text Label 3750 4750 2 50 ~ 0
|
||||
~ACK
|
||||
Text Label 3750 4850 2 50 ~ 0
|
||||
~RST
|
||||
Text Label 3750 4950 2 50 ~ 0
|
||||
~MSG
|
||||
Text Label 3750 5050 2 50 ~ 0
|
||||
~SEL
|
||||
Text Label 3750 5150 2 50 ~ 0
|
||||
~C~\D
|
||||
Text Label 3750 5250 2 50 ~ 0
|
||||
~REQ
|
||||
Text Label 3750 5350 2 50 ~ 0
|
||||
~I~\O
|
||||
Wire Wire Line
|
||||
6500 3500 5950 3500
|
||||
Wire Wire Line
|
||||
6500 3600 5950 3600
|
||||
Wire Wire Line
|
||||
6500 3700 5950 3700
|
||||
Wire Wire Line
|
||||
6500 3800 5950 3800
|
||||
Wire Wire Line
|
||||
6500 3900 5950 3900
|
||||
Wire Wire Line
|
||||
6500 4000 5950 4000
|
||||
Wire Wire Line
|
||||
6500 4100 5950 4100
|
||||
Wire Wire Line
|
||||
6500 4200 5950 4200
|
||||
Wire Wire Line
|
||||
6500 4400 5950 4400
|
||||
Text Label 5950 4400 0 50 ~ 0
|
||||
~ATN
|
||||
Text Label 5950 4200 0 50 ~ 0
|
||||
~BSY
|
||||
Text Label 5950 4100 0 50 ~ 0
|
||||
~ACK
|
||||
Text Label 5950 4000 0 50 ~ 0
|
||||
~RST
|
||||
Text Label 5950 3900 0 50 ~ 0
|
||||
~MSG
|
||||
Text Label 5950 3800 0 50 ~ 0
|
||||
~SEL
|
||||
Text Label 5950 3700 0 50 ~ 0
|
||||
~C~\D
|
||||
Text Label 5950 3600 0 50 ~ 0
|
||||
~REQ
|
||||
Text Label 5950 3500 0 50 ~ 0
|
||||
~I~\O
|
||||
Wire Wire Line
|
||||
6500 3100 5950 3100
|
||||
Text Label 5950 3100 0 50 ~ 0
|
||||
GND
|
||||
Wire Wire Line
|
||||
6500 3200 5950 3200
|
||||
Wire Wire Line
|
||||
6500 3300 5950 3300
|
||||
Text Label 5950 3200 0 50 ~ 0
|
||||
~DB0
|
||||
Text Label 5950 3300 0 50 ~ 0
|
||||
~DB1
|
||||
Wire Wire Line
|
||||
6500 4900 5950 4900
|
||||
Wire Wire Line
|
||||
6500 5000 5950 5000
|
||||
Text Label 5950 4900 0 50 ~ 0
|
||||
~DB2
|
||||
Text Label 5950 5000 0 50 ~ 0
|
||||
~DB3
|
||||
Wire Wire Line
|
||||
6500 5200 5950 5200
|
||||
Text Label 5950 5200 0 50 ~ 0
|
||||
~DBP
|
||||
Wire Wire Line
|
||||
7750 4700 7200 4700
|
||||
Wire Wire Line
|
||||
7750 5000 7200 5000
|
||||
Wire Wire Line
|
||||
7750 4800 7200 4800
|
||||
Wire Wire Line
|
||||
7750 4900 7200 4900
|
||||
Text Label 7200 4700 0 50 ~ 0
|
||||
~DB4
|
||||
Text Label 7200 5000 0 50 ~ 0
|
||||
~DB5
|
||||
Text Label 7200 4800 0 50 ~ 0
|
||||
~DB6
|
||||
Text Label 7200 4900 0 50 ~ 0
|
||||
~DB7
|
||||
$Comp
|
||||
L Connector_Generic:Conn_01x02 J1
|
||||
U 1 1 619D027D
|
||||
P 6700 2150
|
||||
F 0 "J1" H 6780 2142 50 0000 L CNN
|
||||
F 1 "Conn_01x02" H 6780 2051 50 0000 L CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" H 6700 2150 50 0001 C CNN
|
||||
F 3 "~" H 6700 2150 50 0001 C CNN
|
||||
1 6700 2150
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
5950 2150 6500 2150
|
||||
Text Label 5950 2150 0 50 ~ 0
|
||||
TERMPWR
|
||||
Wire Wire Line
|
||||
5950 2250 6500 2250
|
||||
Text Label 5950 2250 0 50 ~ 0
|
||||
+5V
|
||||
Wire Wire Line
|
||||
9000 3100 8450 3100
|
||||
Text Label 9000 3100 2 50 ~ 0
|
||||
+5V
|
||||
$EndSCHEMATC
|
BIN
hardware/mvp/GreenSCSI_MVP_Gerbers.zip
Normal file
BIN
hardware/mvp/Schematic.pdf
Normal file
1947
hardware/mvp/fp-info-cache
Normal file
|
@ -1,55 +0,0 @@
|
|||
(module BluePill_STM32F103C (layer F.Cu) (tedit 59B4EF3F)
|
||||
(descr "STM32F103C8 BluePill board")
|
||||
(fp_text reference U (at 7.1628 49.6062 180) (layer F.SilkS)
|
||||
(effects (font (size 0.889 0.889) (thickness 0.3048)))
|
||||
)
|
||||
(fp_text value BluePill_STM32F103C (at 7.9756 23.7998 90) (layer F.SilkS)
|
||||
(effects (font (size 0.889 0.889) (thickness 0.22225)))
|
||||
)
|
||||
(fp_line (start 19.12 -2.59) (end 19.12 50.81) (layer F.SilkS) (width 0.3048))
|
||||
(fp_line (start 19.12 50.81) (end -3.88 50.81) (layer F.SilkS) (width 0.3048))
|
||||
(fp_line (start -3.88 50.81) (end -3.88 -2.59) (layer F.SilkS) (width 0.3048))
|
||||
(fp_line (start -3.88 -2.59) (end 19.12 -2.59) (layer F.SilkS) (width 0.3048))
|
||||
(pad 1 thru_hole rect (at 0 -0.0508 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 2 thru_hole oval (at 0 2.4892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 3 thru_hole oval (at 0 5.0292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 4 thru_hole oval (at 0 7.5692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 5 thru_hole oval (at 0 10.1092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 6 thru_hole oval (at 0 12.6492 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 7 thru_hole oval (at 0 15.1892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 8 thru_hole oval (at 0 17.7292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 9 thru_hole oval (at 0 20.2692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 10 thru_hole oval (at 0 22.8092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 11 thru_hole oval (at 0 25.3492 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 12 thru_hole oval (at 0 27.8892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 13 thru_hole oval (at 0 30.4292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 14 thru_hole oval (at 0 32.9692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 15 thru_hole oval (at 0 35.5092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 16 thru_hole oval (at 0 38.0492 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 17 thru_hole oval (at 0 40.5892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 18 thru_hole oval (at 0 43.1292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 19 thru_hole oval (at 0 45.6692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 20 thru_hole oval (at 0 48.2092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 21 thru_hole oval (at 15.24 48.2092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 22 thru_hole oval (at 15.24 45.6692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 23 thru_hole oval (at 15.24 43.1292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 24 thru_hole oval (at 15.24 40.5892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 25 thru_hole oval (at 15.24 38.0492 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 26 thru_hole oval (at 15.24 35.5092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 27 thru_hole oval (at 15.24 32.9692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 28 thru_hole oval (at 15.24 30.4292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 29 thru_hole oval (at 15.24 27.8892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 30 thru_hole oval (at 15.24 25.3492 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 31 thru_hole oval (at 15.24 22.8092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 32 thru_hole oval (at 15.24 20.2692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 33 thru_hole oval (at 15.24 17.7292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 34 thru_hole oval (at 15.24 15.1892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 35 thru_hole oval (at 15.24 12.6492 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 36 thru_hole oval (at 15.24 10.1092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 37 thru_hole oval (at 15.24 7.5692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 38 thru_hole oval (at 15.24 5.0292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 39 thru_hole oval (at 15.24 2.4892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 40 thru_hole oval (at 15.24 -0.1016 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 41 thru_hole oval (at 8.9 3.7592 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
(pad 42 thru_hole oval (at 6.36 3.7592 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
|
||||
)
|
|
@ -1 +0,0 @@
|
|||
BlueSCSI Hardware © 2021 by Eric Helgeson is licensed under Attribution-NonCommercial 4.0 International
|
|
@ -1,3 +0,0 @@
|
|||
EESchema-DOCLIB Version 2.0
|
||||
#
|
||||
#End Doc Library
|
|
@ -1,119 +0,0 @@
|
|||
EESchema-LIBRARY Version 2.3
|
||||
#encoding utf-8
|
||||
#
|
||||
# BluePill_STM32F103C
|
||||
#
|
||||
DEF BluePill_STM32F103C U 0 40 Y Y 1 F N
|
||||
F0 "U" -450 -1350 50 H V C CNN
|
||||
F1 "BluePill_STM32F103C" 50 850 50 H V C CNN
|
||||
F2 "BluePill_breakouts:BluePill_STM32F103C" 50 -1600 50 H I C CNN
|
||||
F3 "www.rogerclark.net" 0 -1500 50 H I C CNN
|
||||
DRAW
|
||||
S -550 -1400 600 1600 1 0 0 N
|
||||
S -250 -1400 250 -1200 0 1 0 N
|
||||
X VBAT 1 -850 700 300 R 50 50 1 1 W
|
||||
X PC13_LED 2 -850 600 300 R 50 50 1 1 B
|
||||
X PC14 3 -850 500 300 R 50 50 1 1 B
|
||||
X PC15 4 -850 400 300 R 50 50 1 1 B
|
||||
X PA0 5 -850 300 300 R 50 50 1 1 B
|
||||
X PA1 6 -850 200 300 R 50 50 1 1 B
|
||||
X PA2_TX2 7 -850 100 300 R 50 50 1 1 B
|
||||
X PA3_RX2 8 -850 0 300 R 50 50 1 1 B
|
||||
X PA4 9 -850 -100 300 R 50 50 1 1 B
|
||||
X PA5_SCK1 10 -850 -200 300 R 50 50 1 1 B
|
||||
X GND 20 -850 -1200 300 R 50 50 1 1 W
|
||||
X PA15 30 900 -300 300 L 50 50 1 1 B
|
||||
X VCC3V3 40 900 700 300 L 50 50 1 1 B
|
||||
X PA6_MISO1 11 -850 -300 300 R 50 50 1 1 B
|
||||
X PB12 21 900 -1200 300 L 50 50 1 1 B
|
||||
X PB3 31 900 -200 300 L 50 50 1 1 B
|
||||
X PA14_SWCLK 41 -50 1900 300 D 50 50 1 1 B
|
||||
X PA7_MOSI1 12 -850 -400 300 R 50 50 1 1 B
|
||||
X PB13_SCK2 22 900 -1100 300 L 50 50 1 1 B
|
||||
X PB4 32 900 -100 300 L 50 50 1 1 B
|
||||
X PA13_SWDIO 42 50 1900 300 D 50 50 1 1 B
|
||||
X PB0 13 -850 -500 300 R 50 50 1 1 B
|
||||
X PB14_MISO2 23 900 -1000 300 L 50 50 1 1 B
|
||||
X PB5 33 900 0 300 L 50 50 1 1 B
|
||||
X PB1 14 -850 -600 300 R 50 50 1 1 B
|
||||
X PB15_MOSI2 24 900 -900 300 L 50 50 1 1 B
|
||||
X PB6_SCL1 34 900 100 300 L 50 50 1 1 B
|
||||
X PB10_SCL2 15 -850 -700 300 R 50 50 1 1 B
|
||||
X PA8 25 900 -800 300 L 50 50 1 1 B
|
||||
X PB7_SDA1 35 900 200 300 L 50 50 1 1 B
|
||||
X PB11_SDA2 16 -850 -800 300 R 50 50 1 1 B
|
||||
X PA9_TX1 26 900 -700 300 L 50 50 1 1 B
|
||||
X PB8 36 900 300 300 L 50 50 1 1 B
|
||||
X NRST 17 -850 -900 300 R 50 50 1 1 I
|
||||
X PA10_RX1 27 900 -600 300 L 50 50 1 1 B
|
||||
X PB9 37 900 400 300 L 50 50 1 1 B
|
||||
X VCC3V3 18 -850 -1000 300 R 50 50 1 1 B
|
||||
X PA11_USB_D- 28 900 -500 300 L 50 50 1 1 B
|
||||
X 5V_USB 38 900 500 300 L 50 50 1 1 B
|
||||
X GND 19 -850 -1100 300 R 50 50 1 1 W
|
||||
X PA12_USBD+ 29 900 -400 300 L 50 50 1 1 B
|
||||
X GND 39 900 600 300 L 50 50 1 1 W
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# ILI9341_SPI_Touch_SD
|
||||
#
|
||||
DEF ILI9341_SPI_Touch_SD U 0 40 Y Y 1 F N
|
||||
F0 "U" 0 -750 50 H V C CNN
|
||||
F1 "ILI9341_SPI_Touch_SD" 0 800 50 H V C CNN
|
||||
F2 "BluePill_breakoutst:TJCTM24024-SPI" 50 -1000 50 H I C CNN
|
||||
F3 "www.rogerclark.net" 50 -900 50 H I C CNN
|
||||
DRAW
|
||||
S -450 -850 450 850 1 0 0 N
|
||||
X VCC 1 -750 650 300 R 50 50 1 1 W
|
||||
X GND 2 -750 550 300 R 50 50 1 1 W
|
||||
X CS 3 -750 450 300 R 50 50 1 1 I
|
||||
X RESET 4 -750 350 300 R 50 50 1 1 I
|
||||
X D/C 5 -750 250 300 R 50 50 1 1 I
|
||||
X MOSI 6 -750 150 300 R 50 50 1 1 I
|
||||
X SCK 7 -750 50 300 R 50 50 1 1 I
|
||||
X LED 8 -750 -50 300 R 50 50 1 1 I
|
||||
X MISO 9 -750 -150 300 R 50 50 1 1 O
|
||||
X T_CLK 10 -750 -250 300 R 50 50 1 1 I
|
||||
X T_CS 11 -750 -350 300 R 50 50 1 1 I
|
||||
X T_DIN 12 -750 -450 300 R 50 50 1 1 I
|
||||
X T_DO 13 -750 -550 300 R 50 50 1 1 O
|
||||
X T_IRQ 14 -750 -650 300 R 50 50 1 1 O
|
||||
X SD_SCK 15 750 -150 300 L 50 50 1 1 I
|
||||
X SD_MISO 16 750 -50 300 L 50 50 1 1 O
|
||||
X SD_MOSI 17 750 50 300 L 50 50 1 1 I
|
||||
X SD_CS 18 750 150 300 L 50 50 1 1 I
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# OV7670_unbuffered_module
|
||||
#
|
||||
DEF OV7670_unbuffered_module U 0 40 Y Y 1 F N
|
||||
F0 "U" 0 -550 50 H V C CNN
|
||||
F1 "OV7670_unbuffered_module" 0 650 50 H V C CNN
|
||||
F2 "BluePill_breakoutst:OV7670_unbuffered_module" 0 -750 50 H I C CNN
|
||||
F3 "www.rogerclark.net" 0 -650 50 H I C CNN
|
||||
DRAW
|
||||
S -450 -600 450 600 1 0 0 N
|
||||
X Vcc 1 -750 400 300 R 50 50 1 1 W
|
||||
X Gnd 2 750 400 300 L 50 50 1 1 W
|
||||
X SCL 3 -750 300 300 R 50 50 1 1 I
|
||||
X SDA 4 750 300 300 L 50 50 1 1 B
|
||||
X VSYNC 5 -750 200 300 R 50 50 1 1 O
|
||||
X HREF 6 750 200 300 L 50 50 1 1 O
|
||||
X PCLK 7 -750 100 300 R 50 50 1 1 O
|
||||
X XCLK 8 750 100 300 L 50 50 1 1 I
|
||||
X D7 9 -750 0 300 R 50 50 1 1 O
|
||||
X D6 10 750 0 300 L 50 50 1 1 O
|
||||
X D5 11 -750 -100 300 R 50 50 1 1 O
|
||||
X D4 12 750 -100 300 L 50 50 1 1 O
|
||||
X D3 13 -750 -200 300 R 50 50 1 1 O
|
||||
X D2 14 750 -200 300 L 50 50 1 1 O
|
||||
X D1 15 -750 -300 300 R 50 50 1 1 O
|
||||
X D0 16 750 -300 300 L 50 50 1 1 O
|
||||
X RESET 17 -750 -400 300 R 50 50 1 1 I
|
||||
X PWDN 18 750 -400 300 L 50 50 1 1 I
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
|
@ -1,427 +0,0 @@
|
|||
EESchema-LIBRARY Version 2.4
|
||||
#encoding utf-8
|
||||
#
|
||||
# Connector_Generic_Conn_01x04
|
||||
#
|
||||
DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N
|
||||
F0 "J" 0 200 50 H V C CNN
|
||||
F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_1x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -50 -195 0 -205 1 1 6 N
|
||||
S -50 -95 0 -105 1 1 6 N
|
||||
S -50 5 0 -5 1 1 6 N
|
||||
S -50 105 0 95 1 1 6 N
|
||||
S -50 150 50 -250 1 1 10 f
|
||||
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||
X Pin_2 2 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
|
||||
X Pin_4 4 -200 -200 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Generic_Conn_02x25_Odd_Even
|
||||
#
|
||||
DEF Connector_Generic_Conn_02x25_Odd_Even J 0 40 Y N 1 F N
|
||||
F0 "J" 50 1300 50 H V C CNN
|
||||
F1 "Connector_Generic_Conn_02x25_Odd_Even" 50 -1300 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_2x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -50 -1195 0 -1205 1 1 6 N
|
||||
S -50 -1095 0 -1105 1 1 6 N
|
||||
S -50 -995 0 -1005 1 1 6 N
|
||||
S -50 -895 0 -905 1 1 6 N
|
||||
S -50 -795 0 -805 1 1 6 N
|
||||
S -50 -695 0 -705 1 1 6 N
|
||||
S -50 -595 0 -605 1 1 6 N
|
||||
S -50 -495 0 -505 1 1 6 N
|
||||
S -50 -395 0 -405 1 1 6 N
|
||||
S -50 -295 0 -305 1 1 6 N
|
||||
S -50 -195 0 -205 1 1 6 N
|
||||
S -50 -95 0 -105 1 1 6 N
|
||||
S -50 5 0 -5 1 1 6 N
|
||||
S -50 105 0 95 1 1 6 N
|
||||
S -50 205 0 195 1 1 6 N
|
||||
S -50 305 0 295 1 1 6 N
|
||||
S -50 405 0 395 1 1 6 N
|
||||
S -50 505 0 495 1 1 6 N
|
||||
S -50 605 0 595 1 1 6 N
|
||||
S -50 705 0 695 1 1 6 N
|
||||
S -50 805 0 795 1 1 6 N
|
||||
S -50 905 0 895 1 1 6 N
|
||||
S -50 1005 0 995 1 1 6 N
|
||||
S -50 1105 0 1095 1 1 6 N
|
||||
S -50 1205 0 1195 1 1 6 N
|
||||
S -50 1250 150 -1250 1 1 10 f
|
||||
S 150 -1195 100 -1205 1 1 6 N
|
||||
S 150 -1095 100 -1105 1 1 6 N
|
||||
S 150 -995 100 -1005 1 1 6 N
|
||||
S 150 -895 100 -905 1 1 6 N
|
||||
S 150 -795 100 -805 1 1 6 N
|
||||
S 150 -695 100 -705 1 1 6 N
|
||||
S 150 -595 100 -605 1 1 6 N
|
||||
S 150 -495 100 -505 1 1 6 N
|
||||
S 150 -395 100 -405 1 1 6 N
|
||||
S 150 -295 100 -305 1 1 6 N
|
||||
S 150 -195 100 -205 1 1 6 N
|
||||
S 150 -95 100 -105 1 1 6 N
|
||||
S 150 5 100 -5 1 1 6 N
|
||||
S 150 105 100 95 1 1 6 N
|
||||
S 150 205 100 195 1 1 6 N
|
||||
S 150 305 100 295 1 1 6 N
|
||||
S 150 405 100 395 1 1 6 N
|
||||
S 150 505 100 495 1 1 6 N
|
||||
S 150 605 100 595 1 1 6 N
|
||||
S 150 705 100 695 1 1 6 N
|
||||
S 150 805 100 795 1 1 6 N
|
||||
S 150 905 100 895 1 1 6 N
|
||||
S 150 1005 100 995 1 1 6 N
|
||||
S 150 1105 100 1095 1 1 6 N
|
||||
S 150 1205 100 1195 1 1 6 N
|
||||
X Pin_1 1 -200 1200 150 R 50 50 1 1 P
|
||||
X Pin_10 10 300 800 150 L 50 50 1 1 P
|
||||
X Pin_11 11 -200 700 150 R 50 50 1 1 P
|
||||
X Pin_12 12 300 700 150 L 50 50 1 1 P
|
||||
X Pin_13 13 -200 600 150 R 50 50 1 1 P
|
||||
X Pin_14 14 300 600 150 L 50 50 1 1 P
|
||||
X Pin_15 15 -200 500 150 R 50 50 1 1 P
|
||||
X Pin_16 16 300 500 150 L 50 50 1 1 P
|
||||
X Pin_17 17 -200 400 150 R 50 50 1 1 P
|
||||
X Pin_18 18 300 400 150 L 50 50 1 1 P
|
||||
X Pin_19 19 -200 300 150 R 50 50 1 1 P
|
||||
X Pin_2 2 300 1200 150 L 50 50 1 1 P
|
||||
X Pin_20 20 300 300 150 L 50 50 1 1 P
|
||||
X Pin_21 21 -200 200 150 R 50 50 1 1 P
|
||||
X Pin_22 22 300 200 150 L 50 50 1 1 P
|
||||
X Pin_23 23 -200 100 150 R 50 50 1 1 P
|
||||
X Pin_24 24 300 100 150 L 50 50 1 1 P
|
||||
X Pin_25 25 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_26 26 300 0 150 L 50 50 1 1 P
|
||||
X Pin_27 27 -200 -100 150 R 50 50 1 1 P
|
||||
X Pin_28 28 300 -100 150 L 50 50 1 1 P
|
||||
X Pin_29 29 -200 -200 150 R 50 50 1 1 P
|
||||
X Pin_3 3 -200 1100 150 R 50 50 1 1 P
|
||||
X Pin_30 30 300 -200 150 L 50 50 1 1 P
|
||||
X Pin_31 31 -200 -300 150 R 50 50 1 1 P
|
||||
X Pin_32 32 300 -300 150 L 50 50 1 1 P
|
||||
X Pin_33 33 -200 -400 150 R 50 50 1 1 P
|
||||
X Pin_34 34 300 -400 150 L 50 50 1 1 P
|
||||
X Pin_35 35 -200 -500 150 R 50 50 1 1 P
|
||||
X Pin_36 36 300 -500 150 L 50 50 1 1 P
|
||||
X Pin_37 37 -200 -600 150 R 50 50 1 1 P
|
||||
X Pin_38 38 300 -600 150 L 50 50 1 1 P
|
||||
X Pin_39 39 -200 -700 150 R 50 50 1 1 P
|
||||
X Pin_4 4 300 1100 150 L 50 50 1 1 P
|
||||
X Pin_40 40 300 -700 150 L 50 50 1 1 P
|
||||
X Pin_41 41 -200 -800 150 R 50 50 1 1 P
|
||||
X Pin_42 42 300 -800 150 L 50 50 1 1 P
|
||||
X Pin_43 43 -200 -900 150 R 50 50 1 1 P
|
||||
X Pin_44 44 300 -900 150 L 50 50 1 1 P
|
||||
X Pin_45 45 -200 -1000 150 R 50 50 1 1 P
|
||||
X Pin_46 46 300 -1000 150 L 50 50 1 1 P
|
||||
X Pin_47 47 -200 -1100 150 R 50 50 1 1 P
|
||||
X Pin_48 48 300 -1100 150 L 50 50 1 1 P
|
||||
X Pin_49 49 -200 -1200 150 R 50 50 1 1 P
|
||||
X Pin_5 5 -200 1000 150 R 50 50 1 1 P
|
||||
X Pin_50 50 300 -1200 150 L 50 50 1 1 P
|
||||
X Pin_6 6 300 1000 150 L 50 50 1 1 P
|
||||
X Pin_7 7 -200 900 150 R 50 50 1 1 P
|
||||
X Pin_8 8 300 900 150 L 50 50 1 1 P
|
||||
X Pin_9 9 -200 800 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Micro_SD_Card
|
||||
#
|
||||
DEF Connector_Micro_SD_Card J 0 40 Y Y 1 F N
|
||||
F0 "J" -650 600 50 H V C CNN
|
||||
F1 "Connector_Micro_SD_Card" 650 600 50 H V R CNN
|
||||
F2 "" 1150 300 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
microSD*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -300 -375 -200 -425 0 1 0 F
|
||||
S -300 -275 -200 -325 0 1 0 F
|
||||
S -300 -175 -200 -225 0 1 0 F
|
||||
S -300 -75 -200 -125 0 1 0 F
|
||||
S -300 25 -200 -25 0 1 0 F
|
||||
S -300 125 -200 75 0 1 0 F
|
||||
S -300 225 -200 175 0 1 0 F
|
||||
S -300 325 -200 275 0 1 0 F
|
||||
P 6 0 1 10 650 500 650 550 -750 550 -750 -650 650 -650 650 -450 N
|
||||
P 11 0 1 10 -350 -450 -350 350 -50 350 100 500 150 500 150 450 250 450 300 500 800 500 800 -450 -350 -450 f
|
||||
X DAT2 1 -900 300 150 R 50 50 1 1 B
|
||||
X DAT3/CD 2 -900 200 150 R 50 50 1 1 B
|
||||
X CMD 3 -900 100 150 R 50 50 1 1 I
|
||||
X VDD 4 -900 0 150 R 50 50 1 1 W
|
||||
X CLK 5 -900 -100 150 R 50 50 1 1 I
|
||||
X VSS 6 -900 -200 150 R 50 50 1 1 W
|
||||
X DAT0 7 -900 -300 150 R 50 50 1 1 B
|
||||
X DAT1 8 -900 -400 150 R 50 50 1 1 B
|
||||
X SHIELD 9 800 -600 150 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_D_Schottky
|
||||
#
|
||||
DEF Device_D_Schottky D 0 40 N N 1 F N
|
||||
F0 "D" 0 100 50 H V C CNN
|
||||
F1 "Device_D_Schottky" 0 -100 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
TO-???*
|
||||
*_Diode_*
|
||||
*SingleDiode*
|
||||
D_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
P 2 0 1 0 50 0 -50 0 N
|
||||
P 4 0 1 10 50 50 50 -50 -50 0 50 50 N
|
||||
P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N
|
||||
X K 1 -150 0 100 R 50 50 1 1 P
|
||||
X A 2 150 0 100 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_Jumper
|
||||
#
|
||||
DEF Device_Jumper JP 0 30 Y N 1 F N
|
||||
F0 "JP" 0 150 50 H V C CNN
|
||||
F1 "Device_Jumper" 0 -80 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
SolderJumper*
|
||||
Jumper*
|
||||
TestPoint*2Pads*
|
||||
TestPoint*Bridge*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
|
||||
C -100 0 35 0 1 0 N
|
||||
C 100 0 35 0 1 0 N
|
||||
X 1 1 -300 0 165 R 50 50 0 1 P
|
||||
X 2 2 300 0 165 L 50 50 0 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_R_Network09
|
||||
#
|
||||
DEF Device_R_Network09 RN 0 0 Y N 1 F N
|
||||
F0 "RN" -500 0 50 V V C CNN
|
||||
F1 "Device_R_Network09" 500 0 50 V V C CNN
|
||||
F2 "Resistor_THT:R_Array_SIP10" 575 0 50 V I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
R?Array?SIP*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
C -400 90 10 0 1 0 F
|
||||
C -300 90 10 0 1 0 F
|
||||
C -200 90 10 0 1 0 F
|
||||
C -100 90 10 0 1 0 F
|
||||
C 0 90 10 0 1 0 F
|
||||
C 100 90 10 0 1 0 F
|
||||
C 200 90 10 0 1 0 F
|
||||
C 300 90 10 0 1 0 F
|
||||
S -450 -125 450 125 0 1 10 f
|
||||
S -430 60 -370 -100 0 1 10 N
|
||||
S -330 60 -270 -100 0 1 10 N
|
||||
S -230 60 -170 -100 0 1 10 N
|
||||
S -130 60 -70 -100 0 1 10 N
|
||||
S -30 60 30 -100 0 1 10 N
|
||||
S 70 60 130 -100 0 1 10 N
|
||||
S 170 60 230 -100 0 1 10 N
|
||||
S 270 60 330 -100 0 1 10 N
|
||||
S 370 60 430 -100 0 1 10 N
|
||||
P 2 0 1 0 -400 -100 -400 -150 N
|
||||
P 2 0 1 0 -300 -100 -300 -150 N
|
||||
P 2 0 1 0 -200 -100 -200 -150 N
|
||||
P 2 0 1 0 -100 -100 -100 -150 N
|
||||
P 2 0 1 0 0 -100 0 -150 N
|
||||
P 2 0 1 0 100 -100 100 -150 N
|
||||
P 2 0 1 0 200 -100 200 -150 N
|
||||
P 2 0 1 0 300 -100 300 -150 N
|
||||
P 2 0 1 0 400 -100 400 -150 N
|
||||
P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N
|
||||
P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N
|
||||
P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N
|
||||
P 4 0 1 0 -100 60 -100 90 0 90 0 60 N
|
||||
P 4 0 1 0 0 60 0 90 100 90 100 60 N
|
||||
P 4 0 1 0 100 60 100 90 200 90 200 60 N
|
||||
P 4 0 1 0 200 60 200 90 300 90 300 60 N
|
||||
P 4 0 1 0 300 60 300 90 400 90 400 60 N
|
||||
X common 1 -400 200 100 D 50 50 1 1 P
|
||||
X R9 10 400 -200 50 U 50 50 1 1 P
|
||||
X R1 2 -400 -200 50 U 50 50 1 1 P
|
||||
X R2 3 -300 -200 50 U 50 50 1 1 P
|
||||
X R3 4 -200 -200 50 U 50 50 1 1 P
|
||||
X R4 5 -100 -200 50 U 50 50 1 1 P
|
||||
X R5 6 0 -200 50 U 50 50 1 1 P
|
||||
X R6 7 100 -200 50 U 50 50 1 1 P
|
||||
X R7 8 200 -200 50 U 50 50 1 1 P
|
||||
X R8 9 300 -200 50 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Mechanical_MountingHole_Pad
|
||||
#
|
||||
DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N
|
||||
F0 "H" 0 250 50 H V C CNN
|
||||
F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
MountingHole*Pad*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
C 0 50 50 0 1 50 N
|
||||
X 1 1 0 -100 100 U 50 50 1 1 I
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# bluepill_scsi-rescue_171825-4-171825-4
|
||||
#
|
||||
DEF bluepill_scsi-rescue_171825-4-171825-4 J 0 40 Y Y 1 L N
|
||||
F0 "J" -220 300 50 H V L BNN
|
||||
F1 "bluepill_scsi-rescue_171825-4-171825-4" -200 -300 50 H V L BNN
|
||||
F2 "TE_171825-4" 0 0 50 H I L BNN
|
||||
F3 "171825-4" 0 0 50 H I L BNN
|
||||
DRAW
|
||||
P 2 0 0 10 -200 -200 -200 300 N
|
||||
P 2 0 0 10 -200 300 200 300 N
|
||||
P 2 0 0 10 200 -200 -200 -200 N
|
||||
P 2 0 0 10 200 300 200 -200 N
|
||||
X 1 1 -400 200 200 R 40 40 0 0 P
|
||||
X 2 2 -400 100 200 R 40 40 0 0 P
|
||||
X 3 3 -400 0 200 R 40 40 0 0 P
|
||||
X 4 4 -400 -100 200 R 40 40 0 0 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# bluepill_scsi-rescue_BluePill_STM32F103C-bluepill
|
||||
#
|
||||
DEF bluepill_scsi-rescue_BluePill_STM32F103C-bluepill U 0 40 Y Y 1 F N
|
||||
F0 "U" -450 -1350 50 H V C CNN
|
||||
F1 "bluepill_scsi-rescue_BluePill_STM32F103C-bluepill" 50 850 50 H V C CNN
|
||||
F2 "BluePill_breakouts:BluePill_STM32F103C" 50 -1600 50 H I C CNN
|
||||
F3 "www.rogerclark.net" 0 -1500 50 H I C CNN
|
||||
DRAW
|
||||
S -550 -1400 600 1600 1 0 0 N
|
||||
S -250 -1400 250 -1200 0 1 0 N
|
||||
X VBAT 1 -850 700 300 R 50 50 1 1 W
|
||||
X PA5_SCK1 10 -850 -200 300 R 50 50 1 1 B
|
||||
X PA6_MISO1 11 -850 -300 300 R 50 50 1 1 B
|
||||
X PA7_MOSI1 12 -850 -400 300 R 50 50 1 1 B
|
||||
X PB0 13 -850 -500 300 R 50 50 1 1 B
|
||||
X PB1 14 -850 -600 300 R 50 50 1 1 B
|
||||
X PB10_SCL2 15 -850 -700 300 R 50 50 1 1 B
|
||||
X PB11_SDA2 16 -850 -800 300 R 50 50 1 1 B
|
||||
X NRST 17 -850 -900 300 R 50 50 1 1 I
|
||||
X VCC3V3 18 -850 -1000 300 R 50 50 1 1 B
|
||||
X GND 19 -850 -1100 300 R 50 50 1 1 W
|
||||
X PC13_LED 2 -850 600 300 R 50 50 1 1 B
|
||||
X GND 20 -850 -1200 300 R 50 50 1 1 W
|
||||
X PB12 21 900 -1200 300 L 50 50 1 1 B
|
||||
X PB13_SCK2 22 900 -1100 300 L 50 50 1 1 B
|
||||
X PB14_MISO2 23 900 -1000 300 L 50 50 1 1 B
|
||||
X PB15_MOSI2 24 900 -900 300 L 50 50 1 1 B
|
||||
X PA8 25 900 -800 300 L 50 50 1 1 B
|
||||
X PA9_TX1 26 900 -700 300 L 50 50 1 1 B
|
||||
X PA10_RX1 27 900 -600 300 L 50 50 1 1 B
|
||||
X PA11_USB_D- 28 900 -500 300 L 50 50 1 1 B
|
||||
X PA12_USBD+ 29 900 -400 300 L 50 50 1 1 B
|
||||
X PC14 3 -850 500 300 R 50 50 1 1 B
|
||||
X PA15 30 900 -300 300 L 50 50 1 1 B
|
||||
X PB3 31 900 -200 300 L 50 50 1 1 B
|
||||
X PB4 32 900 -100 300 L 50 50 1 1 B
|
||||
X PB5 33 900 0 300 L 50 50 1 1 B
|
||||
X PB6_SCL1 34 900 100 300 L 50 50 1 1 B
|
||||
X PB7_SDA1 35 900 200 300 L 50 50 1 1 B
|
||||
X PB8 36 900 300 300 L 50 50 1 1 B
|
||||
X PB9 37 900 400 300 L 50 50 1 1 B
|
||||
X 5V_USB 38 900 500 300 L 50 50 1 1 B
|
||||
X GND 39 900 600 300 L 50 50 1 1 W
|
||||
X PC15 4 -850 400 300 R 50 50 1 1 B
|
||||
X VCC3V3 40 900 700 300 L 50 50 1 1 B
|
||||
X PA14_SWCLK 41 -50 1900 300 D 50 50 1 1 B
|
||||
X PA13_SWDIO 42 50 1900 300 D 50 50 1 1 B
|
||||
X PA0 5 -850 300 300 R 50 50 1 1 B
|
||||
X PA1 6 -850 200 300 R 50 50 1 1 B
|
||||
X PA2_TX2 7 -850 100 300 R 50 50 1 1 B
|
||||
X PA3_RX2 8 -850 0 300 R 50 50 1 1 B
|
||||
X PA4 9 -850 -100 300 R 50 50 1 1 B
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_+3.3V
|
||||
#
|
||||
DEF power_+3.3V #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -150 50 H I C CNN
|
||||
F1 "power_+3.3V" 0 140 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
ALIAS +3.3V
|
||||
DRAW
|
||||
P 2 0 1 0 -30 50 0 100 N
|
||||
P 2 0 1 0 0 0 0 100 N
|
||||
P 2 0 1 0 0 100 30 50 N
|
||||
X +3V3 1 0 0 0 U 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_+5V
|
||||
#
|
||||
DEF power_+5V #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -150 50 H I C CNN
|
||||
F1 "power_+5V" 0 140 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 2 0 1 0 -30 50 0 100 N
|
||||
P 2 0 1 0 0 0 0 100 N
|
||||
P 2 0 1 0 0 100 30 50 N
|
||||
X +5V 1 0 0 0 U 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_GND
|
||||
#
|
||||
DEF power_GND #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -250 50 H I C CNN
|
||||
F1 "power_GND" 0 -150 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
|
||||
X GND 1 0 0 0 D 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_VCC
|
||||
#
|
||||
DEF power_VCC #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -150 50 H I C CNN
|
||||
F1 "power_VCC" 0 150 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 2 0 1 0 -30 50 0 100 N
|
||||
P 2 0 1 0 0 0 0 100 N
|
||||
P 2 0 1 0 0 100 30 50 N
|
||||
X VCC 1 0 0 0 U 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
|
@ -1,3 +0,0 @@
|
|||
EESchema-DOCLIB Version 2.0
|
||||
#
|
||||
#End Doc Library
|
|
@ -1,78 +0,0 @@
|
|||
EESchema-LIBRARY Version 2.4
|
||||
#encoding utf-8
|
||||
#
|
||||
# 171825-4-171825-4
|
||||
#
|
||||
DEF 171825-4-171825-4 J 0 40 Y Y 1 L N
|
||||
F0 "J" -220 300 50 H V L BNN
|
||||
F1 "171825-4-171825-4" -200 -300 50 H V L BNN
|
||||
F2 "TE_171825-4" 0 0 50 H I L BNN
|
||||
F3 "171825-4" 0 0 50 H I L BNN
|
||||
DRAW
|
||||
P 2 0 0 10 -200 -200 -200 300 N
|
||||
P 2 0 0 10 -200 300 200 300 N
|
||||
P 2 0 0 10 200 -200 -200 -200 N
|
||||
P 2 0 0 10 200 300 200 -200 N
|
||||
X 1 1 -400 200 200 R 40 40 0 0 P
|
||||
X 2 2 -400 100 200 R 40 40 0 0 P
|
||||
X 3 3 -400 0 200 R 40 40 0 0 P
|
||||
X 4 4 -400 -100 200 R 40 40 0 0 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# BluePill_STM32F103C-bluepill
|
||||
#
|
||||
DEF BluePill_STM32F103C-bluepill U 0 40 Y Y 1 F N
|
||||
F0 "U" -450 -1350 50 H V C CNN
|
||||
F1 "BluePill_STM32F103C-bluepill" 50 850 50 H V C CNN
|
||||
F2 "BluePill_breakouts:BluePill_STM32F103C" 50 -1600 50 H I C CNN
|
||||
F3 "www.rogerclark.net" 0 -1500 50 H I C CNN
|
||||
DRAW
|
||||
S -550 -1400 600 1600 1 0 0 N
|
||||
S -250 -1400 250 -1200 0 1 0 N
|
||||
X VBAT 1 -850 700 300 R 50 50 1 1 W
|
||||
X PA5_SCK1 10 -850 -200 300 R 50 50 1 1 B
|
||||
X PA6_MISO1 11 -850 -300 300 R 50 50 1 1 B
|
||||
X PA7_MOSI1 12 -850 -400 300 R 50 50 1 1 B
|
||||
X PB0 13 -850 -500 300 R 50 50 1 1 B
|
||||
X PB1 14 -850 -600 300 R 50 50 1 1 B
|
||||
X PB10_SCL2 15 -850 -700 300 R 50 50 1 1 B
|
||||
X PB11_SDA2 16 -850 -800 300 R 50 50 1 1 B
|
||||
X NRST 17 -850 -900 300 R 50 50 1 1 I
|
||||
X VCC3V3 18 -850 -1000 300 R 50 50 1 1 B
|
||||
X GND 19 -850 -1100 300 R 50 50 1 1 W
|
||||
X PC13_LED 2 -850 600 300 R 50 50 1 1 B
|
||||
X GND 20 -850 -1200 300 R 50 50 1 1 W
|
||||
X PB12 21 900 -1200 300 L 50 50 1 1 B
|
||||
X PB13_SCK2 22 900 -1100 300 L 50 50 1 1 B
|
||||
X PB14_MISO2 23 900 -1000 300 L 50 50 1 1 B
|
||||
X PB15_MOSI2 24 900 -900 300 L 50 50 1 1 B
|
||||
X PA8 25 900 -800 300 L 50 50 1 1 B
|
||||
X PA9_TX1 26 900 -700 300 L 50 50 1 1 B
|
||||
X PA10_RX1 27 900 -600 300 L 50 50 1 1 B
|
||||
X PA11_USB_D- 28 900 -500 300 L 50 50 1 1 B
|
||||
X PA12_USBD+ 29 900 -400 300 L 50 50 1 1 B
|
||||
X PC14 3 -850 500 300 R 50 50 1 1 B
|
||||
X PA15 30 900 -300 300 L 50 50 1 1 B
|
||||
X PB3 31 900 -200 300 L 50 50 1 1 B
|
||||
X PB4 32 900 -100 300 L 50 50 1 1 B
|
||||
X PB5 33 900 0 300 L 50 50 1 1 B
|
||||
X PB6_SCL1 34 900 100 300 L 50 50 1 1 B
|
||||
X PB7_SDA1 35 900 200 300 L 50 50 1 1 B
|
||||
X PB8 36 900 300 300 L 50 50 1 1 B
|
||||
X PB9 37 900 400 300 L 50 50 1 1 B
|
||||
X 5V_USB 38 900 500 300 L 50 50 1 1 B
|
||||
X GND 39 900 600 300 L 50 50 1 1 W
|
||||
X PC15 4 -850 400 300 R 50 50 1 1 B
|
||||
X VCC3V3 40 900 700 300 L 50 50 1 1 B
|
||||
X PA14_SWCLK 41 -50 1900 300 D 50 50 1 1 B
|
||||
X PA13_SWDIO 42 50 1900 300 D 50 50 1 1 B
|
||||
X PA0 5 -850 300 300 R 50 50 1 1 B
|
||||
X PA1 6 -850 200 300 R 50 50 1 1 B
|
||||
X PA2_TX2 7 -850 100 300 R 50 50 1 1 B
|
||||
X PA3_RX2 8 -850 0 300 R 50 50 1 1 B
|
||||
X PA4 9 -850 -100 300 R 50 50 1 1 B
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
|
@ -1,562 +0,0 @@
|
|||
(export (version D)
|
||||
(design
|
||||
(source /Users/erichelgeson/source/BlueSCSI/hw/bluepill_scsi.sch)
|
||||
(date "Monday, March 29, 2021 at 05:37:12 PM")
|
||||
(tool "Eeschema (5.1.6-0-10_14)")
|
||||
(sheet (number 1) (name /) (tstamps /)
|
||||
(title_block
|
||||
(title)
|
||||
(company)
|
||||
(rev)
|
||||
(date)
|
||||
(source bluepill_scsi.sch)
|
||||
(comment (number 1) (value ""))
|
||||
(comment (number 2) (value ""))
|
||||
(comment (number 3) (value ""))
|
||||
(comment (number 4) (value "")))))
|
||||
(components
|
||||
(comp (ref J2)
|
||||
(value Conn_02x25_Odd_Even)
|
||||
(footprint Connector_IDC:IDC-Header_2x25_P2.54mm_Vertical)
|
||||
(datasheet ~)
|
||||
(fields
|
||||
(field (name LCSC) https://lcsc.com/product-detail/IDC-Connectors_BOOMELE-Boom-Precision-Elec-C30006_C30006.html))
|
||||
(libsource (lib Connector_Generic) (part Conn_02x25_Odd_Even) (description "Generic connector, double row, 02x25, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5F0261A7))
|
||||
(comp (ref U1)
|
||||
(value BluePill_STM32F103C)
|
||||
(footprint blue:BluePill_STM32F103C)
|
||||
(datasheet www.rogerclark.net)
|
||||
(libsource (lib bluepill_scsi-rescue) (part BluePill_STM32F103C-bluepill) (description ""))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5F01A526))
|
||||
(comp (ref J1)
|
||||
(value Micro_SD_Card)
|
||||
(footprint Connector_Card:microSD_HC_Molex_104031-0811)
|
||||
(datasheet https://www.mouser.com/datasheet/2/276/1/1040310811_MEMORY_CARD_SOCKET-153593.pdf)
|
||||
(fields
|
||||
(field (name Mouser) https://www.mouser.com/ProductDetail/538-104031-0811))
|
||||
(libsource (lib Connector) (part Micro_SD_Card) (description "Micro SD Card Socket"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5F0BA382))
|
||||
(comp (ref JP1)
|
||||
(value TERM_ENABLE_GND)
|
||||
(footprint Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical)
|
||||
(datasheet ~)
|
||||
(fields
|
||||
(field (name Mouser) https://www.mouser.com/ProductDetail/872-920-0011-01)
|
||||
(field (name Mouser_1) https://www.mouser.com/ProductDetail/151-8001-E))
|
||||
(libsource (lib Device) (part Jumper) (description "Jumper, normally closed"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5F9B37AA))
|
||||
(comp (ref JP2)
|
||||
(value TERM_ENABLE_5V)
|
||||
(footprint Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical)
|
||||
(datasheet ~)
|
||||
(fields
|
||||
(field (name Mouser) https://www.mouser.com/ProductDetail/872-920-0011-01)
|
||||
(field (name Mouser_1) https://www.mouser.com/ProductDetail/151-8001-E))
|
||||
(libsource (lib Device) (part Jumper) (description "Jumper, normally closed"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5F9B5280))
|
||||
(comp (ref H1)
|
||||
(value MountingHole_Pad)
|
||||
(footprint MountingHole:MountingHole_2.7mm_M2.5)
|
||||
(datasheet ~)
|
||||
(libsource (lib Mechanical) (part MountingHole_Pad) (description "Mounting Hole with connection"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5F24DEAF))
|
||||
(comp (ref RN1)
|
||||
(value 220)
|
||||
(footprint Resistor_THT:R_Array_SIP10)
|
||||
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
|
||||
(fields
|
||||
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-220))
|
||||
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5FA4D960))
|
||||
(comp (ref RN3)
|
||||
(value 220)
|
||||
(footprint Resistor_THT:R_Array_SIP10)
|
||||
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
|
||||
(fields
|
||||
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-220))
|
||||
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5FA502AD))
|
||||
(comp (ref RN2)
|
||||
(value 330)
|
||||
(footprint Resistor_THT:R_Array_SIP10)
|
||||
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
|
||||
(fields
|
||||
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-330))
|
||||
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5FA52D01))
|
||||
(comp (ref RN4)
|
||||
(value 330)
|
||||
(footprint Resistor_THT:R_Array_SIP10)
|
||||
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
|
||||
(fields
|
||||
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-330))
|
||||
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5FA54CA6))
|
||||
(comp (ref J3)
|
||||
(value "Programming Pins")
|
||||
(footprint Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical)
|
||||
(datasheet ~)
|
||||
(libsource (lib Connector_Generic) (part Conn_01x04) (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5F8E1558))
|
||||
(comp (ref J4)
|
||||
(value "Berg Power Connector")
|
||||
(footprint 171825-4:TE_171825-4)
|
||||
(datasheet 171825-4)
|
||||
(libsource (lib bluepill_scsi-rescue) (part 171825-4-171825-4) (description ""))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5FA7AEFD))
|
||||
(comp (ref D4)
|
||||
(value Diode)
|
||||
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal)
|
||||
(datasheet ~)
|
||||
(libsource (lib Device) (part D_Schottky) (description "Schottky diode"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5FB96EB2))
|
||||
(comp (ref D5)
|
||||
(value Diode)
|
||||
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal)
|
||||
(datasheet ~)
|
||||
(libsource (lib Device) (part D_Schottky) (description "Schottky diode"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5FB97E4B)))
|
||||
(libparts
|
||||
(libpart (lib Connector) (part Micro_SD_Card)
|
||||
(description "Micro SD Card Socket")
|
||||
(docs http://katalog.we-online.de/em/datasheet/693072010801.pdf)
|
||||
(footprints
|
||||
(fp microSD*))
|
||||
(fields
|
||||
(field (name Reference) J)
|
||||
(field (name Value) Micro_SD_Card))
|
||||
(pins
|
||||
(pin (num 1) (name DAT2) (type BiDi))
|
||||
(pin (num 2) (name DAT3/CD) (type BiDi))
|
||||
(pin (num 3) (name CMD) (type input))
|
||||
(pin (num 4) (name VDD) (type power_in))
|
||||
(pin (num 5) (name CLK) (type input))
|
||||
(pin (num 6) (name VSS) (type power_in))
|
||||
(pin (num 7) (name DAT0) (type BiDi))
|
||||
(pin (num 8) (name DAT1) (type BiDi))
|
||||
(pin (num 9) (name SHIELD) (type passive))))
|
||||
(libpart (lib Connector_Generic) (part Conn_01x04)
|
||||
(description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp Connector*:*_1x??_*))
|
||||
(fields
|
||||
(field (name Reference) J)
|
||||
(field (name Value) Conn_01x04))
|
||||
(pins
|
||||
(pin (num 1) (name Pin_1) (type passive))
|
||||
(pin (num 2) (name Pin_2) (type passive))
|
||||
(pin (num 3) (name Pin_3) (type passive))
|
||||
(pin (num 4) (name Pin_4) (type passive))))
|
||||
(libpart (lib Connector_Generic) (part Conn_02x25_Odd_Even)
|
||||
(description "Generic connector, double row, 02x25, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp Connector*:*_2x??_*))
|
||||
(fields
|
||||
(field (name Reference) J)
|
||||
(field (name Value) Conn_02x25_Odd_Even))
|
||||
(pins
|
||||
(pin (num 1) (name Pin_1) (type passive))
|
||||
(pin (num 2) (name Pin_2) (type passive))
|
||||
(pin (num 3) (name Pin_3) (type passive))
|
||||
(pin (num 4) (name Pin_4) (type passive))
|
||||
(pin (num 5) (name Pin_5) (type passive))
|
||||
(pin (num 6) (name Pin_6) (type passive))
|
||||
(pin (num 7) (name Pin_7) (type passive))
|
||||
(pin (num 8) (name Pin_8) (type passive))
|
||||
(pin (num 9) (name Pin_9) (type passive))
|
||||
(pin (num 10) (name Pin_10) (type passive))
|
||||
(pin (num 11) (name Pin_11) (type passive))
|
||||
(pin (num 12) (name Pin_12) (type passive))
|
||||
(pin (num 13) (name Pin_13) (type passive))
|
||||
(pin (num 14) (name Pin_14) (type passive))
|
||||
(pin (num 15) (name Pin_15) (type passive))
|
||||
(pin (num 16) (name Pin_16) (type passive))
|
||||
(pin (num 17) (name Pin_17) (type passive))
|
||||
(pin (num 18) (name Pin_18) (type passive))
|
||||
(pin (num 19) (name Pin_19) (type passive))
|
||||
(pin (num 20) (name Pin_20) (type passive))
|
||||
(pin (num 21) (name Pin_21) (type passive))
|
||||
(pin (num 22) (name Pin_22) (type passive))
|
||||
(pin (num 23) (name Pin_23) (type passive))
|
||||
(pin (num 24) (name Pin_24) (type passive))
|
||||
(pin (num 25) (name Pin_25) (type passive))
|
||||
(pin (num 26) (name Pin_26) (type passive))
|
||||
(pin (num 27) (name Pin_27) (type passive))
|
||||
(pin (num 28) (name Pin_28) (type passive))
|
||||
(pin (num 29) (name Pin_29) (type passive))
|
||||
(pin (num 30) (name Pin_30) (type passive))
|
||||
(pin (num 31) (name Pin_31) (type passive))
|
||||
(pin (num 32) (name Pin_32) (type passive))
|
||||
(pin (num 33) (name Pin_33) (type passive))
|
||||
(pin (num 34) (name Pin_34) (type passive))
|
||||
(pin (num 35) (name Pin_35) (type passive))
|
||||
(pin (num 36) (name Pin_36) (type passive))
|
||||
(pin (num 37) (name Pin_37) (type passive))
|
||||
(pin (num 38) (name Pin_38) (type passive))
|
||||
(pin (num 39) (name Pin_39) (type passive))
|
||||
(pin (num 40) (name Pin_40) (type passive))
|
||||
(pin (num 41) (name Pin_41) (type passive))
|
||||
(pin (num 42) (name Pin_42) (type passive))
|
||||
(pin (num 43) (name Pin_43) (type passive))
|
||||
(pin (num 44) (name Pin_44) (type passive))
|
||||
(pin (num 45) (name Pin_45) (type passive))
|
||||
(pin (num 46) (name Pin_46) (type passive))
|
||||
(pin (num 47) (name Pin_47) (type passive))
|
||||
(pin (num 48) (name Pin_48) (type passive))
|
||||
(pin (num 49) (name Pin_49) (type passive))
|
||||
(pin (num 50) (name Pin_50) (type passive))))
|
||||
(libpart (lib Device) (part D_Schottky)
|
||||
(description "Schottky diode")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp TO-???*)
|
||||
(fp *_Diode_*)
|
||||
(fp *SingleDiode*)
|
||||
(fp D_*))
|
||||
(fields
|
||||
(field (name Reference) D)
|
||||
(field (name Value) D_Schottky))
|
||||
(pins
|
||||
(pin (num 1) (name K) (type passive))
|
||||
(pin (num 2) (name A) (type passive))))
|
||||
(libpart (lib Device) (part Jumper)
|
||||
(description "Jumper, normally closed")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp SolderJumper*)
|
||||
(fp Jumper*)
|
||||
(fp TestPoint*2Pads*)
|
||||
(fp TestPoint*Bridge*))
|
||||
(fields
|
||||
(field (name Reference) JP)
|
||||
(field (name Value) Jumper))
|
||||
(pins
|
||||
(pin (num 1) (name 1) (type passive))
|
||||
(pin (num 2) (name 2) (type passive))))
|
||||
(libpart (lib Device) (part R_Network09)
|
||||
(description "9 resistor network, star topology, bussed resistors, small symbol")
|
||||
(docs http://www.vishay.com/docs/31509/csc.pdf)
|
||||
(footprints
|
||||
(fp R?Array?SIP*))
|
||||
(fields
|
||||
(field (name Reference) RN)
|
||||
(field (name Value) R_Network09)
|
||||
(field (name Footprint) Resistor_THT:R_Array_SIP10))
|
||||
(pins
|
||||
(pin (num 1) (name common) (type passive))
|
||||
(pin (num 2) (name R1) (type passive))
|
||||
(pin (num 3) (name R2) (type passive))
|
||||
(pin (num 4) (name R3) (type passive))
|
||||
(pin (num 5) (name R4) (type passive))
|
||||
(pin (num 6) (name R5) (type passive))
|
||||
(pin (num 7) (name R6) (type passive))
|
||||
(pin (num 8) (name R7) (type passive))
|
||||
(pin (num 9) (name R8) (type passive))
|
||||
(pin (num 10) (name R9) (type passive))))
|
||||
(libpart (lib Mechanical) (part MountingHole_Pad)
|
||||
(description "Mounting Hole with connection")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp MountingHole*Pad*))
|
||||
(fields
|
||||
(field (name Reference) H)
|
||||
(field (name Value) MountingHole_Pad))
|
||||
(pins
|
||||
(pin (num 1) (name 1) (type input))))
|
||||
(libpart (lib bluepill_scsi-rescue) (part 171825-4-171825-4)
|
||||
(fields
|
||||
(field (name Reference) J)
|
||||
(field (name Value) 171825-4-171825-4)
|
||||
(field (name Footprint) TE_171825-4)
|
||||
(field (name Datasheet) 171825-4))
|
||||
(pins
|
||||
(pin (num 1) (name 1) (type passive))
|
||||
(pin (num 2) (name 2) (type passive))
|
||||
(pin (num 3) (name 3) (type passive))
|
||||
(pin (num 4) (name 4) (type passive))))
|
||||
(libpart (lib bluepill_scsi-rescue) (part BluePill_STM32F103C-bluepill)
|
||||
(fields
|
||||
(field (name Reference) U)
|
||||
(field (name Value) BluePill_STM32F103C-bluepill)
|
||||
(field (name Footprint) BluePill_breakouts:BluePill_STM32F103C)
|
||||
(field (name Datasheet) www.rogerclark.net))
|
||||
(pins
|
||||
(pin (num 1) (name VBAT) (type power_in))
|
||||
(pin (num 2) (name PC13_LED) (type BiDi))
|
||||
(pin (num 3) (name PC14) (type BiDi))
|
||||
(pin (num 4) (name PC15) (type BiDi))
|
||||
(pin (num 5) (name PA0) (type BiDi))
|
||||
(pin (num 6) (name PA1) (type BiDi))
|
||||
(pin (num 7) (name PA2_TX2) (type BiDi))
|
||||
(pin (num 8) (name PA3_RX2) (type BiDi))
|
||||
(pin (num 9) (name PA4) (type BiDi))
|
||||
(pin (num 10) (name PA5_SCK1) (type BiDi))
|
||||
(pin (num 11) (name PA6_MISO1) (type BiDi))
|
||||
(pin (num 12) (name PA7_MOSI1) (type BiDi))
|
||||
(pin (num 13) (name PB0) (type BiDi))
|
||||
(pin (num 14) (name PB1) (type BiDi))
|
||||
(pin (num 15) (name PB10_SCL2) (type BiDi))
|
||||
(pin (num 16) (name PB11_SDA2) (type BiDi))
|
||||
(pin (num 17) (name NRST) (type input))
|
||||
(pin (num 18) (name VCC3V3) (type BiDi))
|
||||
(pin (num 19) (name GND) (type power_in))
|
||||
(pin (num 20) (name GND) (type power_in))
|
||||
(pin (num 21) (name PB12) (type BiDi))
|
||||
(pin (num 22) (name PB13_SCK2) (type BiDi))
|
||||
(pin (num 23) (name PB14_MISO2) (type BiDi))
|
||||
(pin (num 24) (name PB15_MOSI2) (type BiDi))
|
||||
(pin (num 25) (name PA8) (type BiDi))
|
||||
(pin (num 26) (name PA9_TX1) (type BiDi))
|
||||
(pin (num 27) (name PA10_RX1) (type BiDi))
|
||||
(pin (num 28) (name PA11_USB_D-) (type BiDi))
|
||||
(pin (num 29) (name PA12_USBD+) (type BiDi))
|
||||
(pin (num 30) (name PA15) (type BiDi))
|
||||
(pin (num 31) (name PB3) (type BiDi))
|
||||
(pin (num 32) (name PB4) (type BiDi))
|
||||
(pin (num 33) (name PB5) (type BiDi))
|
||||
(pin (num 34) (name PB6_SCL1) (type BiDi))
|
||||
(pin (num 35) (name PB7_SDA1) (type BiDi))
|
||||
(pin (num 36) (name PB8) (type BiDi))
|
||||
(pin (num 37) (name PB9) (type BiDi))
|
||||
(pin (num 38) (name 5V_USB) (type BiDi))
|
||||
(pin (num 39) (name GND) (type power_in))
|
||||
(pin (num 40) (name VCC3V3) (type BiDi))
|
||||
(pin (num 41) (name PA14_SWCLK) (type BiDi))
|
||||
(pin (num 42) (name PA13_SWDIO) (type BiDi)))))
|
||||
(libraries
|
||||
(library (logical Connector)
|
||||
(uri "/Library/Application Support/kicad/library/Connector.lib"))
|
||||
(library (logical Connector_Generic)
|
||||
(uri "/Library/Application Support/kicad/library/Connector_Generic.lib"))
|
||||
(library (logical Device)
|
||||
(uri "/Library/Application Support/kicad/library/Device.lib"))
|
||||
(library (logical Mechanical)
|
||||
(uri "/Library/Application Support/kicad/library/Mechanical.lib"))
|
||||
(library (logical bluepill_scsi-rescue)
|
||||
(uri /Users/erichelgeson/source/BlueSCSI/hw/bluepill_scsi-rescue.lib)))
|
||||
(nets
|
||||
(net (code 1) (name "Net-(J2-Pad25)")
|
||||
(node (ref J2) (pin 25)))
|
||||
(net (code 2) (name "Net-(J2-Pad34)")
|
||||
(node (ref J2) (pin 34)))
|
||||
(net (code 3) (name /SCSI_DAT0)
|
||||
(node (ref RN3) (pin 3))
|
||||
(node (ref J2) (pin 2))
|
||||
(node (ref RN4) (pin 3))
|
||||
(node (ref U1) (pin 36)))
|
||||
(net (code 4) (name /SCSI_DAT1)
|
||||
(node (ref RN3) (pin 4))
|
||||
(node (ref RN4) (pin 4))
|
||||
(node (ref J2) (pin 4))
|
||||
(node (ref U1) (pin 37)))
|
||||
(net (code 5) (name /SCSI_DAT2)
|
||||
(node (ref U1) (pin 15))
|
||||
(node (ref RN4) (pin 5))
|
||||
(node (ref J2) (pin 6))
|
||||
(node (ref RN3) (pin 5)))
|
||||
(net (code 6) (name /SCSI_DAT3)
|
||||
(node (ref U1) (pin 16))
|
||||
(node (ref RN3) (pin 6))
|
||||
(node (ref J2) (pin 8))
|
||||
(node (ref RN4) (pin 6)))
|
||||
(net (code 7) (name /SCSI_DAT4)
|
||||
(node (ref RN4) (pin 7))
|
||||
(node (ref U1) (pin 21))
|
||||
(node (ref RN3) (pin 7))
|
||||
(node (ref J2) (pin 10)))
|
||||
(net (code 8) (name /SCSI_DAT5)
|
||||
(node (ref RN4) (pin 8))
|
||||
(node (ref RN3) (pin 8))
|
||||
(node (ref U1) (pin 22))
|
||||
(node (ref J2) (pin 12)))
|
||||
(net (code 9) (name /SCSI_DAT6)
|
||||
(node (ref J2) (pin 14))
|
||||
(node (ref RN4) (pin 9))
|
||||
(node (ref U1) (pin 23))
|
||||
(node (ref RN3) (pin 9)))
|
||||
(net (code 10) (name /SCSI_DAT7)
|
||||
(node (ref RN3) (pin 10))
|
||||
(node (ref U1) (pin 24))
|
||||
(node (ref RN4) (pin 10))
|
||||
(node (ref J2) (pin 16)))
|
||||
(net (code 11) (name /SCSI_DBP)
|
||||
(node (ref U1) (pin 13))
|
||||
(node (ref RN4) (pin 2))
|
||||
(node (ref J2) (pin 18))
|
||||
(node (ref RN3) (pin 2)))
|
||||
(net (code 12) (name /SCSI_BSY)
|
||||
(node (ref J3) (pin 3))
|
||||
(node (ref RN2) (pin 6))
|
||||
(node (ref J2) (pin 36))
|
||||
(node (ref U1) (pin 26))
|
||||
(node (ref RN1) (pin 6)))
|
||||
(net (code 13) (name /SCSI_ACK)
|
||||
(node (ref J3) (pin 4))
|
||||
(node (ref RN2) (pin 9))
|
||||
(node (ref J2) (pin 38))
|
||||
(node (ref U1) (pin 27))
|
||||
(node (ref RN1) (pin 9)))
|
||||
(net (code 14) (name /SCSI_RST)
|
||||
(node (ref RN2) (pin 8))
|
||||
(node (ref J2) (pin 40))
|
||||
(node (ref U1) (pin 30))
|
||||
(node (ref RN1) (pin 8)))
|
||||
(net (code 15) (name /SCSI_SEL)
|
||||
(node (ref RN2) (pin 7))
|
||||
(node (ref U1) (pin 32))
|
||||
(node (ref RN1) (pin 7))
|
||||
(node (ref J2) (pin 44)))
|
||||
(net (code 16) (name /SCSI_CD)
|
||||
(node (ref RN1) (pin 4))
|
||||
(node (ref J2) (pin 46))
|
||||
(node (ref U1) (pin 33))
|
||||
(node (ref RN2) (pin 4)))
|
||||
(net (code 17) (name /SCSI_REQ)
|
||||
(node (ref RN1) (pin 3))
|
||||
(node (ref J2) (pin 48))
|
||||
(node (ref RN2) (pin 3))
|
||||
(node (ref U1) (pin 34)))
|
||||
(net (code 18) (name /SCSI_IO)
|
||||
(node (ref U1) (pin 35))
|
||||
(node (ref RN2) (pin 2))
|
||||
(node (ref RN1) (pin 2))
|
||||
(node (ref J2) (pin 50)))
|
||||
(net (code 19) (name /SCSI_ATN)
|
||||
(node (ref U1) (pin 25))
|
||||
(node (ref RN1) (pin 10))
|
||||
(node (ref J2) (pin 32))
|
||||
(node (ref RN2) (pin 10)))
|
||||
(net (code 20) (name /SCSI_MSG)
|
||||
(node (ref RN1) (pin 5))
|
||||
(node (ref U1) (pin 31))
|
||||
(node (ref J2) (pin 42))
|
||||
(node (ref RN2) (pin 5)))
|
||||
(net (code 21) (name GND)
|
||||
(node (ref J2) (pin 39))
|
||||
(node (ref J2) (pin 41))
|
||||
(node (ref J2) (pin 43))
|
||||
(node (ref J2) (pin 37))
|
||||
(node (ref J4) (pin 2))
|
||||
(node (ref J2) (pin 45))
|
||||
(node (ref J2) (pin 47))
|
||||
(node (ref J2) (pin 49))
|
||||
(node (ref J2) (pin 5))
|
||||
(node (ref J2) (pin 7))
|
||||
(node (ref J2) (pin 9))
|
||||
(node (ref JP1) (pin 2))
|
||||
(node (ref J2) (pin 1))
|
||||
(node (ref J2) (pin 11))
|
||||
(node (ref J2) (pin 35))
|
||||
(node (ref J2) (pin 13))
|
||||
(node (ref J2) (pin 15))
|
||||
(node (ref J1) (pin 9))
|
||||
(node (ref J2) (pin 17))
|
||||
(node (ref J1) (pin 6))
|
||||
(node (ref J2) (pin 33))
|
||||
(node (ref J2) (pin 31))
|
||||
(node (ref J2) (pin 19))
|
||||
(node (ref J3) (pin 2))
|
||||
(node (ref J2) (pin 30))
|
||||
(node (ref J2) (pin 20))
|
||||
(node (ref J2) (pin 21))
|
||||
(node (ref J2) (pin 22))
|
||||
(node (ref J2) (pin 23))
|
||||
(node (ref J2) (pin 3))
|
||||
(node (ref J2) (pin 24))
|
||||
(node (ref U1) (pin 39))
|
||||
(node (ref J2) (pin 27))
|
||||
(node (ref J2) (pin 29))
|
||||
(node (ref J2) (pin 28))
|
||||
(node (ref U1) (pin 20))
|
||||
(node (ref U1) (pin 19)))
|
||||
(net (code 22) (name +3V3)
|
||||
(node (ref J1) (pin 4))
|
||||
(node (ref J3) (pin 1))
|
||||
(node (ref U1) (pin 40))
|
||||
(node (ref U1) (pin 18)))
|
||||
(net (code 23) (name /SD_CS)
|
||||
(node (ref J1) (pin 2))
|
||||
(node (ref U1) (pin 9)))
|
||||
(net (code 24) (name /SD_CLK)
|
||||
(node (ref U1) (pin 10))
|
||||
(node (ref J1) (pin 5)))
|
||||
(net (code 25) (name /SD_MISO)
|
||||
(node (ref U1) (pin 11))
|
||||
(node (ref J1) (pin 7)))
|
||||
(net (code 26) (name /SD_MOSI)
|
||||
(node (ref U1) (pin 12))
|
||||
(node (ref J1) (pin 3)))
|
||||
(net (code 27) (name "Net-(U1-Pad1)")
|
||||
(node (ref U1) (pin 1)))
|
||||
(net (code 28) (name "Net-(U1-Pad14)")
|
||||
(node (ref U1) (pin 14)))
|
||||
(net (code 29) (name "Net-(U1-Pad17)")
|
||||
(node (ref U1) (pin 17)))
|
||||
(net (code 30) (name /LED)
|
||||
(node (ref U1) (pin 2)))
|
||||
(net (code 31) (name "Net-(U1-Pad28)")
|
||||
(node (ref U1) (pin 28)))
|
||||
(net (code 32) (name "Net-(U1-Pad29)")
|
||||
(node (ref U1) (pin 29)))
|
||||
(net (code 33) (name "Net-(U1-Pad3)")
|
||||
(node (ref U1) (pin 3)))
|
||||
(net (code 34) (name "Net-(U1-Pad4)")
|
||||
(node (ref U1) (pin 4)))
|
||||
(net (code 35) (name "Net-(U1-Pad41)")
|
||||
(node (ref U1) (pin 41)))
|
||||
(net (code 36) (name "Net-(U1-Pad42)")
|
||||
(node (ref U1) (pin 42)))
|
||||
(net (code 37) (name "Net-(U1-Pad5)")
|
||||
(node (ref U1) (pin 5)))
|
||||
(net (code 38) (name "Net-(U1-Pad6)")
|
||||
(node (ref U1) (pin 6)))
|
||||
(net (code 39) (name "Net-(U1-Pad7)")
|
||||
(node (ref U1) (pin 7)))
|
||||
(net (code 40) (name "Net-(U1-Pad8)")
|
||||
(node (ref U1) (pin 8)))
|
||||
(net (code 41) (name "Net-(J1-Pad1)")
|
||||
(node (ref J1) (pin 1)))
|
||||
(net (code 42) (name "Net-(J1-Pad8)")
|
||||
(node (ref J1) (pin 8)))
|
||||
(net (code 43) (name /TERM_PWR)
|
||||
(node (ref D5) (pin 2))
|
||||
(node (ref J2) (pin 26)))
|
||||
(net (code 44) (name "Net-(H1-Pad1)")
|
||||
(node (ref H1) (pin 1)))
|
||||
(net (code 45) (name "Net-(JP2-Pad1)")
|
||||
(node (ref RN1) (pin 1))
|
||||
(node (ref JP2) (pin 1))
|
||||
(node (ref RN3) (pin 1)))
|
||||
(net (code 46) (name "Net-(JP1-Pad1)")
|
||||
(node (ref JP1) (pin 1))
|
||||
(node (ref RN4) (pin 1))
|
||||
(node (ref RN2) (pin 1)))
|
||||
(net (code 47) (name "Net-(J4-Pad3)")
|
||||
(node (ref J4) (pin 3)))
|
||||
(net (code 48) (name "Net-(J4-Pad4)")
|
||||
(node (ref J4) (pin 4)))
|
||||
(net (code 49) (name VCC)
|
||||
(node (ref JP2) (pin 2))
|
||||
(node (ref U1) (pin 38))
|
||||
(node (ref D4) (pin 1))
|
||||
(node (ref D5) (pin 1)))
|
||||
(net (code 50) (name +5V)
|
||||
(node (ref J4) (pin 1))
|
||||
(node (ref D4) (pin 2)))))
|
|
@ -1,249 +0,0 @@
|
|||
update=10/17/2020 9:08:29 PM
|
||||
version=1
|
||||
last_client=kicad
|
||||
[general]
|
||||
version=1
|
||||
RootSch=
|
||||
BoardNm=
|
||||
[cvpcb]
|
||||
version=1
|
||||
NetIExt=net
|
||||
[eeschema]
|
||||
version=1
|
||||
LibDir=
|
||||
[eeschema/libraries]
|
||||
[schematic_editor]
|
||||
version=1
|
||||
PageLayoutDescrFile=
|
||||
PlotDirectoryName=
|
||||
SubpartIdSeparator=0
|
||||
SubpartFirstId=65
|
||||
NetFmtName=Pcbnew
|
||||
SpiceAjustPassiveValues=0
|
||||
LabSize=50
|
||||
ERC_TestSimilarLabels=1
|
||||
[pcbnew]
|
||||
version=1
|
||||
PageLayoutDescrFile=
|
||||
LastNetListRead=bluepill_scsi.net
|
||||
CopperLayerCount=2
|
||||
BoardThickness=1.6
|
||||
AllowMicroVias=0
|
||||
AllowBlindVias=0
|
||||
RequireCourtyardDefinitions=0
|
||||
ProhibitOverlappingCourtyards=1
|
||||
MinTrackWidth=0.2
|
||||
MinViaDiameter=0.4
|
||||
MinViaDrill=0.3
|
||||
MinMicroViaDiameter=0.2
|
||||
MinMicroViaDrill=0.09999999999999999
|
||||
MinHoleToHole=0.25
|
||||
TrackWidth1=0.25
|
||||
TrackWidth2=0.4
|
||||
ViaDiameter1=0.8
|
||||
ViaDrill1=0.4
|
||||
dPairWidth1=0.2
|
||||
dPairGap1=0.25
|
||||
dPairViaGap1=0.25
|
||||
SilkLineWidth=0.12
|
||||
SilkTextSizeV=1
|
||||
SilkTextSizeH=1
|
||||
SilkTextSizeThickness=0.15
|
||||
SilkTextItalic=0
|
||||
SilkTextUpright=1
|
||||
CopperLineWidth=0.2
|
||||
CopperTextSizeV=1.5
|
||||
CopperTextSizeH=1.5
|
||||
CopperTextThickness=0.3
|
||||
CopperTextItalic=0
|
||||
CopperTextUpright=1
|
||||
EdgeCutLineWidth=0.05
|
||||
CourtyardLineWidth=0.05
|
||||
OthersLineWidth=0.15
|
||||
OthersTextSizeV=1
|
||||
OthersTextSizeH=1
|
||||
OthersTextSizeThickness=0.15
|
||||
OthersTextItalic=0
|
||||
OthersTextUpright=1
|
||||
SolderMaskClearance=0.05
|
||||
SolderMaskMinWidth=0
|
||||
SolderPasteClearance=0
|
||||
SolderPasteRatio=-0
|
||||
[pcbnew/Layer.F.Cu]
|
||||
Name=F.Cu
|
||||
Type=0
|
||||
Enabled=1
|
||||
[pcbnew/Layer.In1.Cu]
|
||||
Name=In1.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In2.Cu]
|
||||
Name=In2.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In3.Cu]
|
||||
Name=In3.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In4.Cu]
|
||||
Name=In4.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In5.Cu]
|
||||
Name=In5.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In6.Cu]
|
||||
Name=In6.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In7.Cu]
|
||||
Name=In7.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In8.Cu]
|
||||
Name=In8.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In9.Cu]
|
||||
Name=In9.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In10.Cu]
|
||||
Name=In10.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In11.Cu]
|
||||
Name=In11.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In12.Cu]
|
||||
Name=In12.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In13.Cu]
|
||||
Name=In13.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In14.Cu]
|
||||
Name=In14.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In15.Cu]
|
||||
Name=In15.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In16.Cu]
|
||||
Name=In16.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In17.Cu]
|
||||
Name=In17.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In18.Cu]
|
||||
Name=In18.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In19.Cu]
|
||||
Name=In19.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In20.Cu]
|
||||
Name=In20.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In21.Cu]
|
||||
Name=In21.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In22.Cu]
|
||||
Name=In22.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In23.Cu]
|
||||
Name=In23.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In24.Cu]
|
||||
Name=In24.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In25.Cu]
|
||||
Name=In25.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In26.Cu]
|
||||
Name=In26.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In27.Cu]
|
||||
Name=In27.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In28.Cu]
|
||||
Name=In28.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In29.Cu]
|
||||
Name=In29.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In30.Cu]
|
||||
Name=In30.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.B.Cu]
|
||||
Name=B.Cu
|
||||
Type=0
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Adhes]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Adhes]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Paste]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Paste]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.SilkS]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.SilkS]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Mask]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Mask]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Dwgs.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Cmts.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Eco1.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Eco2.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Edge.Cuts]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Margin]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.CrtYd]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.CrtYd]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Fab]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Fab]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Rescue]
|
||||
Enabled=0
|
||||
[pcbnew/Netclasses]
|
||||
[pcbnew/Netclasses/Default]
|
||||
Name=Default
|
||||
Clearance=0.2
|
||||
TrackWidth=0.25
|
||||
ViaDiameter=0.8
|
||||
ViaDrill=0.4
|
||||
uViaDiameter=0.3
|
||||
uViaDrill=0.1
|
||||
dPairWidth=0.2
|
||||
dPairGap=0.25
|
||||
dPairViaGap=0.25
|
1047
hw/bluepill_scsi.sch
715
hw/fp-info-cache
|
@ -1,715 +0,0 @@
|
|||
162127692462820
|
||||
Diode_THT
|
||||
D_5KPW_P7.62mm_Vertical_AnodeUp
|
||||
Diode, 5KPW series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9*8mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5KPW series Axial Vertical pin pitch 7.62mm length 9mm diameter 8mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5KPW_P7.62mm_Vertical_KathodeUp
|
||||
Diode, 5KPW series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9*8mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5KPW series Axial Vertical pin pitch 7.62mm length 9mm diameter 8mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5KPW_P12.70mm_Horizontal
|
||||
Diode, 5KPW series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9*8mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5KPW series Axial Horizontal pin pitch 12.7mm length 9mm diameter 8mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5KP_P7.62mm_Vertical_AnodeUp
|
||||
Diode, 5KP series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5KP series Axial Vertical pin pitch 7.62mm length 7.62mm diameter 9.53mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5KP_P7.62mm_Vertical_KathodeUp
|
||||
Diode, 5KP series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5KP series Axial Vertical pin pitch 7.62mm length 7.62mm diameter 9.53mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5KP_P10.16mm_Horizontal
|
||||
Diode, 5KP series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5KP series Axial Horizontal pin pitch 10.16mm length 7.62mm diameter 9.53mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5KP_P12.70mm_Horizontal
|
||||
Diode, 5KP series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5KP series Axial Horizontal pin pitch 12.7mm length 7.62mm diameter 9.53mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5W_P5.08mm_Vertical_AnodeUp
|
||||
Diode, 5W series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5W series Axial Vertical pin pitch 5.08mm length 8.9mm diameter 3.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5W_P5.08mm_Vertical_KathodeUp
|
||||
Diode, 5W series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5W series Axial Vertical pin pitch 5.08mm length 8.9mm diameter 3.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5W_P10.16mm_Horizontal
|
||||
Diode, 5W series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5W series Axial Horizontal pin pitch 10.16mm length 8.9mm diameter 3.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_5W_P12.70mm_Horizontal
|
||||
Diode, 5W series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
|
||||
Diode 5W series Axial Horizontal pin pitch 12.7mm length 8.9mm diameter 3.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_A-405_P2.54mm_Vertical_AnodeUp
|
||||
Diode, A-405 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
|
||||
Diode A-405 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_A-405_P2.54mm_Vertical_KathodeUp
|
||||
Diode, A-405 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
|
||||
Diode A-405 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_A-405_P5.08mm_Vertical_AnodeUp
|
||||
Diode, A-405 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
|
||||
Diode A-405 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_A-405_P5.08mm_Vertical_KathodeUp
|
||||
Diode, A-405 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
|
||||
Diode A-405 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_A-405_P7.62mm_Horizontal
|
||||
Diode, A-405 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
|
||||
Diode A-405 series Axial Horizontal pin pitch 7.62mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_A-405_P10.16mm_Horizontal
|
||||
Diode, A-405 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
|
||||
Diode A-405 series Axial Horizontal pin pitch 10.16mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_A-405_P12.70mm_Horizontal
|
||||
Diode, A-405 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
|
||||
Diode A-405 series Axial Horizontal pin pitch 12.7mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P2.54mm_Vertical_AnodeUp
|
||||
Diode, DO-15 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Vertical pin pitch 2.54mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P2.54mm_Vertical_KathodeUp
|
||||
Diode, DO-15 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Vertical pin pitch 2.54mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P3.81mm_Vertical_AnodeUp
|
||||
Diode, DO-15 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Vertical pin pitch 3.81mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P3.81mm_Vertical_KathodeUp
|
||||
Diode, DO-15 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Vertical pin pitch 3.81mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-15 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Vertical pin pitch 5.08mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-15 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Vertical pin pitch 5.08mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P10.16mm_Horizontal
|
||||
Diode, DO-15 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Horizontal pin pitch 10.16mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P12.70mm_Horizontal
|
||||
Diode, DO-15 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Horizontal pin pitch 12.7mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-15_P15.24mm_Horizontal
|
||||
Diode, DO-15 series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
|
||||
Diode DO-15 series Axial Horizontal pin pitch 15.24mm length 7.6mm diameter 3.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-27_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
|
||||
Diode DO-27 series Axial Vertical pin pitch 5.08mm length 9.52mm diameter 5.33mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-27_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
|
||||
Diode DO-27 series Axial Vertical pin pitch 5.08mm length 9.52mm diameter 5.33mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-27_P12.70mm_Horizontal
|
||||
Diode, DO-27 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
|
||||
Diode DO-27 series Axial Horizontal pin pitch 12.7mm length 9.52mm diameter 5.33mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-27_P15.24mm_Horizontal
|
||||
Diode, DO-27 series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
|
||||
Diode DO-27 series Axial Horizontal pin pitch 15.24mm length 9.52mm diameter 5.33mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-34_SOD68_P2.54mm_Vertical_AnodeUp
|
||||
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
|
||||
Diode DO-34_SOD68 series Axial Vertical pin pitch 2.54mm length 3.04mm diameter 1.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-34_SOD68_P2.54mm_Vertical_KathodeUp
|
||||
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
|
||||
Diode DO-34_SOD68 series Axial Vertical pin pitch 2.54mm length 3.04mm diameter 1.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-34_SOD68_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
|
||||
Diode DO-34_SOD68 series Axial Vertical pin pitch 5.08mm length 3.04mm diameter 1.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-34_SOD68_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
|
||||
Diode DO-34_SOD68 series Axial Vertical pin pitch 5.08mm length 3.04mm diameter 1.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-34_SOD68_P7.62mm_Horizontal
|
||||
Diode, DO-34_SOD68 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
|
||||
Diode DO-34_SOD68 series Axial Horizontal pin pitch 7.62mm length 3.04mm diameter 1.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-34_SOD68_P10.16mm_Horizontal
|
||||
Diode, DO-34_SOD68 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
|
||||
Diode DO-34_SOD68 series Axial Horizontal pin pitch 10.16mm length 3.04mm diameter 1.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-34_SOD68_P12.70mm_Horizontal
|
||||
Diode, DO-34_SOD68 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
|
||||
Diode DO-34_SOD68 series Axial Horizontal pin pitch 12.7mm length 3.04mm diameter 1.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P2.54mm_Vertical_AnodeUp
|
||||
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Vertical pin pitch 2.54mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P2.54mm_Vertical_KathodeUp
|
||||
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Vertical pin pitch 2.54mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P3.81mm_Vertical_AnodeUp
|
||||
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Vertical pin pitch 3.81mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P3.81mm_Vertical_KathodeUp
|
||||
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Vertical pin pitch 3.81mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Vertical pin pitch 5.08mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Vertical pin pitch 5.08mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P7.62mm_Horizontal
|
||||
Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P10.16mm_Horizontal
|
||||
Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Horizontal pin pitch 10.16mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-35_SOD27_P12.70mm_Horizontal
|
||||
Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
|
||||
Diode DO-35_SOD27 series Axial Horizontal pin pitch 12.7mm length 4mm diameter 2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P2.54mm_Vertical_AnodeUp
|
||||
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
|
||||
Diode DO-41_SOD81 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P2.54mm_Vertical_KathodeUp
|
||||
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
|
||||
Diode DO-41_SOD81 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P3.81mm_Vertical_AnodeUp
|
||||
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=5.2*2.7mm^2, , https://www.diodes.com/assets/Package-Files/DO-41-Plastic.pdf
|
||||
Diode DO-41_SOD81 series Axial Vertical pin pitch 3.81mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P3.81mm_Vertical_KathodeUp
|
||||
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=5.2*2.7mm^2, , https://www.diodes.com/assets/Package-Files/DO-41-Plastic.pdf
|
||||
Diode DO-41_SOD81 series Axial Vertical pin pitch 3.81mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
|
||||
Diode DO-41_SOD81 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
|
||||
Diode DO-41_SOD81 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P7.62mm_Horizontal
|
||||
Diode, DO-41_SOD81 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
|
||||
Diode DO-41_SOD81 series Axial Horizontal pin pitch 7.62mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P10.16mm_Horizontal
|
||||
Diode, DO-41_SOD81 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
|
||||
Diode DO-41_SOD81 series Axial Horizontal pin pitch 10.16mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-41_SOD81_P12.70mm_Horizontal
|
||||
Diode, DO-41_SOD81 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
|
||||
Diode DO-41_SOD81 series Axial Horizontal pin pitch 12.7mm length 5.2mm diameter 2.7mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AD_P3.81mm_Vertical_AnodeUp
|
||||
Diode, DO-201AD series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
|
||||
Diode DO-201AD series Axial Vertical pin pitch 3.81mm length 9.5mm diameter 5.2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AD_P3.81mm_Vertical_KathodeUp
|
||||
Diode, DO-201AD series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
|
||||
Diode DO-201AD series Axial Vertical pin pitch 3.81mm length 9.5mm diameter 5.2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AD_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-201AD series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
|
||||
Diode DO-201AD series Axial Vertical pin pitch 5.08mm length 9.5mm diameter 5.2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AD_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-201AD series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
|
||||
Diode DO-201AD series Axial Vertical pin pitch 5.08mm length 9.5mm diameter 5.2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AD_P12.70mm_Horizontal
|
||||
Diode, DO-201AD series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
|
||||
Diode DO-201AD series Axial Horizontal pin pitch 12.7mm length 9.5mm diameter 5.2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AD_P15.24mm_Horizontal
|
||||
Diode, DO-201AD series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
|
||||
Diode DO-201AD series Axial Horizontal pin pitch 15.24mm length 9.5mm diameter 5.2mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AE_P3.81mm_Vertical_AnodeUp
|
||||
Diode, DO-201AE series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
|
||||
Diode DO-201AE series Axial Vertical pin pitch 3.81mm length 9mm diameter 5.3mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AE_P3.81mm_Vertical_KathodeUp
|
||||
Diode, DO-201AE series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
|
||||
Diode DO-201AE series Axial Vertical pin pitch 3.81mm length 9mm diameter 5.3mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AE_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-201AE series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
|
||||
Diode DO-201AE series Axial Vertical pin pitch 5.08mm length 9mm diameter 5.3mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AE_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-201AE series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
|
||||
Diode DO-201AE series Axial Vertical pin pitch 5.08mm length 9mm diameter 5.3mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AE_P12.70mm_Horizontal
|
||||
Diode, DO-201AE series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
|
||||
Diode DO-201AE series Axial Horizontal pin pitch 12.7mm length 9mm diameter 5.3mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201AE_P15.24mm_Horizontal
|
||||
Diode, DO-201AE series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
|
||||
Diode DO-201AE series Axial Horizontal pin pitch 15.24mm length 9mm diameter 5.3mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201_P3.81mm_Vertical_AnodeUp
|
||||
Diode, DO-201 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
|
||||
Diode DO-201 series Axial Vertical pin pitch 3.81mm length 9.53mm diameter 5.21mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201_P3.81mm_Vertical_KathodeUp
|
||||
Diode, DO-201 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
|
||||
Diode DO-201 series Axial Vertical pin pitch 3.81mm length 9.53mm diameter 5.21mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201_P5.08mm_Vertical_AnodeUp
|
||||
Diode, DO-201 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
|
||||
Diode DO-201 series Axial Vertical pin pitch 5.08mm length 9.53mm diameter 5.21mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201_P5.08mm_Vertical_KathodeUp
|
||||
Diode, DO-201 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
|
||||
Diode DO-201 series Axial Vertical pin pitch 5.08mm length 9.53mm diameter 5.21mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201_P12.70mm_Horizontal
|
||||
Diode, DO-201 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
|
||||
Diode DO-201 series Axial Horizontal pin pitch 12.7mm length 9.53mm diameter 5.21mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_DO-201_P15.24mm_Horizontal
|
||||
Diode, DO-201 series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
|
||||
Diode DO-201 series Axial Horizontal pin pitch 15.24mm length 9.53mm diameter 5.21mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_P600_R-6_P7.62mm_Vertical_AnodeUp
|
||||
Diode, P600_R-6 series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
|
||||
Diode P600_R-6 series Axial Vertical pin pitch 7.62mm length 9.1mm diameter 9.1mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_P600_R-6_P7.62mm_Vertical_KathodeUp
|
||||
Diode, P600_R-6 series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
|
||||
Diode P600_R-6 series Axial Vertical pin pitch 7.62mm length 9.1mm diameter 9.1mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_P600_R-6_P12.70mm_Horizontal
|
||||
Diode, P600_R-6 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
|
||||
Diode P600_R-6 series Axial Horizontal pin pitch 12.7mm length 9.1mm diameter 9.1mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_P600_R-6_P20.00mm_Horizontal
|
||||
Diode, P600_R-6 series, Axial, Horizontal, pin pitch=20mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
|
||||
Diode P600_R-6 series Axial Horizontal pin pitch 20mm length 9.1mm diameter 9.1mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_T-1_P2.54mm_Vertical_AnodeUp
|
||||
Diode, T-1 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
|
||||
Diode T-1 series Axial Vertical pin pitch 2.54mm length 3.2mm diameter 2.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_T-1_P2.54mm_Vertical_KathodeUp
|
||||
Diode, T-1 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
|
||||
Diode T-1 series Axial Vertical pin pitch 2.54mm length 3.2mm diameter 2.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_T-1_P5.08mm_Horizontal
|
||||
Diode, T-1 series, Axial, Horizontal, pin pitch=5.08mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
|
||||
Diode T-1 series Axial Horizontal pin pitch 5.08mm length 3.2mm diameter 2.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_T-1_P10.16mm_Horizontal
|
||||
Diode, T-1 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
|
||||
Diode T-1 series Axial Horizontal pin pitch 10.16mm length 3.2mm diameter 2.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
D_T-1_P12.70mm_Horizontal
|
||||
Diode, T-1 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
|
||||
Diode T-1 series Axial Horizontal pin pitch 12.7mm length 3.2mm diameter 2.6mm
|
||||
0
|
||||
2
|
||||
2
|
||||
Diode_THT
|
||||
Diode_Bridge_15.1x15.1x6.3mm_P10.9mm
|
||||
Single phase bridge rectifier case 15.1x15.1mm, pitch 10.9mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/pb1000.pdf
|
||||
Diode Bridge PB10xxS
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_15.2x15.2x6.3mm_P10.9mm
|
||||
Single phase bridge rectifier case 15.2x15.2mm, pitch 10.9mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/kbpc600.pdf
|
||||
Diode Bridge KBPC6xx
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_15.7x15.7x6.3mm_P10.8mm
|
||||
Single phase bridge rectifier case 15.7x15.7
|
||||
Diode Bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_16.7x16.7x6.3mm_P10.8mm
|
||||
Single phase bridge rectifier case 16.7x16.7
|
||||
Diode Bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_19.0x3.5x10.0mm_P5.0mm
|
||||
Vishay GBU rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88606/g3sba20.pdf
|
||||
Vishay GBU rectifier diode bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_19.0x19.0x6.8mm_P12.7mm
|
||||
Single phase bridge rectifier case 19x19mm, pitch 12.7mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/pb1000.pdf
|
||||
Diode Bridge PB10xx
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_28.6x28.6x7.3mm_P18.0mm_P11.6mm
|
||||
Single phase bridge rectifier case 28.6x28.6mm, pitch 18.0mm & 11.6mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/kbpc1500fw.pdf
|
||||
Diode Bridge KBPCxxxxWP
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_32.0x5.6x17.0mm_P10.0mm_P7.5mm
|
||||
Diotec 32x5.6x17mm rectifier package, 7.5mm/10mm pitch, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/b40c3700.pdf
|
||||
Diotec rectifier diode bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_DIP-4_W5.08mm_P2.54mm
|
||||
4-lead dip package for diode bridges, row spacing 5.08mm, pin-spacing 2.54mm, see http://www.vishay.com/docs/88898/b2m.pdf
|
||||
DIL DIP PDIP 5.08mm 2.54
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_DIP-4_W7.62mm_P5.08mm
|
||||
4-lead dip package for diode bridges, row spacing 7.62 mm (300 mils), see http://cdn-reichelt.de/documents/datenblatt/A400/HDBL101G_20SERIES-TSC.pdf
|
||||
DIL DIP PDIP 5.08mm 7.62mm 300mil
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Round_D8.9mm
|
||||
4-lead round diode bridge package, diameter 8.9mm, pin pitch 5.08mm, see http://cdn-reichelt.de/documents/datenblatt/A400/W005M-W10M_SEP.PDF
|
||||
diode bridge 8.9mm 8.85mm WOB pitch 5.08mm
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Round_D9.0mm
|
||||
4-lead round diode bridge package, diameter 9.0mm, pin pitch 5.0mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/b40r.pdf
|
||||
diode bridge 9.0mm 8.85mm WOB pitch 5.0mm
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Round_D9.8mm
|
||||
4-lead round diode bridge package, diameter 9.8mm, pin pitch 5.08mm, see http://www.vishay.com/docs/88769/woo5g.pdf
|
||||
diode bridge 9.8mm WOG pitch 5.08mm
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Vishay_GBL
|
||||
Vishay GBL rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88609/gbl005.pdf
|
||||
Vishay GBL rectifier diode bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Vishay_GBU
|
||||
Vishay GBU rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88606/g3sba20.pdf
|
||||
Vishay GBU rectifier diode bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Vishay_KBL
|
||||
Vishay KBL rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88655/kbl005.pdf
|
||||
Vishay KBL rectifier diode bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Vishay_KBPC1
|
||||
Single phase bridge rectifier case KBPC1, see http://www.vishay.com/docs/93585/vs-kbpc1series.pdf
|
||||
Diode Bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Vishay_KBPC6
|
||||
Single phase bridge rectifier case KBPC6, see http://www.vishay.com/docs/93585/vs-kbpc1series.pdf
|
||||
Diode Bridge
|
||||
0
|
||||
4
|
||||
4
|
||||
Diode_THT
|
||||
Diode_Bridge_Vishay_KBU
|
||||
Vishay KBU rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88656/kbu4.pdf
|
||||
Vishay KBU rectifier diode bridge
|
||||
0
|
||||
4
|
||||
4
|
|
@ -1,262 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Bot*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11O,2.350000X1.827200*%
|
||||
%ADD12R,2.350000X1.827200*%
|
||||
%ADD13C,2.800000*%
|
||||
%ADD14C,1.800000*%
|
||||
%ADD15R,1.800000X1.800000*%
|
||||
%ADD16O,1.800000X1.800000*%
|
||||
%ADD17R,1.700000X1.700000*%
|
||||
%ADD18O,1.700000X1.700000*%
|
||||
%ADD19R,1.350000X1.350000*%
|
||||
%ADD20C,1.350000*%
|
||||
%ADD21R,1.900000X1.900000*%
|
||||
%ADD22O,1.900000X1.900000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,U1*%
|
||||
X90805000Y-83083400D03*
|
||||
X90805000Y-85674200D03*
|
||||
X90805000Y-88214200D03*
|
||||
X90805000Y-90754200D03*
|
||||
X90805000Y-93294200D03*
|
||||
X90805000Y-95834200D03*
|
||||
X90805000Y-98374200D03*
|
||||
X90805000Y-100914200D03*
|
||||
X90805000Y-103454200D03*
|
||||
X90805000Y-105994200D03*
|
||||
X90805000Y-108534200D03*
|
||||
X90805000Y-111074200D03*
|
||||
X90805000Y-113614200D03*
|
||||
X90805000Y-116154200D03*
|
||||
X90805000Y-118694200D03*
|
||||
X90805000Y-121234200D03*
|
||||
X90805000Y-123774200D03*
|
||||
X90805000Y-126314200D03*
|
||||
X90805000Y-128854200D03*
|
||||
X90805000Y-131394200D03*
|
||||
X75565000Y-131394200D03*
|
||||
X75565000Y-128854200D03*
|
||||
X75565000Y-126314200D03*
|
||||
X75565000Y-123774200D03*
|
||||
X75565000Y-121234200D03*
|
||||
X75565000Y-118694200D03*
|
||||
X75565000Y-116154200D03*
|
||||
X75565000Y-113614200D03*
|
||||
X75565000Y-111074200D03*
|
||||
X75565000Y-108534200D03*
|
||||
X75565000Y-105994200D03*
|
||||
X75565000Y-103454200D03*
|
||||
X75565000Y-100914200D03*
|
||||
X75565000Y-98374200D03*
|
||||
X75565000Y-95834200D03*
|
||||
X75565000Y-93294200D03*
|
||||
X75565000Y-90754200D03*
|
||||
X75565000Y-88214200D03*
|
||||
X75565000Y-85674200D03*
|
||||
D12*
|
||||
X75565000Y-83134200D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,H1*%
|
||||
X75057000Y-78867000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,J2*%
|
||||
X107315000Y-81915000D03*
|
||||
X107315000Y-84455000D03*
|
||||
X107315000Y-86995000D03*
|
||||
X107315000Y-89535000D03*
|
||||
X107315000Y-92075000D03*
|
||||
X107315000Y-94615000D03*
|
||||
X107315000Y-97155000D03*
|
||||
X107315000Y-99695000D03*
|
||||
X107315000Y-102235000D03*
|
||||
X107315000Y-104775000D03*
|
||||
X107315000Y-107315000D03*
|
||||
X107315000Y-109855000D03*
|
||||
X107315000Y-112395000D03*
|
||||
X107315000Y-114935000D03*
|
||||
X107315000Y-117475000D03*
|
||||
X107315000Y-120015000D03*
|
||||
X107315000Y-122555000D03*
|
||||
X107315000Y-125095000D03*
|
||||
X107315000Y-127635000D03*
|
||||
X107315000Y-130175000D03*
|
||||
X107315000Y-132715000D03*
|
||||
X107315000Y-135255000D03*
|
||||
X107315000Y-137795000D03*
|
||||
X107315000Y-140335000D03*
|
||||
X107315000Y-142875000D03*
|
||||
X109855000Y-81915000D03*
|
||||
X109855000Y-84455000D03*
|
||||
X109855000Y-86995000D03*
|
||||
X109855000Y-89535000D03*
|
||||
X109855000Y-92075000D03*
|
||||
X109855000Y-94615000D03*
|
||||
X109855000Y-97155000D03*
|
||||
X109855000Y-99695000D03*
|
||||
X109855000Y-102235000D03*
|
||||
X109855000Y-104775000D03*
|
||||
X109855000Y-107315000D03*
|
||||
X109855000Y-109855000D03*
|
||||
X109855000Y-112395000D03*
|
||||
X109855000Y-114935000D03*
|
||||
X109855000Y-117475000D03*
|
||||
X109855000Y-120015000D03*
|
||||
X109855000Y-122555000D03*
|
||||
X109855000Y-125095000D03*
|
||||
X109855000Y-127635000D03*
|
||||
X109855000Y-130175000D03*
|
||||
X109855000Y-132715000D03*
|
||||
X109855000Y-135255000D03*
|
||||
X109855000Y-137795000D03*
|
||||
X109855000Y-140335000D03*
|
||||
G36*
|
||||
G01*
|
||||
X110755000Y-142239705D02*
|
||||
X110755000Y-143510295D01*
|
||||
G75*
|
||||
G02*
|
||||
X110490295Y-143775000I-264705J0D01*
|
||||
G01*
|
||||
X109219705Y-143775000D01*
|
||||
G75*
|
||||
G02*
|
||||
X108955000Y-143510295I0J264705D01*
|
||||
G01*
|
||||
X108955000Y-142239705D01*
|
||||
G75*
|
||||
G02*
|
||||
X109219705Y-141975000I264705J0D01*
|
||||
G01*
|
||||
X110490295Y-141975000D01*
|
||||
G75*
|
||||
G02*
|
||||
X110755000Y-142239705I0J-264705D01*
|
||||
G01*
|
||||
G37*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,JP1*%
|
||||
X100965000Y-81915000D03*
|
||||
D16*
|
||||
X100965000Y-79375000D03*
|
||||
%TD*%
|
||||
%TO.C,JP2*%
|
||||
X97155000Y-79375000D03*
|
||||
D15*
|
||||
X97155000Y-81915000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,RN1*%
|
||||
X97155000Y-86995000D03*
|
||||
D18*
|
||||
X97155000Y-89535000D03*
|
||||
X97155000Y-92075000D03*
|
||||
X97155000Y-94615000D03*
|
||||
X97155000Y-97155000D03*
|
||||
X97155000Y-99695000D03*
|
||||
X97155000Y-102235000D03*
|
||||
X97155000Y-104775000D03*
|
||||
X97155000Y-107315000D03*
|
||||
X97155000Y-109855000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,RN2*%
|
||||
X100965000Y-86995000D03*
|
||||
D18*
|
||||
X100965000Y-89535000D03*
|
||||
X100965000Y-92075000D03*
|
||||
X100965000Y-94615000D03*
|
||||
X100965000Y-97155000D03*
|
||||
X100965000Y-99695000D03*
|
||||
X100965000Y-102235000D03*
|
||||
X100965000Y-104775000D03*
|
||||
X100965000Y-107315000D03*
|
||||
X100965000Y-109855000D03*
|
||||
%TD*%
|
||||
%TO.C,RN3*%
|
||||
X97155000Y-113665000D03*
|
||||
X97155000Y-116205000D03*
|
||||
X97155000Y-118745000D03*
|
||||
X97155000Y-121285000D03*
|
||||
X97155000Y-123825000D03*
|
||||
X97155000Y-126365000D03*
|
||||
X97155000Y-128905000D03*
|
||||
X97155000Y-131445000D03*
|
||||
X97155000Y-133985000D03*
|
||||
D17*
|
||||
X97155000Y-136525000D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,RN4*%
|
||||
X100965000Y-113665000D03*
|
||||
X100965000Y-116205000D03*
|
||||
X100965000Y-118745000D03*
|
||||
X100965000Y-121285000D03*
|
||||
X100965000Y-123825000D03*
|
||||
X100965000Y-126365000D03*
|
||||
X100965000Y-128905000D03*
|
||||
X100965000Y-131445000D03*
|
||||
X100965000Y-133985000D03*
|
||||
D17*
|
||||
X100965000Y-136525000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J3*%
|
||||
X73025000Y-146685000D03*
|
||||
D16*
|
||||
X73025000Y-144145000D03*
|
||||
X73025000Y-141605000D03*
|
||||
X73025000Y-139065000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,J4*%
|
||||
X93345000Y-144145000D03*
|
||||
D20*
|
||||
X95845000Y-144145000D03*
|
||||
X98345000Y-144145000D03*
|
||||
X100845000Y-144145000D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,D4*%
|
||||
X79375000Y-77851000D03*
|
||||
D22*
|
||||
X86995000Y-77851000D03*
|
||||
%TD*%
|
||||
%TO.C,D5*%
|
||||
X86995000Y-81407000D03*
|
||||
D21*
|
||||
X79375000Y-81407000D03*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,33 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
M02*
|
|
@ -1,126 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11C,0.120000*%
|
||||
%ADD12C,0.150000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,D4*%
|
||||
X80465000Y-78991000D02*
|
||||
X80465000Y-79321000D01*
|
||||
X80465000Y-79321000D02*
|
||||
X85905000Y-79321000D01*
|
||||
X85905000Y-79321000D02*
|
||||
X85905000Y-78991000D01*
|
||||
X80465000Y-76711000D02*
|
||||
X80465000Y-76381000D01*
|
||||
X80465000Y-76381000D02*
|
||||
X85905000Y-76381000D01*
|
||||
X85905000Y-76381000D02*
|
||||
X85905000Y-76711000D01*
|
||||
X81365000Y-79321000D02*
|
||||
X81365000Y-76381000D01*
|
||||
X81485000Y-79321000D02*
|
||||
X81485000Y-76381000D01*
|
||||
X81245000Y-79321000D02*
|
||||
X81245000Y-76381000D01*
|
||||
%TO.C,D5*%
|
||||
X81245000Y-82877000D02*
|
||||
X81245000Y-79937000D01*
|
||||
X81485000Y-82877000D02*
|
||||
X81485000Y-79937000D01*
|
||||
X81365000Y-82877000D02*
|
||||
X81365000Y-79937000D01*
|
||||
X85905000Y-79937000D02*
|
||||
X85905000Y-80267000D01*
|
||||
X80465000Y-79937000D02*
|
||||
X85905000Y-79937000D01*
|
||||
X80465000Y-80267000D02*
|
||||
X80465000Y-79937000D01*
|
||||
X85905000Y-82877000D02*
|
||||
X85905000Y-82547000D01*
|
||||
X80465000Y-82877000D02*
|
||||
X85905000Y-82877000D01*
|
||||
X80465000Y-82547000D02*
|
||||
X80465000Y-82877000D01*
|
||||
%TD*%
|
||||
%TO.C,D4*%
|
||||
D12*
|
||||
X90273095Y-77287380D02*
|
||||
X90273095Y-76287380D01*
|
||||
X90035000Y-76287380D01*
|
||||
X89892142Y-76335000D01*
|
||||
X89796904Y-76430238D01*
|
||||
X89749285Y-76525476D01*
|
||||
X89701666Y-76715952D01*
|
||||
X89701666Y-76858809D01*
|
||||
X89749285Y-77049285D01*
|
||||
X89796904Y-77144523D01*
|
||||
X89892142Y-77239761D01*
|
||||
X90035000Y-77287380D01*
|
||||
X90273095Y-77287380D01*
|
||||
X88844523Y-76620714D02*
|
||||
X88844523Y-77287380D01*
|
||||
X89082619Y-76239761D02*
|
||||
X89320714Y-76954047D01*
|
||||
X88701666Y-76954047D01*
|
||||
%TO.C,D5*%
|
||||
X90273095Y-81097380D02*
|
||||
X90273095Y-80097380D01*
|
||||
X90035000Y-80097380D01*
|
||||
X89892142Y-80145000D01*
|
||||
X89796904Y-80240238D01*
|
||||
X89749285Y-80335476D01*
|
||||
X89701666Y-80525952D01*
|
||||
X89701666Y-80668809D01*
|
||||
X89749285Y-80859285D01*
|
||||
X89796904Y-80954523D01*
|
||||
X89892142Y-81049761D01*
|
||||
X90035000Y-81097380D01*
|
||||
X90273095Y-81097380D01*
|
||||
X88796904Y-80097380D02*
|
||||
X89273095Y-80097380D01*
|
||||
X89320714Y-80573571D01*
|
||||
X89273095Y-80525952D01*
|
||||
X89177857Y-80478333D01*
|
||||
X88939761Y-80478333D01*
|
||||
X88844523Y-80525952D01*
|
||||
X88796904Y-80573571D01*
|
||||
X88749285Y-80668809D01*
|
||||
X88749285Y-80906904D01*
|
||||
X88796904Y-81002142D01*
|
||||
X88844523Y-81049761D01*
|
||||
X88939761Y-81097380D01*
|
||||
X89177857Y-81097380D01*
|
||||
X89273095Y-81049761D01*
|
||||
X89320714Y-81002142D01*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,32 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Profile,NP*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
M02*
|
|
@ -1,291 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Top*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11O,2.350000X1.827200*%
|
||||
%ADD12R,2.350000X1.827200*%
|
||||
%ADD13C,2.800000*%
|
||||
%ADD14C,1.800000*%
|
||||
%ADD15R,2.000000X1.450000*%
|
||||
%ADD16R,1.300000X1.100000*%
|
||||
%ADD17R,1.650000X1.450000*%
|
||||
%ADD18R,1.270000X1.900000*%
|
||||
%ADD19R,0.950000X1.200000*%
|
||||
%ADD20R,0.850000X1.200000*%
|
||||
%ADD21R,1.800000X1.800000*%
|
||||
%ADD22O,1.800000X1.800000*%
|
||||
%ADD23R,1.700000X1.700000*%
|
||||
%ADD24O,1.700000X1.700000*%
|
||||
%ADD25R,1.350000X1.350000*%
|
||||
%ADD26C,1.350000*%
|
||||
%ADD27R,1.900000X1.900000*%
|
||||
%ADD28O,1.900000X1.900000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,U1*%
|
||||
X90805000Y-83083400D03*
|
||||
X90805000Y-85674200D03*
|
||||
X90805000Y-88214200D03*
|
||||
X90805000Y-90754200D03*
|
||||
X90805000Y-93294200D03*
|
||||
X90805000Y-95834200D03*
|
||||
X90805000Y-98374200D03*
|
||||
X90805000Y-100914200D03*
|
||||
X90805000Y-103454200D03*
|
||||
X90805000Y-105994200D03*
|
||||
X90805000Y-108534200D03*
|
||||
X90805000Y-111074200D03*
|
||||
X90805000Y-113614200D03*
|
||||
X90805000Y-116154200D03*
|
||||
X90805000Y-118694200D03*
|
||||
X90805000Y-121234200D03*
|
||||
X90805000Y-123774200D03*
|
||||
X90805000Y-126314200D03*
|
||||
X90805000Y-128854200D03*
|
||||
X90805000Y-131394200D03*
|
||||
X75565000Y-131394200D03*
|
||||
X75565000Y-128854200D03*
|
||||
X75565000Y-126314200D03*
|
||||
X75565000Y-123774200D03*
|
||||
X75565000Y-121234200D03*
|
||||
X75565000Y-118694200D03*
|
||||
X75565000Y-116154200D03*
|
||||
X75565000Y-113614200D03*
|
||||
X75565000Y-111074200D03*
|
||||
X75565000Y-108534200D03*
|
||||
X75565000Y-105994200D03*
|
||||
X75565000Y-103454200D03*
|
||||
X75565000Y-100914200D03*
|
||||
X75565000Y-98374200D03*
|
||||
X75565000Y-95834200D03*
|
||||
X75565000Y-93294200D03*
|
||||
X75565000Y-90754200D03*
|
||||
X75565000Y-88214200D03*
|
||||
X75565000Y-85674200D03*
|
||||
D12*
|
||||
X75565000Y-83134200D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,H1*%
|
||||
X75057000Y-78867000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,J2*%
|
||||
X107315000Y-81915000D03*
|
||||
X107315000Y-84455000D03*
|
||||
X107315000Y-86995000D03*
|
||||
X107315000Y-89535000D03*
|
||||
X107315000Y-92075000D03*
|
||||
X107315000Y-94615000D03*
|
||||
X107315000Y-97155000D03*
|
||||
X107315000Y-99695000D03*
|
||||
X107315000Y-102235000D03*
|
||||
X107315000Y-104775000D03*
|
||||
X107315000Y-107315000D03*
|
||||
X107315000Y-109855000D03*
|
||||
X107315000Y-112395000D03*
|
||||
X107315000Y-114935000D03*
|
||||
X107315000Y-117475000D03*
|
||||
X107315000Y-120015000D03*
|
||||
X107315000Y-122555000D03*
|
||||
X107315000Y-125095000D03*
|
||||
X107315000Y-127635000D03*
|
||||
X107315000Y-130175000D03*
|
||||
X107315000Y-132715000D03*
|
||||
X107315000Y-135255000D03*
|
||||
X107315000Y-137795000D03*
|
||||
X107315000Y-140335000D03*
|
||||
X107315000Y-142875000D03*
|
||||
X109855000Y-81915000D03*
|
||||
X109855000Y-84455000D03*
|
||||
X109855000Y-86995000D03*
|
||||
X109855000Y-89535000D03*
|
||||
X109855000Y-92075000D03*
|
||||
X109855000Y-94615000D03*
|
||||
X109855000Y-97155000D03*
|
||||
X109855000Y-99695000D03*
|
||||
X109855000Y-102235000D03*
|
||||
X109855000Y-104775000D03*
|
||||
X109855000Y-107315000D03*
|
||||
X109855000Y-109855000D03*
|
||||
X109855000Y-112395000D03*
|
||||
X109855000Y-114935000D03*
|
||||
X109855000Y-117475000D03*
|
||||
X109855000Y-120015000D03*
|
||||
X109855000Y-122555000D03*
|
||||
X109855000Y-125095000D03*
|
||||
X109855000Y-127635000D03*
|
||||
X109855000Y-130175000D03*
|
||||
X109855000Y-132715000D03*
|
||||
X109855000Y-135255000D03*
|
||||
X109855000Y-137795000D03*
|
||||
X109855000Y-140335000D03*
|
||||
G36*
|
||||
G01*
|
||||
X110755000Y-142239705D02*
|
||||
X110755000Y-143510295D01*
|
||||
G75*
|
||||
G02*
|
||||
X110490295Y-143775000I-264705J0D01*
|
||||
G01*
|
||||
X109219705Y-143775000D01*
|
||||
G75*
|
||||
G02*
|
||||
X108955000Y-143510295I0J264705D01*
|
||||
G01*
|
||||
X108955000Y-142239705D01*
|
||||
G75*
|
||||
G02*
|
||||
X109219705Y-141975000I264705J0D01*
|
||||
G01*
|
||||
X110490295Y-141975000D01*
|
||||
G75*
|
||||
G02*
|
||||
X110755000Y-142239705I0J-264705D01*
|
||||
G01*
|
||||
G37*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J1*%
|
||||
X79455000Y-134960000D03*
|
||||
X85425000Y-134960000D03*
|
||||
D16*
|
||||
X88925000Y-139635000D03*
|
||||
X88925000Y-135935000D03*
|
||||
D17*
|
||||
X88750000Y-145660000D03*
|
||||
D18*
|
||||
X77430000Y-145435000D03*
|
||||
D19*
|
||||
X79690000Y-145785000D03*
|
||||
X80790000Y-145785000D03*
|
||||
X81890000Y-145785000D03*
|
||||
X82990000Y-145785000D03*
|
||||
X84090000Y-145785000D03*
|
||||
X85190000Y-145785000D03*
|
||||
D20*
|
||||
X78640000Y-145785000D03*
|
||||
D19*
|
||||
X86290000Y-145785000D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,JP1*%
|
||||
X100965000Y-81915000D03*
|
||||
D22*
|
||||
X100965000Y-79375000D03*
|
||||
%TD*%
|
||||
%TO.C,JP2*%
|
||||
X97155000Y-79375000D03*
|
||||
D21*
|
||||
X97155000Y-81915000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,RN1*%
|
||||
X97155000Y-86995000D03*
|
||||
D24*
|
||||
X97155000Y-89535000D03*
|
||||
X97155000Y-92075000D03*
|
||||
X97155000Y-94615000D03*
|
||||
X97155000Y-97155000D03*
|
||||
X97155000Y-99695000D03*
|
||||
X97155000Y-102235000D03*
|
||||
X97155000Y-104775000D03*
|
||||
X97155000Y-107315000D03*
|
||||
X97155000Y-109855000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,RN2*%
|
||||
X100965000Y-86995000D03*
|
||||
D24*
|
||||
X100965000Y-89535000D03*
|
||||
X100965000Y-92075000D03*
|
||||
X100965000Y-94615000D03*
|
||||
X100965000Y-97155000D03*
|
||||
X100965000Y-99695000D03*
|
||||
X100965000Y-102235000D03*
|
||||
X100965000Y-104775000D03*
|
||||
X100965000Y-107315000D03*
|
||||
X100965000Y-109855000D03*
|
||||
%TD*%
|
||||
%TO.C,RN3*%
|
||||
X97155000Y-113665000D03*
|
||||
X97155000Y-116205000D03*
|
||||
X97155000Y-118745000D03*
|
||||
X97155000Y-121285000D03*
|
||||
X97155000Y-123825000D03*
|
||||
X97155000Y-126365000D03*
|
||||
X97155000Y-128905000D03*
|
||||
X97155000Y-131445000D03*
|
||||
X97155000Y-133985000D03*
|
||||
D23*
|
||||
X97155000Y-136525000D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,RN4*%
|
||||
X100965000Y-113665000D03*
|
||||
X100965000Y-116205000D03*
|
||||
X100965000Y-118745000D03*
|
||||
X100965000Y-121285000D03*
|
||||
X100965000Y-123825000D03*
|
||||
X100965000Y-126365000D03*
|
||||
X100965000Y-128905000D03*
|
||||
X100965000Y-131445000D03*
|
||||
X100965000Y-133985000D03*
|
||||
D23*
|
||||
X100965000Y-136525000D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,J3*%
|
||||
X73025000Y-146685000D03*
|
||||
D22*
|
||||
X73025000Y-144145000D03*
|
||||
X73025000Y-141605000D03*
|
||||
X73025000Y-139065000D03*
|
||||
%TD*%
|
||||
D25*
|
||||
%TO.C,J4*%
|
||||
X93345000Y-144145000D03*
|
||||
D26*
|
||||
X95845000Y-144145000D03*
|
||||
X98345000Y-144145000D03*
|
||||
X100845000Y-144145000D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,D4*%
|
||||
X79375000Y-77851000D03*
|
||||
D28*
|
||||
X86995000Y-77851000D03*
|
||||
%TD*%
|
||||
%TO.C,D5*%
|
||||
X86995000Y-81407000D03*
|
||||
D27*
|
||||
X79375000Y-81407000D03*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,62 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11R,1.900000X1.350000*%
|
||||
%ADD12R,1.200000X1.000000*%
|
||||
%ADD13R,1.550000X1.350000*%
|
||||
%ADD14R,1.170000X1.800000*%
|
||||
%ADD15R,0.850000X1.100000*%
|
||||
%ADD16R,0.750000X1.100000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,J1*%
|
||||
X79455000Y-134960000D03*
|
||||
X85425000Y-134960000D03*
|
||||
D12*
|
||||
X88925000Y-139635000D03*
|
||||
X88925000Y-135935000D03*
|
||||
D13*
|
||||
X88750000Y-145660000D03*
|
||||
D14*
|
||||
X77430000Y-145435000D03*
|
||||
D15*
|
||||
X79690000Y-145785000D03*
|
||||
X80790000Y-145785000D03*
|
||||
X81890000Y-145785000D03*
|
||||
X82990000Y-145785000D03*
|
||||
X84090000Y-145785000D03*
|
||||
X85190000Y-145785000D03*
|
||||
D16*
|
||||
X78640000Y-145785000D03*
|
||||
D15*
|
||||
X86290000Y-145785000D03*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,731 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11C,0.150000*%
|
||||
%ADD12C,0.300000*%
|
||||
%ADD13C,0.120000*%
|
||||
%ADD14C,0.127000*%
|
||||
%ADD15C,0.200000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
D11*
|
||||
X75126904Y-147408333D02*
|
||||
X75126904Y-146913095D01*
|
||||
X75431666Y-147179761D01*
|
||||
X75431666Y-147065476D01*
|
||||
X75469761Y-146989285D01*
|
||||
X75507857Y-146951190D01*
|
||||
X75584047Y-146913095D01*
|
||||
X75774523Y-146913095D01*
|
||||
X75850714Y-146951190D01*
|
||||
X75888809Y-146989285D01*
|
||||
X75926904Y-147065476D01*
|
||||
X75926904Y-147294047D01*
|
||||
X75888809Y-147370238D01*
|
||||
X75850714Y-147408333D01*
|
||||
X75850714Y-146570238D02*
|
||||
X75888809Y-146532142D01*
|
||||
X75926904Y-146570238D01*
|
||||
X75888809Y-146608333D01*
|
||||
X75850714Y-146570238D01*
|
||||
X75926904Y-146570238D01*
|
||||
X75126904Y-146265476D02*
|
||||
X75126904Y-145770238D01*
|
||||
X75431666Y-146036904D01*
|
||||
X75431666Y-145922619D01*
|
||||
X75469761Y-145846428D01*
|
||||
X75507857Y-145808333D01*
|
||||
X75584047Y-145770238D01*
|
||||
X75774523Y-145770238D01*
|
||||
X75850714Y-145808333D01*
|
||||
X75888809Y-145846428D01*
|
||||
X75926904Y-145922619D01*
|
||||
X75926904Y-146151190D01*
|
||||
X75888809Y-146227380D01*
|
||||
X75850714Y-146265476D01*
|
||||
X75165000Y-143789285D02*
|
||||
X75126904Y-143865476D01*
|
||||
X75126904Y-143979761D01*
|
||||
X75165000Y-144094047D01*
|
||||
X75241190Y-144170238D01*
|
||||
X75317380Y-144208333D01*
|
||||
X75469761Y-144246428D01*
|
||||
X75584047Y-144246428D01*
|
||||
X75736428Y-144208333D01*
|
||||
X75812619Y-144170238D01*
|
||||
X75888809Y-144094047D01*
|
||||
X75926904Y-143979761D01*
|
||||
X75926904Y-143903571D01*
|
||||
X75888809Y-143789285D01*
|
||||
X75850714Y-143751190D01*
|
||||
X75584047Y-143751190D01*
|
||||
X75584047Y-143903571D01*
|
||||
X75126904Y-142303571D02*
|
||||
X75126904Y-141846428D01*
|
||||
X75926904Y-142075000D02*
|
||||
X75126904Y-142075000D01*
|
||||
X75126904Y-141655952D02*
|
||||
X75926904Y-141122619D01*
|
||||
X75126904Y-141122619D02*
|
||||
X75926904Y-141655952D01*
|
||||
X75926904Y-139141666D02*
|
||||
X75545952Y-139408333D01*
|
||||
X75926904Y-139598809D02*
|
||||
X75126904Y-139598809D01*
|
||||
X75126904Y-139294047D01*
|
||||
X75165000Y-139217857D01*
|
||||
X75203095Y-139179761D01*
|
||||
X75279285Y-139141666D01*
|
||||
X75393571Y-139141666D01*
|
||||
X75469761Y-139179761D01*
|
||||
X75507857Y-139217857D01*
|
||||
X75545952Y-139294047D01*
|
||||
X75545952Y-139598809D01*
|
||||
X75126904Y-138875000D02*
|
||||
X75926904Y-138341666D01*
|
||||
X75126904Y-138341666D02*
|
||||
X75926904Y-138875000D01*
|
||||
X99679285Y-139787380D02*
|
||||
X100298333Y-139787380D01*
|
||||
X99965000Y-140168333D01*
|
||||
X100107857Y-140168333D01*
|
||||
X100203095Y-140215952D01*
|
||||
X100250714Y-140263571D01*
|
||||
X100298333Y-140358809D01*
|
||||
X100298333Y-140596904D01*
|
||||
X100250714Y-140692142D01*
|
||||
X100203095Y-140739761D01*
|
||||
X100107857Y-140787380D01*
|
||||
X99822142Y-140787380D01*
|
||||
X99726904Y-140739761D01*
|
||||
X99679285Y-140692142D01*
|
||||
X100631666Y-139787380D02*
|
||||
X101250714Y-139787380D01*
|
||||
X100917380Y-140168333D01*
|
||||
X101060238Y-140168333D01*
|
||||
X101155476Y-140215952D01*
|
||||
X101203095Y-140263571D01*
|
||||
X101250714Y-140358809D01*
|
||||
X101250714Y-140596904D01*
|
||||
X101203095Y-140692142D01*
|
||||
X101155476Y-140739761D01*
|
||||
X101060238Y-140787380D01*
|
||||
X100774523Y-140787380D01*
|
||||
X100679285Y-140739761D01*
|
||||
X100631666Y-140692142D01*
|
||||
X101869761Y-139787380D02*
|
||||
X101965000Y-139787380D01*
|
||||
X102060238Y-139835000D01*
|
||||
X102107857Y-139882619D01*
|
||||
X102155476Y-139977857D01*
|
||||
X102203095Y-140168333D01*
|
||||
X102203095Y-140406428D01*
|
||||
X102155476Y-140596904D01*
|
||||
X102107857Y-140692142D01*
|
||||
X102060238Y-140739761D01*
|
||||
X101965000Y-140787380D01*
|
||||
X101869761Y-140787380D01*
|
||||
X101774523Y-140739761D01*
|
||||
X101726904Y-140692142D01*
|
||||
X101679285Y-140596904D01*
|
||||
X101631666Y-140406428D01*
|
||||
X101631666Y-140168333D01*
|
||||
X101679285Y-139977857D01*
|
||||
X101726904Y-139882619D01*
|
||||
X101774523Y-139835000D01*
|
||||
X101869761Y-139787380D01*
|
||||
X95916904Y-139882619D02*
|
||||
X95964523Y-139835000D01*
|
||||
X96059761Y-139787380D01*
|
||||
X96297857Y-139787380D01*
|
||||
X96393095Y-139835000D01*
|
||||
X96440714Y-139882619D01*
|
||||
X96488333Y-139977857D01*
|
||||
X96488333Y-140073095D01*
|
||||
X96440714Y-140215952D01*
|
||||
X95869285Y-140787380D01*
|
||||
X96488333Y-140787380D01*
|
||||
X96869285Y-139882619D02*
|
||||
X96916904Y-139835000D01*
|
||||
X97012142Y-139787380D01*
|
||||
X97250238Y-139787380D01*
|
||||
X97345476Y-139835000D01*
|
||||
X97393095Y-139882619D01*
|
||||
X97440714Y-139977857D01*
|
||||
X97440714Y-140073095D01*
|
||||
X97393095Y-140215952D01*
|
||||
X96821666Y-140787380D01*
|
||||
X97440714Y-140787380D01*
|
||||
X98059761Y-139787380D02*
|
||||
X98155000Y-139787380D01*
|
||||
X98250238Y-139835000D01*
|
||||
X98297857Y-139882619D01*
|
||||
X98345476Y-139977857D01*
|
||||
X98393095Y-140168333D01*
|
||||
X98393095Y-140406428D01*
|
||||
X98345476Y-140596904D01*
|
||||
X98297857Y-140692142D01*
|
||||
X98250238Y-140739761D01*
|
||||
X98155000Y-140787380D01*
|
||||
X98059761Y-140787380D01*
|
||||
X97964523Y-140739761D01*
|
||||
X97916904Y-140692142D01*
|
||||
X97869285Y-140596904D01*
|
||||
X97821666Y-140406428D01*
|
||||
X97821666Y-140168333D01*
|
||||
X97869285Y-139977857D01*
|
||||
X97916904Y-139882619D01*
|
||||
X97964523Y-139835000D01*
|
||||
X98059761Y-139787380D01*
|
||||
X95694904Y-76287380D02*
|
||||
X96266333Y-76287380D01*
|
||||
X95980619Y-77287380D02*
|
||||
X95980619Y-76287380D01*
|
||||
X96599666Y-76763571D02*
|
||||
X96933000Y-76763571D01*
|
||||
X97075857Y-77287380D02*
|
||||
X96599666Y-77287380D01*
|
||||
X96599666Y-76287380D01*
|
||||
X97075857Y-76287380D01*
|
||||
X98075857Y-77287380D02*
|
||||
X97742523Y-76811190D01*
|
||||
X97504428Y-77287380D02*
|
||||
X97504428Y-76287380D01*
|
||||
X97885380Y-76287380D01*
|
||||
X97980619Y-76335000D01*
|
||||
X98028238Y-76382619D01*
|
||||
X98075857Y-76477857D01*
|
||||
X98075857Y-76620714D01*
|
||||
X98028238Y-76715952D01*
|
||||
X97980619Y-76763571D01*
|
||||
X97885380Y-76811190D01*
|
||||
X97504428Y-76811190D01*
|
||||
X98504428Y-77287380D02*
|
||||
X98504428Y-76287380D01*
|
||||
X98837761Y-77001666D01*
|
||||
X99171095Y-76287380D01*
|
||||
X99171095Y-77287380D01*
|
||||
X100599666Y-76287380D02*
|
||||
X100790142Y-76287380D01*
|
||||
X100885380Y-76335000D01*
|
||||
X100980619Y-76430238D01*
|
||||
X101028238Y-76620714D01*
|
||||
X101028238Y-76954047D01*
|
||||
X100980619Y-77144523D01*
|
||||
X100885380Y-77239761D01*
|
||||
X100790142Y-77287380D01*
|
||||
X100599666Y-77287380D01*
|
||||
X100504428Y-77239761D01*
|
||||
X100409190Y-77144523D01*
|
||||
X100361571Y-76954047D01*
|
||||
X100361571Y-76620714D01*
|
||||
X100409190Y-76430238D01*
|
||||
X100504428Y-76335000D01*
|
||||
X100599666Y-76287380D01*
|
||||
X101456809Y-77287380D02*
|
||||
X101456809Y-76287380D01*
|
||||
X102028238Y-77287380D01*
|
||||
X102028238Y-76287380D01*
|
||||
D10*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D12*
|
||||
X77145571Y-147847857D02*
|
||||
X77359857Y-147919285D01*
|
||||
X77431285Y-147990714D01*
|
||||
X77502714Y-148133571D01*
|
||||
X77502714Y-148347857D01*
|
||||
X77431285Y-148490714D01*
|
||||
X77359857Y-148562142D01*
|
||||
X77217000Y-148633571D01*
|
||||
X76645571Y-148633571D01*
|
||||
X76645571Y-147133571D01*
|
||||
X77145571Y-147133571D01*
|
||||
X77288428Y-147205000D01*
|
||||
X77359857Y-147276428D01*
|
||||
X77431285Y-147419285D01*
|
||||
X77431285Y-147562142D01*
|
||||
X77359857Y-147705000D01*
|
||||
X77288428Y-147776428D01*
|
||||
X77145571Y-147847857D01*
|
||||
X76645571Y-147847857D01*
|
||||
X78359857Y-148633571D02*
|
||||
X78217000Y-148562142D01*
|
||||
X78145571Y-148419285D01*
|
||||
X78145571Y-147133571D01*
|
||||
X79574142Y-147633571D02*
|
||||
X79574142Y-148633571D01*
|
||||
X78931285Y-147633571D02*
|
||||
X78931285Y-148419285D01*
|
||||
X79002714Y-148562142D01*
|
||||
X79145571Y-148633571D01*
|
||||
X79359857Y-148633571D01*
|
||||
X79502714Y-148562142D01*
|
||||
X79574142Y-148490714D01*
|
||||
X80859857Y-148562142D02*
|
||||
X80717000Y-148633571D01*
|
||||
X80431285Y-148633571D01*
|
||||
X80288428Y-148562142D01*
|
||||
X80217000Y-148419285D01*
|
||||
X80217000Y-147847857D01*
|
||||
X80288428Y-147705000D01*
|
||||
X80431285Y-147633571D01*
|
||||
X80717000Y-147633571D01*
|
||||
X80859857Y-147705000D01*
|
||||
X80931285Y-147847857D01*
|
||||
X80931285Y-147990714D01*
|
||||
X80217000Y-148133571D01*
|
||||
X81502714Y-148562142D02*
|
||||
X81717000Y-148633571D01*
|
||||
X82074142Y-148633571D01*
|
||||
X82217000Y-148562142D01*
|
||||
X82288428Y-148490714D01*
|
||||
X82359857Y-148347857D01*
|
||||
X82359857Y-148205000D01*
|
||||
X82288428Y-148062142D01*
|
||||
X82217000Y-147990714D01*
|
||||
X82074142Y-147919285D01*
|
||||
X81788428Y-147847857D01*
|
||||
X81645571Y-147776428D01*
|
||||
X81574142Y-147705000D01*
|
||||
X81502714Y-147562142D01*
|
||||
X81502714Y-147419285D01*
|
||||
X81574142Y-147276428D01*
|
||||
X81645571Y-147205000D01*
|
||||
X81788428Y-147133571D01*
|
||||
X82145571Y-147133571D01*
|
||||
X82359857Y-147205000D01*
|
||||
X83859857Y-148490714D02*
|
||||
X83788428Y-148562142D01*
|
||||
X83574142Y-148633571D01*
|
||||
X83431285Y-148633571D01*
|
||||
X83217000Y-148562142D01*
|
||||
X83074142Y-148419285D01*
|
||||
X83002714Y-148276428D01*
|
||||
X82931285Y-147990714D01*
|
||||
X82931285Y-147776428D01*
|
||||
X83002714Y-147490714D01*
|
||||
X83074142Y-147347857D01*
|
||||
X83217000Y-147205000D01*
|
||||
X83431285Y-147133571D01*
|
||||
X83574142Y-147133571D01*
|
||||
X83788428Y-147205000D01*
|
||||
X83859857Y-147276428D01*
|
||||
X84431285Y-148562142D02*
|
||||
X84645571Y-148633571D01*
|
||||
X85002714Y-148633571D01*
|
||||
X85145571Y-148562142D01*
|
||||
X85217000Y-148490714D01*
|
||||
X85288428Y-148347857D01*
|
||||
X85288428Y-148205000D01*
|
||||
X85217000Y-148062142D01*
|
||||
X85145571Y-147990714D01*
|
||||
X85002714Y-147919285D01*
|
||||
X84717000Y-147847857D01*
|
||||
X84574142Y-147776428D01*
|
||||
X84502714Y-147705000D01*
|
||||
X84431285Y-147562142D01*
|
||||
X84431285Y-147419285D01*
|
||||
X84502714Y-147276428D01*
|
||||
X84574142Y-147205000D01*
|
||||
X84717000Y-147133571D01*
|
||||
X85074142Y-147133571D01*
|
||||
X85288428Y-147205000D01*
|
||||
X85931285Y-148633571D02*
|
||||
X85931285Y-147133571D01*
|
||||
X88574142Y-148633571D02*
|
||||
X87717000Y-148633571D01*
|
||||
X88145571Y-148633571D02*
|
||||
X88145571Y-147133571D01*
|
||||
X88002714Y-147347857D01*
|
||||
X87859857Y-147490714D01*
|
||||
X87717000Y-147562142D01*
|
||||
X89217000Y-148490714D02*
|
||||
X89288428Y-148562142D01*
|
||||
X89217000Y-148633571D01*
|
||||
X89145571Y-148562142D01*
|
||||
X89217000Y-148490714D01*
|
||||
X89217000Y-148633571D01*
|
||||
X90217000Y-147133571D02*
|
||||
X90359857Y-147133571D01*
|
||||
X90502714Y-147205000D01*
|
||||
X90574142Y-147276428D01*
|
||||
X90645571Y-147419285D01*
|
||||
X90717000Y-147705000D01*
|
||||
X90717000Y-148062142D01*
|
||||
X90645571Y-148347857D01*
|
||||
X90574142Y-148490714D01*
|
||||
X90502714Y-148562142D01*
|
||||
X90359857Y-148633571D01*
|
||||
X90217000Y-148633571D01*
|
||||
X90074142Y-148562142D01*
|
||||
X90002714Y-148490714D01*
|
||||
X89931285Y-148347857D01*
|
||||
X89859857Y-148062142D01*
|
||||
X89859857Y-147705000D01*
|
||||
X89931285Y-147419285D01*
|
||||
X90002714Y-147276428D01*
|
||||
X90074142Y-147205000D01*
|
||||
X90217000Y-147133571D01*
|
||||
X91359857Y-148062142D02*
|
||||
X92502714Y-148062142D01*
|
||||
X93859857Y-148562142D02*
|
||||
X93717000Y-148633571D01*
|
||||
X93431285Y-148633571D01*
|
||||
X93288428Y-148562142D01*
|
||||
X93217000Y-148490714D01*
|
||||
X93145571Y-148347857D01*
|
||||
X93145571Y-147919285D01*
|
||||
X93217000Y-147776428D01*
|
||||
X93288428Y-147705000D01*
|
||||
X93431285Y-147633571D01*
|
||||
X93717000Y-147633571D01*
|
||||
X93859857Y-147705000D01*
|
||||
D13*
|
||||
%TO.C,J2*%
|
||||
X114535000Y-142375000D02*
|
||||
X113535000Y-142875000D01*
|
||||
X114535000Y-143375000D02*
|
||||
X114535000Y-142375000D01*
|
||||
X113535000Y-142875000D02*
|
||||
X114535000Y-143375000D01*
|
||||
X111835000Y-110345000D02*
|
||||
X113145000Y-110345000D01*
|
||||
X111835000Y-110345000D02*
|
||||
X111835000Y-110345000D01*
|
||||
X111835000Y-78005000D02*
|
||||
X111835000Y-110345000D01*
|
||||
X105335000Y-78005000D02*
|
||||
X111835000Y-78005000D01*
|
||||
X105335000Y-146785000D02*
|
||||
X105335000Y-78005000D01*
|
||||
X111835000Y-146785000D02*
|
||||
X105335000Y-146785000D01*
|
||||
X111835000Y-114445000D02*
|
||||
X111835000Y-146785000D01*
|
||||
X113145000Y-114445000D02*
|
||||
X111835000Y-114445000D01*
|
||||
X113145000Y-76705000D02*
|
||||
X113145000Y-148085000D01*
|
||||
X104025000Y-76705000D02*
|
||||
X113145000Y-76705000D01*
|
||||
X104025000Y-148085000D02*
|
||||
X104025000Y-76705000D01*
|
||||
X113145000Y-148085000D02*
|
||||
X104025000Y-148085000D01*
|
||||
%TO.C,J1*%
|
||||
X89255000Y-144785000D02*
|
||||
X89255000Y-140335000D01*
|
||||
X89255000Y-138935000D02*
|
||||
X89255000Y-136635000D01*
|
||||
X89255000Y-135235000D02*
|
||||
X89255000Y-134515000D01*
|
||||
X89255000Y-134515000D02*
|
||||
X86575000Y-134515000D01*
|
||||
X84275000Y-134515000D02*
|
||||
X80605000Y-134515000D01*
|
||||
X78305000Y-134515000D02*
|
||||
X77075000Y-134515000D01*
|
||||
X77075000Y-134515000D02*
|
||||
X77075000Y-144335000D01*
|
||||
X87775000Y-146155000D02*
|
||||
X86915000Y-146155000D01*
|
||||
%TO.C,JP1*%
|
||||
X102295000Y-80645000D02*
|
||||
X99635000Y-80645000D01*
|
||||
X102295000Y-80645000D02*
|
||||
X102295000Y-78045000D01*
|
||||
X102295000Y-78045000D02*
|
||||
X99635000Y-78045000D01*
|
||||
X99635000Y-80645000D02*
|
||||
X99635000Y-78045000D01*
|
||||
X99635000Y-83245000D02*
|
||||
X99635000Y-81915000D01*
|
||||
X100965000Y-83245000D02*
|
||||
X99635000Y-83245000D01*
|
||||
%TO.C,JP2*%
|
||||
X97155000Y-83245000D02*
|
||||
X95825000Y-83245000D01*
|
||||
X95825000Y-83245000D02*
|
||||
X95825000Y-81915000D01*
|
||||
X95825000Y-80645000D02*
|
||||
X95825000Y-78045000D01*
|
||||
X98485000Y-78045000D02*
|
||||
X95825000Y-78045000D01*
|
||||
X98485000Y-80645000D02*
|
||||
X98485000Y-78045000D01*
|
||||
X98485000Y-80645000D02*
|
||||
X95825000Y-80645000D01*
|
||||
%TO.C,RN1*%
|
||||
X98555000Y-88265000D02*
|
||||
X95755000Y-88265000D01*
|
||||
X98555000Y-111295000D02*
|
||||
X98555000Y-85555000D01*
|
||||
X95755000Y-111295000D02*
|
||||
X98555000Y-111295000D01*
|
||||
X95755000Y-85555000D02*
|
||||
X95755000Y-111295000D01*
|
||||
X98555000Y-85555000D02*
|
||||
X95755000Y-85555000D01*
|
||||
%TO.C,RN2*%
|
||||
X102365000Y-88265000D02*
|
||||
X99565000Y-88265000D01*
|
||||
X102365000Y-111295000D02*
|
||||
X102365000Y-85555000D01*
|
||||
X99565000Y-111295000D02*
|
||||
X102365000Y-111295000D01*
|
||||
X99565000Y-85555000D02*
|
||||
X99565000Y-111295000D01*
|
||||
X102365000Y-85555000D02*
|
||||
X99565000Y-85555000D01*
|
||||
%TO.C,RN3*%
|
||||
X95755000Y-137965000D02*
|
||||
X98555000Y-137965000D01*
|
||||
X98555000Y-137965000D02*
|
||||
X98555000Y-112225000D01*
|
||||
X98555000Y-112225000D02*
|
||||
X95755000Y-112225000D01*
|
||||
X95755000Y-112225000D02*
|
||||
X95755000Y-137965000D01*
|
||||
X95755000Y-135255000D02*
|
||||
X98555000Y-135255000D01*
|
||||
%TO.C,RN4*%
|
||||
X99565000Y-137965000D02*
|
||||
X102365000Y-137965000D01*
|
||||
X102365000Y-137965000D02*
|
||||
X102365000Y-112225000D01*
|
||||
X102365000Y-112225000D02*
|
||||
X99565000Y-112225000D01*
|
||||
X99565000Y-112225000D02*
|
||||
X99565000Y-137965000D01*
|
||||
X99565000Y-135255000D02*
|
||||
X102365000Y-135255000D01*
|
||||
%TO.C,J3*%
|
||||
X74355000Y-137735000D02*
|
||||
X71695000Y-137735000D01*
|
||||
X74355000Y-145415000D02*
|
||||
X74355000Y-137735000D01*
|
||||
X71695000Y-145415000D02*
|
||||
X71695000Y-137735000D01*
|
||||
X74355000Y-145415000D02*
|
||||
X71695000Y-145415000D01*
|
||||
X74355000Y-146685000D02*
|
||||
X74355000Y-148015000D01*
|
||||
X74355000Y-148015000D02*
|
||||
X73025000Y-148015000D01*
|
||||
D14*
|
||||
%TO.C,J4*%
|
||||
X92095000Y-146645000D02*
|
||||
X92095000Y-141745000D01*
|
||||
X102095000Y-141745000D02*
|
||||
X102095000Y-146645000D01*
|
||||
X102095000Y-141745000D02*
|
||||
X92095000Y-141745000D01*
|
||||
X102095000Y-146645000D02*
|
||||
X92095000Y-146645000D01*
|
||||
D15*
|
||||
X91545000Y-144145000D02*
|
||||
G75*
|
||||
G03*
|
||||
X91545000Y-144145000I-100000J0D01*
|
||||
G01*
|
||||
%TD*%
|
||||
%TO.C,U1*%
|
||||
D11*
|
||||
X72477380Y-83946904D02*
|
||||
X73286904Y-83946904D01*
|
||||
X73382142Y-83899285D01*
|
||||
X73429761Y-83851666D01*
|
||||
X73477380Y-83756428D01*
|
||||
X73477380Y-83565952D01*
|
||||
X73429761Y-83470714D01*
|
||||
X73382142Y-83423095D01*
|
||||
X73286904Y-83375476D01*
|
||||
X72477380Y-83375476D01*
|
||||
X73477380Y-82375476D02*
|
||||
X73477380Y-82946904D01*
|
||||
X73477380Y-82661190D02*
|
||||
X72477380Y-82661190D01*
|
||||
X72620238Y-82756428D01*
|
||||
X72715476Y-82851666D01*
|
||||
X72763095Y-82946904D01*
|
||||
%TO.C,J2*%
|
||||
X102957380Y-145748333D02*
|
||||
X103671666Y-145748333D01*
|
||||
X103814523Y-145795952D01*
|
||||
X103909761Y-145891190D01*
|
||||
X103957380Y-146034047D01*
|
||||
X103957380Y-146129285D01*
|
||||
X103052619Y-145319761D02*
|
||||
X103005000Y-145272142D01*
|
||||
X102957380Y-145176904D01*
|
||||
X102957380Y-144938809D01*
|
||||
X103005000Y-144843571D01*
|
||||
X103052619Y-144795952D01*
|
||||
X103147857Y-144748333D01*
|
||||
X103243095Y-144748333D01*
|
||||
X103385952Y-144795952D01*
|
||||
X103957380Y-145367380D01*
|
||||
X103957380Y-144748333D01*
|
||||
%TO.C,J1*%
|
||||
X86661666Y-143597380D02*
|
||||
X86661666Y-144311666D01*
|
||||
X86614047Y-144454523D01*
|
||||
X86518809Y-144549761D01*
|
||||
X86375952Y-144597380D01*
|
||||
X86280714Y-144597380D01*
|
||||
X87661666Y-144597380D02*
|
||||
X87090238Y-144597380D01*
|
||||
X87375952Y-144597380D02*
|
||||
X87375952Y-143597380D01*
|
||||
X87280714Y-143740238D01*
|
||||
X87185476Y-143835476D01*
|
||||
X87090238Y-143883095D01*
|
||||
%TO.C,RN1*%
|
||||
X96464523Y-84907380D02*
|
||||
X96131190Y-84431190D01*
|
||||
X95893095Y-84907380D02*
|
||||
X95893095Y-83907380D01*
|
||||
X96274047Y-83907380D01*
|
||||
X96369285Y-83955000D01*
|
||||
X96416904Y-84002619D01*
|
||||
X96464523Y-84097857D01*
|
||||
X96464523Y-84240714D01*
|
||||
X96416904Y-84335952D01*
|
||||
X96369285Y-84383571D01*
|
||||
X96274047Y-84431190D01*
|
||||
X95893095Y-84431190D01*
|
||||
X96893095Y-84907380D02*
|
||||
X96893095Y-83907380D01*
|
||||
X97464523Y-84907380D01*
|
||||
X97464523Y-83907380D01*
|
||||
X98464523Y-84907380D02*
|
||||
X97893095Y-84907380D01*
|
||||
X98178809Y-84907380D02*
|
||||
X98178809Y-83907380D01*
|
||||
X98083571Y-84050238D01*
|
||||
X97988333Y-84145476D01*
|
||||
X97893095Y-84193095D01*
|
||||
%TO.C,RN2*%
|
||||
X100274523Y-84907380D02*
|
||||
X99941190Y-84431190D01*
|
||||
X99703095Y-84907380D02*
|
||||
X99703095Y-83907380D01*
|
||||
X100084047Y-83907380D01*
|
||||
X100179285Y-83955000D01*
|
||||
X100226904Y-84002619D01*
|
||||
X100274523Y-84097857D01*
|
||||
X100274523Y-84240714D01*
|
||||
X100226904Y-84335952D01*
|
||||
X100179285Y-84383571D01*
|
||||
X100084047Y-84431190D01*
|
||||
X99703095Y-84431190D01*
|
||||
X100703095Y-84907380D02*
|
||||
X100703095Y-83907380D01*
|
||||
X101274523Y-84907380D01*
|
||||
X101274523Y-83907380D01*
|
||||
X101703095Y-84002619D02*
|
||||
X101750714Y-83955000D01*
|
||||
X101845952Y-83907380D01*
|
||||
X102084047Y-83907380D01*
|
||||
X102179285Y-83955000D01*
|
||||
X102226904Y-84002619D01*
|
||||
X102274523Y-84097857D01*
|
||||
X102274523Y-84193095D01*
|
||||
X102226904Y-84335952D01*
|
||||
X101655476Y-84907380D01*
|
||||
X102274523Y-84907380D01*
|
||||
%TO.C,RN3*%
|
||||
X96464523Y-139517380D02*
|
||||
X96131190Y-139041190D01*
|
||||
X95893095Y-139517380D02*
|
||||
X95893095Y-138517380D01*
|
||||
X96274047Y-138517380D01*
|
||||
X96369285Y-138565000D01*
|
||||
X96416904Y-138612619D01*
|
||||
X96464523Y-138707857D01*
|
||||
X96464523Y-138850714D01*
|
||||
X96416904Y-138945952D01*
|
||||
X96369285Y-138993571D01*
|
||||
X96274047Y-139041190D01*
|
||||
X95893095Y-139041190D01*
|
||||
X96893095Y-139517380D02*
|
||||
X96893095Y-138517380D01*
|
||||
X97464523Y-139517380D01*
|
||||
X97464523Y-138517380D01*
|
||||
X97845476Y-138517380D02*
|
||||
X98464523Y-138517380D01*
|
||||
X98131190Y-138898333D01*
|
||||
X98274047Y-138898333D01*
|
||||
X98369285Y-138945952D01*
|
||||
X98416904Y-138993571D01*
|
||||
X98464523Y-139088809D01*
|
||||
X98464523Y-139326904D01*
|
||||
X98416904Y-139422142D01*
|
||||
X98369285Y-139469761D01*
|
||||
X98274047Y-139517380D01*
|
||||
X97988333Y-139517380D01*
|
||||
X97893095Y-139469761D01*
|
||||
X97845476Y-139422142D01*
|
||||
%TO.C,RN4*%
|
||||
X100274523Y-139517380D02*
|
||||
X99941190Y-139041190D01*
|
||||
X99703095Y-139517380D02*
|
||||
X99703095Y-138517380D01*
|
||||
X100084047Y-138517380D01*
|
||||
X100179285Y-138565000D01*
|
||||
X100226904Y-138612619D01*
|
||||
X100274523Y-138707857D01*
|
||||
X100274523Y-138850714D01*
|
||||
X100226904Y-138945952D01*
|
||||
X100179285Y-138993571D01*
|
||||
X100084047Y-139041190D01*
|
||||
X99703095Y-139041190D01*
|
||||
X100703095Y-139517380D02*
|
||||
X100703095Y-138517380D01*
|
||||
X101274523Y-139517380D01*
|
||||
X101274523Y-138517380D01*
|
||||
X102179285Y-138850714D02*
|
||||
X102179285Y-139517380D01*
|
||||
X101941190Y-138469761D02*
|
||||
X101703095Y-139184047D01*
|
||||
X102322142Y-139184047D01*
|
||||
%TO.C,J4*%
|
||||
X90471666Y-142327380D02*
|
||||
X90471666Y-143041666D01*
|
||||
X90424047Y-143184523D01*
|
||||
X90328809Y-143279761D01*
|
||||
X90185952Y-143327380D01*
|
||||
X90090714Y-143327380D01*
|
||||
X91376428Y-142660714D02*
|
||||
X91376428Y-143327380D01*
|
||||
X91138333Y-142279761D02*
|
||||
X90900238Y-142994047D01*
|
||||
X91519285Y-142994047D01*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,128 +0,0 @@
|
|||
{
|
||||
"Header":
|
||||
{
|
||||
"GenerationSoftware":
|
||||
{
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "(5.1.6-0-10_14)"
|
||||
},
|
||||
"CreationDate": "2021-03-30T09:56:54-05:00"
|
||||
},
|
||||
"GeneralSpecs":
|
||||
{
|
||||
"ProjectId":
|
||||
{
|
||||
"Name": "bluepill_scsi",
|
||||
"GUID": "626c7565-7069-46c6-9c5f-736373692e6b",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size":
|
||||
{
|
||||
"X": 43.865,
|
||||
"Y": 73.710
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.600
|
||||
},
|
||||
"DesignRules":
|
||||
[
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.200,
|
||||
"PadToTrack": 0.200,
|
||||
"TrackToTrack": 0.200,
|
||||
"MinLineWidth": 0.250,
|
||||
"TrackToRegion": 0.508,
|
||||
"RegionToRegion": 0.508
|
||||
}
|
||||
],
|
||||
"FilesAttributes":
|
||||
[
|
||||
{
|
||||
"Path": "bluepill_scsi-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-F_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-F_SilkS.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_SilkS.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup":
|
||||
[
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Notes": "Layer F.SilkS"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Notes": "Layer F.Paste"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Notes": "Layer F.Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Notes": "Layer F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Material": "FR4",
|
||||
"Notes": "Layers L1/L2"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Notes": "Layer B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Notes": "Layer B.Mask"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Notes": "Layer B.Paste"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Notes": "Layer B.SilkS"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,262 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Bot*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11O,2.350000X1.827200*%
|
||||
%ADD12R,2.350000X1.827200*%
|
||||
%ADD13C,2.800000*%
|
||||
%ADD14C,1.800000*%
|
||||
%ADD15R,1.800000X1.800000*%
|
||||
%ADD16O,1.800000X1.800000*%
|
||||
%ADD17R,1.700000X1.700000*%
|
||||
%ADD18O,1.700000X1.700000*%
|
||||
%ADD19R,1.350000X1.350000*%
|
||||
%ADD20C,1.350000*%
|
||||
%ADD21R,1.900000X1.900000*%
|
||||
%ADD22O,1.900000X1.900000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,U1*%
|
||||
X90805000Y-83083400D03*
|
||||
X90805000Y-85674200D03*
|
||||
X90805000Y-88214200D03*
|
||||
X90805000Y-90754200D03*
|
||||
X90805000Y-93294200D03*
|
||||
X90805000Y-95834200D03*
|
||||
X90805000Y-98374200D03*
|
||||
X90805000Y-100914200D03*
|
||||
X90805000Y-103454200D03*
|
||||
X90805000Y-105994200D03*
|
||||
X90805000Y-108534200D03*
|
||||
X90805000Y-111074200D03*
|
||||
X90805000Y-113614200D03*
|
||||
X90805000Y-116154200D03*
|
||||
X90805000Y-118694200D03*
|
||||
X90805000Y-121234200D03*
|
||||
X90805000Y-123774200D03*
|
||||
X90805000Y-126314200D03*
|
||||
X90805000Y-128854200D03*
|
||||
X90805000Y-131394200D03*
|
||||
X75565000Y-131394200D03*
|
||||
X75565000Y-128854200D03*
|
||||
X75565000Y-126314200D03*
|
||||
X75565000Y-123774200D03*
|
||||
X75565000Y-121234200D03*
|
||||
X75565000Y-118694200D03*
|
||||
X75565000Y-116154200D03*
|
||||
X75565000Y-113614200D03*
|
||||
X75565000Y-111074200D03*
|
||||
X75565000Y-108534200D03*
|
||||
X75565000Y-105994200D03*
|
||||
X75565000Y-103454200D03*
|
||||
X75565000Y-100914200D03*
|
||||
X75565000Y-98374200D03*
|
||||
X75565000Y-95834200D03*
|
||||
X75565000Y-93294200D03*
|
||||
X75565000Y-90754200D03*
|
||||
X75565000Y-88214200D03*
|
||||
X75565000Y-85674200D03*
|
||||
D12*
|
||||
X75565000Y-83134200D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,H1*%
|
||||
X75057000Y-78867000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,J2*%
|
||||
X107315000Y-81915000D03*
|
||||
X107315000Y-84455000D03*
|
||||
X107315000Y-86995000D03*
|
||||
X107315000Y-89535000D03*
|
||||
X107315000Y-92075000D03*
|
||||
X107315000Y-94615000D03*
|
||||
X107315000Y-97155000D03*
|
||||
X107315000Y-99695000D03*
|
||||
X107315000Y-102235000D03*
|
||||
X107315000Y-104775000D03*
|
||||
X107315000Y-107315000D03*
|
||||
X107315000Y-109855000D03*
|
||||
X107315000Y-112395000D03*
|
||||
X107315000Y-114935000D03*
|
||||
X107315000Y-117475000D03*
|
||||
X107315000Y-120015000D03*
|
||||
X107315000Y-122555000D03*
|
||||
X107315000Y-125095000D03*
|
||||
X107315000Y-127635000D03*
|
||||
X107315000Y-130175000D03*
|
||||
X107315000Y-132715000D03*
|
||||
X107315000Y-135255000D03*
|
||||
X107315000Y-137795000D03*
|
||||
X107315000Y-140335000D03*
|
||||
X107315000Y-142875000D03*
|
||||
X109855000Y-81915000D03*
|
||||
X109855000Y-84455000D03*
|
||||
X109855000Y-86995000D03*
|
||||
X109855000Y-89535000D03*
|
||||
X109855000Y-92075000D03*
|
||||
X109855000Y-94615000D03*
|
||||
X109855000Y-97155000D03*
|
||||
X109855000Y-99695000D03*
|
||||
X109855000Y-102235000D03*
|
||||
X109855000Y-104775000D03*
|
||||
X109855000Y-107315000D03*
|
||||
X109855000Y-109855000D03*
|
||||
X109855000Y-112395000D03*
|
||||
X109855000Y-114935000D03*
|
||||
X109855000Y-117475000D03*
|
||||
X109855000Y-120015000D03*
|
||||
X109855000Y-122555000D03*
|
||||
X109855000Y-125095000D03*
|
||||
X109855000Y-127635000D03*
|
||||
X109855000Y-130175000D03*
|
||||
X109855000Y-132715000D03*
|
||||
X109855000Y-135255000D03*
|
||||
X109855000Y-137795000D03*
|
||||
X109855000Y-140335000D03*
|
||||
G36*
|
||||
G01*
|
||||
X110755000Y-142239705D02*
|
||||
X110755000Y-143510295D01*
|
||||
G75*
|
||||
G02*
|
||||
X110490295Y-143775000I-264705J0D01*
|
||||
G01*
|
||||
X109219705Y-143775000D01*
|
||||
G75*
|
||||
G02*
|
||||
X108955000Y-143510295I0J264705D01*
|
||||
G01*
|
||||
X108955000Y-142239705D01*
|
||||
G75*
|
||||
G02*
|
||||
X109219705Y-141975000I264705J0D01*
|
||||
G01*
|
||||
X110490295Y-141975000D01*
|
||||
G75*
|
||||
G02*
|
||||
X110755000Y-142239705I0J-264705D01*
|
||||
G01*
|
||||
G37*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,JP1*%
|
||||
X100965000Y-81915000D03*
|
||||
D16*
|
||||
X100965000Y-79375000D03*
|
||||
%TD*%
|
||||
%TO.C,JP2*%
|
||||
X97155000Y-79375000D03*
|
||||
D15*
|
||||
X97155000Y-81915000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,RN1*%
|
||||
X97155000Y-86995000D03*
|
||||
D18*
|
||||
X97155000Y-89535000D03*
|
||||
X97155000Y-92075000D03*
|
||||
X97155000Y-94615000D03*
|
||||
X97155000Y-97155000D03*
|
||||
X97155000Y-99695000D03*
|
||||
X97155000Y-102235000D03*
|
||||
X97155000Y-104775000D03*
|
||||
X97155000Y-107315000D03*
|
||||
X97155000Y-109855000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,RN2*%
|
||||
X100965000Y-86995000D03*
|
||||
D18*
|
||||
X100965000Y-89535000D03*
|
||||
X100965000Y-92075000D03*
|
||||
X100965000Y-94615000D03*
|
||||
X100965000Y-97155000D03*
|
||||
X100965000Y-99695000D03*
|
||||
X100965000Y-102235000D03*
|
||||
X100965000Y-104775000D03*
|
||||
X100965000Y-107315000D03*
|
||||
X100965000Y-109855000D03*
|
||||
%TD*%
|
||||
%TO.C,RN3*%
|
||||
X97155000Y-113665000D03*
|
||||
X97155000Y-116205000D03*
|
||||
X97155000Y-118745000D03*
|
||||
X97155000Y-121285000D03*
|
||||
X97155000Y-123825000D03*
|
||||
X97155000Y-126365000D03*
|
||||
X97155000Y-128905000D03*
|
||||
X97155000Y-131445000D03*
|
||||
X97155000Y-133985000D03*
|
||||
D17*
|
||||
X97155000Y-136525000D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,RN4*%
|
||||
X100965000Y-113665000D03*
|
||||
X100965000Y-116205000D03*
|
||||
X100965000Y-118745000D03*
|
||||
X100965000Y-121285000D03*
|
||||
X100965000Y-123825000D03*
|
||||
X100965000Y-126365000D03*
|
||||
X100965000Y-128905000D03*
|
||||
X100965000Y-131445000D03*
|
||||
X100965000Y-133985000D03*
|
||||
D17*
|
||||
X100965000Y-136525000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J3*%
|
||||
X73025000Y-146685000D03*
|
||||
D16*
|
||||
X73025000Y-144145000D03*
|
||||
X73025000Y-141605000D03*
|
||||
X73025000Y-139065000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,J4*%
|
||||
X93345000Y-144145000D03*
|
||||
D20*
|
||||
X95845000Y-144145000D03*
|
||||
X98345000Y-144145000D03*
|
||||
X100845000Y-144145000D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,D4*%
|
||||
X79375000Y-77851000D03*
|
||||
D22*
|
||||
X86995000Y-77851000D03*
|
||||
%TD*%
|
||||
%TO.C,D5*%
|
||||
X86995000Y-81407000D03*
|
||||
D21*
|
||||
X79375000Y-81407000D03*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,33 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
M02*
|
|
@ -1,126 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11C,0.120000*%
|
||||
%ADD12C,0.150000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,D4*%
|
||||
X80465000Y-78991000D02*
|
||||
X80465000Y-79321000D01*
|
||||
X80465000Y-79321000D02*
|
||||
X85905000Y-79321000D01*
|
||||
X85905000Y-79321000D02*
|
||||
X85905000Y-78991000D01*
|
||||
X80465000Y-76711000D02*
|
||||
X80465000Y-76381000D01*
|
||||
X80465000Y-76381000D02*
|
||||
X85905000Y-76381000D01*
|
||||
X85905000Y-76381000D02*
|
||||
X85905000Y-76711000D01*
|
||||
X81365000Y-79321000D02*
|
||||
X81365000Y-76381000D01*
|
||||
X81485000Y-79321000D02*
|
||||
X81485000Y-76381000D01*
|
||||
X81245000Y-79321000D02*
|
||||
X81245000Y-76381000D01*
|
||||
%TO.C,D5*%
|
||||
X81245000Y-82877000D02*
|
||||
X81245000Y-79937000D01*
|
||||
X81485000Y-82877000D02*
|
||||
X81485000Y-79937000D01*
|
||||
X81365000Y-82877000D02*
|
||||
X81365000Y-79937000D01*
|
||||
X85905000Y-79937000D02*
|
||||
X85905000Y-80267000D01*
|
||||
X80465000Y-79937000D02*
|
||||
X85905000Y-79937000D01*
|
||||
X80465000Y-80267000D02*
|
||||
X80465000Y-79937000D01*
|
||||
X85905000Y-82877000D02*
|
||||
X85905000Y-82547000D01*
|
||||
X80465000Y-82877000D02*
|
||||
X85905000Y-82877000D01*
|
||||
X80465000Y-82547000D02*
|
||||
X80465000Y-82877000D01*
|
||||
%TD*%
|
||||
%TO.C,D4*%
|
||||
D12*
|
||||
X90273095Y-77287380D02*
|
||||
X90273095Y-76287380D01*
|
||||
X90035000Y-76287380D01*
|
||||
X89892142Y-76335000D01*
|
||||
X89796904Y-76430238D01*
|
||||
X89749285Y-76525476D01*
|
||||
X89701666Y-76715952D01*
|
||||
X89701666Y-76858809D01*
|
||||
X89749285Y-77049285D01*
|
||||
X89796904Y-77144523D01*
|
||||
X89892142Y-77239761D01*
|
||||
X90035000Y-77287380D01*
|
||||
X90273095Y-77287380D01*
|
||||
X88844523Y-76620714D02*
|
||||
X88844523Y-77287380D01*
|
||||
X89082619Y-76239761D02*
|
||||
X89320714Y-76954047D01*
|
||||
X88701666Y-76954047D01*
|
||||
%TO.C,D5*%
|
||||
X90273095Y-81097380D02*
|
||||
X90273095Y-80097380D01*
|
||||
X90035000Y-80097380D01*
|
||||
X89892142Y-80145000D01*
|
||||
X89796904Y-80240238D01*
|
||||
X89749285Y-80335476D01*
|
||||
X89701666Y-80525952D01*
|
||||
X89701666Y-80668809D01*
|
||||
X89749285Y-80859285D01*
|
||||
X89796904Y-80954523D01*
|
||||
X89892142Y-81049761D01*
|
||||
X90035000Y-81097380D01*
|
||||
X90273095Y-81097380D01*
|
||||
X88796904Y-80097380D02*
|
||||
X89273095Y-80097380D01*
|
||||
X89320714Y-80573571D01*
|
||||
X89273095Y-80525952D01*
|
||||
X89177857Y-80478333D01*
|
||||
X88939761Y-80478333D01*
|
||||
X88844523Y-80525952D01*
|
||||
X88796904Y-80573571D01*
|
||||
X88749285Y-80668809D01*
|
||||
X88749285Y-80906904D01*
|
||||
X88796904Y-81002142D01*
|
||||
X88844523Y-81049761D01*
|
||||
X88939761Y-81097380D01*
|
||||
X89177857Y-81097380D01*
|
||||
X89273095Y-81049761D01*
|
||||
X89320714Y-81002142D01*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,32 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Profile,NP*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
M02*
|
|
@ -1,291 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Top*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11O,2.350000X1.827200*%
|
||||
%ADD12R,2.350000X1.827200*%
|
||||
%ADD13C,2.800000*%
|
||||
%ADD14C,1.800000*%
|
||||
%ADD15R,2.000000X1.450000*%
|
||||
%ADD16R,1.300000X1.100000*%
|
||||
%ADD17R,1.650000X1.450000*%
|
||||
%ADD18R,1.270000X1.900000*%
|
||||
%ADD19R,0.950000X1.200000*%
|
||||
%ADD20R,0.850000X1.200000*%
|
||||
%ADD21R,1.800000X1.800000*%
|
||||
%ADD22O,1.800000X1.800000*%
|
||||
%ADD23R,1.700000X1.700000*%
|
||||
%ADD24O,1.700000X1.700000*%
|
||||
%ADD25R,1.350000X1.350000*%
|
||||
%ADD26C,1.350000*%
|
||||
%ADD27R,1.900000X1.900000*%
|
||||
%ADD28O,1.900000X1.900000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,U1*%
|
||||
X90805000Y-83083400D03*
|
||||
X90805000Y-85674200D03*
|
||||
X90805000Y-88214200D03*
|
||||
X90805000Y-90754200D03*
|
||||
X90805000Y-93294200D03*
|
||||
X90805000Y-95834200D03*
|
||||
X90805000Y-98374200D03*
|
||||
X90805000Y-100914200D03*
|
||||
X90805000Y-103454200D03*
|
||||
X90805000Y-105994200D03*
|
||||
X90805000Y-108534200D03*
|
||||
X90805000Y-111074200D03*
|
||||
X90805000Y-113614200D03*
|
||||
X90805000Y-116154200D03*
|
||||
X90805000Y-118694200D03*
|
||||
X90805000Y-121234200D03*
|
||||
X90805000Y-123774200D03*
|
||||
X90805000Y-126314200D03*
|
||||
X90805000Y-128854200D03*
|
||||
X90805000Y-131394200D03*
|
||||
X75565000Y-131394200D03*
|
||||
X75565000Y-128854200D03*
|
||||
X75565000Y-126314200D03*
|
||||
X75565000Y-123774200D03*
|
||||
X75565000Y-121234200D03*
|
||||
X75565000Y-118694200D03*
|
||||
X75565000Y-116154200D03*
|
||||
X75565000Y-113614200D03*
|
||||
X75565000Y-111074200D03*
|
||||
X75565000Y-108534200D03*
|
||||
X75565000Y-105994200D03*
|
||||
X75565000Y-103454200D03*
|
||||
X75565000Y-100914200D03*
|
||||
X75565000Y-98374200D03*
|
||||
X75565000Y-95834200D03*
|
||||
X75565000Y-93294200D03*
|
||||
X75565000Y-90754200D03*
|
||||
X75565000Y-88214200D03*
|
||||
X75565000Y-85674200D03*
|
||||
D12*
|
||||
X75565000Y-83134200D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,H1*%
|
||||
X75057000Y-78867000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,J2*%
|
||||
X107315000Y-81915000D03*
|
||||
X107315000Y-84455000D03*
|
||||
X107315000Y-86995000D03*
|
||||
X107315000Y-89535000D03*
|
||||
X107315000Y-92075000D03*
|
||||
X107315000Y-94615000D03*
|
||||
X107315000Y-97155000D03*
|
||||
X107315000Y-99695000D03*
|
||||
X107315000Y-102235000D03*
|
||||
X107315000Y-104775000D03*
|
||||
X107315000Y-107315000D03*
|
||||
X107315000Y-109855000D03*
|
||||
X107315000Y-112395000D03*
|
||||
X107315000Y-114935000D03*
|
||||
X107315000Y-117475000D03*
|
||||
X107315000Y-120015000D03*
|
||||
X107315000Y-122555000D03*
|
||||
X107315000Y-125095000D03*
|
||||
X107315000Y-127635000D03*
|
||||
X107315000Y-130175000D03*
|
||||
X107315000Y-132715000D03*
|
||||
X107315000Y-135255000D03*
|
||||
X107315000Y-137795000D03*
|
||||
X107315000Y-140335000D03*
|
||||
X107315000Y-142875000D03*
|
||||
X109855000Y-81915000D03*
|
||||
X109855000Y-84455000D03*
|
||||
X109855000Y-86995000D03*
|
||||
X109855000Y-89535000D03*
|
||||
X109855000Y-92075000D03*
|
||||
X109855000Y-94615000D03*
|
||||
X109855000Y-97155000D03*
|
||||
X109855000Y-99695000D03*
|
||||
X109855000Y-102235000D03*
|
||||
X109855000Y-104775000D03*
|
||||
X109855000Y-107315000D03*
|
||||
X109855000Y-109855000D03*
|
||||
X109855000Y-112395000D03*
|
||||
X109855000Y-114935000D03*
|
||||
X109855000Y-117475000D03*
|
||||
X109855000Y-120015000D03*
|
||||
X109855000Y-122555000D03*
|
||||
X109855000Y-125095000D03*
|
||||
X109855000Y-127635000D03*
|
||||
X109855000Y-130175000D03*
|
||||
X109855000Y-132715000D03*
|
||||
X109855000Y-135255000D03*
|
||||
X109855000Y-137795000D03*
|
||||
X109855000Y-140335000D03*
|
||||
G36*
|
||||
G01*
|
||||
X110755000Y-142239705D02*
|
||||
X110755000Y-143510295D01*
|
||||
G75*
|
||||
G02*
|
||||
X110490295Y-143775000I-264705J0D01*
|
||||
G01*
|
||||
X109219705Y-143775000D01*
|
||||
G75*
|
||||
G02*
|
||||
X108955000Y-143510295I0J264705D01*
|
||||
G01*
|
||||
X108955000Y-142239705D01*
|
||||
G75*
|
||||
G02*
|
||||
X109219705Y-141975000I264705J0D01*
|
||||
G01*
|
||||
X110490295Y-141975000D01*
|
||||
G75*
|
||||
G02*
|
||||
X110755000Y-142239705I0J-264705D01*
|
||||
G01*
|
||||
G37*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J1*%
|
||||
X79455000Y-134960000D03*
|
||||
X85425000Y-134960000D03*
|
||||
D16*
|
||||
X88925000Y-139635000D03*
|
||||
X88925000Y-135935000D03*
|
||||
D17*
|
||||
X88750000Y-145660000D03*
|
||||
D18*
|
||||
X77430000Y-145435000D03*
|
||||
D19*
|
||||
X79690000Y-145785000D03*
|
||||
X80790000Y-145785000D03*
|
||||
X81890000Y-145785000D03*
|
||||
X82990000Y-145785000D03*
|
||||
X84090000Y-145785000D03*
|
||||
X85190000Y-145785000D03*
|
||||
D20*
|
||||
X78640000Y-145785000D03*
|
||||
D19*
|
||||
X86290000Y-145785000D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,JP1*%
|
||||
X100965000Y-81915000D03*
|
||||
D22*
|
||||
X100965000Y-79375000D03*
|
||||
%TD*%
|
||||
%TO.C,JP2*%
|
||||
X97155000Y-79375000D03*
|
||||
D21*
|
||||
X97155000Y-81915000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,RN1*%
|
||||
X97155000Y-86995000D03*
|
||||
D24*
|
||||
X97155000Y-89535000D03*
|
||||
X97155000Y-92075000D03*
|
||||
X97155000Y-94615000D03*
|
||||
X97155000Y-97155000D03*
|
||||
X97155000Y-99695000D03*
|
||||
X97155000Y-102235000D03*
|
||||
X97155000Y-104775000D03*
|
||||
X97155000Y-107315000D03*
|
||||
X97155000Y-109855000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,RN2*%
|
||||
X100965000Y-86995000D03*
|
||||
D24*
|
||||
X100965000Y-89535000D03*
|
||||
X100965000Y-92075000D03*
|
||||
X100965000Y-94615000D03*
|
||||
X100965000Y-97155000D03*
|
||||
X100965000Y-99695000D03*
|
||||
X100965000Y-102235000D03*
|
||||
X100965000Y-104775000D03*
|
||||
X100965000Y-107315000D03*
|
||||
X100965000Y-109855000D03*
|
||||
%TD*%
|
||||
%TO.C,RN3*%
|
||||
X97155000Y-113665000D03*
|
||||
X97155000Y-116205000D03*
|
||||
X97155000Y-118745000D03*
|
||||
X97155000Y-121285000D03*
|
||||
X97155000Y-123825000D03*
|
||||
X97155000Y-126365000D03*
|
||||
X97155000Y-128905000D03*
|
||||
X97155000Y-131445000D03*
|
||||
X97155000Y-133985000D03*
|
||||
D23*
|
||||
X97155000Y-136525000D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,RN4*%
|
||||
X100965000Y-113665000D03*
|
||||
X100965000Y-116205000D03*
|
||||
X100965000Y-118745000D03*
|
||||
X100965000Y-121285000D03*
|
||||
X100965000Y-123825000D03*
|
||||
X100965000Y-126365000D03*
|
||||
X100965000Y-128905000D03*
|
||||
X100965000Y-131445000D03*
|
||||
X100965000Y-133985000D03*
|
||||
D23*
|
||||
X100965000Y-136525000D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,J3*%
|
||||
X73025000Y-146685000D03*
|
||||
D22*
|
||||
X73025000Y-144145000D03*
|
||||
X73025000Y-141605000D03*
|
||||
X73025000Y-139065000D03*
|
||||
%TD*%
|
||||
D25*
|
||||
%TO.C,J4*%
|
||||
X93345000Y-144145000D03*
|
||||
D26*
|
||||
X95845000Y-144145000D03*
|
||||
X98345000Y-144145000D03*
|
||||
X100845000Y-144145000D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,D4*%
|
||||
X79375000Y-77851000D03*
|
||||
D28*
|
||||
X86995000Y-77851000D03*
|
||||
%TD*%
|
||||
%TO.C,D5*%
|
||||
X86995000Y-81407000D03*
|
||||
D27*
|
||||
X79375000Y-81407000D03*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,62 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Paste,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11R,1.900000X1.350000*%
|
||||
%ADD12R,1.200000X1.000000*%
|
||||
%ADD13R,1.550000X1.350000*%
|
||||
%ADD14R,1.170000X1.800000*%
|
||||
%ADD15R,0.850000X1.100000*%
|
||||
%ADD16R,0.750000X1.100000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D11*
|
||||
%TO.C,J1*%
|
||||
X79455000Y-134960000D03*
|
||||
X85425000Y-134960000D03*
|
||||
D12*
|
||||
X88925000Y-139635000D03*
|
||||
X88925000Y-135935000D03*
|
||||
D13*
|
||||
X88750000Y-145660000D03*
|
||||
D14*
|
||||
X77430000Y-145435000D03*
|
||||
D15*
|
||||
X79690000Y-145785000D03*
|
||||
X80790000Y-145785000D03*
|
||||
X81890000Y-145785000D03*
|
||||
X82990000Y-145785000D03*
|
||||
X84090000Y-145785000D03*
|
||||
X85190000Y-145785000D03*
|
||||
D16*
|
||||
X78640000Y-145785000D03*
|
||||
D15*
|
||||
X86290000Y-145785000D03*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,731 +0,0 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
|
||||
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
|
||||
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Legend,Top*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
%ADD11C,0.150000*%
|
||||
%ADD12C,0.300000*%
|
||||
%ADD13C,0.120000*%
|
||||
%ADD14C,0.127000*%
|
||||
%ADD15C,0.200000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X71755000Y-149225000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-149225000D01*
|
||||
X114935000Y-149225000D02*
|
||||
X71755000Y-149225000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-149225000D01*
|
||||
D11*
|
||||
X75126904Y-147408333D02*
|
||||
X75126904Y-146913095D01*
|
||||
X75431666Y-147179761D01*
|
||||
X75431666Y-147065476D01*
|
||||
X75469761Y-146989285D01*
|
||||
X75507857Y-146951190D01*
|
||||
X75584047Y-146913095D01*
|
||||
X75774523Y-146913095D01*
|
||||
X75850714Y-146951190D01*
|
||||
X75888809Y-146989285D01*
|
||||
X75926904Y-147065476D01*
|
||||
X75926904Y-147294047D01*
|
||||
X75888809Y-147370238D01*
|
||||
X75850714Y-147408333D01*
|
||||
X75850714Y-146570238D02*
|
||||
X75888809Y-146532142D01*
|
||||
X75926904Y-146570238D01*
|
||||
X75888809Y-146608333D01*
|
||||
X75850714Y-146570238D01*
|
||||
X75926904Y-146570238D01*
|
||||
X75126904Y-146265476D02*
|
||||
X75126904Y-145770238D01*
|
||||
X75431666Y-146036904D01*
|
||||
X75431666Y-145922619D01*
|
||||
X75469761Y-145846428D01*
|
||||
X75507857Y-145808333D01*
|
||||
X75584047Y-145770238D01*
|
||||
X75774523Y-145770238D01*
|
||||
X75850714Y-145808333D01*
|
||||
X75888809Y-145846428D01*
|
||||
X75926904Y-145922619D01*
|
||||
X75926904Y-146151190D01*
|
||||
X75888809Y-146227380D01*
|
||||
X75850714Y-146265476D01*
|
||||
X75165000Y-143789285D02*
|
||||
X75126904Y-143865476D01*
|
||||
X75126904Y-143979761D01*
|
||||
X75165000Y-144094047D01*
|
||||
X75241190Y-144170238D01*
|
||||
X75317380Y-144208333D01*
|
||||
X75469761Y-144246428D01*
|
||||
X75584047Y-144246428D01*
|
||||
X75736428Y-144208333D01*
|
||||
X75812619Y-144170238D01*
|
||||
X75888809Y-144094047D01*
|
||||
X75926904Y-143979761D01*
|
||||
X75926904Y-143903571D01*
|
||||
X75888809Y-143789285D01*
|
||||
X75850714Y-143751190D01*
|
||||
X75584047Y-143751190D01*
|
||||
X75584047Y-143903571D01*
|
||||
X75126904Y-142303571D02*
|
||||
X75126904Y-141846428D01*
|
||||
X75926904Y-142075000D02*
|
||||
X75126904Y-142075000D01*
|
||||
X75126904Y-141655952D02*
|
||||
X75926904Y-141122619D01*
|
||||
X75126904Y-141122619D02*
|
||||
X75926904Y-141655952D01*
|
||||
X75926904Y-139141666D02*
|
||||
X75545952Y-139408333D01*
|
||||
X75926904Y-139598809D02*
|
||||
X75126904Y-139598809D01*
|
||||
X75126904Y-139294047D01*
|
||||
X75165000Y-139217857D01*
|
||||
X75203095Y-139179761D01*
|
||||
X75279285Y-139141666D01*
|
||||
X75393571Y-139141666D01*
|
||||
X75469761Y-139179761D01*
|
||||
X75507857Y-139217857D01*
|
||||
X75545952Y-139294047D01*
|
||||
X75545952Y-139598809D01*
|
||||
X75126904Y-138875000D02*
|
||||
X75926904Y-138341666D01*
|
||||
X75126904Y-138341666D02*
|
||||
X75926904Y-138875000D01*
|
||||
X99679285Y-139787380D02*
|
||||
X100298333Y-139787380D01*
|
||||
X99965000Y-140168333D01*
|
||||
X100107857Y-140168333D01*
|
||||
X100203095Y-140215952D01*
|
||||
X100250714Y-140263571D01*
|
||||
X100298333Y-140358809D01*
|
||||
X100298333Y-140596904D01*
|
||||
X100250714Y-140692142D01*
|
||||
X100203095Y-140739761D01*
|
||||
X100107857Y-140787380D01*
|
||||
X99822142Y-140787380D01*
|
||||
X99726904Y-140739761D01*
|
||||
X99679285Y-140692142D01*
|
||||
X100631666Y-139787380D02*
|
||||
X101250714Y-139787380D01*
|
||||
X100917380Y-140168333D01*
|
||||
X101060238Y-140168333D01*
|
||||
X101155476Y-140215952D01*
|
||||
X101203095Y-140263571D01*
|
||||
X101250714Y-140358809D01*
|
||||
X101250714Y-140596904D01*
|
||||
X101203095Y-140692142D01*
|
||||
X101155476Y-140739761D01*
|
||||
X101060238Y-140787380D01*
|
||||
X100774523Y-140787380D01*
|
||||
X100679285Y-140739761D01*
|
||||
X100631666Y-140692142D01*
|
||||
X101869761Y-139787380D02*
|
||||
X101965000Y-139787380D01*
|
||||
X102060238Y-139835000D01*
|
||||
X102107857Y-139882619D01*
|
||||
X102155476Y-139977857D01*
|
||||
X102203095Y-140168333D01*
|
||||
X102203095Y-140406428D01*
|
||||
X102155476Y-140596904D01*
|
||||
X102107857Y-140692142D01*
|
||||
X102060238Y-140739761D01*
|
||||
X101965000Y-140787380D01*
|
||||
X101869761Y-140787380D01*
|
||||
X101774523Y-140739761D01*
|
||||
X101726904Y-140692142D01*
|
||||
X101679285Y-140596904D01*
|
||||
X101631666Y-140406428D01*
|
||||
X101631666Y-140168333D01*
|
||||
X101679285Y-139977857D01*
|
||||
X101726904Y-139882619D01*
|
||||
X101774523Y-139835000D01*
|
||||
X101869761Y-139787380D01*
|
||||
X95916904Y-139882619D02*
|
||||
X95964523Y-139835000D01*
|
||||
X96059761Y-139787380D01*
|
||||
X96297857Y-139787380D01*
|
||||
X96393095Y-139835000D01*
|
||||
X96440714Y-139882619D01*
|
||||
X96488333Y-139977857D01*
|
||||
X96488333Y-140073095D01*
|
||||
X96440714Y-140215952D01*
|
||||
X95869285Y-140787380D01*
|
||||
X96488333Y-140787380D01*
|
||||
X96869285Y-139882619D02*
|
||||
X96916904Y-139835000D01*
|
||||
X97012142Y-139787380D01*
|
||||
X97250238Y-139787380D01*
|
||||
X97345476Y-139835000D01*
|
||||
X97393095Y-139882619D01*
|
||||
X97440714Y-139977857D01*
|
||||
X97440714Y-140073095D01*
|
||||
X97393095Y-140215952D01*
|
||||
X96821666Y-140787380D01*
|
||||
X97440714Y-140787380D01*
|
||||
X98059761Y-139787380D02*
|
||||
X98155000Y-139787380D01*
|
||||
X98250238Y-139835000D01*
|
||||
X98297857Y-139882619D01*
|
||||
X98345476Y-139977857D01*
|
||||
X98393095Y-140168333D01*
|
||||
X98393095Y-140406428D01*
|
||||
X98345476Y-140596904D01*
|
||||
X98297857Y-140692142D01*
|
||||
X98250238Y-140739761D01*
|
||||
X98155000Y-140787380D01*
|
||||
X98059761Y-140787380D01*
|
||||
X97964523Y-140739761D01*
|
||||
X97916904Y-140692142D01*
|
||||
X97869285Y-140596904D01*
|
||||
X97821666Y-140406428D01*
|
||||
X97821666Y-140168333D01*
|
||||
X97869285Y-139977857D01*
|
||||
X97916904Y-139882619D01*
|
||||
X97964523Y-139835000D01*
|
||||
X98059761Y-139787380D01*
|
||||
X95694904Y-76287380D02*
|
||||
X96266333Y-76287380D01*
|
||||
X95980619Y-77287380D02*
|
||||
X95980619Y-76287380D01*
|
||||
X96599666Y-76763571D02*
|
||||
X96933000Y-76763571D01*
|
||||
X97075857Y-77287380D02*
|
||||
X96599666Y-77287380D01*
|
||||
X96599666Y-76287380D01*
|
||||
X97075857Y-76287380D01*
|
||||
X98075857Y-77287380D02*
|
||||
X97742523Y-76811190D01*
|
||||
X97504428Y-77287380D02*
|
||||
X97504428Y-76287380D01*
|
||||
X97885380Y-76287380D01*
|
||||
X97980619Y-76335000D01*
|
||||
X98028238Y-76382619D01*
|
||||
X98075857Y-76477857D01*
|
||||
X98075857Y-76620714D01*
|
||||
X98028238Y-76715952D01*
|
||||
X97980619Y-76763571D01*
|
||||
X97885380Y-76811190D01*
|
||||
X97504428Y-76811190D01*
|
||||
X98504428Y-77287380D02*
|
||||
X98504428Y-76287380D01*
|
||||
X98837761Y-77001666D01*
|
||||
X99171095Y-76287380D01*
|
||||
X99171095Y-77287380D01*
|
||||
X100599666Y-76287380D02*
|
||||
X100790142Y-76287380D01*
|
||||
X100885380Y-76335000D01*
|
||||
X100980619Y-76430238D01*
|
||||
X101028238Y-76620714D01*
|
||||
X101028238Y-76954047D01*
|
||||
X100980619Y-77144523D01*
|
||||
X100885380Y-77239761D01*
|
||||
X100790142Y-77287380D01*
|
||||
X100599666Y-77287380D01*
|
||||
X100504428Y-77239761D01*
|
||||
X100409190Y-77144523D01*
|
||||
X100361571Y-76954047D01*
|
||||
X100361571Y-76620714D01*
|
||||
X100409190Y-76430238D01*
|
||||
X100504428Y-76335000D01*
|
||||
X100599666Y-76287380D01*
|
||||
X101456809Y-77287380D02*
|
||||
X101456809Y-76287380D01*
|
||||
X102028238Y-77287380D01*
|
||||
X102028238Y-76287380D01*
|
||||
D10*
|
||||
X114935000Y-75565000D02*
|
||||
X71120000Y-75565000D01*
|
||||
X114935000Y-147955000D02*
|
||||
X114935000Y-75565000D01*
|
||||
X71120000Y-147955000D02*
|
||||
X71120000Y-75565000D01*
|
||||
D12*
|
||||
X77145571Y-147847857D02*
|
||||
X77359857Y-147919285D01*
|
||||
X77431285Y-147990714D01*
|
||||
X77502714Y-148133571D01*
|
||||
X77502714Y-148347857D01*
|
||||
X77431285Y-148490714D01*
|
||||
X77359857Y-148562142D01*
|
||||
X77217000Y-148633571D01*
|
||||
X76645571Y-148633571D01*
|
||||
X76645571Y-147133571D01*
|
||||
X77145571Y-147133571D01*
|
||||
X77288428Y-147205000D01*
|
||||
X77359857Y-147276428D01*
|
||||
X77431285Y-147419285D01*
|
||||
X77431285Y-147562142D01*
|
||||
X77359857Y-147705000D01*
|
||||
X77288428Y-147776428D01*
|
||||
X77145571Y-147847857D01*
|
||||
X76645571Y-147847857D01*
|
||||
X78359857Y-148633571D02*
|
||||
X78217000Y-148562142D01*
|
||||
X78145571Y-148419285D01*
|
||||
X78145571Y-147133571D01*
|
||||
X79574142Y-147633571D02*
|
||||
X79574142Y-148633571D01*
|
||||
X78931285Y-147633571D02*
|
||||
X78931285Y-148419285D01*
|
||||
X79002714Y-148562142D01*
|
||||
X79145571Y-148633571D01*
|
||||
X79359857Y-148633571D01*
|
||||
X79502714Y-148562142D01*
|
||||
X79574142Y-148490714D01*
|
||||
X80859857Y-148562142D02*
|
||||
X80717000Y-148633571D01*
|
||||
X80431285Y-148633571D01*
|
||||
X80288428Y-148562142D01*
|
||||
X80217000Y-148419285D01*
|
||||
X80217000Y-147847857D01*
|
||||
X80288428Y-147705000D01*
|
||||
X80431285Y-147633571D01*
|
||||
X80717000Y-147633571D01*
|
||||
X80859857Y-147705000D01*
|
||||
X80931285Y-147847857D01*
|
||||
X80931285Y-147990714D01*
|
||||
X80217000Y-148133571D01*
|
||||
X81502714Y-148562142D02*
|
||||
X81717000Y-148633571D01*
|
||||
X82074142Y-148633571D01*
|
||||
X82217000Y-148562142D01*
|
||||
X82288428Y-148490714D01*
|
||||
X82359857Y-148347857D01*
|
||||
X82359857Y-148205000D01*
|
||||
X82288428Y-148062142D01*
|
||||
X82217000Y-147990714D01*
|
||||
X82074142Y-147919285D01*
|
||||
X81788428Y-147847857D01*
|
||||
X81645571Y-147776428D01*
|
||||
X81574142Y-147705000D01*
|
||||
X81502714Y-147562142D01*
|
||||
X81502714Y-147419285D01*
|
||||
X81574142Y-147276428D01*
|
||||
X81645571Y-147205000D01*
|
||||
X81788428Y-147133571D01*
|
||||
X82145571Y-147133571D01*
|
||||
X82359857Y-147205000D01*
|
||||
X83859857Y-148490714D02*
|
||||
X83788428Y-148562142D01*
|
||||
X83574142Y-148633571D01*
|
||||
X83431285Y-148633571D01*
|
||||
X83217000Y-148562142D01*
|
||||
X83074142Y-148419285D01*
|
||||
X83002714Y-148276428D01*
|
||||
X82931285Y-147990714D01*
|
||||
X82931285Y-147776428D01*
|
||||
X83002714Y-147490714D01*
|
||||
X83074142Y-147347857D01*
|
||||
X83217000Y-147205000D01*
|
||||
X83431285Y-147133571D01*
|
||||
X83574142Y-147133571D01*
|
||||
X83788428Y-147205000D01*
|
||||
X83859857Y-147276428D01*
|
||||
X84431285Y-148562142D02*
|
||||
X84645571Y-148633571D01*
|
||||
X85002714Y-148633571D01*
|
||||
X85145571Y-148562142D01*
|
||||
X85217000Y-148490714D01*
|
||||
X85288428Y-148347857D01*
|
||||
X85288428Y-148205000D01*
|
||||
X85217000Y-148062142D01*
|
||||
X85145571Y-147990714D01*
|
||||
X85002714Y-147919285D01*
|
||||
X84717000Y-147847857D01*
|
||||
X84574142Y-147776428D01*
|
||||
X84502714Y-147705000D01*
|
||||
X84431285Y-147562142D01*
|
||||
X84431285Y-147419285D01*
|
||||
X84502714Y-147276428D01*
|
||||
X84574142Y-147205000D01*
|
||||
X84717000Y-147133571D01*
|
||||
X85074142Y-147133571D01*
|
||||
X85288428Y-147205000D01*
|
||||
X85931285Y-148633571D02*
|
||||
X85931285Y-147133571D01*
|
||||
X88574142Y-148633571D02*
|
||||
X87717000Y-148633571D01*
|
||||
X88145571Y-148633571D02*
|
||||
X88145571Y-147133571D01*
|
||||
X88002714Y-147347857D01*
|
||||
X87859857Y-147490714D01*
|
||||
X87717000Y-147562142D01*
|
||||
X89217000Y-148490714D02*
|
||||
X89288428Y-148562142D01*
|
||||
X89217000Y-148633571D01*
|
||||
X89145571Y-148562142D01*
|
||||
X89217000Y-148490714D01*
|
||||
X89217000Y-148633571D01*
|
||||
X90217000Y-147133571D02*
|
||||
X90359857Y-147133571D01*
|
||||
X90502714Y-147205000D01*
|
||||
X90574142Y-147276428D01*
|
||||
X90645571Y-147419285D01*
|
||||
X90717000Y-147705000D01*
|
||||
X90717000Y-148062142D01*
|
||||
X90645571Y-148347857D01*
|
||||
X90574142Y-148490714D01*
|
||||
X90502714Y-148562142D01*
|
||||
X90359857Y-148633571D01*
|
||||
X90217000Y-148633571D01*
|
||||
X90074142Y-148562142D01*
|
||||
X90002714Y-148490714D01*
|
||||
X89931285Y-148347857D01*
|
||||
X89859857Y-148062142D01*
|
||||
X89859857Y-147705000D01*
|
||||
X89931285Y-147419285D01*
|
||||
X90002714Y-147276428D01*
|
||||
X90074142Y-147205000D01*
|
||||
X90217000Y-147133571D01*
|
||||
X91359857Y-148062142D02*
|
||||
X92502714Y-148062142D01*
|
||||
X93859857Y-148562142D02*
|
||||
X93717000Y-148633571D01*
|
||||
X93431285Y-148633571D01*
|
||||
X93288428Y-148562142D01*
|
||||
X93217000Y-148490714D01*
|
||||
X93145571Y-148347857D01*
|
||||
X93145571Y-147919285D01*
|
||||
X93217000Y-147776428D01*
|
||||
X93288428Y-147705000D01*
|
||||
X93431285Y-147633571D01*
|
||||
X93717000Y-147633571D01*
|
||||
X93859857Y-147705000D01*
|
||||
D13*
|
||||
%TO.C,J2*%
|
||||
X114535000Y-142375000D02*
|
||||
X113535000Y-142875000D01*
|
||||
X114535000Y-143375000D02*
|
||||
X114535000Y-142375000D01*
|
||||
X113535000Y-142875000D02*
|
||||
X114535000Y-143375000D01*
|
||||
X111835000Y-110345000D02*
|
||||
X113145000Y-110345000D01*
|
||||
X111835000Y-110345000D02*
|
||||
X111835000Y-110345000D01*
|
||||
X111835000Y-78005000D02*
|
||||
X111835000Y-110345000D01*
|
||||
X105335000Y-78005000D02*
|
||||
X111835000Y-78005000D01*
|
||||
X105335000Y-146785000D02*
|
||||
X105335000Y-78005000D01*
|
||||
X111835000Y-146785000D02*
|
||||
X105335000Y-146785000D01*
|
||||
X111835000Y-114445000D02*
|
||||
X111835000Y-146785000D01*
|
||||
X113145000Y-114445000D02*
|
||||
X111835000Y-114445000D01*
|
||||
X113145000Y-76705000D02*
|
||||
X113145000Y-148085000D01*
|
||||
X104025000Y-76705000D02*
|
||||
X113145000Y-76705000D01*
|
||||
X104025000Y-148085000D02*
|
||||
X104025000Y-76705000D01*
|
||||
X113145000Y-148085000D02*
|
||||
X104025000Y-148085000D01*
|
||||
%TO.C,J1*%
|
||||
X89255000Y-144785000D02*
|
||||
X89255000Y-140335000D01*
|
||||
X89255000Y-138935000D02*
|
||||
X89255000Y-136635000D01*
|
||||
X89255000Y-135235000D02*
|
||||
X89255000Y-134515000D01*
|
||||
X89255000Y-134515000D02*
|
||||
X86575000Y-134515000D01*
|
||||
X84275000Y-134515000D02*
|
||||
X80605000Y-134515000D01*
|
||||
X78305000Y-134515000D02*
|
||||
X77075000Y-134515000D01*
|
||||
X77075000Y-134515000D02*
|
||||
X77075000Y-144335000D01*
|
||||
X87775000Y-146155000D02*
|
||||
X86915000Y-146155000D01*
|
||||
%TO.C,JP1*%
|
||||
X102295000Y-80645000D02*
|
||||
X99635000Y-80645000D01*
|
||||
X102295000Y-80645000D02*
|
||||
X102295000Y-78045000D01*
|
||||
X102295000Y-78045000D02*
|
||||
X99635000Y-78045000D01*
|
||||
X99635000Y-80645000D02*
|
||||
X99635000Y-78045000D01*
|
||||
X99635000Y-83245000D02*
|
||||
X99635000Y-81915000D01*
|
||||
X100965000Y-83245000D02*
|
||||
X99635000Y-83245000D01*
|
||||
%TO.C,JP2*%
|
||||
X97155000Y-83245000D02*
|
||||
X95825000Y-83245000D01*
|
||||
X95825000Y-83245000D02*
|
||||
X95825000Y-81915000D01*
|
||||
X95825000Y-80645000D02*
|
||||
X95825000Y-78045000D01*
|
||||
X98485000Y-78045000D02*
|
||||
X95825000Y-78045000D01*
|
||||
X98485000Y-80645000D02*
|
||||
X98485000Y-78045000D01*
|
||||
X98485000Y-80645000D02*
|
||||
X95825000Y-80645000D01*
|
||||
%TO.C,RN1*%
|
||||
X98555000Y-88265000D02*
|
||||
X95755000Y-88265000D01*
|
||||
X98555000Y-111295000D02*
|
||||
X98555000Y-85555000D01*
|
||||
X95755000Y-111295000D02*
|
||||
X98555000Y-111295000D01*
|
||||
X95755000Y-85555000D02*
|
||||
X95755000Y-111295000D01*
|
||||
X98555000Y-85555000D02*
|
||||
X95755000Y-85555000D01*
|
||||
%TO.C,RN2*%
|
||||
X102365000Y-88265000D02*
|
||||
X99565000Y-88265000D01*
|
||||
X102365000Y-111295000D02*
|
||||
X102365000Y-85555000D01*
|
||||
X99565000Y-111295000D02*
|
||||
X102365000Y-111295000D01*
|
||||
X99565000Y-85555000D02*
|
||||
X99565000Y-111295000D01*
|
||||
X102365000Y-85555000D02*
|
||||
X99565000Y-85555000D01*
|
||||
%TO.C,RN3*%
|
||||
X95755000Y-137965000D02*
|
||||
X98555000Y-137965000D01*
|
||||
X98555000Y-137965000D02*
|
||||
X98555000Y-112225000D01*
|
||||
X98555000Y-112225000D02*
|
||||
X95755000Y-112225000D01*
|
||||
X95755000Y-112225000D02*
|
||||
X95755000Y-137965000D01*
|
||||
X95755000Y-135255000D02*
|
||||
X98555000Y-135255000D01*
|
||||
%TO.C,RN4*%
|
||||
X99565000Y-137965000D02*
|
||||
X102365000Y-137965000D01*
|
||||
X102365000Y-137965000D02*
|
||||
X102365000Y-112225000D01*
|
||||
X102365000Y-112225000D02*
|
||||
X99565000Y-112225000D01*
|
||||
X99565000Y-112225000D02*
|
||||
X99565000Y-137965000D01*
|
||||
X99565000Y-135255000D02*
|
||||
X102365000Y-135255000D01*
|
||||
%TO.C,J3*%
|
||||
X74355000Y-137735000D02*
|
||||
X71695000Y-137735000D01*
|
||||
X74355000Y-145415000D02*
|
||||
X74355000Y-137735000D01*
|
||||
X71695000Y-145415000D02*
|
||||
X71695000Y-137735000D01*
|
||||
X74355000Y-145415000D02*
|
||||
X71695000Y-145415000D01*
|
||||
X74355000Y-146685000D02*
|
||||
X74355000Y-148015000D01*
|
||||
X74355000Y-148015000D02*
|
||||
X73025000Y-148015000D01*
|
||||
D14*
|
||||
%TO.C,J4*%
|
||||
X92095000Y-146645000D02*
|
||||
X92095000Y-141745000D01*
|
||||
X102095000Y-141745000D02*
|
||||
X102095000Y-146645000D01*
|
||||
X102095000Y-141745000D02*
|
||||
X92095000Y-141745000D01*
|
||||
X102095000Y-146645000D02*
|
||||
X92095000Y-146645000D01*
|
||||
D15*
|
||||
X91545000Y-144145000D02*
|
||||
G75*
|
||||
G03*
|
||||
X91545000Y-144145000I-100000J0D01*
|
||||
G01*
|
||||
%TD*%
|
||||
%TO.C,U1*%
|
||||
D11*
|
||||
X72477380Y-83946904D02*
|
||||
X73286904Y-83946904D01*
|
||||
X73382142Y-83899285D01*
|
||||
X73429761Y-83851666D01*
|
||||
X73477380Y-83756428D01*
|
||||
X73477380Y-83565952D01*
|
||||
X73429761Y-83470714D01*
|
||||
X73382142Y-83423095D01*
|
||||
X73286904Y-83375476D01*
|
||||
X72477380Y-83375476D01*
|
||||
X73477380Y-82375476D02*
|
||||
X73477380Y-82946904D01*
|
||||
X73477380Y-82661190D02*
|
||||
X72477380Y-82661190D01*
|
||||
X72620238Y-82756428D01*
|
||||
X72715476Y-82851666D01*
|
||||
X72763095Y-82946904D01*
|
||||
%TO.C,J2*%
|
||||
X102957380Y-145748333D02*
|
||||
X103671666Y-145748333D01*
|
||||
X103814523Y-145795952D01*
|
||||
X103909761Y-145891190D01*
|
||||
X103957380Y-146034047D01*
|
||||
X103957380Y-146129285D01*
|
||||
X103052619Y-145319761D02*
|
||||
X103005000Y-145272142D01*
|
||||
X102957380Y-145176904D01*
|
||||
X102957380Y-144938809D01*
|
||||
X103005000Y-144843571D01*
|
||||
X103052619Y-144795952D01*
|
||||
X103147857Y-144748333D01*
|
||||
X103243095Y-144748333D01*
|
||||
X103385952Y-144795952D01*
|
||||
X103957380Y-145367380D01*
|
||||
X103957380Y-144748333D01*
|
||||
%TO.C,J1*%
|
||||
X86661666Y-143597380D02*
|
||||
X86661666Y-144311666D01*
|
||||
X86614047Y-144454523D01*
|
||||
X86518809Y-144549761D01*
|
||||
X86375952Y-144597380D01*
|
||||
X86280714Y-144597380D01*
|
||||
X87661666Y-144597380D02*
|
||||
X87090238Y-144597380D01*
|
||||
X87375952Y-144597380D02*
|
||||
X87375952Y-143597380D01*
|
||||
X87280714Y-143740238D01*
|
||||
X87185476Y-143835476D01*
|
||||
X87090238Y-143883095D01*
|
||||
%TO.C,RN1*%
|
||||
X96464523Y-84907380D02*
|
||||
X96131190Y-84431190D01*
|
||||
X95893095Y-84907380D02*
|
||||
X95893095Y-83907380D01*
|
||||
X96274047Y-83907380D01*
|
||||
X96369285Y-83955000D01*
|
||||
X96416904Y-84002619D01*
|
||||
X96464523Y-84097857D01*
|
||||
X96464523Y-84240714D01*
|
||||
X96416904Y-84335952D01*
|
||||
X96369285Y-84383571D01*
|
||||
X96274047Y-84431190D01*
|
||||
X95893095Y-84431190D01*
|
||||
X96893095Y-84907380D02*
|
||||
X96893095Y-83907380D01*
|
||||
X97464523Y-84907380D01*
|
||||
X97464523Y-83907380D01*
|
||||
X98464523Y-84907380D02*
|
||||
X97893095Y-84907380D01*
|
||||
X98178809Y-84907380D02*
|
||||
X98178809Y-83907380D01*
|
||||
X98083571Y-84050238D01*
|
||||
X97988333Y-84145476D01*
|
||||
X97893095Y-84193095D01*
|
||||
%TO.C,RN2*%
|
||||
X100274523Y-84907380D02*
|
||||
X99941190Y-84431190D01*
|
||||
X99703095Y-84907380D02*
|
||||
X99703095Y-83907380D01*
|
||||
X100084047Y-83907380D01*
|
||||
X100179285Y-83955000D01*
|
||||
X100226904Y-84002619D01*
|
||||
X100274523Y-84097857D01*
|
||||
X100274523Y-84240714D01*
|
||||
X100226904Y-84335952D01*
|
||||
X100179285Y-84383571D01*
|
||||
X100084047Y-84431190D01*
|
||||
X99703095Y-84431190D01*
|
||||
X100703095Y-84907380D02*
|
||||
X100703095Y-83907380D01*
|
||||
X101274523Y-84907380D01*
|
||||
X101274523Y-83907380D01*
|
||||
X101703095Y-84002619D02*
|
||||
X101750714Y-83955000D01*
|
||||
X101845952Y-83907380D01*
|
||||
X102084047Y-83907380D01*
|
||||
X102179285Y-83955000D01*
|
||||
X102226904Y-84002619D01*
|
||||
X102274523Y-84097857D01*
|
||||
X102274523Y-84193095D01*
|
||||
X102226904Y-84335952D01*
|
||||
X101655476Y-84907380D01*
|
||||
X102274523Y-84907380D01*
|
||||
%TO.C,RN3*%
|
||||
X96464523Y-139517380D02*
|
||||
X96131190Y-139041190D01*
|
||||
X95893095Y-139517380D02*
|
||||
X95893095Y-138517380D01*
|
||||
X96274047Y-138517380D01*
|
||||
X96369285Y-138565000D01*
|
||||
X96416904Y-138612619D01*
|
||||
X96464523Y-138707857D01*
|
||||
X96464523Y-138850714D01*
|
||||
X96416904Y-138945952D01*
|
||||
X96369285Y-138993571D01*
|
||||
X96274047Y-139041190D01*
|
||||
X95893095Y-139041190D01*
|
||||
X96893095Y-139517380D02*
|
||||
X96893095Y-138517380D01*
|
||||
X97464523Y-139517380D01*
|
||||
X97464523Y-138517380D01*
|
||||
X97845476Y-138517380D02*
|
||||
X98464523Y-138517380D01*
|
||||
X98131190Y-138898333D01*
|
||||
X98274047Y-138898333D01*
|
||||
X98369285Y-138945952D01*
|
||||
X98416904Y-138993571D01*
|
||||
X98464523Y-139088809D01*
|
||||
X98464523Y-139326904D01*
|
||||
X98416904Y-139422142D01*
|
||||
X98369285Y-139469761D01*
|
||||
X98274047Y-139517380D01*
|
||||
X97988333Y-139517380D01*
|
||||
X97893095Y-139469761D01*
|
||||
X97845476Y-139422142D01*
|
||||
%TO.C,RN4*%
|
||||
X100274523Y-139517380D02*
|
||||
X99941190Y-139041190D01*
|
||||
X99703095Y-139517380D02*
|
||||
X99703095Y-138517380D01*
|
||||
X100084047Y-138517380D01*
|
||||
X100179285Y-138565000D01*
|
||||
X100226904Y-138612619D01*
|
||||
X100274523Y-138707857D01*
|
||||
X100274523Y-138850714D01*
|
||||
X100226904Y-138945952D01*
|
||||
X100179285Y-138993571D01*
|
||||
X100084047Y-139041190D01*
|
||||
X99703095Y-139041190D01*
|
||||
X100703095Y-139517380D02*
|
||||
X100703095Y-138517380D01*
|
||||
X101274523Y-139517380D01*
|
||||
X101274523Y-138517380D01*
|
||||
X102179285Y-138850714D02*
|
||||
X102179285Y-139517380D01*
|
||||
X101941190Y-138469761D02*
|
||||
X101703095Y-139184047D01*
|
||||
X102322142Y-139184047D01*
|
||||
%TO.C,J4*%
|
||||
X90471666Y-142327380D02*
|
||||
X90471666Y-143041666D01*
|
||||
X90424047Y-143184523D01*
|
||||
X90328809Y-143279761D01*
|
||||
X90185952Y-143327380D01*
|
||||
X90090714Y-143327380D01*
|
||||
X91376428Y-142660714D02*
|
||||
X91376428Y-143327380D01*
|
||||
X91138333Y-142279761D02*
|
||||
X90900238Y-142994047D01*
|
||||
X91519285Y-142994047D01*
|
||||
%TD*%
|
||||
M02*
|
|
@ -1,16 +0,0 @@
|
|||
M48
|
||||
; DRILL file {KiCad (5.1.6-0-10_14)} date Tuesday, March 30, 2021 at 09:57:37 AM
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2021-03-30T09:57:37-05:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.6-0-10_14)
|
||||
; #@! TF.FileFunction,NonPlated,1,2,NPTH
|
||||
FMAT,2
|
||||
INCH
|
||||
T1C0.1063
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X2.955Y-3.105
|
||||
T0
|
||||
M30
|
|
@ -1,181 +0,0 @@
|
|||
M48
|
||||
; DRILL file {KiCad (5.1.6-0-10_14)} date Tuesday, March 30, 2021 at 09:57:37 AM
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2021-03-30T09:57:37-05:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.6-0-10_14)
|
||||
; #@! TF.FileFunction,Plated,1,2,PTH
|
||||
FMAT,2
|
||||
INCH
|
||||
T1C0.0157
|
||||
T2C0.0315
|
||||
T3C0.0354
|
||||
T4C0.0394
|
||||
T5C0.0400
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X2.975Y-5.325
|
||||
X3.075Y-4.775
|
||||
X3.1541Y-5.0376
|
||||
X3.175Y-3.625
|
||||
X3.175Y-4.375
|
||||
X3.2827Y-4.6673
|
||||
X3.3569Y-4.8833
|
||||
X3.375Y-4.675
|
||||
X3.475Y-3.875
|
||||
X3.475Y-4.925
|
||||
X3.675Y-3.125
|
||||
X3.675Y-4.125
|
||||
T2
|
||||
X3.825Y-4.475
|
||||
X3.825Y-4.575
|
||||
X3.825Y-4.675
|
||||
X3.825Y-4.775
|
||||
X3.825Y-4.875
|
||||
X3.825Y-4.975
|
||||
X3.825Y-5.075
|
||||
X3.825Y-5.175
|
||||
X3.825Y-5.275
|
||||
X3.825Y-5.375
|
||||
X3.975Y-4.475
|
||||
X3.975Y-4.575
|
||||
X3.975Y-4.675
|
||||
X3.975Y-4.775
|
||||
X3.975Y-4.875
|
||||
X3.975Y-4.975
|
||||
X3.975Y-5.075
|
||||
X3.975Y-5.175
|
||||
X3.975Y-5.275
|
||||
X3.975Y-5.375
|
||||
X3.825Y-3.425
|
||||
X3.825Y-3.525
|
||||
X3.825Y-3.625
|
||||
X3.825Y-3.725
|
||||
X3.825Y-3.825
|
||||
X3.825Y-3.925
|
||||
X3.825Y-4.025
|
||||
X3.825Y-4.125
|
||||
X3.825Y-4.225
|
||||
X3.825Y-4.325
|
||||
X3.975Y-3.425
|
||||
X3.975Y-3.525
|
||||
X3.975Y-3.625
|
||||
X3.975Y-3.725
|
||||
X3.975Y-3.825
|
||||
X3.975Y-3.925
|
||||
X3.975Y-4.025
|
||||
X3.975Y-4.125
|
||||
X3.975Y-4.225
|
||||
X3.975Y-4.325
|
||||
T3
|
||||
X3.125Y-3.065
|
||||
X3.425Y-3.065
|
||||
X3.675Y-5.675
|
||||
X3.7734Y-5.675
|
||||
X3.8719Y-5.675
|
||||
X3.9703Y-5.675
|
||||
X3.125Y-3.205
|
||||
X3.425Y-3.205
|
||||
T4
|
||||
X2.875Y-5.475
|
||||
X2.875Y-5.575
|
||||
X2.875Y-5.675
|
||||
X2.875Y-5.775
|
||||
X3.825Y-3.125
|
||||
X3.825Y-3.225
|
||||
X4.225Y-3.225
|
||||
X4.225Y-3.325
|
||||
X4.225Y-3.425
|
||||
X4.225Y-3.525
|
||||
X4.225Y-3.625
|
||||
X4.225Y-3.725
|
||||
X4.225Y-3.825
|
||||
X4.225Y-3.925
|
||||
X4.225Y-4.025
|
||||
X4.225Y-4.125
|
||||
X4.225Y-4.225
|
||||
X4.225Y-4.325
|
||||
X4.225Y-4.425
|
||||
X4.225Y-4.525
|
||||
X4.225Y-4.625
|
||||
X4.225Y-4.725
|
||||
X4.225Y-4.825
|
||||
X4.225Y-4.925
|
||||
X4.225Y-5.025
|
||||
X4.225Y-5.125
|
||||
X4.225Y-5.225
|
||||
X4.225Y-5.325
|
||||
X4.225Y-5.425
|
||||
X4.225Y-5.525
|
||||
X4.225Y-5.625
|
||||
X4.325Y-3.225
|
||||
X4.325Y-3.325
|
||||
X4.325Y-3.425
|
||||
X4.325Y-3.525
|
||||
X4.325Y-3.625
|
||||
X4.325Y-3.725
|
||||
X4.325Y-3.825
|
||||
X4.325Y-3.925
|
||||
X4.325Y-4.025
|
||||
X4.325Y-4.125
|
||||
X4.325Y-4.225
|
||||
X4.325Y-4.325
|
||||
X4.325Y-4.425
|
||||
X4.325Y-4.525
|
||||
X4.325Y-4.625
|
||||
X4.325Y-4.725
|
||||
X4.325Y-4.825
|
||||
X4.325Y-4.925
|
||||
X4.325Y-5.025
|
||||
X4.325Y-5.125
|
||||
X4.325Y-5.225
|
||||
X4.325Y-5.325
|
||||
X4.325Y-5.425
|
||||
X4.325Y-5.525
|
||||
X4.325Y-5.625
|
||||
X3.975Y-3.125
|
||||
X3.975Y-3.225
|
||||
T5
|
||||
X2.975Y-3.273
|
||||
X2.975Y-3.373
|
||||
X2.975Y-3.473
|
||||
X2.975Y-3.573
|
||||
X2.975Y-3.673
|
||||
X2.975Y-3.773
|
||||
X2.975Y-3.873
|
||||
X2.975Y-3.973
|
||||
X2.975Y-4.073
|
||||
X2.975Y-4.173
|
||||
X2.975Y-4.273
|
||||
X2.975Y-4.373
|
||||
X2.975Y-4.473
|
||||
X2.975Y-4.573
|
||||
X2.975Y-4.673
|
||||
X2.975Y-4.773
|
||||
X2.975Y-4.873
|
||||
X2.975Y-4.973
|
||||
X2.975Y-5.073
|
||||
X2.975Y-5.173
|
||||
X3.575Y-3.271
|
||||
X3.575Y-3.373
|
||||
X3.575Y-3.473
|
||||
X3.575Y-3.573
|
||||
X3.575Y-3.673
|
||||
X3.575Y-3.773
|
||||
X3.575Y-3.873
|
||||
X3.575Y-3.973
|
||||
X3.575Y-4.073
|
||||
X3.575Y-4.173
|
||||
X3.575Y-4.273
|
||||
X3.575Y-4.373
|
||||
X3.575Y-4.473
|
||||
X3.575Y-4.573
|
||||
X3.575Y-4.673
|
||||
X3.575Y-4.773
|
||||
X3.575Y-4.873
|
||||
X3.575Y-4.973
|
||||
X3.575Y-5.073
|
||||
X3.575Y-5.173
|
||||
T0
|
||||
M30
|
|
@ -1,128 +0,0 @@
|
|||
{
|
||||
"Header":
|
||||
{
|
||||
"GenerationSoftware":
|
||||
{
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "(5.1.6-0-10_14)"
|
||||
},
|
||||
"CreationDate": "2021-03-30T09:57:07-05:00"
|
||||
},
|
||||
"GeneralSpecs":
|
||||
{
|
||||
"ProjectId":
|
||||
{
|
||||
"Name": "bluepill_scsi",
|
||||
"GUID": "626c7565-7069-46c6-9c5f-736373692e6b",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size":
|
||||
{
|
||||
"X": 43.865,
|
||||
"Y": 73.710
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.600
|
||||
},
|
||||
"DesignRules":
|
||||
[
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.200,
|
||||
"PadToTrack": 0.200,
|
||||
"TrackToTrack": 0.200,
|
||||
"MinLineWidth": 0.250,
|
||||
"TrackToRegion": 0.508,
|
||||
"RegionToRegion": 0.508
|
||||
}
|
||||
],
|
||||
"FilesAttributes":
|
||||
[
|
||||
{
|
||||
"Path": "bluepill_scsi-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-F_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-F_SilkS.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_SilkS.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "bluepill_scsi-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup":
|
||||
[
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Notes": "Layer F.SilkS"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Notes": "Layer F.Paste"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Notes": "Layer F.Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Notes": "Layer F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Material": "FR4",
|
||||
"Notes": "Layers L1/L2"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Notes": "Layer B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Notes": "Layer B.Mask"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Notes": "Layer B.Paste"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Notes": "Layer B.SilkS"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
(sym_lib_table
|
||||
(lib (name bluepill_scsi-rescue)(type Legacy)(uri ${KIPRJMOD}/bluepill_scsi-rescue.lib)(options "")(descr ""))
|
||||
)
|
|
@ -1,39 +0,0 @@
|
|||
|
||||
This directory is intended for project header files.
|
||||
|
||||
A header file is a file containing C declarations and macro definitions
|
||||
to be shared between several project source files. You request the use of a
|
||||
header file in your project source file (C, C++, etc) located in `src` folder
|
||||
by including it, with the C preprocessing directive `#include'.
|
||||
|
||||
```src/main.c
|
||||
|
||||
#include "header.h"
|
||||
|
||||
int main (void)
|
||||
{
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Including a header file produces the same results as copying the header file
|
||||
into each source file that needs it. Such copying would be time-consuming
|
||||
and error-prone. With a header file, the related declarations appear
|
||||
in only one place. If they need to be changed, they can be changed in one
|
||||
place, and programs that include the header file will automatically use the
|
||||
new version when next recompiled. The header file eliminates the labor of
|
||||
finding and changing all the copies as well as the risk that a failure to
|
||||
find one copy will result in inconsistencies within a program.
|
||||
|
||||
In C, the usual convention is to give header files names that end with `.h'.
|
||||
It is most portable to use only letters, digits, dashes, and underscores in
|
||||
header file names, and at most one dot.
|
||||
|
||||
Read more about using header files in official GCC documentation:
|
||||
|
||||
* Include Syntax
|
||||
* Include Operation
|
||||
* Once-Only Headers
|
||||
* Computed Includes
|
||||
|
||||
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
46
lib/README
|
@ -1,46 +0,0 @@
|
|||
|
||||
This directory is intended for project specific (private) libraries.
|
||||
PlatformIO will compile them to static libraries and link into executable file.
|
||||
|
||||
The source code of each library should be placed in a an own separate directory
|
||||
("lib/your_library_name/[here are source files]").
|
||||
|
||||
For example, see a structure of the following two libraries `Foo` and `Bar`:
|
||||
|
||||
|--lib
|
||||
| |
|
||||
| |--Bar
|
||||
| | |--docs
|
||||
| | |--examples
|
||||
| | |--src
|
||||
| | |- Bar.c
|
||||
| | |- Bar.h
|
||||
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
|
||||
| |
|
||||
| |--Foo
|
||||
| | |- Foo.c
|
||||
| | |- Foo.h
|
||||
| |
|
||||
| |- README --> THIS FILE
|
||||
|
|
||||
|- platformio.ini
|
||||
|--src
|
||||
|- main.c
|
||||
|
||||
and a contents of `src/main.c`:
|
||||
```
|
||||
#include <Foo.h>
|
||||
#include <Bar.h>
|
||||
|
||||
int main (void)
|
||||
{
|
||||
...
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
PlatformIO Library Dependency Finder will find automatically dependent
|
||||
libraries scanning project source files.
|
||||
|
||||
More information about PlatformIO Library Dependency Finder
|
||||
- https://docs.platformio.org/page/librarymanager/ldf.html
|
|
@ -1,40 +0,0 @@
|
|||
; PlatformIO Project Configuration File https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[env:genericSTM32F103C8]
|
||||
platform = ststm32
|
||||
board = genericSTM32F103C8
|
||||
board_build.mcu = stm32f103c8t6
|
||||
board_build.core = maple
|
||||
framework = arduino
|
||||
lib_deps =
|
||||
greiman/SdFat @ ^2.0.6
|
||||
upload_protocol = stlink
|
||||
; Different gcc versions produce much different binaries in terms of speed.
|
||||
; 1.40804.0 ; 985kb/sec
|
||||
; 1.60301.0 ; 1012kb/sec ***
|
||||
; 1.70201.0 ; 926kb/sec
|
||||
; 1.80301.0 ; 935kb/sec
|
||||
; 1.80201.181220 ; 921kb/sec
|
||||
; 1.90201.191206 ; 912kb/sec
|
||||
; 1.90301.200702 ; default - 955kb/sec
|
||||
platform_packages = toolchain-gccarmnoneeabi@1.60301.0
|
||||
|
||||
build_unflags =
|
||||
-Os
|
||||
-DARDUINO_ARCH_STM32F1
|
||||
build_flags =
|
||||
-w
|
||||
-DARDUINO_GENERIC_STM32F103C
|
||||
-DARDUINO_LIB_DISCOVERY_PHASE
|
||||
-DARDUINO=10813
|
||||
-DARDUINO_ARCH_STM32
|
||||
-DDEBUG_LEVEL=DEBUG_NONE
|
||||
-O3
|
||||
|
||||
; Work around for clones.
|
||||
; https://community.platformio.org/t/cannot-upload-to-stm32-bluepill-board-over-stlink-v2/3492/25
|
||||
; upload_flags = -c set CPUTAPID 0x2ba01477
|
||||
|
||||
; [env:debug]
|
||||
; build_type = debug
|
||||
; debug_tool = stlink
|
1376
src/BlueSCSI.cpp
37
src/cmd.h
Executable file
|
@ -0,0 +1,37 @@
|
|||
#ifndef __CMD_H
|
||||
#define __CMD_H
|
||||
|
||||
#define MAX_MSG_SIZE 256
|
||||
#define MAXARG 32
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// command line structure
|
||||
typedef struct Commands_s {
|
||||
const char *Name;
|
||||
const char *ValidPath;
|
||||
int MinParams;
|
||||
const char *ShortHelp;
|
||||
const char *FullHelp;
|
||||
void (*Func)(int argc, char **argv);
|
||||
struct Commands_s *Dispatch;
|
||||
} Commands_t;
|
||||
|
||||
void cmdDisplay();
|
||||
void cmdParse(char *cmd);
|
||||
void cmdPoll();
|
||||
|
||||
void cmdCommandHelp(boolean singleCommand, Commands_t *table, int cmd);
|
||||
void cmdDispatchHelp(Commands_t *table, int argc, char **argv);
|
||||
void cmdDispatch(Commands_t *table, int argc, char **argv);
|
||||
|
||||
int execHandler(char *filename);
|
||||
int execLoop();
|
||||
|
||||
void execcmd(int argc, char **argv);
|
||||
void showcmd(int argc, char **argv);
|
||||
void setcmd(int argc, char **argv);
|
||||
|
||||
extern Commands_t GlobalCommands[];
|
||||
|
||||
#endif /* __CMD_H */
|
2079
src/cmd.ino
Executable file
43
src/config.h
Executable file
|
@ -0,0 +1,43 @@
|
|||
#ifndef __CONFIG_H
|
||||
#define __CONFIG_H
|
||||
|
||||
#define DEBUG 1 // 0:No debug information output (Faster by 2-3x+)
|
||||
// 1: Debug information output to USB Serial
|
||||
// 2: Debug information output to LOG.txt (slow)
|
||||
|
||||
#define SYNCHRO false // Support Synchronous mode.
|
||||
#define ACK_INTERRUPTS false
|
||||
#define READ_SPEED_OPTIMIZE true //
|
||||
#define WRITE_SPEED_OPTIMIZE true //
|
||||
#define READ_SPEED_OPTIMIZE_RAW true //
|
||||
#define WRITE_SPEED_OPTIMIZE_RAW true //
|
||||
#define USE_DB2ID_TABLE true // Use table to get ID from SEL-DB
|
||||
|
||||
// SCSI config
|
||||
#define NUM_SCSIID 8 // Maximum number of supported SCSI-IDs (The minimum is 1)
|
||||
#define NUM_SCSILUN 8 // Maximum number of LUNs supported (The minimum is 1)
|
||||
#define NUM_VDEV 16 // Maximum number of VDEVs supported (The minimum is 1)
|
||||
|
||||
#define READ_PARITY_CHECK 0 // Perform read parity check (unverified)
|
||||
|
||||
// HDD format
|
||||
#define MAX_BLOCKSIZE (1 << 15) // Maximum BLOCK size (2048 to 8192 tested, 16384 had issues)
|
||||
|
||||
#define SCSI_INQUIRY_RESPONSE_SIZE 96
|
||||
extern uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE];
|
||||
|
||||
// Supported Device Types
|
||||
#define SUPPORT_DISK true
|
||||
#define SUPPORT_OPTICAL true
|
||||
#define SUPPORT_TAPE false
|
||||
#define SUPPORT_MO false
|
||||
#define SUPPORT_INITIATOR true
|
||||
#define SUPPORT_CONTROL true
|
||||
|
||||
// Compatibility Settings
|
||||
#define SUPPORT_SASI false // Enable SASI compatiblity for Sharp X68000
|
||||
#define SUPPORT_SASI_DEFAULT false // Turn it on by default
|
||||
#define SUPPORT_APPLE true
|
||||
#define SUPPORT_APPLE_DEFAULT false
|
||||
|
||||
#endif /* __CONFIG_H */
|
111
src/control.ino
Normal file
|
@ -0,0 +1,111 @@
|
|||
#include "config.h"
|
||||
#include "scsi_defs.h"
|
||||
|
||||
#if SUPPORT_CONTROL
|
||||
/*
|
||||
* RECEIVE Command processing.
|
||||
*/
|
||||
void onControlReceiveCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
LOG("-R ");
|
||||
LOGHEX4N(len);
|
||||
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
switch(m_cmd[1] & 0x3) {
|
||||
case 0:
|
||||
if(len == 0) return;
|
||||
break;
|
||||
case 1: // Fixed
|
||||
break;
|
||||
case 2: // SILI
|
||||
break;
|
||||
case 3: // Illegal Request
|
||||
m_sts = 0x02;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 1" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x01;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
LED_ON();
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
LED_OFF();
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
/*
|
||||
* SEND Command processing.
|
||||
*/
|
||||
void onControlSendCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
LOG("-W ");
|
||||
LOGHEX4N(len);
|
||||
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
if(len > MAX_BLOCKSIZE) {
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 4" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x04;
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
LED_ON();
|
||||
readDataPhase(len, m_responsebuffer);
|
||||
LED_OFF();
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void ControlReceive6CommandHandler() {
|
||||
LOG("[Receive6]");
|
||||
onControlReceiveCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
|
||||
}
|
||||
|
||||
void ControlSend6CommandHandler() {
|
||||
LOG("[Send6]");
|
||||
onControlSendCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
|
||||
}
|
||||
|
||||
void ConfigureControlHandlers(VirtualDevice_t *vdev) {
|
||||
for(int c = 0; c < 256; c++)
|
||||
vdev->m_handler[c] = &UnknownCommandHandler;
|
||||
|
||||
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
|
||||
vdev->m_handler[CMD_READ6] = &ControlReceive6CommandHandler;
|
||||
vdev->m_handler[CMD_WRITE6] = &ControlSend6CommandHandler;
|
||||
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
|
||||
vdev->m_handler[CMD_SEND_DIAGNOSTIC] = &SendDiagnosticCommandHandler;
|
||||
}
|
||||
|
||||
// If config file exists, read the first three lines and copy the contents.
|
||||
// File must be well formed or you will get junk in the SCSI Vendor fields.
|
||||
void ConfigureControl(VirtualDevice_t *vdev, const char *image_name) {
|
||||
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
|
||||
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_PROCESSOR) {
|
||||
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
vdev->m_type = DEV_PROCESSOR;
|
||||
ConfigureControlHandlers(vdev);
|
||||
}
|
||||
#endif
|
193
src/defaults.ino
Executable file
|
@ -0,0 +1,193 @@
|
|||
#include "config.h"
|
||||
|
||||
// SCSI Drive Vendor information
|
||||
|
||||
uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
||||
#if SUPPORT_SASI
|
||||
{
|
||||
DEV_DISK, //Device type
|
||||
0x00, //RMB = 0
|
||||
0x01, //ISO,ECMA,ANSI version
|
||||
0x01, //Response data format
|
||||
35 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x00, //Support function
|
||||
'N', 'E', 'C', 'I', 'T', 'S', 'U', ' ',
|
||||
'A', 'r', 'd', 'S', 'C', 'S', 'i', 'n', 'o', ' ', ' ',' ', ' ', ' ', ' ', ' ',
|
||||
'0', '0', '1', '0',
|
||||
0
|
||||
},
|
||||
#endif /* SUPPORT_SASI */
|
||||
|
||||
#if SUPPORT_DISK
|
||||
{
|
||||
DEV_DISK, //device type
|
||||
0x00, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
35 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x00, //Support function
|
||||
'Q', 'U', 'A', 'N', 'T', 'U', 'M', ' ', // vendor 8
|
||||
'F', 'I', 'R', 'E', 'B', 'A', 'L', 'L', '1', ' ', ' ',' ', ' ', ' ', ' ', ' ', // product 16
|
||||
'1', '.', '0', ' ', // version 4
|
||||
// Release Number (1 Byte)
|
||||
0x20,
|
||||
// Revision Date (10 Bytes)
|
||||
'2','0','2','1','/','1','1','/','2','2',
|
||||
0
|
||||
},
|
||||
|
||||
{
|
||||
DEV_DISK, //device type
|
||||
0x00, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
35 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x00, //Support function
|
||||
'S', 'E', 'A', 'G', 'A', 'T', 'E', ' ', // vendor 8
|
||||
'S', 'T', '2', '2', '5', 'N', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', // product 16
|
||||
'1', '.', '0', ' ', // version 4
|
||||
// Release Number (1 Byte)
|
||||
0x20,
|
||||
// Revision Date (10 Bytes)
|
||||
'2','0','2','1','/','1','1','/','2','2',
|
||||
0
|
||||
},
|
||||
#endif /* SUPPORT_DISK */
|
||||
|
||||
#if SUPPORT_OPTICAL
|
||||
{
|
||||
DEV_OPTICAL, //device type
|
||||
0x80, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
46 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x00, //Support function
|
||||
'S', 'O', 'N', 'Y', ' ', ' ', ' ', ' ', // vendor 8
|
||||
'C', 'D', '-', 'R', 'O', 'M', ' ', 'C', 'D', 'U', '-','8', '0', '0', '3', ' ', // product 16
|
||||
'1', '.', '7', 'w', // version 4
|
||||
// Release Number (1 Byte)
|
||||
0x20,
|
||||
// Revision Date (10 Bytes)
|
||||
'2','0','2','1','/','1','1','/','2','2',
|
||||
0
|
||||
},
|
||||
{
|
||||
DEV_OPTICAL, //device type
|
||||
0x80, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
46 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x00, //Support function
|
||||
'S', 'O', 'N', 'Y', ' ', ' ', ' ', ' ', // vendor 8
|
||||
'C', 'D', 'U', '-', '7', '6', 'S', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', // product 16
|
||||
'1', '.', '0', ' ', // version 4
|
||||
// Release Number (1 Byte)
|
||||
0x20,
|
||||
// Revision Date (10 Bytes)
|
||||
'2','0','2','1','/','1','1','/','2','2',
|
||||
0
|
||||
},
|
||||
{
|
||||
DEV_OPTICAL, //device type
|
||||
0x80, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
35 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x00, //Support function
|
||||
'M', 'A', 'T', 'S', 'H', 'I', 'T', 'A', // vendor 8
|
||||
'C', 'D', '-', 'R', 'O', 'M', ' ', 'C', 'R', '8', '0','0', '5', ' ', ' ', ' ', // product 16
|
||||
'1', '.', '0', 'k', // version 4
|
||||
0
|
||||
},
|
||||
{
|
||||
DEV_OPTICAL, //device type
|
||||
0x80, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
35 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x00, //Support function
|
||||
'D', 'E', 'C', ' ', ' ', ' ', ' ', ' ', // vendor 8
|
||||
'R', 'R', 'D', '4', '5', ' ', ' ', ' ', '(', 'C', ')',' ', 'D', 'E', 'C', ' ', // product 16
|
||||
'0', '4', '3', '6', // version 4
|
||||
0
|
||||
},
|
||||
{
|
||||
DEV_OPTICAL, //device type
|
||||
0x80, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
35 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x98, //Support function
|
||||
'T', 'O', 'S', 'H', 'I', 'B', 'A', ' ', // vendor 8
|
||||
'C', 'D', '-', 'R', 'O', 'M', ' ', 'X', 'M', '-', '3','3', '0', '1', 'T', 'A', // product 16
|
||||
'0', '2', '7', '2', // version 4
|
||||
0
|
||||
},
|
||||
{
|
||||
DEV_OPTICAL, //device type
|
||||
0x80, //RMB = 0
|
||||
0x05, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
35 - 4, //Additional data length
|
||||
0, 0, //Reserve
|
||||
0x98, //Support function
|
||||
'T', 'O', 'S', 'H', 'I', 'B', 'A', ' ', // vendor 8
|
||||
'C', 'D', '-', 'R', 'O', 'M', ' ', 'X', 'M', '-', '5','7', '0', '1', 'T', 'A', // product 16
|
||||
'3', '1', '3', '6', // version 4
|
||||
0
|
||||
},
|
||||
#endif /* SUPPORT_OPTICAL */
|
||||
|
||||
#if SUPPORT_TAPE
|
||||
{
|
||||
DEV_TAPE, //device type
|
||||
0x80, //RMB = 0
|
||||
0x03, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
37 - 4, //Additional data length
|
||||
0, //Reserve
|
||||
0x00, // Support function
|
||||
0x00, // Support function
|
||||
'I', 'B', 'M', ' ', ' ', ' ', ' ', ' ', // vendor 8
|
||||
'U', 'L', 'T', '3', '5', '8', '0', '-', 'T', 'D', '1',' ', ' ', ' ', ' ', ' ', // product 16
|
||||
'M', 'B', 'N', '0', // version 4
|
||||
0
|
||||
},
|
||||
#endif /* SUPPORT_TAPE */
|
||||
|
||||
|
||||
#if SUPPORT_CONTROL
|
||||
{
|
||||
DEV_PROCESSOR, //device type
|
||||
0x80, //RMB = 0
|
||||
0x03, //ISO, ECMA, ANSI version
|
||||
0x02, //Response data format
|
||||
37 - 4, //Additional data length
|
||||
0, //Reserve
|
||||
0x00, // Support function
|
||||
0x00, // Support function
|
||||
'G', 'R', 'N', 'S', 'C', 'S', 'I', ' ', // vendor 8
|
||||
'G', 'R', 'E', 'E', 'N', 'S', 'C', 'S', 'I', 'C', 'T','R', 'L', ' ', ' ', ' ', // product 16
|
||||
'G', 'S', 'C', '0', // version 4
|
||||
0
|
||||
},
|
||||
#endif /* SUPPORT_CONTROL */
|
||||
|
||||
// Invalid entry to mark end of data
|
||||
{
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
||||
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
|
||||
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
|
||||
' ', ' ', ' ', ' ',
|
||||
0
|
||||
}
|
||||
|
||||
};
|
264
src/disk.ino
Executable file
|
@ -0,0 +1,264 @@
|
|||
#include "config.h"
|
||||
#include "scsi_defs.h"
|
||||
|
||||
/*
|
||||
* Check that the image file is present and the block range is valid.
|
||||
*/
|
||||
byte checkBlockCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
// Check that image file is present
|
||||
if(!m_sel) {
|
||||
return STATUS_CHECK;
|
||||
}
|
||||
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
|
||||
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||
return STATUS_CHECK;
|
||||
}
|
||||
// Check block range is valid
|
||||
uint32_t bc = m_sel->m_fileSize / m_sel->m_blocksize;
|
||||
if (adds >= bc || (adds + len) > bc) {
|
||||
m_sel->m_sense.m_key = 5; // Illegal request
|
||||
m_sel->m_sense.m_code = INVALID_LBA; // Logical block address out of range
|
||||
return STATUS_CHECK;
|
||||
}
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
void Read6CommandHandler() {
|
||||
LOG("[Read6]");
|
||||
m_sts |= onReadCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void Write6CommandHandler() {
|
||||
LOG("[Write6]");
|
||||
m_sts |= onWriteCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void Seek6CommandHandler() {
|
||||
LOG("[Seek6]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
/*
|
||||
* READ CAPACITY command processing.
|
||||
*/
|
||||
void ReadCapacityCommandHandler() {
|
||||
LOGN("[ReadCapacity]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t bl = m_sel->m_blocksize;
|
||||
uint32_t bc = m_sel->m_fileSize / bl;
|
||||
uint8_t buf[8] = {
|
||||
(uint8_t)(((uint32_t)(bc >> 24))&0xff), (uint8_t)(((uint32_t)(bc >> 16))&0xff), (uint8_t)(((uint32_t)(bc >> 8))&0xff), (uint8_t)(((uint32_t)(bc))&0xff),
|
||||
(uint8_t)(((uint32_t)(bl >> 24))&0xff), (uint8_t)(((uint32_t)(bl >> 16))&0xff), (uint8_t)(((uint32_t)(bl >> 8))&0xff), (uint8_t)(((uint32_t)(bl))&0xff)
|
||||
};
|
||||
writeDataPhase(8, buf);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void Read10CommandHandler() {
|
||||
LOG("[Read10]");
|
||||
m_sts |= onReadCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void Write10CommandHandler() {
|
||||
LOG("[Write10]");
|
||||
m_sts |= onWriteCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void Seek10CommandHandler() {
|
||||
LOG("[Seek10]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void Verify10CommandHandler() {
|
||||
LOG("[Verify10]");
|
||||
m_sts |= onVerifyCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
/*
|
||||
* READ6 / 10 Command processing.
|
||||
*/
|
||||
uint8_t onReadCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
uint8_t sts;
|
||||
|
||||
LOG("-R ");
|
||||
LOGHEX6(adds);
|
||||
LOG(" ");
|
||||
LOGHEX4N(len);
|
||||
|
||||
sts = checkBlockCommand(adds, len);
|
||||
if(sts) return sts;
|
||||
|
||||
LED_ON();
|
||||
if(m_sel->m_rawPart) {
|
||||
writeDataPhaseRaw(adds, len);
|
||||
} else {
|
||||
writeDataPhaseSD(adds, len);
|
||||
}
|
||||
LED_OFF();
|
||||
return 0x00; //sts
|
||||
}
|
||||
|
||||
/*
|
||||
* WRITE6 / 10 Command processing.
|
||||
*/
|
||||
uint8_t onWriteCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
uint8_t sts;
|
||||
|
||||
LOG("-W ");
|
||||
LOGHEX6(adds);
|
||||
LOG(" ");
|
||||
LOGHEX4N(len);
|
||||
|
||||
sts = checkBlockCommand(adds, len);
|
||||
if(sts) return sts;
|
||||
|
||||
LED_ON();
|
||||
if(m_sel->m_rawPart) {
|
||||
readDataPhaseRaw(adds, len);
|
||||
} else {
|
||||
readDataPhaseSD(adds, len);
|
||||
}
|
||||
LED_OFF();
|
||||
return 0; //sts
|
||||
}
|
||||
|
||||
/*
|
||||
* VERIFY6 / 10 Command processing.
|
||||
*/
|
||||
uint8_t onVerifyCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
uint8_t sts;
|
||||
|
||||
LOG("-V ");
|
||||
LOGHEX6(adds);
|
||||
LOG(" ");
|
||||
LOGHEX4N(len);
|
||||
|
||||
sts = checkBlockCommand(adds, len);
|
||||
if(sts) return sts;
|
||||
|
||||
LED_ON();
|
||||
if(m_sel->m_rawPart) {
|
||||
verifyDataPhaseRaw(adds, len);
|
||||
} else {
|
||||
verifyDataPhaseSD(adds, len);
|
||||
}
|
||||
LED_OFF();
|
||||
return 0; //sts
|
||||
}
|
||||
|
||||
void ConfigureDiskHandlers(VirtualDevice_t *vdev) {
|
||||
for(int c = 0; c < 256; c++)
|
||||
vdev->m_handler[c] = &UnknownCommandHandler;
|
||||
|
||||
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REZERO_UNIT] = &RezeroUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
|
||||
vdev->m_handler[CMD_FORMAT_UNIT] = &FormatUnitCommandHandler;
|
||||
vdev->m_handler[CMD_FORMAT_UNIT_ALT] = &FormatUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REASSIGN_BLOCKS] = &ReassignBlocksCommandHandler;
|
||||
vdev->m_handler[CMD_READ6] = &Read6CommandHandler;
|
||||
vdev->m_handler[CMD_WRITE6] = &Write6CommandHandler;
|
||||
vdev->m_handler[CMD_SEEK6] = &Seek6CommandHandler;
|
||||
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SELECT6] = &ModeSelect6CommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SENSE6] = &ModeSenseCommandHandler;
|
||||
vdev->m_handler[CMD_START_STOP_UNIT] = &StartStopUnitCommandHandler;
|
||||
vdev->m_handler[CMD_PREVENT_REMOVAL] = &PreAllowMediumRemovalCommandHandler;
|
||||
vdev->m_handler[CMD_READ_CAPACITY10] = &ReadCapacityCommandHandler;
|
||||
vdev->m_handler[CMD_READ10] = &Read10CommandHandler;
|
||||
vdev->m_handler[CMD_WRITE10] = &Write10CommandHandler;
|
||||
vdev->m_handler[CMD_SEEK10] = &Seek10CommandHandler;
|
||||
vdev->m_handler[CMD_VERIFY10] = &Verify10CommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SENSE10] = &ModeSenseCommandHandler;
|
||||
vdev->m_handler[CMD_SEARCH_DATA_EQUAL] = &SearchDataEqualCommandHandler;
|
||||
vdev->m_handler[CMD_READ_DEFECT_DATA] = &ReadDefectCommandHandler;
|
||||
vdev->m_handler[CMD_SEND_DIAGNOSTIC] = &SendDiagnosticCommandHandler;
|
||||
vdev->m_handler[CMD_PREFETCH_CACHE10] = &PrefetchCommandHandler;
|
||||
vdev->m_handler[CMD_SYNCHRONIZE_CACHE10] = &SyncCacheCommandHandler;
|
||||
#if SUPPORT_SASI
|
||||
if(vdev->m_quirks & QUIRKS_SASI)
|
||||
vdev->m_handler[CMD_SET_DRIVE_PARAMETER] = &DTCsetDriveParameterCommandHandler;
|
||||
#endif
|
||||
#if SUPPORT_APPLE
|
||||
if(vdev->m_quirks & QUIRKS_APPLE)
|
||||
vdev->m_handler[CMD_MAC_UNKNOWN] = &AppleEECommandHandler;
|
||||
#endif
|
||||
}
|
||||
|
||||
// If config file exists, read the first three lines and copy the contents.
|
||||
// File must be well formed or you will get junk in the SCSI Vendor fields.
|
||||
void ConfigureDisk(VirtualDevice_t *vdev, const char *image_name) {
|
||||
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
|
||||
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_DISK) {
|
||||
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
vdev->m_sectors = 63;
|
||||
vdev->m_heads = 16;
|
||||
vdev->m_cylinders = (uint32_t)((uint64_t)vdev->m_fileSize / ((uint64_t)vdev->m_blocksize * (uint64_t)vdev->m_heads * (uint64_t)vdev->m_sectors));
|
||||
|
||||
if(image_name) {
|
||||
char configname[MAX_FILE_PATH+1];
|
||||
memcpy(configname, image_name, MAX_FILE_PATH+1);
|
||||
char *psuffix = strstr(configname, ".img");
|
||||
if(psuffix) {
|
||||
strcpy(psuffix, ".cfg");
|
||||
} else {
|
||||
sprintf(configname, "hd%d%d.cfg", vdev->m_id, vdev->m_lun);
|
||||
}
|
||||
|
||||
FsFile config_file = sd.open(configname, O_RDONLY);
|
||||
if (config_file.isOpen()) {
|
||||
char vendor[9];
|
||||
memset(vendor, 0, sizeof(vendor));
|
||||
config_file.readBytes(vendor, sizeof(vendor));
|
||||
LOGN("SCSI VENDOR: ");
|
||||
LOGN(vendor);
|
||||
memcpy(&(vdev->m_inquiryresponse[8]), vendor, 8);
|
||||
|
||||
char product[17];
|
||||
memset(product, 0, sizeof(product));
|
||||
config_file.readBytes(product, sizeof(product));
|
||||
LOGN("SCSI PRODUCT: ");
|
||||
LOGN(product);
|
||||
memcpy(&(vdev->m_inquiryresponse[16]), product, 16);
|
||||
|
||||
char version[5];
|
||||
memset(version, 0, sizeof(version));
|
||||
config_file.readBytes(version, sizeof(version));
|
||||
LOGN("SCSI VERSION: ");
|
||||
LOGN(version);
|
||||
memcpy(&(vdev->m_inquiryresponse[32]), version, 4);
|
||||
config_file.close();
|
||||
}
|
||||
}
|
||||
|
||||
vdev->m_type = DEV_DISK;
|
||||
ConfigureDiskHandlers(vdev);
|
||||
}
|
403
src/dump.ino
Executable file
|
@ -0,0 +1,403 @@
|
|||
#if SUPPORT_INITIATOR
|
||||
|
||||
// Take control of the SCSI bus
|
||||
void initiatorTakeBus() {
|
||||
pinModeFastSlew(ATN, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(ACK, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(RST, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(SEL, OUTPUT_OPENDRAIN);
|
||||
|
||||
pinMode(BSY, INPUT_PULLUP);
|
||||
pinMode(MSG, INPUT_PULLUP);
|
||||
pinMode(CD, INPUT_PULLUP);
|
||||
pinMode(IO, INPUT_PULLUP);
|
||||
pinMode(REQ, INPUT_PULLUP);
|
||||
|
||||
pinModeFastSlew(DB0, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB1, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB2, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB3, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB4, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB5, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB6, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB7, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB8, OUTPUT_OPENDRAIN);
|
||||
|
||||
SCSI_INITIATOR_INACTIVE();
|
||||
}
|
||||
|
||||
// Return the bus to floating, allowing other hosts to take over
|
||||
void initiatorReleaseBus() {
|
||||
// Input port
|
||||
pinMode(ATN, INPUT_PULLUP);
|
||||
pinMode(ACK, INPUT_PULLUP);
|
||||
pinMode(RST, INPUT_PULLUP);
|
||||
pinMode(SEL, INPUT_PULLUP);
|
||||
|
||||
// Output port
|
||||
pinModeFastSlew(BSY, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(MSG, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(CD, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(IO, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(REQ, OUTPUT_OPENDRAIN);
|
||||
|
||||
pinModeFastSlew(DB0, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB1, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB2, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB3, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB4, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB5, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB6, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB7, OUTPUT_OPENDRAIN);
|
||||
pinModeFastSlew(DB8, OUTPUT_OPENDRAIN);
|
||||
|
||||
// Turn off the output port
|
||||
SCSI_TARGET_INACTIVE();
|
||||
}
|
||||
|
||||
// Issue a bus reset
|
||||
void initiatorBusFree() {
|
||||
SET_RST_ACTIVE();
|
||||
delay(50);
|
||||
SET_RST_INACTIVE();
|
||||
delay(20);
|
||||
}
|
||||
|
||||
// Selection phase, assert Host & Target ID bits and assert SEL, wait for BSY to be asserted by the target, or timeout.
|
||||
int initiateSelection(uint8_t target_id, boolean withATN) {
|
||||
int timeout = 10000;
|
||||
|
||||
GPIOB_PDDR = SCSI_DB_MASK;
|
||||
SCSI_DB_OUTPUT((1 << target_id) | 0x80);
|
||||
|
||||
SET_SEL_ACTIVE();
|
||||
|
||||
while(timeout--) {
|
||||
delay(20);
|
||||
if(GET_BSY()) break;
|
||||
}
|
||||
|
||||
if(withATN) SET_ATN_ACTIVE();
|
||||
|
||||
SET_SEL_INACTIVE();
|
||||
|
||||
SCSI_DB_INPUT();
|
||||
|
||||
return GET_BSY();
|
||||
}
|
||||
|
||||
// Message Out phase, hold ATN asserted until the last message byte
|
||||
int initiateMessageOut(const uint8_t *buf, uint8_t len) {
|
||||
int timeout = 10000;
|
||||
|
||||
SET_ATN_ACTIVE();
|
||||
|
||||
while(timeout--) {
|
||||
delay(20);
|
||||
if(!GET_CD() && !GET_IO() && GET_MSG()) break;
|
||||
}
|
||||
|
||||
if(timeout > 0) {
|
||||
for(uint8_t x = 0; x < len; x++) {
|
||||
timeout = 10000;
|
||||
while(!GET_REQ() && (timeout--));
|
||||
if(!timeout) break;
|
||||
|
||||
GPIOB_PDDR = SCSI_DB_MASK;
|
||||
SCSI_DB_OUTPUT(buf[x]);
|
||||
|
||||
if((x + 1) == len)
|
||||
SET_ATN_INACTIVE();
|
||||
|
||||
SET_ACK_ACTIVE();
|
||||
timeout = 10000;
|
||||
while(GET_REQ() && (timeout--));
|
||||
SET_ACK_INACTIVE();
|
||||
if(!timeout) break;
|
||||
}
|
||||
}
|
||||
|
||||
SET_ATN_INACTIVE();
|
||||
|
||||
SCSI_DB_INPUT();
|
||||
|
||||
return (timeout > 0);
|
||||
}
|
||||
|
||||
// Message In phase, read a single byte from target once it's phase matches
|
||||
int initiateMessageIn(uint8_t *buf) {
|
||||
int timeout = 10000;
|
||||
|
||||
while(timeout--) {
|
||||
delay(20);
|
||||
if(!GET_CD() && GET_IO() && GET_MSG()) break;
|
||||
}
|
||||
|
||||
if(timeout > 0) {
|
||||
timeout = 10000;
|
||||
while(!GET_REQ() && (timeout--));
|
||||
if(!timeout) goto failed;
|
||||
|
||||
buf[0] = readIO();
|
||||
|
||||
SET_ACK_ACTIVE();
|
||||
timeout = 10000;
|
||||
while(GET_REQ() && (timeout--));
|
||||
SET_ACK_INACTIVE();
|
||||
}
|
||||
|
||||
failed:
|
||||
return (timeout > 0);
|
||||
}
|
||||
|
||||
// Command Out phase, tell the target what we want from it.
|
||||
int initiateCommandOut(const uint8_t *buf, uint8_t len) {
|
||||
int timeout = 10000;
|
||||
|
||||
while(timeout--) {
|
||||
delay(20);
|
||||
if(GET_CD() && !GET_IO() && !GET_MSG()) break;
|
||||
}
|
||||
|
||||
if(timeout > 0) {
|
||||
for(uint8_t x = 0; x < len; x++) {
|
||||
timeout = 10000;
|
||||
while(!GET_REQ() && (timeout--));
|
||||
if(!timeout) break;
|
||||
|
||||
GPIOB_PDDR = SCSI_DB_MASK;
|
||||
SCSI_DB_OUTPUT(buf[x]);
|
||||
|
||||
SET_ACK_ACTIVE();
|
||||
timeout = 10000;
|
||||
while(GET_REQ() && (timeout--));
|
||||
SET_ACK_INACTIVE();
|
||||
if(!timeout) break;
|
||||
}
|
||||
}
|
||||
|
||||
SCSI_DB_INPUT();
|
||||
|
||||
return (timeout > 0);
|
||||
}
|
||||
|
||||
// Data Out phase, send data to target
|
||||
int initiateDataOut(const uint8_t *buf, uint16_t len) {
|
||||
int timeout = 10000;
|
||||
|
||||
while(timeout--) {
|
||||
delay(20);
|
||||
if(!GET_CD() && !GET_IO() && !GET_MSG()) break;
|
||||
}
|
||||
|
||||
if(timeout > 0) {
|
||||
for(uint16_t x = 0; x < len; x++) {
|
||||
timeout = 10000;
|
||||
while(!GET_REQ() && (timeout--));
|
||||
if(!timeout) break;
|
||||
|
||||
GPIOB_PDDR = SCSI_DB_MASK;
|
||||
SCSI_DB_OUTPUT(buf[x]);
|
||||
|
||||
SET_ACK_ACTIVE();
|
||||
timeout = 10000;
|
||||
while(GET_REQ() && (timeout--));
|
||||
SET_ACK_INACTIVE();
|
||||
|
||||
if(!timeout) break;
|
||||
}
|
||||
}
|
||||
|
||||
SCSI_DB_INPUT();
|
||||
|
||||
return (timeout > 0);
|
||||
}
|
||||
|
||||
// Data In phase, get data from target
|
||||
int initiateDataIn(uint8_t *buf, uint16_t len) {
|
||||
int timeout = 10000;
|
||||
|
||||
while(timeout--) {
|
||||
delay(20);
|
||||
if(!GET_CD() && GET_IO() && !GET_MSG()) break;
|
||||
}
|
||||
|
||||
if(timeout > 0) {
|
||||
for(uint16_t x = 0; x < len; x++) {
|
||||
timeout = 10000;
|
||||
while(!GET_REQ() && (timeout--));
|
||||
if(!timeout) break;
|
||||
|
||||
buf[x] = readIO();
|
||||
|
||||
SET_ACK_ACTIVE();
|
||||
timeout = 10000;
|
||||
while(GET_REQ() && (timeout--));
|
||||
SET_ACK_INACTIVE();
|
||||
|
||||
if(!timeout) break;
|
||||
}
|
||||
}
|
||||
|
||||
return (timeout > 0);
|
||||
}
|
||||
|
||||
// Status In phase, read target's command status
|
||||
int initiateStatusIn(uint8_t *buf) {
|
||||
int timeout = 10000;
|
||||
|
||||
while(timeout--) {
|
||||
delay(20);
|
||||
if(GET_CD() && GET_IO() && !GET_MSG()) break;
|
||||
}
|
||||
|
||||
if(timeout > 0) {
|
||||
timeout = 10000;
|
||||
while(!GET_REQ() && (timeout--));
|
||||
if(!timeout) goto failed;
|
||||
|
||||
buf[0] = readIO();
|
||||
|
||||
SET_ACK_ACTIVE();
|
||||
timeout = 10000;
|
||||
while(GET_REQ() && (timeout--));
|
||||
SET_ACK_INACTIVE();
|
||||
}
|
||||
|
||||
failed:
|
||||
return (timeout > 0);
|
||||
}
|
||||
|
||||
int initiateReadCapacity(uint8_t target_id, uint32_t *blockSize, uint32_t *blockCount) {
|
||||
initiatorTakeBus();
|
||||
|
||||
// Select Target
|
||||
if(!initiateSelection(target_id, true)) goto failed;
|
||||
|
||||
// Select LUN 0
|
||||
m_buf[0] = 0x80;
|
||||
if(!initiateMessageOut(m_buf, 1)) goto failed;
|
||||
|
||||
// Execute Read Capacity
|
||||
memset(m_cmd, 0x00, 10);
|
||||
m_cmd[0] = CMD_READ_CAPACITY10;
|
||||
if(!initiateCommandOut(m_cmd, 10)) goto failed;
|
||||
|
||||
// Get Data Back
|
||||
if(!initiateDataIn(m_buf, 8)) goto failed;
|
||||
|
||||
*blockSize = (m_buf[0] << 24) | (m_buf[1] << 16) || (m_buf[2] << 8) | (m_buf[3] << 0);
|
||||
*blockCount = (m_buf[4] << 24) | (m_buf[5] << 16) || (m_buf[6] << 8) | (m_buf[7] << 0);
|
||||
|
||||
// Get Status
|
||||
if(!initiateStatusIn(m_buf)) goto failed;
|
||||
|
||||
// Get Messages
|
||||
if(!initiateMessageIn(m_buf)) goto failed;
|
||||
|
||||
return 1;
|
||||
|
||||
failed:
|
||||
initiatorBusFree();
|
||||
initiatorReleaseBus();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int initiateReadVolume(FsFile file, uint8_t target_id, uint32_t blockSize, uint32_t blockCount) {
|
||||
uint32_t pos = 0;
|
||||
initiatorTakeBus();
|
||||
|
||||
while(blockCount) {
|
||||
uint32_t blocks = min(blockCount, (MAX_BLOCKSIZE / blockSize));
|
||||
if(!initiateSelection(target_id, true)) goto failed;
|
||||
|
||||
// Select LUN 0
|
||||
m_buf[0] = 0x80;
|
||||
if(!initiateMessageOut(m_buf, 1)) goto failed;
|
||||
|
||||
// Execute Read
|
||||
memset(m_cmd, 0x00, 10);
|
||||
m_cmd[0] = CMD_READ10;
|
||||
m_cmd[2] = (pos >> 24) & 0xff;
|
||||
m_cmd[3] = (pos >> 16) & 0xff;
|
||||
m_cmd[4] = (pos >> 8) & 0xff;
|
||||
m_cmd[5] = (pos >> 0) & 0xff;
|
||||
m_cmd[6] = (blocks >> 8) & 0xff;
|
||||
m_cmd[7] = (blocks >> 0) & 0xff;
|
||||
if(!initiateCommandOut(m_cmd, 10)) goto failed;
|
||||
|
||||
// Get Data Back
|
||||
if(!initiateDataIn(m_buf, blockSize * blocks)) goto failed;
|
||||
|
||||
file.write(m_buf, blockSize * blocks);
|
||||
|
||||
// Get Status
|
||||
if(!initiateStatusIn(m_buf)) goto failed;
|
||||
|
||||
// Get Messages
|
||||
if(!initiateMessageIn(m_buf)) goto failed;
|
||||
|
||||
pos += blocks;
|
||||
blockCount -= blocks;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
failed:
|
||||
initiatorBusFree();
|
||||
initiatorReleaseBus();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dumpcmd(int argc, char **argv) {
|
||||
uint8_t target_id = 0xff;
|
||||
uint32_t blockSize, blockCount;
|
||||
char tmp_path[MAX_FILE_PATH+1];
|
||||
FsFile file;
|
||||
|
||||
if(argc < 3) {
|
||||
// Syntax error
|
||||
return;
|
||||
}
|
||||
|
||||
target_id = strtoul(argv[1], NULL, 0);
|
||||
if(target_id > 7) {
|
||||
Serial.print("ERROR");
|
||||
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
|
||||
Serial.printf(": SCSI ID '%s' is not within range.\r\n", argv[1]);
|
||||
return;
|
||||
}
|
||||
|
||||
fixupPath(tmp_path, argv[2]);
|
||||
if(strncmp(tmp_path, "/sd/", 4)) {
|
||||
Serial.print("ERROR");
|
||||
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
|
||||
Serial.printf(": Can only create images on the SD Card.\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!file.open(tmp_path+3, O_WRONLY | O_CREAT | O_TRUNC)) {
|
||||
Serial.print("ERROR");
|
||||
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
|
||||
Serial.printf(": Unable to open '%s'.\r\n", tmp_path);
|
||||
return;
|
||||
}
|
||||
|
||||
detachInterrupt(RST);
|
||||
detachInterrupt(SEL);
|
||||
|
||||
if(!initiateReadCapacity(target_id, &blockSize, &blockCount)) {
|
||||
Serial.print("ERROR");
|
||||
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
|
||||
Serial.printf(": Unable to read the capacity of SCSI target device.\r\n");
|
||||
} else {
|
||||
initiateReadVolume(file, target_id, blockSize, blockCount);
|
||||
}
|
||||
|
||||
attachInterrupt(RST, onBusReset, FALLING);
|
||||
attachInterrupt(SEL, SelectionPhaseISR, FALLING);
|
||||
|
||||
file.close();
|
||||
}
|
||||
|
||||
#endif
|
464
src/eggs.ino
Executable file
|
@ -0,0 +1,464 @@
|
|||
/*
|
||||
* Don't put all your eggs in one basket,
|
||||
*
|
||||
* I suggest you not read this file if you don't want to spoil all the fun,
|
||||
*
|
||||
* because spoiled eggs smell bad.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
/*
|
||||
* Based on SL version 5.02
|
||||
* Copyright 1993,1998,2014 Toyoda Masashi (mtoyoda@acm.org)
|
||||
* https://github.com/mtoyoda/sl
|
||||
*
|
||||
* Everyone is permitted to do anything on this program including copying,
|
||||
* modifying, and improving, unless you try to pretend that you wrote it.
|
||||
* i.e., the above copyright notice has to appear in all copies.
|
||||
* THE AUTHOR DISCLAIMS ANY RESPONSIBILITY WITH REGARD TO THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#define D51HEIGHT 10
|
||||
#define D51FUNNEL 7
|
||||
#define D51LENGTH 83
|
||||
#define D51PATTERNS 6
|
||||
|
||||
#define D51STR1 " ==== ________ ___________ "
|
||||
#define D51STR2 " _D _| |_______/ \\__I_I_____===__|_________| "
|
||||
#define D51STR3 " |(_)--- | H\\________/ | | =|___ ___| "
|
||||
#define D51STR4 " / | | H | | | | ||_| |_|| "
|
||||
#define D51STR5 " | | | H |__--------------------| [___] | "
|
||||
#define D51STR6 " | ________|___H__/__|_____/[][]~\\_______| | "
|
||||
#define D51STR7 " |/ | |-----------I_____I [][] [] D |=======|__ "
|
||||
|
||||
#define D51WHL11 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
|
||||
#define D51WHL12 " |/-=|___|= || || || |_____/~\\___/ "
|
||||
#define D51WHL13 " \\_/ \\O=====O=====O=====O_/ \\_/ "
|
||||
|
||||
#define D51WHL21 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
|
||||
#define D51WHL22 " |/-=|___|=O=====O=====O=====O |_____/~\\___/ "
|
||||
#define D51WHL23 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
|
||||
|
||||
#define D51WHL31 "__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__ "
|
||||
#define D51WHL32 " |/-=|___|= || || || |_____/~\\___/ "
|
||||
#define D51WHL33 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
|
||||
|
||||
#define D51WHL41 "__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__ "
|
||||
#define D51WHL42 " |/-=|___|= || || || |_____/~\\___/ "
|
||||
#define D51WHL43 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
|
||||
|
||||
#define D51WHL51 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
|
||||
#define D51WHL52 " |/-=|___|= O=====O=====O=====O|_____/~\\___/ "
|
||||
#define D51WHL53 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
|
||||
|
||||
#define D51WHL61 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
|
||||
#define D51WHL62 " |/-=|___|= || || || |_____/~\\___/ "
|
||||
#define D51WHL63 " \\_/ \\_O=====O=====O=====O/ \\_/ "
|
||||
|
||||
#define D51DEL " "
|
||||
|
||||
#define COAL01 " "
|
||||
#define COAL02 " "
|
||||
#define COAL03 " _________________ "
|
||||
#define COAL04 " _| \\_____A "
|
||||
#define COAL05 " =| | "
|
||||
#define COAL06 " -| | "
|
||||
#define COAL07 "__|________________________|_ "
|
||||
#define COAL08 "|__________________________|_ "
|
||||
#define COAL09 " |_D__D__D_| |_D__D__D_| "
|
||||
#define COAL10 " \\_/ \\_/ \\_/ \\_/ "
|
||||
|
||||
#define COALDEL " "
|
||||
|
||||
#define LOGOHEIGHT 6
|
||||
#define LOGOFUNNEL 4
|
||||
#define LOGOLENGTH 84
|
||||
#define LOGOPATTERNS 6
|
||||
|
||||
#define LOGO1 " ++ +------ "
|
||||
#define LOGO2 " || |+-+ | "
|
||||
#define LOGO3 " /---------|| | | "
|
||||
#define LOGO4 " + ======== +-+ | "
|
||||
|
||||
#define LWHL11 " _|--O========O~\\-+ "
|
||||
#define LWHL12 "//// \\_/ \\_/ "
|
||||
|
||||
#define LWHL21 " _|--/O========O\\-+ "
|
||||
#define LWHL22 "//// \\_/ \\_/ "
|
||||
|
||||
#define LWHL31 " _|--/~O========O-+ "
|
||||
#define LWHL32 "//// \\_/ \\_/ "
|
||||
|
||||
#define LWHL41 " _|--/~\\------/~\\-+ "
|
||||
#define LWHL42 "//// \\_O========O "
|
||||
|
||||
#define LWHL51 " _|--/~\\------/~\\-+ "
|
||||
#define LWHL52 "//// \\O========O/ "
|
||||
|
||||
#define LWHL61 " _|--/~\\------/~\\-+ "
|
||||
#define LWHL62 "//// O========O_/ "
|
||||
|
||||
#define LCOAL1 "____ "
|
||||
#define LCOAL2 "| \\@@@@@@@@@@@ "
|
||||
#define LCOAL3 "| \\@@@@@@@@@@@@@_ "
|
||||
#define LCOAL4 "| | "
|
||||
#define LCOAL5 "|__________________| "
|
||||
#define LCOAL6 " (O) (O) "
|
||||
|
||||
#define LCAR1 "____________________ "
|
||||
#define LCAR2 "| ___ ___ ___ ___ | "
|
||||
#define LCAR3 "| |_| |_| |_| |_| | "
|
||||
#define LCAR4 "|__________________| "
|
||||
#define LCAR5 "|__________________| "
|
||||
#define LCAR6 " (O) (O) "
|
||||
|
||||
#define DELLN " "
|
||||
|
||||
#define C51HEIGHT 11
|
||||
#define C51FUNNEL 7
|
||||
#define C51LENGTH 87
|
||||
#define C51PATTERNS 6
|
||||
|
||||
#define C51DEL " "
|
||||
|
||||
#define C51STR1 " ___ "
|
||||
#define C51STR2 " _|_|_ _ __ __ ___________"
|
||||
#define C51STR3 " D__/ \\_(_)___| |__H__| |_____I_Ii_()|_________|"
|
||||
#define C51STR4 " | `---' |:: `--' H `--' | |___ ___| "
|
||||
#define C51STR5 " +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_|| "
|
||||
#define C51STR6 " || | :: H +=====+ | |:: ...| "
|
||||
#define C51STR7 "| | _______|_::-----------------[][]-----| | "
|
||||
|
||||
#define C51WH61 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
|
||||
#define C51WH62 "------'|oOo|==[]=- || || | ||=======_|__"
|
||||
#define C51WH63 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| "
|
||||
#define C51WH64 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
|
||||
|
||||
#define C51WH51 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
|
||||
#define C51WH52 "------'|oOo|===[]=- || || | ||=======_|__"
|
||||
#define C51WH53 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| "
|
||||
#define C51WH54 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
|
||||
|
||||
#define C51WH41 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
|
||||
#define C51WH42 "------'|oOo|===[]=- O=======O=======O | ||=======_|__"
|
||||
#define C51WH43 "/~\\____|___|/~\\_| || || |__|+-/~\\_| "
|
||||
#define C51WH44 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
|
||||
|
||||
#define C51WH31 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
|
||||
#define C51WH32 "------'|oOo|==[]=- O=======O=======O | ||=======_|__"
|
||||
#define C51WH33 "/~\\____|___|/~\\_| || || |__|+-/~\\_| "
|
||||
#define C51WH34 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
|
||||
|
||||
#define C51WH21 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
|
||||
#define C51WH22 "------'|oOo|=[]=- O=======O=======O | ||=======_|__"
|
||||
#define C51WH23 "/~\\____|___|/~\\_| || || |__|+-/~\\_| "
|
||||
#define C51WH24 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
|
||||
|
||||
#define C51WH11 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
|
||||
#define C51WH12 "------'|oOo|=[]=- || || | ||=======_|__"
|
||||
#define C51WH13 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| "
|
||||
#define C51WH14 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
|
||||
|
||||
int ACCIDENT = 0;
|
||||
int LOGO = 0;
|
||||
int FLY = 0;
|
||||
int C51 = 0;
|
||||
#define COLS 80
|
||||
#define LINES 24
|
||||
|
||||
#define ERR -1
|
||||
#define OK 0
|
||||
|
||||
static char sB[LINES][COLS];
|
||||
static char tL[COLS+1];
|
||||
|
||||
static void refresh()
|
||||
{
|
||||
int fX, oX, lC;
|
||||
boolean pO;
|
||||
for(int y = 0; y < LINES; y++) {
|
||||
fX = 0; oX = 0; lC = 0; pO = false;
|
||||
for(int x = 0; x < COLS; x++) {
|
||||
if(!pO && (sB[y][x] != ' ')) { fX = x; pO = 1; }
|
||||
if(pO && (sB[y][x] != ' ')) { lC = oX+1; }
|
||||
if(pO) { tL[oX++] = sB[y][x]; }
|
||||
}
|
||||
tL[lC] = 0;
|
||||
Serial.printf("\x1b[%d;%dH\x1b[1K%s\x1b[K", y+1, fX+1, tL);
|
||||
}
|
||||
}
|
||||
|
||||
int mvaddch(int y, int x, char c)
|
||||
{
|
||||
if((y < 0) || (y >= LINES) || (x < 0) || (x >= COLS)) return ERR;
|
||||
if((c >= 0) && (c < ' ')) c = ' ';
|
||||
sB[y][x] = c;
|
||||
return OK;
|
||||
}
|
||||
|
||||
int my_mvaddstr(int y, int x, const char *str)
|
||||
{
|
||||
for ( ; x < 0; ++x, ++str)
|
||||
if (*str == '\0') return ERR;
|
||||
for ( ; *str != '\0'; ++str, ++x)
|
||||
if (mvaddch(y, x, *str) == ERR) return ERR;
|
||||
return OK;
|
||||
}
|
||||
|
||||
void option(char *str)
|
||||
{
|
||||
extern int ACCIDENT, LOGO, FLY, C51;
|
||||
|
||||
while (*str != '\0') {
|
||||
switch (*str++) {
|
||||
case 'a': ACCIDENT = 1; break;
|
||||
case 'F': FLY = 1; break;
|
||||
case 'l': LOGO = 1; break;
|
||||
case 'c': C51 = 1; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void slcmd(int argc, char *argv[])
|
||||
{
|
||||
int x, i;
|
||||
|
||||
ACCIDENT = 0;
|
||||
LOGO = 0;
|
||||
FLY = 0;
|
||||
C51 = 0;
|
||||
|
||||
for (i = 1; i < argc; ++i) {
|
||||
if (*argv[i] == '-') {
|
||||
option(argv[i] + 1);
|
||||
}
|
||||
}
|
||||
|
||||
for(int y = 0; y < LINES; y++) {
|
||||
for(int x = 0; x < COLS; x++) {
|
||||
sB[y][x] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
Serial.print("\x1b[?25l\x1b[2J\x1b[H");
|
||||
|
||||
for (x = COLS - 1; ; --x) {
|
||||
if (LOGO == 1) {
|
||||
if (add_sl(x) == ERR) break;
|
||||
}
|
||||
else if (C51 == 1) {
|
||||
if (add_C51(x) == ERR) break;
|
||||
}
|
||||
else {
|
||||
if (add_D51(x) == ERR) break;
|
||||
}
|
||||
refresh();
|
||||
delay(50);
|
||||
}
|
||||
|
||||
delay(125);
|
||||
Serial.print("\x1b[?25h\x1b[2J\x1b[H");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int add_sl(int x)
|
||||
{
|
||||
static const char *sl[LOGOPATTERNS][LOGOHEIGHT + 1]
|
||||
= {{LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN},
|
||||
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN},
|
||||
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN},
|
||||
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN},
|
||||
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN},
|
||||
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN}};
|
||||
|
||||
static const char *coal[LOGOHEIGHT + 1]
|
||||
= {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN};
|
||||
|
||||
static const char *car[LOGOHEIGHT + 1]
|
||||
= {LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN};
|
||||
|
||||
int i, y, py1 = 0, py2 = 0, py3 = 0;
|
||||
|
||||
if (x < - LOGOLENGTH) return ERR;
|
||||
y = LINES / 2 - 3;
|
||||
|
||||
if (FLY == 1) {
|
||||
y = (x / 6) + LINES - (COLS / 6) - LOGOHEIGHT;
|
||||
py1 = 2; py2 = 4; py3 = 6;
|
||||
}
|
||||
for (i = 0; i <= LOGOHEIGHT; ++i) {
|
||||
my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]);
|
||||
my_mvaddstr(y + i + py1, x + 21, coal[i]);
|
||||
my_mvaddstr(y + i + py2, x + 42, car[i]);
|
||||
my_mvaddstr(y + i + py3, x + 63, car[i]);
|
||||
}
|
||||
if (ACCIDENT == 1) {
|
||||
add_man(y + 1, x + 14);
|
||||
add_man(y + 1 + py2, x + 45); add_man(y + 1 + py2, x + 53);
|
||||
add_man(y + 1 + py3, x + 66); add_man(y + 1 + py3, x + 74);
|
||||
}
|
||||
add_smoke(y - 1, x + LOGOFUNNEL);
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
int add_D51(int x)
|
||||
{
|
||||
static const char *d51[D51PATTERNS][D51HEIGHT + 1]
|
||||
= {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
|
||||
D51WHL11, D51WHL12, D51WHL13, D51DEL},
|
||||
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
|
||||
D51WHL21, D51WHL22, D51WHL23, D51DEL},
|
||||
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
|
||||
D51WHL31, D51WHL32, D51WHL33, D51DEL},
|
||||
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
|
||||
D51WHL41, D51WHL42, D51WHL43, D51DEL},
|
||||
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
|
||||
D51WHL51, D51WHL52, D51WHL53, D51DEL},
|
||||
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
|
||||
D51WHL61, D51WHL62, D51WHL63, D51DEL}};
|
||||
static const char *coal[D51HEIGHT + 1]
|
||||
= {COAL01, COAL02, COAL03, COAL04, COAL05,
|
||||
COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL};
|
||||
|
||||
int y, i, dy = 0;
|
||||
|
||||
if (x < - D51LENGTH) return ERR;
|
||||
y = LINES / 2 - 5;
|
||||
|
||||
if (FLY == 1) {
|
||||
y = (x / 7) + LINES - (COLS / 7) - D51HEIGHT;
|
||||
dy = 1;
|
||||
}
|
||||
for (i = 0; i <= D51HEIGHT; ++i) {
|
||||
my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]);
|
||||
my_mvaddstr(y + i + dy, x + 53, coal[i]);
|
||||
}
|
||||
if (ACCIDENT == 1) {
|
||||
add_man(y + 2, x + 43);
|
||||
add_man(y + 2, x + 47);
|
||||
}
|
||||
add_smoke(y - 1, x + D51FUNNEL);
|
||||
return OK;
|
||||
}
|
||||
|
||||
int add_C51(int x)
|
||||
{
|
||||
static const char *c51[C51PATTERNS][C51HEIGHT + 1]
|
||||
= {{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
|
||||
C51WH11, C51WH12, C51WH13, C51WH14, C51DEL},
|
||||
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
|
||||
C51WH21, C51WH22, C51WH23, C51WH24, C51DEL},
|
||||
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
|
||||
C51WH31, C51WH32, C51WH33, C51WH34, C51DEL},
|
||||
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
|
||||
C51WH41, C51WH42, C51WH43, C51WH44, C51DEL},
|
||||
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
|
||||
C51WH51, C51WH52, C51WH53, C51WH54, C51DEL},
|
||||
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
|
||||
C51WH61, C51WH62, C51WH63, C51WH64, C51DEL}};
|
||||
static const char *coal[C51HEIGHT + 1]
|
||||
= {COALDEL, COAL01, COAL02, COAL03, COAL04, COAL05,
|
||||
COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL};
|
||||
|
||||
int y, i, dy = 0;
|
||||
|
||||
if (x < - C51LENGTH) return ERR;
|
||||
y = LINES / 2 - 5;
|
||||
|
||||
if (FLY == 1) {
|
||||
y = (x / 7) + LINES - (COLS / 7) - C51HEIGHT;
|
||||
dy = 1;
|
||||
}
|
||||
for (i = 0; i <= C51HEIGHT; ++i) {
|
||||
my_mvaddstr(y + i, x, c51[(C51LENGTH + x) % C51PATTERNS][i]);
|
||||
my_mvaddstr(y + i + dy, x + 55, coal[i]);
|
||||
}
|
||||
if (ACCIDENT == 1) {
|
||||
add_man(y + 3, x + 45);
|
||||
add_man(y + 3, x + 49);
|
||||
}
|
||||
add_smoke(y - 1, x + C51FUNNEL);
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
void add_man(int y, int x)
|
||||
{
|
||||
static const char *man[2][2] = {{"", "(O)"}, {"Help!", "\\O/"}};
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 2; ++i) {
|
||||
my_mvaddstr(y + i, x, man[(LOGOLENGTH + x) / 12 % 2][i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void add_smoke(int y, int x)
|
||||
#define SMOKEPTNS 16
|
||||
{
|
||||
static struct smokes {
|
||||
int y, x;
|
||||
int ptrn, kind;
|
||||
} S[1000];
|
||||
static int sum = 0;
|
||||
static const char *Smoke[2][SMOKEPTNS]
|
||||
= {{"( )", "( )", "( )", "( )", "( )",
|
||||
"( )" , "( )" , "( )" , "()" , "()" ,
|
||||
"O" , "O" , "O" , "O" , "O" ,
|
||||
" " },
|
||||
{"(@@@)", "(@@@@)", "(@@@@)", "(@@@)", "(@@)",
|
||||
"(@@)" , "(@)" , "(@)" , "@@" , "@@" ,
|
||||
"@" , "@" , "@" , "@" , "@" ,
|
||||
" " }};
|
||||
static const char *Eraser[SMOKEPTNS]
|
||||
= {" ", " ", " ", " ", " ",
|
||||
" " , " " , " " , " " , " " ,
|
||||
" " , " " , " " , " " , " " ,
|
||||
" " };
|
||||
static int dy[SMOKEPTNS] = { 2, 1, 1, 1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0 };
|
||||
static int dx[SMOKEPTNS] = {-2, -1, 0, 1, 1, 1, 1, 1, 2, 2,
|
||||
2, 2, 2, 3, 3, 3 };
|
||||
int i;
|
||||
|
||||
if (x % 4 == 0) {
|
||||
for (i = 0; i < sum; ++i) {
|
||||
my_mvaddstr(S[i].y, S[i].x, Eraser[S[i].ptrn]);
|
||||
S[i].y -= dy[S[i].ptrn];
|
||||
S[i].x += dx[S[i].ptrn];
|
||||
S[i].ptrn += (S[i].ptrn < SMOKEPTNS - 1) ? 1 : 0;
|
||||
my_mvaddstr(S[i].y, S[i].x, Smoke[S[i].kind][S[i].ptrn]);
|
||||
}
|
||||
my_mvaddstr(y, x, Smoke[sum % 2][0]);
|
||||
S[sum].y = y; S[sum].x = x;
|
||||
S[sum].ptrn = 0; S[sum].kind = sum % 2;
|
||||
sum ++;
|
||||
}
|
||||
}
|
||||
|
||||
void punishDirectory(int argc, char **argv) {
|
||||
Serial.printf("You seem to have made a mistake, let me fix that for you...\r\n");
|
||||
cmdDisplay();
|
||||
Serial.printf("l");
|
||||
delay(random(175,500));
|
||||
Serial.printf("s");
|
||||
delay(random(175,500));
|
||||
for(int i = 1; i < argc; i++) {
|
||||
Serial.printf(" ");
|
||||
delay(random(175,500));
|
||||
for(int x = 0; argv[i][x] != 0; x++) {
|
||||
Serial.printf("%c", argv[i][x]);
|
||||
delay(random(175,500));
|
||||
}
|
||||
}
|
||||
Serial.printf("\r\n");
|
||||
return showDirectory(argc, argv);
|
||||
}
|
523
src/general.ino
Executable file
|
@ -0,0 +1,523 @@
|
|||
#include "config.h"
|
||||
#include "scsi_defs.h"
|
||||
|
||||
|
||||
/*
|
||||
* INQUIRY command processing.
|
||||
*/
|
||||
void InquiryCommandHandler() {
|
||||
LOGN("[Inquiry]");
|
||||
uint8_t len;
|
||||
|
||||
if(!m_sel) {
|
||||
memset(m_responsebuffer, 0, 96);
|
||||
m_responsebuffer[0] = 0x7f;
|
||||
m_responsebuffer[4] = 35 - 4;
|
||||
len = 36;
|
||||
} else {
|
||||
memcpy(m_responsebuffer, m_sel->m_inquiryresponse, 96);
|
||||
len = m_responsebuffer[4] + 5;
|
||||
}
|
||||
|
||||
len = min(len, m_cmd[4]);
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
/*
|
||||
* REQUEST SENSE command processing.
|
||||
*/
|
||||
void RequestSenseCommandHandler() {
|
||||
LOGN("[RequestSense]");
|
||||
uint8_t len = m_cmd[4];
|
||||
uint8_t buf[18] = {
|
||||
0x70, //CheckCondition
|
||||
0, //Segment number
|
||||
0x00, //Sense key
|
||||
0, 0, 0, 0, //information
|
||||
17 - 7 , //Additional data length
|
||||
0,
|
||||
};
|
||||
|
||||
if(!m_sel) {
|
||||
buf[2] = 2; // Not ready
|
||||
buf[12] = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
buf[13] = 0x03;
|
||||
} else {
|
||||
buf[2] = m_sel->m_sense.m_key;
|
||||
buf[12] = m_sel->m_sense.m_code;
|
||||
buf[13] = m_sel->m_sense.m_key_specific[0];
|
||||
buf[14] = m_sel->m_sense.m_key_specific[1];
|
||||
buf[15] = m_sel->m_sense.m_key_specific[2];
|
||||
|
||||
m_sel->m_sense.m_key = 0;
|
||||
m_sel->m_sense.m_code = 0;
|
||||
m_sel->m_sense.m_key_specific[0] = 0;
|
||||
m_sel->m_sense.m_key_specific[1] = 0;
|
||||
m_sel->m_sense.m_key_specific[2] = 0;
|
||||
}
|
||||
|
||||
writeDataPhase(len < 18 ? len : 18, buf);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TestUnitCommandHandler() {
|
||||
LOGN("[TestUnit]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
return;
|
||||
}
|
||||
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||
return;
|
||||
}
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void RezeroUnitCommandHandler() {
|
||||
LOGN("[RezeroUnit]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
return;
|
||||
}
|
||||
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||
return;
|
||||
}
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void FormatUnitCommandHandler() {
|
||||
LOGN("[FormatUnit]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
return;
|
||||
}
|
||||
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||
return;
|
||||
}
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void ReassignBlocksCommandHandler() {
|
||||
LOGN("[ReassignBlocks]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
return;
|
||||
}
|
||||
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||
return;
|
||||
}
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
#if SUPPORT_APPLE
|
||||
void AppleEECommandHandler() {
|
||||
LOGN("[Apple:0xEE]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* MODE SENSE command processing.
|
||||
*/
|
||||
void ModeSenseCommandHandler()
|
||||
{
|
||||
uint16_t len, maxlen;
|
||||
int page, pagemax, pagemin;
|
||||
|
||||
switch(m_cmd[0]) {
|
||||
case CMD_MODE_SENSE6:
|
||||
LOGN("[ModeSense6]");
|
||||
maxlen = m_cmd[4];
|
||||
len = 1;
|
||||
break;
|
||||
case CMD_MODE_SENSE10:
|
||||
LOGN("[ModeSense10]");
|
||||
maxlen = ((uint16_t)m_cmd[7] << 8) | m_cmd[8];
|
||||
len = 2;
|
||||
break;
|
||||
default:
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check whether medium is present */
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
|
||||
|
||||
{
|
||||
/* Default medium type */
|
||||
m_responsebuffer[len++] = (m_sel->m_type == DEV_OPTICAL) ? 0xf0 : 0x00;
|
||||
/* Write protected */
|
||||
m_responsebuffer[len++] = (m_sel->m_type == DEV_OPTICAL) ? 0x80 : 0x00;
|
||||
|
||||
// ModeSense10 has two extra bytes, and Block Descriptor Length has an extra MSB
|
||||
if(m_cmd[0] == CMD_MODE_SENSE10) {
|
||||
len += 2;
|
||||
m_responsebuffer[len++] = 0;
|
||||
}
|
||||
|
||||
/* Add block descriptor if DBD is not set */
|
||||
if (m_cmd[1] & 0x08) {
|
||||
m_responsebuffer[len++] = 0; /* No block descriptor */
|
||||
} else {
|
||||
if(m_sel->m_type == DEV_TAPE) {
|
||||
m_responsebuffer[len++] = 8; /* Block descriptor length */
|
||||
m_responsebuffer[len++] = 0x40; /* Medium Density Code */
|
||||
m_responsebuffer[len++] = 0x00; /* Number of Blocks (0) */
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00; /* Block Length 1024 */
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x04;
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
} else {
|
||||
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
|
||||
m_responsebuffer[len++] = 8; /* Block descriptor length */
|
||||
m_responsebuffer[len++] = (capacity >> 24) & 0xff;
|
||||
m_responsebuffer[len++] = (capacity >> 16) & 0xff;
|
||||
m_responsebuffer[len++] = (capacity >> 8) & 0xff;
|
||||
m_responsebuffer[len++] = capacity & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize >> 24) & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize >> 16) & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize >> 8) & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize) & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for requested mode page */
|
||||
page = m_cmd[2] & 0x3F;
|
||||
pagemax = (page != 0x3f) ? page : 0x3e;
|
||||
pagemin = (page != 0x3f) ? page : 0x00;
|
||||
for(page = pagemax; page >= pagemin; page--) {
|
||||
switch (page) {
|
||||
case MODEPAGE_VENDOR_SPECIFIC:
|
||||
/* Accept request only for current values */
|
||||
if (m_cmd[2] & 0xC0) {
|
||||
//DEBUGPRINT(DBG_TRACE, " [2]==%d", m_cmd[2]);
|
||||
/* Prepare sense data */
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x02;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Unit attention */
|
||||
m_responsebuffer[len++] = 0x80; // PS, page id
|
||||
m_responsebuffer[len++] = 0x02; // Page length
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
break;
|
||||
case MODEPAGE_RW_ERROR_RECOVERY:
|
||||
if(m_cmd[2] & 0x40) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x02;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
m_responsebuffer[len++] = MODEPAGE_RW_ERROR_RECOVERY; // PS, page id
|
||||
m_responsebuffer[len++] = 0x0a; // Page length
|
||||
m_responsebuffer[len++] = 0x05; //
|
||||
m_responsebuffer[len++] = 0x00; // Read Retry Count
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Write Retry Count
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Recovery Time Limit
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
break;
|
||||
#if 0
|
||||
case MODEPAGE_DCRC_PARAMETERS:
|
||||
m_responsebuffer[len++] = 0x82; // PS, page id
|
||||
m_responsebuffer[len++] = 0x0e; // Page length
|
||||
m_responsebuffer[len++] = 0xe6; // Buffer full ratio, 90%
|
||||
m_responsebuffer[len++] = 0x1a; // Buffer empty ratio, 10%
|
||||
m_responsebuffer[len++] = 0x00; // Bus inactivity limit
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00; // Disconnect time limit
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00; // Connect time limit
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00; // Maximum burst size
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00; // EMDP, Dimm, DTDC
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
break;
|
||||
#endif
|
||||
#if SUPPORT_APPLE
|
||||
case MODEPAGE_APPLE:
|
||||
if( m_sel->m_quirks & QUIRKS_APPLE) {
|
||||
m_responsebuffer[len++] = 0xb0;
|
||||
m_responsebuffer[len++] = 0x16;
|
||||
m_responsebuffer[len++] = 'A';
|
||||
m_responsebuffer[len++] = 'P';
|
||||
m_responsebuffer[len++] = 'P';
|
||||
m_responsebuffer[len++] = 'L';
|
||||
m_responsebuffer[len++] = 'E';
|
||||
m_responsebuffer[len++] = ' ';
|
||||
m_responsebuffer[len++] = 'C';
|
||||
m_responsebuffer[len++] = 'O';
|
||||
m_responsebuffer[len++] = 'M';
|
||||
m_responsebuffer[len++] = 'P';
|
||||
m_responsebuffer[len++] = 'U';
|
||||
m_responsebuffer[len++] = 'T';
|
||||
m_responsebuffer[len++] = 'E';
|
||||
m_responsebuffer[len++] = 'R';
|
||||
m_responsebuffer[len++] = ',';
|
||||
m_responsebuffer[len++] = ' ';
|
||||
m_responsebuffer[len++] = 'I';
|
||||
m_responsebuffer[len++] = 'N';
|
||||
m_responsebuffer[len++] = 'C';
|
||||
m_responsebuffer[len++] = ' ';
|
||||
m_responsebuffer[len++] = ' ';
|
||||
m_responsebuffer[len++] = ' ';
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case MODEPAGE_FORMAT_PARAMETERS:
|
||||
m_responsebuffer[len + 0] = MODEPAGE_FORMAT_PARAMETERS; //Page code
|
||||
m_responsebuffer[len + 1] = 0x16; // Page length
|
||||
if((m_cmd[2] >> 6) != 1) {
|
||||
m_responsebuffer[len + 11] = 0x3F; // Number of sectors / track
|
||||
m_responsebuffer[len + 12] = (m_sel->m_blocksize >> 8) & 0xff; // Blocksize MSB
|
||||
m_responsebuffer[len + 13] = (m_sel->m_blocksize >> 0) & 0xff; // Blocksize LSB
|
||||
m_responsebuffer[len + 15] = 0x1; // Interleave
|
||||
}
|
||||
len += 24;
|
||||
break;
|
||||
case MODEPAGE_RIGID_GEOMETRY:
|
||||
m_responsebuffer[len + 0] = MODEPAGE_RIGID_GEOMETRY; //Page code
|
||||
m_responsebuffer[len + 1] = 0x16; // Page length
|
||||
if((m_cmd[2] >> 6) != 1) {
|
||||
m_responsebuffer[len + 2] = m_sel->m_cylinders >> 16; // Number of cylinders
|
||||
m_responsebuffer[len + 3] = m_sel->m_cylinders >> 8;
|
||||
m_responsebuffer[len + 4] = m_sel->m_cylinders;
|
||||
m_responsebuffer[len + 5] = m_sel->m_heads; // Number of heads
|
||||
memcpy(&m_responsebuffer[len + 6], &m_responsebuffer[len + 2], 3); // Write Precomp Cyl
|
||||
memcpy(&m_responsebuffer[len + 9], &m_responsebuffer[len + 2], 3); // Reduced Write Current Cyl
|
||||
m_responsebuffer[len + 20] = 0x1C; // 7200 RPM
|
||||
m_responsebuffer[len + 21] = 0x20;
|
||||
}
|
||||
len += 24;
|
||||
break;
|
||||
case MODEPAGE_FLEXIBLE_GEOMETRY:
|
||||
{
|
||||
m_responsebuffer[len + 0] = MODEPAGE_FLEXIBLE_GEOMETRY; //Page code
|
||||
m_responsebuffer[len + 1] = 0x1E; // Page length
|
||||
m_responsebuffer[len + 2] = 0x03; // Transfer rate 1mbit/s (MSB)
|
||||
m_responsebuffer[len + 3] = 0xE8; // Transfer rate 1mbit/s (LSB)
|
||||
m_responsebuffer[len + 4] = 16; // Number of heads
|
||||
m_responsebuffer[len + 5] = 18; // Sectors per track
|
||||
m_responsebuffer[len + 6] = 0x20; // Data bytes per sector (MSB)
|
||||
m_responsebuffer[len + 6] = 0x00; // Data bytes per sector (LSB)
|
||||
len += 24;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if(pagemin == pagemax) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x02;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Report size of requested data */
|
||||
if(m_cmd[0] == CMD_MODE_SENSE6) {
|
||||
m_responsebuffer[0] = len;
|
||||
} else {
|
||||
m_responsebuffer[0] = (len >> 8) & 0xff;
|
||||
m_responsebuffer[1] = len & 0xff;
|
||||
}
|
||||
|
||||
/* Truncate data if necessary */
|
||||
if (maxlen < len) {
|
||||
len = maxlen;
|
||||
}
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
}
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
uint8_t onModeSelectCommand() {
|
||||
return STATUS_GOOD;
|
||||
}
|
||||
|
||||
void ModeSelect6CommandHandler() {
|
||||
LOG("[ModeSelect6] ");
|
||||
uint16_t len = m_cmd[4];
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
if(len > MAX_BLOCKSIZE) {
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 4" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x04;
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
readDataPhase(len, m_responsebuffer);
|
||||
|
||||
for(int i = 1; i < len; i++ ) {
|
||||
LOG(":");
|
||||
LOGHEX2(m_responsebuffer[i]);
|
||||
}
|
||||
LOGN("");
|
||||
m_sts |= onModeSelectCommand();
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void ModeSelect10CommandHandler() {
|
||||
LOGN("[ModeSelect10]");
|
||||
uint16_t len = ((uint16_t)m_cmd[7] << 8) | m_cmd[8];
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
if(len > MAX_BLOCKSIZE) {
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 7" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x07;
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
readDataPhase(len, m_responsebuffer);
|
||||
|
||||
for(int i = 1; i < len; i++ ) {
|
||||
LOG(":");
|
||||
LOGHEX2(m_responsebuffer[i]);
|
||||
}
|
||||
LOGN("");
|
||||
m_sts |= onModeSelectCommand();
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void SearchDataEqualCommandHandler() {
|
||||
LOGN("[SearchDataEqual]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void SendDiagnosticCommandHandler() {
|
||||
LOGN("[SendDiagnostic]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
if(m_cmd[1] & 0x04) {
|
||||
} else {
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 1" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x01;
|
||||
m_sts |= STATUS_CHECK;
|
||||
}
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void ReadDefectCommandHandler() {
|
||||
LOGN("[ReadDefect]");
|
||||
m_responsebuffer[0] = 0x00;
|
||||
m_responsebuffer[1] = m_cmd[2];
|
||||
m_responsebuffer[2] = m_cmd[7]; // List Length MSB
|
||||
m_responsebuffer[3] = m_cmd[8]; // List Length LSB
|
||||
writeDataPhase(4, m_responsebuffer);
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void StartStopUnitCommandHandler() {
|
||||
LOGN("[StartStopUnit]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void PreAllowMediumRemovalCommandHandler() {
|
||||
LOGN("[PreAllowMed.Removal]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void PrefetchCommandHandler() {
|
||||
LOGN("[Prefetch]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void SyncCacheCommandHandler() {
|
||||
LOGN("[SyncCache]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void UnknownCommandHandler() {
|
||||
LOGN("[*Unknown]");
|
||||
m_sts |= STATUS_CHECK;
|
||||
if(m_sel) {
|
||||
m_sel->m_sense.m_key = 5;
|
||||
}
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void BadLunCommandHandler() {
|
||||
LOGN("[Bad LUN]");
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
1259
src/greenscsi.ino
Executable file
595
src/optical.ino
Executable file
|
@ -0,0 +1,595 @@
|
|||
#include "config.h"
|
||||
#include "scsi_defs.h"
|
||||
|
||||
#if SUPPORT_OPTICAL
|
||||
|
||||
static const uint8_t SessionTOC[] =
|
||||
{
|
||||
0x00, // toc length, MSB
|
||||
0x0A, // toc length, LSB
|
||||
0x01, // First session number
|
||||
0x01, // Last session number,
|
||||
// TRACK 1 Descriptor
|
||||
0x00, // reserved
|
||||
0x14, // Q sub-channel encodes current position, Digital track
|
||||
0x01, // First track number in last complete session
|
||||
0x00, // Reserved
|
||||
0x00,0x00,0x00,0x00 // LBA of first track in last session
|
||||
};
|
||||
|
||||
static const uint8_t FullTOC[] =
|
||||
{
|
||||
0x00, // toc length, MSB
|
||||
0x44, // toc length, LSB
|
||||
0x01, // First session number
|
||||
0x01, // Last session number,
|
||||
// A0 Descriptor
|
||||
0x01, // session number
|
||||
0x14, // ADR/Control
|
||||
0x00, // TNO
|
||||
0xA0, // POINT
|
||||
0x00, // Min
|
||||
0x00, // Sec
|
||||
0x00, // Frame
|
||||
0x00, // Zero
|
||||
0x01, // First Track number.
|
||||
0x00, // Disc type 00 = Mode 1
|
||||
0x00, // PFRAME
|
||||
// A1
|
||||
0x01, // session number
|
||||
0x14, // ADR/Control
|
||||
0x00, // TNO
|
||||
0xA1, // POINT
|
||||
0x00, // Min
|
||||
0x00, // Sec
|
||||
0x00, // Frame
|
||||
0x00, // Zero
|
||||
0x01, // Last Track number
|
||||
0x00, // PSEC
|
||||
0x00, // PFRAME
|
||||
// A2
|
||||
0x01, // session number
|
||||
0x14, // ADR/Control
|
||||
0x00, // TNO
|
||||
0xA2, // POINT
|
||||
0x00, // Min
|
||||
0x00, // Sec
|
||||
0x00, // Frame
|
||||
0x00, // Zero
|
||||
0x79, // LEADOUT position BCD
|
||||
0x59, // leadout PSEC BCD
|
||||
0x74, // leadout PFRAME BCD
|
||||
// TRACK 1 Descriptor
|
||||
0x01, // session number
|
||||
0x14, // ADR/Control
|
||||
0x00, // TNO
|
||||
0x01, // Point
|
||||
0x00, // Min
|
||||
0x00, // Sec
|
||||
0x00, // Frame
|
||||
0x00, // Zero
|
||||
0x00, // PMIN
|
||||
0x00, // PSEC
|
||||
0x00, // PFRAME
|
||||
// b0
|
||||
0x01, // session number
|
||||
0x54, // ADR/Control
|
||||
0x00, // TNO
|
||||
0xB1, // POINT
|
||||
0x79, // Min BCD
|
||||
0x59, // Sec BCD
|
||||
0x74, // Frame BCD
|
||||
0x00, // Zero
|
||||
0x79, // PMIN BCD
|
||||
0x59, // PSEC BCD
|
||||
0x74, // PFRAME BCD
|
||||
// c0
|
||||
0x01, // session number
|
||||
0x54, // ADR/Control
|
||||
0x00, // TNO
|
||||
0xC0, // POINT
|
||||
0x00, // Min
|
||||
0x00, // Sec
|
||||
0x00, // Frame
|
||||
0x00, // Zero
|
||||
0x00, // PMIN
|
||||
0x00, // PSEC
|
||||
0x00 // PFRAME
|
||||
};
|
||||
|
||||
static const uint8_t DiscInfoBlock[] =
|
||||
{
|
||||
0x00, // disc info length, MSB
|
||||
0x44, // disc info length, LSB
|
||||
0x0e, // DiscStatus = Complete
|
||||
0x01, // First Track on Disc
|
||||
0x01, // Sessions on Disc (LSB)
|
||||
0x01, // First Track in Last Session (LSB)
|
||||
0x01, // Last Track in Last Session (LSB)
|
||||
0x20, // DID_V DBC_V URU
|
||||
0x00, // Disc Type
|
||||
0x00, // Sessions on Disc (MSB)
|
||||
0x00, // First Track in Last Session (MSB)
|
||||
0x00, // Last Track in Last Session (MSB)
|
||||
0x00, // DiscID (MSB)
|
||||
0x00, // DiscID
|
||||
0x00, // DiscID
|
||||
0x00, // DiscID (LSB)
|
||||
0x00, // Last Session Lead-In Start (MSB)
|
||||
0x00, // IN MSF
|
||||
0x00, //
|
||||
0x00, // Last Session Lead-In Start (LSB)
|
||||
0x00, // Last Possible Lead-Out Start (MSB)
|
||||
0x00, // IN MSF
|
||||
0x00, //
|
||||
0x00, // Last Possible Lead-Out Start (LSB)
|
||||
0x00, // Bar Code (MSB)
|
||||
0x00, //
|
||||
0x00, //
|
||||
0x00, //
|
||||
0x00, //
|
||||
0x00, //
|
||||
0x00, //
|
||||
0x00, // Bar Code (LSB)
|
||||
0x00, // Reserved
|
||||
0x00, // Number of OPC Entries
|
||||
};
|
||||
|
||||
static void LBA2MSF(uint32_t LBA, uint8_t* MSF)
|
||||
{
|
||||
MSF[0] = 0; // reserved.
|
||||
MSF[3] = (uint32_t)(LBA % 75); // F
|
||||
uint32_t rem = LBA / 75;
|
||||
|
||||
MSF[2] = (uint32_t)(rem % 60); // S
|
||||
MSF[1] = (uint32_t)(rem / 60); // M
|
||||
}
|
||||
|
||||
void OpticalReadSimpleTOC()
|
||||
{
|
||||
int MSF = m_cmd[1] & 0x02 ? 1 : 0;
|
||||
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
|
||||
uint8_t len = 0;
|
||||
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
|
||||
|
||||
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
|
||||
m_responsebuffer[len++] = 0x00; // toc length, MSB
|
||||
m_responsebuffer[len++] = 0x00; // toc length, LSB
|
||||
m_responsebuffer[len++] = 0x01; // First track number
|
||||
m_responsebuffer[len++] = 0x01; // Last track number
|
||||
|
||||
// We only support track 1 and 0xaa (lead-out).
|
||||
// track 0 means "return all tracks"
|
||||
switch (m_cmd[6]) {
|
||||
case 0x00:
|
||||
case 0x01:
|
||||
m_responsebuffer[len++] = 0x00; // reserved
|
||||
m_responsebuffer[len++] = 0x14; // Q sub-channel encodes current position, Digital track
|
||||
m_responsebuffer[len++] = 0x01; // Track 1
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // MSB LBA
|
||||
m_responsebuffer[len++] = 0x00; //
|
||||
m_responsebuffer[len++] = 0x00; //
|
||||
m_responsebuffer[len++] = 0x00; // LSB LBA
|
||||
case 0xAA:
|
||||
m_responsebuffer[len++] = 0x00; // reserved
|
||||
m_responsebuffer[len++] = 0x14; // Q sub-channel encodes current position, Digital track
|
||||
m_responsebuffer[len++] = 0xAA; // Leadout Track
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
// Replace start of leadout track
|
||||
if (MSF)
|
||||
{
|
||||
LBA2MSF(capacity, m_responsebuffer + len);
|
||||
len+=4;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Track start sector (LBA)
|
||||
m_responsebuffer[len++] = capacity >> 24;
|
||||
m_responsebuffer[len++] = capacity >> 16;
|
||||
m_responsebuffer[len++] = capacity >> 8;
|
||||
m_responsebuffer[len++] = capacity;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 6
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x06;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
m_responsebuffer[0] = (len >> 8) & 0xff;
|
||||
m_responsebuffer[1] = len & 0xff;
|
||||
|
||||
// Truncate if necessary
|
||||
if(allocationLength < len)
|
||||
len = allocationLength;
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void OpticalReadSessionInfo()
|
||||
{
|
||||
// int MSF = m_cmd[1] & 0x02 ? 1 : 0;
|
||||
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
|
||||
uint32_t len = sizeof(SessionTOC);
|
||||
memcpy(m_responsebuffer, SessionTOC, len);
|
||||
|
||||
// Truncate if necessary
|
||||
if(allocationLength < len)
|
||||
len = allocationLength;
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
uint8_t fromBCD(uint8_t val)
|
||||
{
|
||||
return ((val >> 4) * 10) + (val & 0xF);
|
||||
}
|
||||
|
||||
void OpticalReadFullTOC(int convertBCD)
|
||||
{
|
||||
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
|
||||
// We only support session 1.
|
||||
if (m_cmd[6] > 1) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 6
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x06;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t len = sizeof(FullTOC);
|
||||
memcpy(m_responsebuffer, FullTOC, len);
|
||||
|
||||
if (convertBCD)
|
||||
{
|
||||
uint32_t descriptor = 4;
|
||||
while (descriptor < len)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 7; ++i)
|
||||
{
|
||||
m_responsebuffer[descriptor + i] =
|
||||
fromBCD(m_responsebuffer[descriptor + 4 + i]);
|
||||
}
|
||||
descriptor += 11;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Truncate if necessary
|
||||
if(allocationLength < len)
|
||||
len = allocationLength;
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void OpticalReadTOCCommandHandler()
|
||||
{
|
||||
LOGN("[Read TOC]");
|
||||
switch(m_cmd[2] & 0xf) {
|
||||
case 0:
|
||||
LOGN("Simple");
|
||||
OpticalReadSimpleTOC();
|
||||
return;
|
||||
case 1:
|
||||
LOGN("Session");
|
||||
OpticalReadSessionInfo();
|
||||
return;
|
||||
case 2:
|
||||
LOGN("Full 0");
|
||||
OpticalReadFullTOC(0);
|
||||
return;
|
||||
case 3:
|
||||
LOGN("Full 1");
|
||||
OpticalReadFullTOC(1);
|
||||
return;
|
||||
}
|
||||
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 2
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x02;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
static uint8_t SimpleHeader[] =
|
||||
{
|
||||
0x01, // 2048byte user data, L-EC in 288 byte aux field.
|
||||
0x00, // reserved
|
||||
0x00, // reserved
|
||||
0x00, // reserved
|
||||
0x00,0x00,0x00,0x00 // Track start sector (LBA or MSF)
|
||||
};
|
||||
|
||||
void OpticalHeaderCommandHandler()
|
||||
{
|
||||
uint32_t len = sizeof(SimpleHeader);
|
||||
memcpy(m_responsebuffer, SimpleHeader, len);
|
||||
|
||||
LOGN("[Read Header]");
|
||||
|
||||
//int MSF = m_cmd[1] & 0x02 ? 1 : 0;
|
||||
//uint32_t lba = 0;
|
||||
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
|
||||
|
||||
// Truncate if necessary
|
||||
if(allocationLength < len)
|
||||
len = allocationLength;
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
|
||||
void OpticalReadDiscInfoCommandHandler()
|
||||
{
|
||||
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
|
||||
uint32_t len = sizeof(DiscInfoBlock);
|
||||
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
|
||||
memcpy(m_responsebuffer, DiscInfoBlock, len);
|
||||
|
||||
LOGN("[DiscInfo]");
|
||||
|
||||
// Truncate if necessary
|
||||
if(allocationLength < len)
|
||||
len = allocationLength;
|
||||
|
||||
LBA2MSF(capacity, m_responsebuffer + 20);
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
uint16_t SupportedFeatures[] = {
|
||||
0x0001, // Core Features
|
||||
0x0003, // Removable Media
|
||||
0x0010, // Random Readable
|
||||
0x001D, // Reads all Media Types
|
||||
0x001E, // Reads CD Structures
|
||||
};
|
||||
|
||||
void OpticalGetConfigurationCommandHandler()
|
||||
{
|
||||
uint16_t sfn = (m_cmd[2] << 8) | m_cmd[3];
|
||||
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
|
||||
uint16_t sfnmax = (allocationLength - 8) / 4;
|
||||
uint16_t sfi = 0;
|
||||
uint8_t len;
|
||||
|
||||
LOGN("[GetConfiguration]");
|
||||
|
||||
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
|
||||
|
||||
switch(m_cmd[1] & 0x3) {
|
||||
case 0: {
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
sfnmax = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
len = 8;
|
||||
for(sfi = 0; (sfi < sizeof(SupportedFeatures)) && sfnmax; sfi++) {
|
||||
if( SupportedFeatures[sfi] > sfn ) {
|
||||
m_responsebuffer[len++] = (SupportedFeatures[sfi] >> 8) & 0xff;
|
||||
m_responsebuffer[len++] = SupportedFeatures[sfi] & 0xff;
|
||||
m_responsebuffer[len++] = 0;
|
||||
m_responsebuffer[len++] = 0;
|
||||
sfnmax--;
|
||||
}
|
||||
}
|
||||
|
||||
m_responsebuffer[0] = (len >> 24) & 0xff;
|
||||
m_responsebuffer[1] = (len >> 16) & 0xff;
|
||||
m_responsebuffer[2] = (len >> 8) & 0xff;
|
||||
m_responsebuffer[3] = (len) & 0xff;
|
||||
|
||||
m_responsebuffer[6] = 0x00; // CD-ROM Profile
|
||||
m_responsebuffer[7] = 0x08;
|
||||
|
||||
// Truncate if necessary
|
||||
if(allocationLength < len)
|
||||
len = allocationLength;
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
|
||||
void OpticalEventStatusCommandHandler()
|
||||
{
|
||||
uint8_t len = 0;
|
||||
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
|
||||
|
||||
LOGN("[Read Event Status]");
|
||||
|
||||
if((m_cmd[1] & 1) == 0) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 1
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x01;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
int ncr;
|
||||
for(ncr = 0; ncr < 8; ncr++) {
|
||||
if(m_cmd[4] & (1<<ncr)) {
|
||||
switch (ncr) {
|
||||
case 1:
|
||||
m_responsebuffer[len++] = 0x00; // MSB Descriptor Length
|
||||
m_responsebuffer[len++] = 0x06; // LSB
|
||||
m_responsebuffer[len++] = 0x02; // Operational Change Event
|
||||
m_responsebuffer[len++] = 0x12; // Supported Event Class
|
||||
m_responsebuffer[len++] = 0x00; // No Change
|
||||
m_responsebuffer[len++] = 0x00; // Operational Status
|
||||
m_responsebuffer[len++] = 0x00; // MSB Operational Change
|
||||
m_responsebuffer[len++] = 0x00; // LSB
|
||||
break;
|
||||
case 4:
|
||||
m_responsebuffer[len++] = 0x00; // MSB Descriptor Length
|
||||
m_responsebuffer[len++] = 0x06; // LSB
|
||||
m_responsebuffer[len++] = 0x04; // Media Change Event
|
||||
m_responsebuffer[len++] = 0x12; // Supported Event Class
|
||||
m_responsebuffer[len++] = 0x00; // No Change
|
||||
m_responsebuffer[len++] = (!m_sel) ? 0x00 : 0x02; // Media Present
|
||||
m_responsebuffer[len++] = 0x00; // Start Slot
|
||||
m_responsebuffer[len++] = 0x00; // End Slot
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
|
||||
|
||||
// Truncate if necessary
|
||||
if(allocationLength < len)
|
||||
len = allocationLength;
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void OpticalLockTrayCommandHandler() {
|
||||
if(m_cmd[4] & 1) {
|
||||
LOGN("[Lock Tray]");
|
||||
} else {
|
||||
LOGN("[Unlock Tray]");
|
||||
}
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void OpticalReadCapacityCommandHandler() {
|
||||
LOGN("[ReadCapacity]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_sel->m_sense.m_key_specific[0] = 0x04;
|
||||
m_sel->m_sense.m_key_specific[1] = 0x03;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[3] = 0x00;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t bl = m_sel->m_blocksize;
|
||||
uint32_t bc = m_sel->m_fileSize / bl;
|
||||
uint8_t buf[8] = {
|
||||
(uint8_t)(((uint32_t)(bc >> 24))&0xff), (uint8_t)(((uint32_t)(bc >> 16))&0xff), (uint8_t)(((uint32_t)(bc >> 8))&0xff), (uint8_t)(((uint32_t)(bc))&0xff),
|
||||
(uint8_t)(((uint32_t)(bl >> 24))&0xff), (uint8_t)(((uint32_t)(bl >> 16))&0xff), (uint8_t)(((uint32_t)(bl >> 8))&0xff), (uint8_t)(((uint32_t)(bl))&0xff)
|
||||
};
|
||||
writeDataPhase(8, buf);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void ConfigureOpticalHandlers(VirtualDevice_t *vdev) {
|
||||
for(int c = 0; c < 256; c++)
|
||||
vdev->m_handler[c] = &UnknownCommandHandler;
|
||||
|
||||
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REZERO_UNIT] = &RezeroUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
|
||||
vdev->m_handler[CMD_READ6] = &Read6CommandHandler;
|
||||
vdev->m_handler[CMD_SEEK6] = &Seek6CommandHandler;
|
||||
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SELECT6] = &ModeSelect6CommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SENSE6] = &ModeSenseCommandHandler;
|
||||
vdev->m_handler[CMD_START_STOP_UNIT] = &StartStopUnitCommandHandler;
|
||||
vdev->m_handler[CMD_PREVENT_REMOVAL] = &OpticalLockTrayCommandHandler;
|
||||
vdev->m_handler[CMD_READ_CAPACITY10] = &OpticalReadCapacityCommandHandler;
|
||||
vdev->m_handler[CMD_READ10] = &Read10CommandHandler;
|
||||
vdev->m_handler[CMD_SEEK10] = &Seek10CommandHandler;
|
||||
vdev->m_handler[CMD_READ_TOC] = &OpticalReadTOCCommandHandler;
|
||||
vdev->m_handler[CMD_READ_HEADER] = &OpticalHeaderCommandHandler;
|
||||
//vdev->m_handler[CMD_GET_CONFIGURATION] = &OpticalGetConfigurationCommandHandler;
|
||||
vdev->m_handler[CMD_SEND_DIAGNOSTIC] = &SendDiagnosticCommandHandler;
|
||||
vdev->m_handler[CMD_GET_EVENT_STATUS_NOTIFICATION] = &OpticalEventStatusCommandHandler;
|
||||
vdev->m_handler[CMD_READ_DISC_INFORMATION] = &OpticalReadDiscInfoCommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SELECT10] = &ModeSelect10CommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SENSE10] = &ModeSenseCommandHandler;
|
||||
}
|
||||
|
||||
// If config file exists, read the first three lines and copy the contents.
|
||||
// File must be well formed or you will get junk in the SCSI Vendor fields.
|
||||
void ConfigureOptical(VirtualDevice_t *vdev, const char *image_name) {
|
||||
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
|
||||
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_OPTICAL) {
|
||||
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(image_name) {
|
||||
char configname[MAX_FILE_PATH+1];
|
||||
memcpy(configname, image_name, MAX_FILE_PATH+1);
|
||||
char *psuffix = strstr(configname, ".img");
|
||||
if(psuffix) {
|
||||
strcpy(psuffix, ".cfg");
|
||||
} else {
|
||||
sprintf(configname, "cd%d%d.cfg", vdev->m_id, vdev->m_lun);
|
||||
}
|
||||
|
||||
FsFile config_file = sd.open(configname, O_RDONLY);
|
||||
if (config_file.isOpen()) {
|
||||
char vendor[9];
|
||||
memset(vendor, 0, sizeof(vendor));
|
||||
config_file.readBytes(vendor, sizeof(vendor));
|
||||
LOGN("SCSI VENDOR: ");
|
||||
LOGN(vendor);
|
||||
memcpy(&(vdev->m_inquiryresponse[8]), vendor, 8);
|
||||
|
||||
char product[17];
|
||||
memset(product, 0, sizeof(product));
|
||||
config_file.readBytes(product, sizeof(product));
|
||||
LOGN("SCSI PRODUCT: ");
|
||||
LOGN(product);
|
||||
memcpy(&(vdev->m_inquiryresponse[16]), product, 16);
|
||||
|
||||
char version[5];
|
||||
memset(version, 0, sizeof(version));
|
||||
config_file.readBytes(version, sizeof(version));
|
||||
LOGN("SCSI VERSION: ");
|
||||
LOGN(version);
|
||||
memcpy(&(vdev->m_inquiryresponse[32]), version, 4);
|
||||
config_file.close();
|
||||
}
|
||||
}
|
||||
|
||||
vdev->m_type = DEV_OPTICAL;
|
||||
ConfigureOpticalHandlers(vdev);
|
||||
}
|
||||
|
||||
#endif
|
62
src/partitions.ino
Executable file
|
@ -0,0 +1,62 @@
|
|||
#if 0
|
||||
#include "config.h"
|
||||
#include "cmd.h"
|
||||
|
||||
typedef struct PartType_s {
|
||||
unsigned char Type;
|
||||
const char *Name;
|
||||
} PartType_t;
|
||||
PartType_t PartType[] = {
|
||||
{ 0x00, "Empty" },
|
||||
{ 0x01, "FAT12" },
|
||||
{ 0x04, "FAT16 <32MB" },
|
||||
{ 0x05, "Extended" },
|
||||
{ 0x06, "FAT16 >32MB" },
|
||||
{ 0x07, "NTFS" },
|
||||
{ 0x0b, "FAT32" },
|
||||
{ 0x0c, "FAT32 LBA" },
|
||||
{ 0x0e, "FAT16 LBA" },
|
||||
{ 0x0f, "Extended LBA" },
|
||||
{ 0xf8, "TinySCSI Disk LUN" },
|
||||
{ 0xf9, "TinySCSI Optical LUN" },
|
||||
{ 0xff, NULL }
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Public domain MBR boot manager from https://github.com/egormkn/mbr-boot-manager
|
||||
*/
|
||||
uint8_t mbr_bin[512] = {
|
||||
0xFA, 0xBC, 0x00, 0x7C, 0x31, 0xC0, 0x8E, 0xD0, 0x8E, 0xC0, 0x8E, 0xD8, 0x52, 0xBE, 0x00, 0x7C,
|
||||
0xBF, 0x00, 0x06, 0xB9, 0x00, 0x02, 0xFC, 0xF3, 0xA4, 0xE9, 0x00, 0x8A, 0xFB, 0xB8, 0x03, 0x00,
|
||||
0xCD, 0x10, 0xB8, 0x00, 0x06, 0xB7, 0x02, 0x31, 0xC9, 0xBA, 0x4F, 0x18, 0xCD, 0x10, 0xB8, 0x03,
|
||||
0x01, 0xB9, 0x05, 0x01, 0xCD, 0x10, 0xB9, 0x04, 0x00, 0xBD, 0xEE, 0x07, 0x31, 0xDB, 0x55, 0x80,
|
||||
0x7E, 0x00, 0x80, 0x75, 0x02, 0x88, 0xCB, 0xB4, 0x02, 0xBA, 0x22, 0x08, 0x00, 0xCE, 0xCD, 0x10,
|
||||
0xBE, 0x8D, 0x07, 0xE8, 0x2B, 0x01, 0xB0, 0x30, 0x00, 0xC8, 0xB4, 0x0E, 0xCD, 0x10, 0x38, 0xCB,
|
||||
0x75, 0x06, 0xBE, 0x98, 0x07, 0xE8, 0x19, 0x01, 0x5D, 0x83, 0xED, 0x10, 0xE2, 0xD0, 0x38, 0xFB,
|
||||
0x75, 0x03, 0x43, 0xEB, 0x0A, 0xB4, 0x02, 0xCD, 0x16, 0x24, 0x03, 0x38, 0xF8, 0x74, 0x51, 0xB4,
|
||||
0x02, 0xBA, 0x20, 0x08, 0x00, 0xDE, 0xCD, 0x10, 0x88, 0xFC, 0xCD, 0x16, 0x3D, 0x00, 0x48, 0x74,
|
||||
0x11, 0x3D, 0x00, 0x50, 0x74, 0x14, 0x3D, 0x1B, 0x01, 0x74, 0x2D, 0x3D, 0x0D, 0x1C, 0x74, 0x30,
|
||||
0xEB, 0xDD, 0x80, 0xFB, 0x01, 0x7E, 0x01, 0x4B, 0xEB, 0xD5, 0x80, 0xFB, 0x04, 0x73, 0x01, 0x43,
|
||||
0xEB, 0xCD, 0xBE, 0x9D, 0x07, 0xE8, 0xC9, 0x00, 0xB8, 0x00, 0x86, 0xB9, 0x2D, 0x00, 0x31, 0xD2,
|
||||
0xCD, 0x15, 0xEB, 0x04, 0xCD, 0x18, 0xCD, 0x19, 0xEA, 0x00, 0x00, 0xFF, 0xFF, 0xF4, 0xEB, 0xFD,
|
||||
0x53, 0xB4, 0x02, 0xBA, 0x01, 0x01, 0xCD, 0x10, 0xB8, 0x00, 0x06, 0xB7, 0x02, 0x31, 0xC9, 0xBA,
|
||||
0x4F, 0x18, 0xCD, 0x10, 0xBD, 0xAE, 0x07, 0x5B, 0xC1, 0xE3, 0x04, 0x01, 0xDD, 0x5A, 0x88, 0x56,
|
||||
0x00, 0x55, 0xC6, 0x46, 0x11, 0x05, 0x88, 0x7E, 0x10, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13,
|
||||
0x5D, 0x72, 0x0F, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x09, 0xF7, 0xC1, 0x01, 0x00, 0x74, 0x03, 0xFE,
|
||||
0x46, 0x10, 0x66, 0x60, 0x80, 0x7E, 0x0A, 0x00, 0x74, 0x20, 0x66, 0x6A, 0x00, 0x66, 0xFF, 0x76,
|
||||
0x08, 0x6A, 0x00, 0x68, 0x00, 0x7C, 0x6A, 0x01, 0x6A, 0x10, 0xB4, 0x42, 0x8A, 0x56, 0x00, 0x89,
|
||||
0xE6, 0xCD, 0x13, 0x9F, 0x83, 0xC4, 0x10, 0x9E, 0xEB, 0x14, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x7C,
|
||||
0x8A, 0x56, 0x00, 0x8A, 0x76, 0x01, 0x8A, 0x4E, 0x02, 0x8A, 0x6E, 0x03, 0xCD, 0x13, 0x66, 0x61,
|
||||
0x73, 0x12, 0xFE, 0x4E, 0x11, 0x0F, 0x84, 0x59, 0xFF, 0x55, 0x30, 0xE4, 0x8A, 0x56, 0x00, 0xCD,
|
||||
0x13, 0x5D, 0xEB, 0xAE, 0x81, 0x3E, 0xFE, 0x7D, 0x55, 0xAA, 0x0F, 0x85, 0x44, 0xFF, 0x83, 0x3E,
|
||||
0x00, 0x7C, 0x00, 0x0F, 0x84, 0x3B, 0xFF, 0x8B, 0x56, 0x00, 0x30, 0xF6, 0xEA, 0x00, 0x7C, 0x00,
|
||||
0x00, 0xB4, 0x0E, 0xAC, 0x3C, 0x00, 0x74, 0x04, 0xCD, 0x10, 0xEB, 0xF7, 0xC3, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x00, 0x20, 0x28, 0x41, 0x29, 0x00, 0x42, 0x6F, 0x6F,
|
||||
0x74, 0x20, 0x73, 0x65, 0x63, 0x74, 0x6F, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x0D, 0x0A,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA
|
||||
};
|
60
src/sasi.ino
Executable file
|
@ -0,0 +1,60 @@
|
|||
#include "config.h"
|
||||
#include "scsi_defs.h"
|
||||
|
||||
#if SUPPORT_SASI
|
||||
|
||||
/*
|
||||
* dtc510b_setDriveparameter
|
||||
*/
|
||||
#define PACKED __attribute__((packed))
|
||||
typedef struct PACKED dtc500_cmd_c2_param_struct
|
||||
{
|
||||
uint8_t StepPlusWidth; // Default is 13.6usec (11)
|
||||
uint8_t StepPeriod; // Default is 3 msec.(60)
|
||||
uint8_t StepMode; // Default is Bufferd (0)
|
||||
uint8_t MaximumHeadAdress; // Default is 4 heads (3)
|
||||
uint8_t HighCylinderAddressuint8_t; // Default set to 0 (0)
|
||||
uint8_t LowCylinderAddressuint8_t; // Default is 153 cylinders (152)
|
||||
uint8_t ReduceWrietCurrent; // Default is above Cylinder 128 (127)
|
||||
uint8_t DriveType_SeekCompleteOption;// (0)
|
||||
uint8_t Reserved8; // (0)
|
||||
uint8_t Reserved9; // (0)
|
||||
} DTC510_CMD_C2_PARAM;
|
||||
|
||||
static void logStrHex(const char *msg,uint32_t num)
|
||||
{
|
||||
LOG(msg);
|
||||
LOGHEX6N(num);
|
||||
}
|
||||
|
||||
void DTCsetDriveParameterCommandHandler() {
|
||||
LOGN("[DTC510B setDriveParameter]");
|
||||
|
||||
DTC510_CMD_C2_PARAM DriveParameter;
|
||||
uint16_t maxCylinder;
|
||||
uint16_t numLAD;
|
||||
//uint32_t stepPulseUsec;
|
||||
int StepPeriodMsec;
|
||||
|
||||
// receive paramter
|
||||
writeDataPhase(sizeof(DriveParameter),(uint8_t *)(&DriveParameter));
|
||||
|
||||
maxCylinder =
|
||||
(((uint16_t)DriveParameter.HighCylinderAddressuint8_t)<<8) |
|
||||
(DriveParameter.LowCylinderAddressuint8_t);
|
||||
numLAD = maxCylinder * (DriveParameter.MaximumHeadAdress+1);
|
||||
//stepPulseUsec = calcStepPulseUsec(DriveParameter.StepPlusWidth);
|
||||
StepPeriodMsec = DriveParameter.StepPeriod*50;
|
||||
logStrHex (" StepPlusWidth : ",DriveParameter.StepPlusWidth);
|
||||
logStrHex (" StepPeriod : ",DriveParameter.StepPeriod );
|
||||
logStrHex (" StepMode : ",DriveParameter.StepMode );
|
||||
logStrHex (" MaximumHeadAdress : ",DriveParameter.MaximumHeadAdress);
|
||||
logStrHex (" CylinderAddress : ",maxCylinder);
|
||||
logStrHex (" ReduceWrietCurrent : ",DriveParameter.ReduceWrietCurrent);
|
||||
logStrHex (" DriveType/SeekCompleteOption : ",DriveParameter.DriveType_SeekCompleteOption);
|
||||
logStrHex (" Maximum LAD : ",numLAD-1);
|
||||
m_sts = 0;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
#endif
|
181
src/scsi_defs.h
Executable file
|
@ -0,0 +1,181 @@
|
|||
#ifndef __SCSI_DEFS_H
|
||||
#define __SCSI_DEFS_H
|
||||
|
||||
/* Mode pages */
|
||||
#define MODEPAGE_VENDOR_SPECIFIC 0x00
|
||||
#define MODEPAGE_RW_ERROR_RECOVERY 0x01
|
||||
#define MODEPAGE_DCRC_PARAMETERS 0x02
|
||||
#define MODEPAGE_FORMAT_PARAMETERS 0x03
|
||||
#define MODEPAGE_RIGID_GEOMETRY 0x04
|
||||
#define MODEPAGE_FLEXIBLE_GEOMETRY 0x05
|
||||
#define MODEPAGE_APPLE 0x30
|
||||
#define MODEPAGE_ALL_PAGES 0x3F
|
||||
|
||||
/* 6 Byte command opcodes */
|
||||
#define CMD_TEST_UNIT_READY 0x00
|
||||
#define CMD_REZERO_UNIT 0x01
|
||||
#define CMD_REQUEST_SENSE 0x03
|
||||
#define CMD_FORMAT_UNIT 0x04
|
||||
#define CMD_READ_BLOCK_LIMITS 0x05
|
||||
#define CMD_FORMAT_UNIT_ALT 0x06
|
||||
#define CMD_REASSIGN_BLOCKS 0x07
|
||||
#define CMD_READ6 0x08
|
||||
#define CMD_WRITE6 0x0A /* Optional */
|
||||
#define CMD_SEEK6 0x0B /* Optional */
|
||||
|
||||
#define CMD_WRITE_FILEMARKS 0x10
|
||||
#define CMD_SPACE 0x11
|
||||
#define CMD_INQUIRY 0x12
|
||||
#define CMD_MODE_SELECT6 0x15 /* Optional */
|
||||
#define CMD_RESERVE6 0x16 /* Optional */
|
||||
#define CMD_RELEASE6 0x17 /* Optional */
|
||||
#define CMD_ERASE 0x19
|
||||
#define CMD_MODE_SENSE6 0x1A /* Optional */
|
||||
#define CMD_START_STOP_UNIT 0x1B /* Optional */
|
||||
#define CMD_RECV_DIAGNOSTIC 0x1C
|
||||
#define CMD_SEND_DIAGNOSTIC 0x1D
|
||||
#define CMD_PREVENT_REMOVAL 0x1E
|
||||
/* 10 Byte command opcodes */
|
||||
#define CMD_READ_CAPACITY10 0x25
|
||||
#define CMD_READ10 0x28
|
||||
#define CMD_WRITE10 0x2A /* Optional */
|
||||
#define CMD_SEEK10 0x2B /* Optional */
|
||||
#define CMD_READUPDATEDBLOCK10 0x2D
|
||||
#define CMD_WRITEANDVERIFY10 0x2E /* Optional */
|
||||
#define CMD_VERIFY10 0x2F
|
||||
#define CMD_SEARCH_DATA_EQUAL 0x31 /* Optional */
|
||||
#define CMD_PREFETCH_CACHE10 0x34 /* Optional */
|
||||
#define CMD_READPOSITION10 0x34 /* Optional */
|
||||
#define CMD_SYNCHRONIZE_CACHE10 0x35 /* Optional */
|
||||
#define CMD_LOCKUNLOCK_CACHE10 0x36 /* Optional */
|
||||
#define CMD_READ_DEFECT_DATA 0x37 /* Optional */
|
||||
#define CMD_WRITEBUFFER 0x3B /* Optional */
|
||||
#define CMD_READBUFFER 0x3C /* Optional */
|
||||
#define CMD_READLONG10 0x3E /* Optional */
|
||||
#define CMD_WRITELONG10 0x3F /* Optional */
|
||||
#define CMD_READ_TOC 0x43
|
||||
#define CMD_READ_HEADER 0x44
|
||||
#define CMD_GET_CONFIGURATION 0x46
|
||||
#define CMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
|
||||
#define CMD_READ_DISC_INFORMATION 0x51
|
||||
#define CMD_MODE_SELECT10 0x55
|
||||
#define CMD_RESERVE10 0x56
|
||||
#define CMD_RELEASE10 0x57
|
||||
#define CMD_MODE_SENSE10 0x5A /* Optional */
|
||||
/* 12 Byte command opcodes */
|
||||
#define CMD_REPORT_LUNS 0xA0 /* Optional */
|
||||
#define CMD_SET_DRIVE_PARAMETER 0xC2
|
||||
#define CMD_MAC_UNKNOWN 0xEE /* Unknown */
|
||||
|
||||
/* Dayna SCSI/Link Ethernet */
|
||||
#define CMD_SCSILINK_STATS 0x09
|
||||
#define CMD_SCSILINK_ENABLE 0x0E
|
||||
#define CMD_SCSILINK_SET 0x0C
|
||||
#define CMD_SCSILINK_SETMODE 0x80
|
||||
#define CMD_SCSILINK_SETMAC 0x40
|
||||
|
||||
/* Cabletron Ethernet */
|
||||
#define CMD_CABLETRON_SEND 0x0c01
|
||||
#define CMD_CABLETRON_RECV 0xe1
|
||||
#define CMD_CABLETRON_GET_ADDR 0x0c04
|
||||
#define CMD_CABLETRON_ADD_PROTO 0x0d01
|
||||
#define CMD_CABLETRON_REM_PROTO 0x0d02
|
||||
#define CMD_CABLETRON_SET_MODE 0x0d03
|
||||
#define CMD_CABLETRON_SET_MULTI 0x0d04
|
||||
#define CMD_CABLETRON_REMOVE_MULTI 0x0d05
|
||||
#define CMD_CABLETRON_GET_STATS 0x0d06
|
||||
#define CMD_CABLETRON_SET_MEDIA 0x0d07
|
||||
#define CMD_CABLETRON_GET_MEDIA 0x0d08
|
||||
#define CMD_CABLETRON_LOAD_IMAGE 0x0d09
|
||||
#define CMD_CABLETRON_SET_ADDR 0x0d0a
|
||||
|
||||
/*
|
||||
* SCSI DEVICE CODES
|
||||
*/
|
||||
#define DEV_DISK 0x00
|
||||
#define DEV_TAPE 0x01
|
||||
#define DEV_PRINTER 0x02
|
||||
#define DEV_PROCESSOR 0x03
|
||||
#define DEV_WORM 0x04
|
||||
#define DEV_OPTICAL 0x05
|
||||
#define DEV_SCANNER 0x06
|
||||
#define DEV_OMS 0x07
|
||||
#define DEV_CHANGER 0x08
|
||||
#define DEV_COMM 0x09
|
||||
|
||||
/*
|
||||
* SCSI MESSAGE CODES
|
||||
*/
|
||||
#define COMMAND_COMPLETE 0x00
|
||||
#define EXTENDED_MESSAGE 0x01
|
||||
#define EXTENDED_MODIFY_DATA_POINTER 0x00
|
||||
#define EXTENDED_SDTR 0x01
|
||||
#define EXTENDED_EXTENDED_IDENTIFY 0x02 /* SCSI-I only */
|
||||
#define EXTENDED_WDTR 0x03
|
||||
#define EXTENDED_PPR 0x04
|
||||
#define EXTENDED_MODIFY_BIDI_DATA_PTR 0x05
|
||||
#define SAVE_POINTERS 0x02
|
||||
#define RESTORE_POINTERS 0x03
|
||||
#define DISCONNECT 0x04
|
||||
#define INITIATOR_ERROR 0x05
|
||||
#define ABORT_TASK_SET 0x06
|
||||
#define MESSAGE_REJECT 0x07
|
||||
#define NOP 0x08
|
||||
#define MSG_PARITY_ERROR 0x09
|
||||
#define LINKED_CMD_COMPLETE 0x0a
|
||||
#define LINKED_FLG_CMD_COMPLETE 0x0b
|
||||
#define TARGET_RESET 0x0c
|
||||
#define ABORT_TASK 0x0d
|
||||
#define CLEAR_TASK_SET 0x0e
|
||||
#define INITIATE_RECOVERY 0x0f /* SCSI-II only */
|
||||
#define RELEASE_RECOVERY 0x10 /* SCSI-II only */
|
||||
#define CLEAR_ACA 0x16
|
||||
#define LOGICAL_UNIT_RESET 0x17
|
||||
#define SIMPLE_QUEUE_TAG 0x20
|
||||
#define HEAD_OF_QUEUE_TAG 0x21
|
||||
#define ORDERED_QUEUE_TAG 0x22
|
||||
#define IGNORE_WIDE_RESIDUE 0x23
|
||||
#define ACA 0x24
|
||||
#define QAS_REQUEST 0x55
|
||||
#define IDENTIFY 0x80
|
||||
|
||||
|
||||
/* Task states */
|
||||
#define ENDED 0x00
|
||||
#define CURRENT 0x01
|
||||
|
||||
/* Status */
|
||||
#define STATUS_GOOD 0x00
|
||||
#define STATUS_CHECK 0x02
|
||||
#define STATUS_BUSY 0x08
|
||||
#define STATUS_INTERMEDIATE 0x10
|
||||
#define STATUS_CONFLICT 0x18
|
||||
|
||||
/* Sense keys */
|
||||
#define NO_SENSE 0x00
|
||||
#define RECOVERED_ERROR 0x01
|
||||
#define NOT_READY 0x02
|
||||
#define MEDIUM_ERROR 0x03
|
||||
#define HARDWARE_ERROR 0x04
|
||||
#define ILLEGAL_REQUEST 0x05
|
||||
#define UNIT_ATTENTION 0x06
|
||||
#define DATA_PROTECT 0x07
|
||||
|
||||
/* Additional Sense Information */
|
||||
#define NO_ADDITIONAL_SENSE_INFORMATION 0x00
|
||||
#define LUN_NOT_READY 0x04
|
||||
#define INVALID_LBA 0x21
|
||||
#define INVALID_FIELD_IN_CDB 0x24
|
||||
#define NOTREADY_TO_READY_CHANGE 0x28
|
||||
#define UNIT_POWERON_RESET 0x29
|
||||
#define NO_MEDIA 0x3A
|
||||
#define ERROR_IN_OPCODE 0xC0
|
||||
|
||||
#if USE_DB2ID_TABLE
|
||||
extern const uint8_t db2scsiid[256];
|
||||
#endif
|
||||
|
||||
#define QUIRKS_SASI 0b00000001
|
||||
#define QUIRKS_APPLE 0b00000010
|
||||
|
||||
#endif
|
449
src/scsibus.ino
Executable file
|
@ -0,0 +1,449 @@
|
|||
#include "config.h"
|
||||
#include "scsi_defs.h"
|
||||
|
||||
/*
|
||||
* Data uint8_t to GPIOB register setting value and parity table
|
||||
*/
|
||||
|
||||
// Parity bit generation
|
||||
#define PTY(V) ((1^((V)^((V)>>1)^((V)>>2)^((V)>>3)^((V)>>4)^((V)>>5)^((V)>>6)^((V)>>7)))&1)
|
||||
|
||||
// Set DBP
|
||||
#define DBP(D) ((((uint32_t)(D)<<16)|(PTY(D)<<11)) ^ SCSI_DB_MASK)
|
||||
|
||||
#define DBP8(D) DBP(D),DBP(D+1),DBP(D+2),DBP(D+3),DBP(D+4),DBP(D+5),DBP(D+6),DBP(D+7)
|
||||
#define DBP32(D) DBP8(D),DBP8(D+8),DBP8(D+16),DBP8(D+24)
|
||||
|
||||
// BSRR register control value that simultaneously performs DB set, DP set, and REQ = H (inactrive)
|
||||
const uint32_t db_bsrr[256]={
|
||||
DBP32(0x00),DBP32(0x20),DBP32(0x40),DBP32(0x60),
|
||||
DBP32(0x80),DBP32(0xA0),DBP32(0xC0),DBP32(0xE0)
|
||||
};
|
||||
// Parity bit acquisition
|
||||
#define PARITY(DB) ((db_bsrr[DB & 0xff] & 0x0800) >> 11)
|
||||
|
||||
// Macro cleaning
|
||||
#undef DBP32
|
||||
#undef DBP8
|
||||
//#undef DBP
|
||||
//#undef PTY
|
||||
|
||||
#if USE_DB2ID_TABLE
|
||||
/* DB to SCSI-ID translation table */
|
||||
const uint8_t db2scsiid[256]={
|
||||
0xff,
|
||||
0,
|
||||
1,1,
|
||||
2,2,2,2,
|
||||
3,3,3,3,3,3,3,3,
|
||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
||||
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
|
||||
};
|
||||
#endif
|
||||
|
||||
// Put DB and DP in output mode
|
||||
inline void SCSI_DB_OUTPUT(uint8_t d) {
|
||||
GPIOB_PDOR = db_bsrr[d];
|
||||
}
|
||||
|
||||
// Put DB and DP in input mode
|
||||
inline void SCSI_DB_INPUT() {
|
||||
GPIOB_PDDR = 0x00000000;
|
||||
GPIOB_PDOR = SCSI_DB_MASK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Bus reset interrupt.
|
||||
*/
|
||||
void onBusReset(void)
|
||||
{
|
||||
#if SUPPORT_SASI
|
||||
// SASI I / F for X1 turbo has RST pulse write cycle +2 clock ==
|
||||
// I can't filter because it only activates about 1.25us
|
||||
if(!(m_sel->m_quirks & QUIRKS_SASI)) {
|
||||
#endif
|
||||
if(digitalRead(RST)) return;
|
||||
delayMicroseconds(20);
|
||||
if(digitalRead(RST)) return;
|
||||
#if SUPPORT_SASI
|
||||
}
|
||||
#endif
|
||||
|
||||
SCSI_DB_INPUT();
|
||||
|
||||
LOGN("BusReset!");
|
||||
m_isBusReset = true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Read by handshake.
|
||||
*/
|
||||
inline uint8_t readHandshake(void)
|
||||
{
|
||||
SET_REQ_ACTIVE();
|
||||
while(!GET_ACK()) { if(m_isBusReset) { return 0; } }
|
||||
uint8_t r = readIO();
|
||||
SET_REQ_INACTIVE();
|
||||
while(GET_ACK()) { if(m_isBusReset) { return 0; } }
|
||||
return r;
|
||||
}
|
||||
|
||||
inline void readHandshakeBlock(uint8_t *d, uint16_t len)
|
||||
{
|
||||
while(len) {
|
||||
SET_REQ_ACTIVE();
|
||||
while(!GET_ACK()) { if(m_isBusReset) { return; } }
|
||||
*d++ = readIO();
|
||||
len--;
|
||||
SET_REQ_INACTIVE();
|
||||
while(GET_ACK()) { if(m_isBusReset) { return; } }
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Write with a handshake.
|
||||
*/
|
||||
inline void writeHandshake(uint8_t d)
|
||||
{
|
||||
GPIOB_PDDR = SCSI_DB_MASK;
|
||||
SCSI_DB_OUTPUT(d);
|
||||
|
||||
SET_REQ_ACTIVE();
|
||||
while(!GET_ACK()) { if(m_isBusReset) { return; } }
|
||||
SET_REQ_INACTIVE();
|
||||
SCSI_DB_INPUT();
|
||||
while(GET_ACK()) { if(m_isBusReset) { return; } }
|
||||
}
|
||||
|
||||
inline void writeHandshakeBlock(const uint8_t *d, uint16_t len)
|
||||
{
|
||||
GPIOB_PDDR = SCSI_DB_MASK;
|
||||
while(len) {
|
||||
SCSI_DB_OUTPUT(*d++);
|
||||
SET_REQ_ACTIVE();
|
||||
while(!GET_ACK()) { if(m_isBusReset) { return; } }
|
||||
len--;
|
||||
SET_REQ_INACTIVE();
|
||||
while(GET_ACK()) { if(m_isBusReset) { return; } }
|
||||
}
|
||||
SCSI_DB_INPUT();
|
||||
}
|
||||
|
||||
/*
|
||||
* Data in phase.
|
||||
* Send len uint8_ts of data array p.
|
||||
*/
|
||||
void writeDataPhase(int len, const uint8_t* p)
|
||||
{
|
||||
//LOGN("DATAIN PHASE");
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_ACTIVE();
|
||||
|
||||
#if READ_SPEED_OPTIMIZE
|
||||
writeHandshakeBlock(p, len);
|
||||
#else
|
||||
for (int i = 0; i < len; i++) {
|
||||
if(m_isBusReset) {
|
||||
m_phase = PHASE_BUSFREE;
|
||||
return;
|
||||
}
|
||||
writeHandshake(p[i]);
|
||||
}
|
||||
#endif
|
||||
if(m_isBusReset) {
|
||||
m_phase = PHASE_BUSFREE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Data in phase.
|
||||
* Send len block while reading from SD card.
|
||||
*/
|
||||
void writeDataPhaseSD(uint32_t adds, uint32_t len)
|
||||
{
|
||||
#if READ_SPEED_OPTIMIZE
|
||||
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
|
||||
#endif
|
||||
uint32_t i = 0;
|
||||
|
||||
//LOGN("DATAIN PHASE(SD)");
|
||||
uint32_t pos = adds * m_sel->m_blocksize;
|
||||
m_sel->m_file.seek(pos);
|
||||
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_ACTIVE();
|
||||
|
||||
while(i < len) {
|
||||
// Asynchronous reads will make it faster ...
|
||||
#if READ_SPEED_OPTIMIZE
|
||||
if((len-i) >= bigread) {
|
||||
m_sel->m_file.read(m_buf, MAX_BLOCKSIZE);
|
||||
writeHandshakeBlock(m_buf, MAX_BLOCKSIZE);
|
||||
i += bigread;
|
||||
} else {
|
||||
m_sel->m_file.read(m_buf, m_sel->m_blocksize * (len-i));
|
||||
writeHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
|
||||
i = len;
|
||||
}
|
||||
#else
|
||||
m_sel->m_file.read(m_buf, m_sel->m_blocksize);
|
||||
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
|
||||
if(m_isBusReset) {
|
||||
m_phase = PHASE_BUSFREE;
|
||||
return;
|
||||
}
|
||||
writeHandshake(m_buf[j]);
|
||||
}
|
||||
#endif
|
||||
if(m_isBusReset) {
|
||||
m_phase = PHASE_BUSFREE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Data in phase.
|
||||
* Send len block while reading from SD card.
|
||||
*/
|
||||
void writeDataPhaseRaw(uint32_t adds, uint32_t len)
|
||||
{
|
||||
#if READ_SPEED_OPTIMIZE_RAW
|
||||
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
|
||||
#endif
|
||||
uint32_t i = 0;
|
||||
|
||||
//LOGN("DATAIN PHASE(RAW)");
|
||||
uint32_t pos = ((adds * m_sel->m_blocksize) / 512) + m_sel->m_firstSector;
|
||||
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_ACTIVE();
|
||||
|
||||
while(i < len) {
|
||||
// Asynchronous reads will make it faster ...
|
||||
#if READ_SPEED_OPTIMIZE_RAW
|
||||
if((len-i) >= bigread) {
|
||||
sd.card()->readSectors(pos, m_buf, (MAX_BLOCKSIZE / 512));
|
||||
writeHandshakeBlock(m_buf, MAX_BLOCKSIZE);
|
||||
i += bigread;
|
||||
pos += (MAX_BLOCKSIZE / 512);
|
||||
} else {
|
||||
sd.card()->readSectors(pos, m_buf, ((m_sel->m_blocksize * (len-i)) / 512));
|
||||
writeHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
|
||||
i = len;
|
||||
}
|
||||
#else
|
||||
sd.card()->readSectors(pos, m_buf, (m_sel->m_blocksize / 512));
|
||||
pos++;
|
||||
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
|
||||
if(m_isBusReset) {
|
||||
m_phase = PHASE_BUSFREE;
|
||||
return;
|
||||
}
|
||||
writeHandshake(m_buf[j]);
|
||||
}
|
||||
#endif
|
||||
if(m_isBusReset) {
|
||||
m_phase = PHASE_BUSFREE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Data out phase.
|
||||
* len block read
|
||||
*/
|
||||
void readDataPhase(int len, uint8_t* p)
|
||||
{
|
||||
//LOGN("DATAOUT PHASE");
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_INACTIVE();
|
||||
|
||||
#if WRITE_SPEED_OPTIMIZE
|
||||
readHandshakeBlock(p, len);
|
||||
#else
|
||||
for(int i = 0; i < len; i++)
|
||||
p[i] = readHandshake();
|
||||
#endif
|
||||
if(m_isBusReset) {
|
||||
m_phase = PHASE_BUSFREE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Data out phase.
|
||||
* Write to SD card while reading len block.
|
||||
*/
|
||||
void readDataPhaseSD(uint32_t adds, uint32_t len)
|
||||
{
|
||||
#if WRITE_SPEED_OPTIMIZE
|
||||
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
|
||||
#endif
|
||||
uint32_t i = 0;
|
||||
|
||||
//LOGN("DATAOUT PHASE(SD)");
|
||||
uint32_t pos = adds * m_sel->m_blocksize;
|
||||
m_sel->m_file.seek(pos);
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_INACTIVE();
|
||||
|
||||
while(i < len) {
|
||||
#if WRITE_SPEED_OPTIMIZE
|
||||
if((len-i) >= bigread) {
|
||||
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
|
||||
m_sel->m_file.write(m_buf, MAX_BLOCKSIZE);
|
||||
i += bigread;
|
||||
} else {
|
||||
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
|
||||
m_sel->m_file.write(m_buf, m_sel->m_blocksize * (len-i));
|
||||
i = len;
|
||||
}
|
||||
#else
|
||||
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
|
||||
if(m_isBusReset) {
|
||||
return;
|
||||
}
|
||||
m_buf[j] = readHandshake();
|
||||
}
|
||||
m_sel->m_file.write(m_buf, m_sel->m_blocksize);
|
||||
#endif
|
||||
}
|
||||
m_sel->m_file.flush();
|
||||
}
|
||||
|
||||
/*
|
||||
* Data out phase.
|
||||
* Write to SD card while reading len block.
|
||||
*/
|
||||
void readDataPhaseRaw(uint32_t adds, uint32_t len)
|
||||
{
|
||||
#if WRITE_SPEED_OPTIMIZE_RAW
|
||||
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
|
||||
#endif
|
||||
uint32_t i = 0;
|
||||
|
||||
//LOGN("DATAOUT PHASE(RAW)");
|
||||
uint32_t pos = ((adds * m_sel->m_blocksize) / 512) + m_sel->m_firstSector;
|
||||
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_INACTIVE();
|
||||
|
||||
while(i < len) {
|
||||
#if WRITE_SPEED_OPTIMIZE_RAW
|
||||
if((len-i) >= bigread) {
|
||||
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
|
||||
sd.card()->writeSectors(pos, m_buf, (MAX_BLOCKSIZE / 512));
|
||||
i += bigread;
|
||||
pos += (MAX_BLOCKSIZE / 512);
|
||||
} else {
|
||||
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
|
||||
sd.card()->writeSectors(pos, m_buf, ((m_sel->m_blocksize * (len-i)) / 512));
|
||||
i = len;
|
||||
}
|
||||
#else
|
||||
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
|
||||
if(m_isBusReset) {
|
||||
return;
|
||||
}
|
||||
m_buf[j] = readHandshake();
|
||||
}
|
||||
sd.card()->writeSectors(pos, m_buf, (m_sel->m_blocksize / 512));
|
||||
i++;
|
||||
pos += (m_sel->m_blocksize / 512);
|
||||
#endif
|
||||
}
|
||||
m_sel->m_file.flush();
|
||||
}
|
||||
|
||||
/*
|
||||
* Data out phase.
|
||||
* Verify SD card while reading len block.
|
||||
*/
|
||||
void verifyDataPhaseSD(uint32_t adds, uint32_t len)
|
||||
{
|
||||
#if WRITE_SPEED_OPTIMIZE
|
||||
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
|
||||
#endif
|
||||
uint32_t i = 0;
|
||||
|
||||
//LOGN("DATAOUT PHASE(SD)");
|
||||
uint32_t pos = adds * m_sel->m_blocksize;
|
||||
m_sel->m_file.seek(pos);
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_INACTIVE();
|
||||
|
||||
while(i < len) {
|
||||
#if WRITE_SPEED_OPTIMIZE
|
||||
if((len-i) >= bigread) {
|
||||
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
|
||||
//m_sel->m_file.verify(m_buf, MAX_BLOCKSIZE);
|
||||
i += bigread;
|
||||
} else {
|
||||
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
|
||||
//m_sel->m_file.verify(m_buf, m_sel->m_blocksize * (len-i));
|
||||
i = len;
|
||||
}
|
||||
#else
|
||||
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
|
||||
if(m_isBusReset) {
|
||||
return;
|
||||
}
|
||||
m_buf[j] = readHandshake();
|
||||
}
|
||||
//m_sel->m_file.verify(m_buf, m_sel->m_blocksize);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Data out phase.
|
||||
* Verify SD card while reading len block.
|
||||
*/
|
||||
void verifyDataPhaseRaw(uint32_t adds, uint32_t len)
|
||||
{
|
||||
#if WRITE_SPEED_OPTIMIZE_RAW
|
||||
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
|
||||
#endif
|
||||
uint32_t i = 0;
|
||||
|
||||
//LOGN("DATAOUT PHASE(RAW)");
|
||||
//uint32_t pos = ((adds * m_sel->m_blocksize) / 512) + m_sel->m_firstSector;
|
||||
SET_MSG_INACTIVE();
|
||||
SET_CD_INACTIVE();
|
||||
SET_IO_INACTIVE();
|
||||
|
||||
while(i < len) {
|
||||
#if WRITE_SPEED_OPTIMIZE_RAW
|
||||
if((len-i) >= bigread) {
|
||||
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
|
||||
i += bigread;
|
||||
} else {
|
||||
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
|
||||
i = len;
|
||||
}
|
||||
#else
|
||||
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
|
||||
if(m_isBusReset) {
|
||||
return;
|
||||
}
|
||||
m_buf[j] = readHandshake();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
371
src/tape.ino
Executable file
|
@ -0,0 +1,371 @@
|
|||
#include "config.h"
|
||||
#include "scsi_defs.h"
|
||||
|
||||
#if SUPPORT_TAPE
|
||||
/*
|
||||
* READ6 / 10 Command processing.
|
||||
*/
|
||||
void onTapeReadCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
LOG("-R ");
|
||||
LOGHEX4N(len);
|
||||
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
switch(m_cmd[1] & 0x3) {
|
||||
case 0:
|
||||
if(len == 0) return;
|
||||
break;
|
||||
case 1: // Fixed
|
||||
break;
|
||||
case 2: // SILI
|
||||
break;
|
||||
case 3: // Illegal Request
|
||||
m_sts = 0x02;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 1" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x01;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
LED_ON();
|
||||
writeDataPhaseTape(len);
|
||||
LED_OFF();
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
/*
|
||||
* WRITE6 / 10 Command processing.
|
||||
*/
|
||||
void onTapeWriteCommand(uint32_t adds, uint32_t len)
|
||||
{
|
||||
LOG("-W ");
|
||||
LOGHEX4N(len);
|
||||
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
LED_ON();
|
||||
m_sel->m_file.write(&len, 4);
|
||||
readDataPhaseTape(len);
|
||||
m_sel->m_file.write(&len, 4);
|
||||
LED_OFF();
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeRead6CommandHandler() {
|
||||
LOG("[Read6]");
|
||||
m_sts |= onTapeReadCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeWrite6CommandHandler() {
|
||||
LOG("[Write6]");
|
||||
m_sts |= onTapeWriteCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeSeek6CommandHandler() {
|
||||
LOG("[Seek6]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeRead10CommandHandler() {
|
||||
LOG("[Read10]");
|
||||
m_sts |= onTapeReadCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeWrite10CommandHandler() {
|
||||
LOG("[Write10]");
|
||||
m_sts |= onTapeWriteCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeSeek10CommandHandler() {
|
||||
LOG("[Seek10]");
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeModeSense6CommandHandler() {
|
||||
uint8_t len;
|
||||
int page, pagemax, pagemin;
|
||||
|
||||
LOGN("[ModeSense6]");
|
||||
/* Check whether medium is present */
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
|
||||
|
||||
len = 1;
|
||||
/* Default medium type */
|
||||
m_responsebuffer[len++] = 0xf0;
|
||||
/* Write protected */
|
||||
m_responsebuffer[len++] = 0x80;
|
||||
|
||||
/* Add block descriptor if DBD is not set */
|
||||
if (m_cmd[1] & 0x08) {
|
||||
m_responsebuffer[len++] = 0; /* No block descriptor */
|
||||
} else {
|
||||
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
|
||||
m_responsebuffer[len++] = 8; /* Block descriptor length */
|
||||
m_responsebuffer[len++] = (capacity >> 24) & 0xff;
|
||||
m_responsebuffer[len++] = (capacity >> 16) & 0xff;
|
||||
m_responsebuffer[len++] = (capacity >> 8) & 0xff;
|
||||
m_responsebuffer[len++] = capacity & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize >> 24) & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize >> 16) & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize >> 8) & 0xff;
|
||||
m_responsebuffer[len++] = (m_sel->m_blocksize) & 0xff;
|
||||
}
|
||||
|
||||
/* Check for requested mode page */
|
||||
page = m_cmd[2] & 0x3F;
|
||||
pagemax = (page != 0x3f) ? page : 0x3e;
|
||||
pagemin = (page != 0x3f) ? page : 0x00;
|
||||
for(page = pagemax; page >= pagemin; page--) {
|
||||
switch (page) {
|
||||
default:
|
||||
if(pagemin == pagemax) {
|
||||
/* Requested mode page is not supported */
|
||||
/* Prepare sense data */
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
|
||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||
m_sel->m_sense.m_key_specific[2] = 0x02;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Report size of requested data */
|
||||
m_responsebuffer[0] = len;
|
||||
|
||||
/* Truncate data if necessary */
|
||||
if (m_cmd[4] < len) {
|
||||
len = m_cmd[4];
|
||||
}
|
||||
|
||||
// Send it
|
||||
writeDataPhase(len, m_responsebuffer);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeLoadUnloadCommandHandler() {
|
||||
if(m_cmd[4] & 1) {
|
||||
LOGN("[Load]");
|
||||
} else {
|
||||
LOGN("[Unload]");
|
||||
}
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapePreventRemovalCommandHandler() {
|
||||
if(m_cmd[4] & 1) {
|
||||
LOGN("[Prevent Removal]");
|
||||
} else {
|
||||
LOGN("[Allow Removal]");
|
||||
}
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK;
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeReadCapacityCommandHandler() {
|
||||
LOGN("[ReadCapacity]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t bl = m_sel->m_blocksize;
|
||||
uint32_t bc = m_sel->m_fileSize / bl;
|
||||
uint8_t buf[8] = {
|
||||
(uint8_t)(((uint32_t)(bc >> 24))&0xff), (uint8_t)(((uint32_t)(bc >> 16))&0xff), (uint8_t)(((uint32_t)(bc >> 8))&0xff), (uint8_t)(((uint32_t)(bc))&0xff),
|
||||
(uint8_t)(((uint32_t)(bl >> 24))&0xff), (uint8_t)(((uint32_t)(bl >> 16))&0xff), (uint8_t)(((uint32_t)(bl >> 8))&0xff), (uint8_t)(((uint32_t)(bl))&0xff)
|
||||
};
|
||||
writeDataPhase(8, buf);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeEraseCommandHandler() {
|
||||
LOGN("[Erase]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
// Truncate the current .tap file (maybe archive it by renaming instead of truncating?)
|
||||
}
|
||||
|
||||
void TapeReadBlockLimitsCommandHandler() {
|
||||
uint16_t len = 0;
|
||||
LOGN("[ReadBlockLimits]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0xFF; // Maximum Block Length
|
||||
m_responsebuffer[len++] = 0xFF;
|
||||
m_responsebuffer[len++] = 0xFF;
|
||||
m_responsebuffer[len++] = 0x00; // Minimum Block Length
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
|
||||
writeDataPhase(len, buf);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeRewindUnitCommandHandler() {
|
||||
LOGN("[Rewind]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
m_sel->m_filemarks = 0;
|
||||
m_sel->m_file.seek(0);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void TapeReadPositionCommandHandler() {
|
||||
uint16_t len = 0;
|
||||
LOGN("[ReadPosition]");
|
||||
if(!m_sel) {
|
||||
m_sts |= STATUS_CHECK; // Image file absent
|
||||
m_phase = PHASE_STATUSIN;
|
||||
return;
|
||||
}
|
||||
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks == 0) ? (1 << 7) : 0;
|
||||
m_responsebuffer[len++] = 0x00; // Partition(0)
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff); // First Block Location
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff00) >> 8;
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff0000) >> 16;
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff000000) >> 24;
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff); // Last Block Location
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff00) >> 8;
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff0000) >> 16;
|
||||
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff000000) >> 24;
|
||||
m_responsebuffer[len++] = 0x00; // Reserved
|
||||
m_responsebuffer[len++] = 0x00; // Blocks in buffer (0)
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00; // Bytes in buffer (0)
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
m_responsebuffer[len++] = 0x00;
|
||||
|
||||
writeDataPhase(len, buf);
|
||||
m_phase = PHASE_STATUSIN;
|
||||
}
|
||||
|
||||
void ConfigureTapeHandlers(VirtualDevice_t *vdev) {
|
||||
for(int c = 0; c < 256; c++)
|
||||
vdev->m_handler[c] = &UnknownCommandHandler;
|
||||
|
||||
vdev->m_handler[CMD_ERASE] = &TapeEraseCommandHandler;
|
||||
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REZERO_UNIT] = &TapeRewindUnitCommandHandler;
|
||||
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
|
||||
vdev->m_handler[CMD_READ_BLOCK_LIMITS] = &TapeReadBlockLimitsCommandHandler;
|
||||
vdev->m_handler[CMD_READ6] = &TapeRead6CommandHandler;
|
||||
vdev->m_handler[CMD_WRITE6] = &TapeWrite6CommandHandler;
|
||||
vdev->m_handler[CMD_SEEK6] = &TapeSeek6CommandHandler;
|
||||
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SELECT6] = &ModeSelect6CommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SENSE6] = &TapeModeSense6CommandHandler;
|
||||
vdev->m_handler[CMD_START_STOP_UNIT] = &TapeLoadUnloadCommandHandler;
|
||||
vdev->m_handler[CMD_PREVENT_REMOVAL] = &TapePreventRemovalCommandHandler;
|
||||
vdev->m_handler[CMD_READ_CAPACITY10] = &TapeReadCapacityCommandHandler;
|
||||
vdev->m_handler[CMD_READ10] = &TapeRead10CommandHandler;
|
||||
vdev->m_handler[CMD_WRITE10] = &TapeWrite10CommandHandler;
|
||||
vdev->m_handler[CMD_SEEK10] = &TapeSeek10CommandHandler;
|
||||
vdev->m_handler[CMD_READPOSITION10] = &TapeReadPositionCommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SELECT10] = &ModeSelect10CommandHandler;
|
||||
vdev->m_handler[CMD_MODE_SENSE10] = &TapeModeSense10CommandHandler;
|
||||
}
|
||||
|
||||
// If config file exists, read the first three lines and copy the contents.
|
||||
// File must be well formed or you will get junk in the SCSI Vendor fields.
|
||||
void ConfigureTape(VirtualDevice_t *vdev, const char *image_name) {
|
||||
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
|
||||
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_TAPE) {
|
||||
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(image_name) {
|
||||
char configname[MAX_FILE_PATH+1];
|
||||
memcpy(configname, image_name, MAX_FILE_PATH+1);
|
||||
char *psuffix = strstr(configname, ".img");
|
||||
if(psuffix) {
|
||||
strcpy(psuffix, ".cfg");
|
||||
} else {
|
||||
sprintf(configname, "mt%d%d.cfg", vdev->m_id, vdev->m_lun);
|
||||
}
|
||||
|
||||
FsFile config_file = sd.open(configname, O_RDONLY);
|
||||
if (config_file.isOpen()) {
|
||||
char vendor[9];
|
||||
memset(vendor, 0, sizeof(vendor));
|
||||
config_file.readBytes(vendor, sizeof(vendor));
|
||||
LOGN("SCSI VENDOR: ");
|
||||
LOGN(vendor);
|
||||
memcpy(&(vdev->m_inquiryresponse[8]), vendor, 8);
|
||||
|
||||
char product[17];
|
||||
memset(product, 0, sizeof(product));
|
||||
config_file.readBytes(product, sizeof(product));
|
||||
LOGN("SCSI PRODUCT: ");
|
||||
LOGN(product);
|
||||
memcpy(&(vdev->m_inquiryresponse[16]), product, 16);
|
||||
|
||||
char version[5];
|
||||
memset(version, 0, sizeof(version));
|
||||
config_file.readBytes(version, sizeof(version));
|
||||
LOGN("SCSI VERSION: ");
|
||||
LOGN(version);
|
||||
memcpy(&(vdev->m_inquiryresponse[32]), version, 4);
|
||||
config_file.close();
|
||||
}
|
||||
}
|
||||
|
||||
vdev->m_type = DEV_TAPE;
|
||||
ConfigureTapeHandlers(vdev);
|
||||
}
|
||||
#endif
|
11
test/README
|
@ -1,11 +0,0 @@
|
|||
|
||||
This directory is intended for PlatformIO Unit Testing and project tests.
|
||||
|
||||
Unit Testing is a software testing method by which individual units of
|
||||
source code, sets of one or more MCU program modules together with associated
|
||||
control data, usage procedures, and operating procedures, are tested to
|
||||
determine whether they are fit for use. Unit testing finds problems early
|
||||
in the development cycle.
|
||||
|
||||
More information about PlatformIO Unit Testing:
|
||||
- https://docs.platformio.org/page/plus/unit-testing.html
|