From e80888555fdc8df91968ea78324185cefc6e98b3 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Tue, 7 May 2019 15:26:52 -0400 Subject: [PATCH] recipe/rc2014/sdcard: new recipe --- recipes/rc2014/README.md | 7 + recipes/rc2014/sdcard/Makefile | 9 + recipes/rc2014/sdcard/README.md | 96 +++ recipes/rc2014/sdcard/glue.asm | 55 ++ recipes/rc2014/sdcard/jumptable.inc | 9 + recipes/rc2014/sdcard/sdinit.asm | 18 + recipes/rc2014/sdcard/spirelay/local.dcm | 7 + recipes/rc2014/sdcard/spirelay/local.lib | 50 ++ recipes/rc2014/sdcard/spirelay/spirelay.pdf | Bin 0 -> 48765 bytes recipes/rc2014/sdcard/spirelay/spirelay.pro | 43 ++ recipes/rc2014/sdcard/spirelay/spirelay.sch | 621 +++++++++++++++++++ recipes/rc2014/sdcard/spirelay/sym-lib-table | 3 + 12 files changed, 918 insertions(+) create mode 100644 recipes/rc2014/sdcard/Makefile create mode 100644 recipes/rc2014/sdcard/README.md create mode 100644 recipes/rc2014/sdcard/glue.asm create mode 100644 recipes/rc2014/sdcard/jumptable.inc create mode 100644 recipes/rc2014/sdcard/sdinit.asm create mode 100644 recipes/rc2014/sdcard/spirelay/local.dcm create mode 100644 recipes/rc2014/sdcard/spirelay/local.lib create mode 100644 recipes/rc2014/sdcard/spirelay/spirelay.pdf create mode 100644 recipes/rc2014/sdcard/spirelay/spirelay.pro create mode 100644 recipes/rc2014/sdcard/spirelay/spirelay.sch create mode 100644 recipes/rc2014/sdcard/spirelay/sym-lib-table diff --git a/recipes/rc2014/README.md b/recipes/rc2014/README.md index aa618ba..032cd9a 100644 --- a/recipes/rc2014/README.md +++ b/recipes/rc2014/README.md @@ -18,6 +18,13 @@ forget to set the A14 jumper to high because what is the A14 pin on the AT27 ROM module is the WE pin on the AT28! Setting the jumper high will keep is disabled. +## Related recipes + +This recipe is for installing a minimal Collapse OS system on the RC2014. There +are other recipes related to the RC2014: + +* [Accessing a MicroSD card](sdcard/README.md) + ## Goal Have the shell running and accessible through the Serial I/O. diff --git a/recipes/rc2014/sdcard/Makefile b/recipes/rc2014/sdcard/Makefile new file mode 100644 index 0000000..ffb5c81 --- /dev/null +++ b/recipes/rc2014/sdcard/Makefile @@ -0,0 +1,9 @@ +TARGETS = os.bin sdinit.bin +PARTS = ../../../parts/z80 + +.PHONY: all +all: $(TARGETS) +os.bin: glue.asm +sdinit.bin: sdinit.asm +$(TARGETS): + scas -o $@ -L map -I $(PARTS) $< diff --git a/recipes/rc2014/sdcard/README.md b/recipes/rc2014/sdcard/README.md new file mode 100644 index 0000000..5ecaf3e --- /dev/null +++ b/recipes/rc2014/sdcard/README.md @@ -0,0 +1,96 @@ +# Accessing a MicroSD card + +**Status: work in progress.** + +SD cards are great because they are accessible directly. No supporting IC is +necessary. The easiest way to access them is through the SPI protocol. + +Due to the way IO works in z80, implementing SPI through it as a bit awkward: +You can't really keep pins high and low on an IO line. You need some kind of +intermediary between z80 IOs and SPI. + +There are many ways to achieve this. This recipe explains how to build your own +hacked off SPI relay for the RC2014. It can then be used with `sdc.asm` to +drive a SD card. + +## Goal + +Read and write to a SD card from Collapse OS using a SPI relay of our own +design. + +## Gathering parts + +* A RC2014 with Collapse OS with these features: + * shell + * blockdev + * sdc +* A MicroSD breakout board. I use Adafruit's. +* A proto board + header pins with 39 positions so we can make a RC2014 card. +* Diodes, resistors and stuff +* 40106 (Inverter gates) +* 4011 (NAND gates) +* 74xx139 (Decoder) +* 74xx161 (Binary counter) +* 74xx165 (Parallel input shift register) +* 74xx595 (Shift register) + +## Building the SPI relay + +The [schematic][schematic] supplied with this recipe works well with `sdc.asm`. +Of course, it's not the only possible design that works, but I think it's one +of the most straighforwards. + +The basic idea with this relay is to have one shift register used as input, +loaded in parallel mode from the z80 bus and a shift register that takes the +serial input from `MISO` and has its output wired to the z80 bus. + +These two shift registers are clocked by a binary counter that clocks exactly +8 times whenever a write operation on port `4` occurs. Those 8 clocks send +data we've just received in the `74xx165` into `MOSI` and get `MISO` into the +`74xx595`. + +The `74xx139` then takes care of activating the right ICs on the right +combinations of `IORQ/WR/RD/Axx`. + +The rest of the ICs is fluff around this all. + +My first idea was to implement the relay with an AVR microcontroller to +minimize the number of ICs, but it's too slow. We have to be able to respond +within 300ns! Following that, it became necessary to add a 595 and a 165, but +if we're going to add that, why not go the extra mile and get rid of the +microcontroller? + +To that end, I was heavily inspired by [this design][inspiration]. + +This board uses port `4` for SPI data, port `5` to pull `CS` low and port `6` +to pull it high. Port `7` is unused but monopolized by the card. + +Little advice: If you make your own design, double check propagation delays! +Some NAND gates, such as the 4093, are too slow to properly respond within +a 300ns limit. For example, in my own prototype, I use a 4093 because that's +what I have in inventory. For the `CS` flip-flop, the propagation delay doesn't +matter. However, it *does* matter for the `SELECT` line, so I don't follow my +own schematic with regards to the `M1` and `A2` lines and use two inverters +instead. + +## Building the kernel + +To be able to work with your SPI relay and communicate with the card, you +should have [glue code that looks like this](glue.asm). + +Initially, when you don't know if things work well yet, you should comment out +the block creation part. + +## Testing CD card initialization + +To test that you can properly initialize a SD card, you can compile this [user +program](sdinit.asm) (see [Makefile](Makefile)) and then +[run it from memory][run-from-mem]. Success means the card is initialized. + +## Create a block device from the SD card reader + +TODO + +[schematic]: spirelay/spirelay.pdf +[inspiration]: https://www.ecstaticlyrics.com/electronics/SPI/fast_z80_interface.html +[run-from-mem]: ../../../doc/load-run-code.md diff --git a/recipes/rc2014/sdcard/glue.asm b/recipes/rc2014/sdcard/glue.asm new file mode 100644 index 0000000..27bb5d6 --- /dev/null +++ b/recipes/rc2014/sdcard/glue.asm @@ -0,0 +1,55 @@ +; classic RC2014 setup (8K ROM + 32K RAM) and a stock Serial I/O module +; The RAM module is selected on A15, so it has the range 0x8000-0xffff +RAMSTART .equ 0x8000 +RAMEND .equ 0xffff +ACIA_CTL .equ 0x80 ; Control and status. RS off. +ACIA_IO .equ 0x81 ; Transmit. RS on. + +jr init + +; *** JUMP TABLE *** +; Why not use this unused space between 0x02 and 0x28 for a jump table? + jp printstr + jp printHex + jp sdcWakeUp + jp sdcSendRecv + jp sdcWaitResp + jp sdcCmd + jp sdcCmdR1 + jp sdcCmdR7 + +; interrupt hook +.fill 0x38-$ +jp aciaInt + +init: + di + ; setup stack + ld hl, RAMEND + ld sp, hl + im 1 + call aciaInit + call shellInit + + ; TODO - block device creation + + ei + jp shellLoop + +#include "core.asm" +ACIA_RAMSTART .equ RAMSTART +#include "acia.asm" +.define STDIO_GETC call aciaGetC +.define STDIO_PUTC call aciaPutC +STDIO_RAMSTART .equ ACIA_RAMEND +#include "stdio.asm" +SHELL_RAMSTART .equ STDIO_RAMEND +.define SHELL_IO_GETC call aciaGetC +.define SHELL_IO_PUTC call aciaPutC +SHELL_EXTRA_CMD_COUNT .equ 0 +#include "shell.asm" + +.equ SDC_PORT_CSHIGH 6 +.equ SDC_PORT_CSLOW 5 +.equ SDC_PORT_SPI 4 +#include "sdc.asm" diff --git a/recipes/rc2014/sdcard/jumptable.inc b/recipes/rc2014/sdcard/jumptable.inc new file mode 100644 index 0000000..372a663 --- /dev/null +++ b/recipes/rc2014/sdcard/jumptable.inc @@ -0,0 +1,9 @@ +JUMP_PRINTSTR .equ 0x03 +JUMP_PRINTHEX .equ 0x06 +JUMP_SDCWAKEUP .equ 0x09 +JUMP_SDCSENDRECV .equ 0x0c +JUMP_SDCWAITRESP .equ 0x0f +JUMP_SDCCMD .equ 0x12 +JUMP_SDCCMDR1 .equ 0x15 +JUMP_SDCCMDR7 .equ 0x18 + diff --git a/recipes/rc2014/sdcard/sdinit.asm b/recipes/rc2014/sdcard/sdinit.asm new file mode 100644 index 0000000..47674ae --- /dev/null +++ b/recipes/rc2014/sdcard/sdinit.asm @@ -0,0 +1,18 @@ +#include "jumptable.inc" +.org 0x9000 + + call JUMP_SDCWAKEUP + + ld a, 0b01000000 ; CMD0 + ld hl, 0 + ld de, 0 + ld c, 0x95 + call JUMP_SDCCMDR1 + call JUMP_PRINTHEX + ld a, 0b01001000 ; CMD8 + ld hl, 0 + ld de, 0x01aa + ld c, 0x87 + call JUMP_SDCCMDR7 + call JUMP_PRINTHEX + ret diff --git a/recipes/rc2014/sdcard/spirelay/local.dcm b/recipes/rc2014/sdcard/spirelay/local.dcm new file mode 100644 index 0000000..48280a3 --- /dev/null +++ b/recipes/rc2014/sdcard/spirelay/local.dcm @@ -0,0 +1,7 @@ +EESchema-DOCLIB Version 2.0 +# +$CMP Z80BUS +F ~ +$ENDCMP +# +#End Doc Library diff --git a/recipes/rc2014/sdcard/spirelay/local.lib b/recipes/rc2014/sdcard/spirelay/local.lib new file mode 100644 index 0000000..3ddf1ff --- /dev/null +++ b/recipes/rc2014/sdcard/spirelay/local.lib @@ -0,0 +1,50 @@ +EESchema-LIBRARY Version 2.4 +#encoding utf-8 +# +# Z80BUS +# +DEF Z80BUS J 0 20 Y Y 1 F N +F0 "J" 0 1750 50 H V C CNN +F1 "Z80BUS" 250 50 50 V V C CNN +F2 "" 0 50 50 H I C CNN +F3 "" 0 50 50 H I C CNN +DRAW +S -150 -1750 150 1650 0 1 10 f +X D5 32 -300 -1500 150 R 50 50 0 0 P +X D6 33 -300 -1600 150 R 50 50 0 0 P +X D7 34 -300 -1700 150 R 50 50 0 0 P +X A15 1 -300 1600 150 R 50 50 1 1 P +X A6 10 -300 700 150 R 50 50 1 1 P +X A5 11 -300 600 150 R 50 50 1 1 P +X A4 12 -300 500 150 R 50 50 1 1 P +X A3 13 -300 400 150 R 50 50 1 1 P +X A2 14 -300 300 150 R 50 50 1 1 P +X A1 15 -300 200 150 R 50 50 1 1 P +X A0 16 -300 100 150 R 50 50 1 1 P +X GND 17 -300 0 150 R 50 50 1 1 P +X 5V 18 -300 -100 150 R 50 50 1 1 P +X M1 19 -300 -200 150 R 50 50 1 1 P +X A14 2 -300 1500 150 R 50 50 1 1 P +X RESET 20 -300 -300 150 R 50 50 1 1 P +X CLK 21 -300 -400 150 R 50 50 1 1 P +X INT 22 -300 -500 150 R 50 50 1 1 P +X MREQ 23 -300 -600 150 R 50 50 1 1 P +X WR 24 -300 -700 150 R 50 50 1 1 P +X RD 25 -300 -800 150 R 50 50 1 1 P +X IORQ 26 -300 -900 150 R 50 50 1 1 P +X D0 27 -300 -1000 150 R 50 50 1 1 P +X D1 28 -300 -1100 150 R 50 50 1 1 P +X D2 29 -300 -1200 150 R 50 50 1 1 P +X A13 3 -300 1400 150 R 50 50 1 1 P +X D3 30 -300 -1300 150 R 50 50 1 1 P +X D4 31 -300 -1400 150 R 50 50 1 1 P +X A12 4 -300 1300 150 R 50 50 1 1 P +X A11 5 -300 1200 150 R 50 50 1 1 P +X A10 6 -300 1100 150 R 50 50 1 1 P +X A9 7 -300 1000 150 R 50 50 1 1 P +X A8 8 -300 900 150 R 50 50 1 1 P +X A7 9 -300 800 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +#End Library diff --git a/recipes/rc2014/sdcard/spirelay/spirelay.pdf b/recipes/rc2014/sdcard/spirelay/spirelay.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9aae23c8ae44af5b085937c731be8b1eabaad436 GIT binary patch literal 48765 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�@b?T%dF>{8?j_Sf&b=+F)0+u^TDvO0sp@BP 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 literal 0 HcmV?d00001 diff --git a/recipes/rc2014/sdcard/spirelay/spirelay.pro b/recipes/rc2014/sdcard/spirelay/spirelay.pro new file mode 100644 index 0000000..94198ec --- /dev/null +++ b/recipes/rc2014/sdcard/spirelay/spirelay.pro @@ -0,0 +1,43 @@ +update=Tue 07 May 2019 03:02:22 PM EDT +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] +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName=./ +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName= +SpiceAjustPassiveValues=0 +LabSize=50 +ERC_TestSimilarLabels=1 diff --git a/recipes/rc2014/sdcard/spirelay/spirelay.sch b/recipes/rc2014/sdcard/spirelay/spirelay.sch new file mode 100644 index 0000000..acffd90 --- /dev/null +++ b/recipes/rc2014/sdcard/spirelay/spirelay.sch @@ -0,0 +1,621 @@ +EESchema Schematic File Version 4 +LIBS:spirelay-cache +EELAYER 29 0 +EELAYER END +$Descr USLetter 11000 8500 +encoding utf-8 +Sheet 1 1 +Title "SPI relay" +Date "" +Rev "" +Comp "" +Comment1 "Wire all SCK connections to jumpers for easy SPI polarity adjustments" +Comment2 "SCK is wired to SPI mode 0" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L local:Z80BUS J1 +U 1 1 5CC2DD7B +P 2300 3400 +F 0 "J1" H 2300 5200 50 0000 C CNN +F 1 "Z80BUS" H 2300 5100 50 0000 C CNN +F 2 "" H 2300 3450 50 0001 C CNN +F 3 " ~" H 2300 3450 50 0001 C CNN + 1 2300 3400 + -1 0 0 -1 +$EndComp +$Comp +L Device:D D2 +U 1 1 5CC3715D +P 2900 2450 +F 0 "D2" V 2854 2371 50 0000 R CNN +F 1 "D" V 2945 2371 50 0000 R CNN +F 2 "" H 2900 2450 50 0001 C CNN +F 3 "~" H 2900 2450 50 0001 C CNN + 1 2900 2450 + 0 -1 1 0 +$EndComp +$Comp +L Device:D D3 +U 1 1 5CC37D3A +P 3150 2450 +F 0 "D3" V 3104 2371 50 0000 R CNN +F 1 "D" V 3195 2371 50 0000 R CNN +F 2 "" H 3150 2450 50 0001 C CNN +F 3 "~" H 3150 2450 50 0001 C CNN + 1 3150 2450 + 0 -1 1 0 +$EndComp +$Comp +L Device:D D4 +U 1 1 5CC37F17 +P 3400 2450 +F 0 "D4" V 3354 2371 50 0000 R CNN +F 1 "D" V 3445 2371 50 0000 R CNN +F 2 "" H 3400 2450 50 0001 C CNN +F 3 "~" H 3400 2450 50 0001 C CNN + 1 3400 2450 + 0 -1 1 0 +$EndComp +$Comp +L Device:D D5 +U 1 1 5CC39EE8 +P 3650 2450 +F 0 "D5" V 3604 2371 50 0000 R CNN +F 1 "D" V 3695 2371 50 0000 R CNN +F 2 "" H 3650 2450 50 0001 C CNN +F 3 "~" H 3650 2450 50 0001 C CNN + 1 3650 2450 + 0 -1 1 0 +$EndComp +$Comp +L Device:D D6 +U 1 1 5CC3A0E2 +P 3900 2450 +F 0 "D6" V 3854 2371 50 0000 R CNN +F 1 "D" V 3945 2371 50 0000 R CNN +F 2 "" H 3900 2450 50 0001 C CNN +F 3 "~" H 3900 2450 50 0001 C CNN + 1 3900 2450 + 0 -1 1 0 +$EndComp +Wire Wire Line + 2600 2600 2900 2600 +Wire Wire Line + 2600 2700 3150 2700 +Wire Wire Line + 3150 2700 3150 2600 +Wire Wire Line + 2600 2800 3400 2800 +Wire Wire Line + 3400 2800 3400 2600 +Wire Wire Line + 2600 2900 3650 2900 +Wire Wire Line + 3650 2900 3650 2600 +Wire Wire Line + 2600 3000 3900 3000 +Wire Wire Line + 3900 3000 3900 2600 +Wire Wire Line + 2900 2300 3150 2300 +Connection ~ 3150 2300 +Wire Wire Line + 3150 2300 3400 2300 +Connection ~ 3400 2300 +Wire Wire Line + 3400 2300 3650 2300 +Connection ~ 3650 2300 +Wire Wire Line + 3650 2300 3900 2300 +Connection ~ 3900 2300 +Text Label 2600 3100 0 50 ~ 0 +A2 +Text Label 2600 3400 0 50 ~ 0 +GND +Text Label 2600 3500 0 50 ~ 0 +VCC +NoConn ~ 2600 1800 +NoConn ~ 2600 1900 +NoConn ~ 2600 2000 +NoConn ~ 2600 2100 +NoConn ~ 2600 2200 +NoConn ~ 2600 2300 +NoConn ~ 2600 2400 +NoConn ~ 2600 2500 +Text Label 3650 2050 0 50 ~ 0 +A2 +NoConn ~ 2600 3700 +NoConn ~ 2600 3900 +NoConn ~ 2600 4000 +$Comp +L Device:D D1 +U 1 1 5CC44D92 +P 2900 2150 +F 0 "D1" V 2854 2071 50 0000 R CNN +F 1 "D" V 2945 2071 50 0000 R CNN +F 2 "" H 2900 2150 50 0001 C CNN +F 3 "~" H 2900 2150 50 0001 C CNN + 1 2900 2150 + 0 -1 -1 0 +$EndComp +Text Label 2600 4300 0 50 ~ 0 +IORQ +Text Label 2900 2000 0 50 ~ 0 +IORQ +$Comp +L power:+5V #PWR02 +U 1 1 5CC5F918 +P 10000 1000 +F 0 "#PWR02" H 10000 850 50 0001 C CNN +F 1 "+5V" H 10015 1173 50 0000 C CNN +F 2 "" H 10000 1000 50 0001 C CNN +F 3 "" H 10000 1000 50 0001 C CNN + 1 10000 1000 + 1 0 0 -1 +$EndComp +Text Label 10000 1100 0 50 ~ 0 +VCC +Wire Wire Line + 10000 1100 10000 1000 +$Comp +L power:GND #PWR01 +U 1 1 5CC60F2C +P 9700 1000 +F 0 "#PWR01" H 9700 750 50 0001 C CNN +F 1 "GND" H 9705 827 50 0000 C CNN +F 2 "" H 9700 1000 50 0001 C CNN +F 3 "" H 9700 1000 50 0001 C CNN + 1 9700 1000 + 1 0 0 -1 +$EndComp +Text Label 9700 1000 0 50 ~ 0 +GND +$Comp +L Device:R R1 +U 1 1 5CC61617 +P 4600 1900 +F 0 "R1" H 4670 1946 50 0000 L CNN +F 1 "10K" H 4670 1855 50 0000 L CNN +F 2 "" V 4530 1900 50 0001 C CNN +F 3 "~" H 4600 1900 50 0001 C CNN + 1 4600 1900 + 1 0 0 -1 +$EndComp +Text Label 4600 1750 0 50 ~ 0 +GND +Entry Wire Line + 2650 4400 2750 4500 +Entry Wire Line + 2650 4500 2750 4600 +Entry Wire Line + 2650 4600 2750 4700 +Entry Wire Line + 2650 4700 2750 4800 +Entry Wire Line + 2650 4800 2750 4900 +Entry Wire Line + 2650 4900 2750 5000 +Entry Wire Line + 2650 5000 2750 5100 +Entry Wire Line + 2650 5100 2750 5200 +Wire Wire Line + 2600 4400 2650 4400 +Wire Wire Line + 2600 4500 2650 4500 +Wire Wire Line + 2600 4600 2650 4600 +Wire Wire Line + 2600 4700 2650 4700 +Wire Wire Line + 2600 4800 2650 4800 +Wire Wire Line + 2600 4900 2650 4900 +Wire Wire Line + 2600 5000 2650 5000 +Wire Wire Line + 2600 5100 2650 5100 +$Comp +L 74xx:74HC595 U1 +U 1 1 5CC7725A +P 3350 5000 +F 0 "U1" H 3350 5781 50 0000 C CNN +F 1 "74HC595" H 3350 5690 50 0000 C CNN +F 2 "" H 3350 5000 50 0001 C CNN +F 3 "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" H 3350 5000 50 0001 C CNN + 1 3350 5000 + -1 0 0 -1 +$EndComp +$Comp +L 74xx:74LS165 U3 +U 1 1 5CC79C4A +P 4950 5050 +F 0 "U3" H 4950 6131 50 0000 C CNN +F 1 "74LS165" H 4950 6040 50 0000 C CNN +F 2 "" H 4950 5050 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS165" H 4950 5050 50 0001 C CNN + 1 4950 5050 + -1 0 0 -1 +$EndComp +Wire Bus Line + 2750 6450 5750 6450 +Entry Wire Line + 5650 4550 5750 4650 +Entry Wire Line + 5650 4650 5750 4750 +Entry Wire Line + 5650 4750 5750 4850 +Entry Wire Line + 5650 4850 5750 4950 +Entry Wire Line + 5650 4950 5750 5050 +Entry Wire Line + 5650 5050 5750 5150 +Entry Wire Line + 5650 5150 5750 5250 +Entry Wire Line + 5650 5250 5750 5350 +Wire Wire Line + 5650 4550 5450 4550 +Wire Wire Line + 5450 4650 5650 4650 +Wire Wire Line + 5650 4750 5450 4750 +Wire Wire Line + 5650 4850 5450 4850 +Wire Wire Line + 5650 4950 5450 4950 +Wire Wire Line + 5650 5050 5450 5050 +Wire Wire Line + 5650 5150 5450 5150 +Wire Wire Line + 5650 5250 5450 5250 +Entry Wire Line + 2750 4500 2850 4600 +Entry Wire Line + 2750 4600 2850 4700 +Entry Wire Line + 2750 4700 2850 4800 +Entry Wire Line + 2750 4800 2850 4900 +Entry Wire Line + 2750 4900 2850 5000 +Entry Wire Line + 2750 5000 2850 5100 +Entry Wire Line + 2750 5100 2850 5200 +Entry Wire Line + 2750 5200 2850 5300 +Wire Wire Line + 2850 4600 2950 4600 +Wire Wire Line + 2950 4700 2850 4700 +Wire Wire Line + 2850 4800 2950 4800 +Wire Wire Line + 2950 4900 2850 4900 +Wire Wire Line + 2850 5000 2950 5000 +Wire Wire Line + 2950 5100 2850 5100 +Wire Wire Line + 2850 5200 2950 5200 +Wire Wire Line + 2950 5300 2850 5300 +Text Label 2600 3800 0 50 ~ 0 +CLK +Text Label 6250 5250 0 50 ~ 0 +CLK +Text Label 6250 5450 0 50 ~ 0 +~SWR +Text Label 7400 4450 0 50 ~ 0 +SCK +Text Label 3750 4600 0 50 ~ 0 +MISO +NoConn ~ 3750 4900 +Text Label 3750 4800 0 50 ~ 0 +SCK +Text Label 2600 4100 0 50 ~ 0 +~WR +Text Label 5450 5650 0 50 ~ 0 +~SCK +NoConn ~ 4450 4550 +Text Label 4300 4450 0 50 ~ 0 +MOSI +Wire Wire Line + 4300 4450 4450 4450 +Text Label 4950 6050 0 50 ~ 0 +GND +Text Label 3350 5700 0 50 ~ 0 +GND +Text Label 6900 5750 0 50 ~ 0 +GND +Text Label 4950 4150 0 50 ~ 0 +VCC +Text Label 6900 4150 0 50 ~ 0 +VCC +Text Label 3350 4400 0 50 ~ 0 +VCC +NoConn ~ 2950 5500 +Connection ~ 2900 2300 +Wire Wire Line + 3750 2050 3650 2050 +Text Label 2600 4200 0 50 ~ 0 +~RD +Text Label 5450 5450 0 50 ~ 0 +RUNNING +Text Label 3750 5200 0 50 ~ 0 +~SRD +$Comp +L 74xx:74LS161 U5 +U 1 1 5CC8C610 +P 6900 4950 +F 0 "U5" H 6900 5931 50 0000 C CNN +F 1 "74LS161" H 6900 5840 50 0000 C CNN +F 2 "" H 6900 4950 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS161" H 6900 4950 50 0001 C CNN + 1 6900 4950 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6250 5450 6400 5450 +NoConn ~ 6400 4450 +NoConn ~ 6400 4550 +NoConn ~ 6400 4650 +NoConn ~ 6400 4750 +Text Label 6250 4950 0 50 ~ 0 +VCC +Wire Wire Line + 6250 4950 6400 4950 +Text Label 6050 5050 0 50 ~ 0 +RUNNING +Wire Wire Line + 6050 5050 6400 5050 +Wire Wire Line + 6250 5250 6400 5250 +NoConn ~ 7400 4550 +NoConn ~ 7400 4650 +NoConn ~ 7400 4750 +$Comp +L 4xxx:40106 U6 +U 2 1 5CCB00F9 +P 8100 4950 +F 0 "U6" H 8100 5267 50 0000 C CNN +F 1 "40106" H 8100 5176 50 0000 C CNN +F 2 "" H 8100 4950 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/HEF40106B.pdf" H 8100 4950 50 0001 C CNN + 2 8100 4950 + 1 0 0 -1 +$EndComp +Text Label 8400 4950 0 50 ~ 0 +RUNNING +Text Label 5400 2300 0 50 ~ 0 +~SELECT +Text Label 5450 5750 0 50 ~ 0 +~RUNNING +Text Label 2600 3600 0 50 ~ 0 +~M1 +Text Label 3650 1850 0 50 ~ 0 +~M1 +Wire Wire Line + 3650 1850 3750 1850 +Text Label 6250 5150 0 50 ~ 0 +VCC +Wire Wire Line + 6250 5150 6400 5150 +Text Label 7400 4950 0 50 ~ 0 +~RUNNING +Wire Wire Line + 7400 4950 7800 4950 +Text Label 3750 5100 0 50 ~ 0 +SRD +$Comp +L 4xxx:40106 U6 +U 1 1 5CCB36F0 +P 8100 4450 +F 0 "U6" H 8100 4767 50 0000 C CNN +F 1 "40106" H 8100 4676 50 0000 C CNN +F 2 "" H 8100 4450 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/HEF40106B.pdf" H 8100 4450 50 0001 C CNN + 1 8100 4450 + 1 0 0 -1 +$EndComp +Wire Wire Line + 7400 4450 7800 4450 +Text Label 8400 4450 0 50 ~ 0 +~SCK +Text Label 2600 3300 0 50 ~ 0 +A0 +Wire Wire Line + 9650 3950 9800 3950 +Text Label 9650 3950 0 50 ~ 0 +~SS +Wire Wire Line + 9650 3750 9800 3750 +Wire Wire Line + 9650 3650 9800 3650 +Text Label 9650 3850 0 50 ~ 0 +MISO +Text Label 9650 3750 0 50 ~ 0 +MOSI +Text Label 9650 3650 0 50 ~ 0 +SCK +$Comp +L Connector:Conn_01x04_Female J2 +U 1 1 5CC93445 +P 10000 3750 +F 0 "J2" H 10028 3726 50 0000 L CNN +F 1 "SPI" H 10028 3635 50 0000 L CNN +F 2 "" H 10000 3750 50 0001 C CNN +F 3 "~" H 10000 3750 50 0001 C CNN + 1 10000 3750 + 1 0 0 -1 +$EndComp +Text Label 9050 3850 1 50 ~ 0 +VCC +$Comp +L Device:R R2 +U 1 1 5CCF7173 +P 9200 3850 +F 0 "R2" H 9270 3896 50 0000 L CNN +F 1 "10K" H 9270 3805 50 0000 L CNN +F 2 "" V 9130 3850 50 0001 C CNN +F 3 "~" H 9200 3850 50 0001 C CNN + 1 9200 3850 + 0 -1 -1 0 +$EndComp +Text Label 7900 1800 0 50 ~ 0 +~SWR +Text Label 6700 2200 0 50 ~ 0 +~SRD +Text Label 5550 2100 0 50 ~ 0 +~RD +$Comp +L 74xx:74LS139 U4 +U 2 1 5CD24CDF +P 7400 1900 +F 0 "U4" H 7400 2267 50 0000 C CNN +F 1 "74LS139" H 7400 2176 50 0000 C CNN +F 2 "" H 7400 1900 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS139" H 7400 1900 50 0001 C CNN + 2 7400 1900 + 1 0 0 -1 +$EndComp +Text Label 6800 1900 0 50 ~ 0 +A0 +Wire Wire Line + 6800 1900 6900 1900 +NoConn ~ 7900 2100 +Wire Wire Line + 7900 1900 8150 1900 +Wire Wire Line + 8150 1900 8150 1650 +Wire Wire Line + 8150 1650 8600 1650 +Wire Wire Line + 7900 2000 8250 2000 +Wire Wire Line + 8250 2000 8250 2500 +Wire Wire Line + 8250 2500 8600 2500 +Wire Wire Line + 8600 1850 8600 1950 +Wire Wire Line + 8600 1950 9100 1950 +Wire Wire Line + 9100 1950 9100 2250 +Wire Wire Line + 9100 2250 9200 2250 +Wire Wire Line + 9200 2250 9200 2400 +Text Label 9400 1750 0 50 ~ 0 +~SS +Wire Wire Line + 9200 1750 9400 1750 +$Comp +L 74xx:74LS139 U4 +U 1 1 5CD5E273 +P 6200 2100 +F 0 "U4" H 6200 2467 50 0000 C CNN +F 1 "74LS139" H 6200 2376 50 0000 C CNN +F 2 "" H 6200 2100 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS139" H 6200 2100 50 0001 C CNN + 1 6200 2100 + 1 0 0 -1 +$EndComp +Text Label 5550 2000 0 50 ~ 0 +~WR +Wire Wire Line + 5550 2000 5700 2000 +Wire Wire Line + 5550 2100 5700 2100 +NoConn ~ 6700 2300 +Wire Wire Line + 6800 1800 6900 1800 +Text Label 6800 1800 0 50 ~ 0 +A1 +Text Label 2600 3200 0 50 ~ 0 +A1 +Wire Wire Line + 4350 2300 4600 2300 +Connection ~ 4350 2300 +Wire Wire Line + 4600 2050 4600 2300 +Connection ~ 4600 2300 +Wire Wire Line + 4600 2300 5700 2300 +Wire Wire Line + 3900 2300 4350 2300 +$Comp +L 4xxx:4011 U2 +U 1 1 5CD8A75D +P 8900 1750 +F 0 "U2" H 8900 2075 50 0000 C CNN +F 1 "4011" H 8900 1984 50 0000 C CNN +F 2 "" H 8900 1750 50 0001 C CNN +F 3 "http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4011bms-12bms-23bms.pdf" H 8900 1750 50 0001 C CNN + 1 8900 1750 + 1 0 0 -1 +$EndComp +$Comp +L 4xxx:4011 U2 +U 2 1 5CD8BFFB +P 8900 2400 +F 0 "U2" H 8900 2725 50 0000 C CNN +F 1 "4011" H 8900 2634 50 0000 C CNN +F 2 "" H 8900 2400 50 0001 C CNN +F 3 "http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4011bms-12bms-23bms.pdf" H 8900 2400 50 0001 C CNN + 2 8900 2400 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9350 3850 9800 3850 +Wire Wire Line + 8600 2000 9200 2000 +Wire Wire Line + 9200 2000 9200 1750 +Connection ~ 9200 1750 +Wire Wire Line + 8600 2000 8600 2300 +$Comp +L 4xxx:4011 U2 +U 3 1 5CCF97CB +P 4050 1950 +F 0 "U2" H 4050 2275 50 0000 C CNN +F 1 "4011" H 4050 2184 50 0000 C CNN +F 2 "" H 4050 1950 50 0001 C CNN +F 3 "http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4011bms-12bms-23bms.pdf" H 4050 1950 50 0001 C CNN + 3 4050 1950 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4350 1950 4350 2300 +NoConn ~ 6700 2000 +Wire Wire Line + 6700 2100 6900 2100 +NoConn ~ 5450 4450 +$Comp +L 4xxx:40106 U? +U 2 1 5CD09E16 +P 7250 2650 +F 0 "U?" H 7250 2967 50 0000 C CNN +F 1 "40106" H 7250 2876 50 0000 C CNN +F 2 "" H 7250 2650 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/HEF40106B.pdf" H 7250 2650 50 0001 C CNN + 2 7250 2650 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6950 2650 6950 2200 +Wire Wire Line + 6950 2200 6700 2200 +Wire Bus Line + 2750 4500 2750 6450 +Wire Bus Line + 5750 4650 5750 6450 +Text Label 7550 2650 0 50 ~ 0 +SRD +$EndSCHEMATC diff --git a/recipes/rc2014/sdcard/spirelay/sym-lib-table b/recipes/rc2014/sdcard/spirelay/sym-lib-table new file mode 100644 index 0000000..387ece6 --- /dev/null +++ b/recipes/rc2014/sdcard/spirelay/sym-lib-table @@ -0,0 +1,3 @@ +(sym_lib_table + (lib (name local)(type Legacy)(uri ${KIPRJMOD}/local.lib)(options "")(descr "")) +)