|
1 | | -# Neotron-Pico |
| 1 | +# Neotron Pico |
| 2 | + |
| 3 | +> A Neotron system powered by the Raspberry Pi Pico, in a micro-ATX form-factor. |
| 4 | +
|
| 5 | +The Neotron Pico is based around the idea of the [Neotron-32](https://github.com/neotron-compute/Neotron-32-Hardware), but using a low-cost Raspberry Pi Pico instead of a Texas Instuments Tiva-C Launchpad. It also stretches out to full micro-ATX size, and adds more expansion slots so that you can easily design and add your own peripherals. |
| 6 | + |
| 7 | +## Design |
| 8 | + |
| 9 | +The Raspberry Pi Pico is the core of the Neotron Pico. It uses PIO statemachines to generate 12-bit Super VGA video, and digital 16 bit 48 kHz stereo audio. It also has both I²C and SPI buses. SPI chipselects and IRQs are handled by an SPI-to-GPIO expander. This provides eight chip-selects and eight IRQs, to support up to eight expansion slots or peripherals. The eight chip-selects are gated with a tri-state bus transceiver, allowing the Pico to talk to either the I/O exander, or the selected expansion slot. The board has an SD fitted in the 'Slot 7' position, leaving Slot 0 through to Slot 6 available for expansion. Each expansion slot has I²C and SPI with unique chip-select and IRQ signals. A separate Board Mangement Controller also sits on the I²C bus handling PS/2 devices, and controlling power and reset. The BMC uses IRQ 7. |
| 10 | + |
| 11 | +## Software |
| 12 | + |
| 13 | +The Neotron Pico is designed to run the Neotron OS - a CP/M or MS-DOS alike OS written in Rust. But, being open-hardware, you can program your Neotron Pico to do pretty much anything. |
| 14 | + |
| 15 | +## Components |
| 16 | + |
| 17 | +### Processor |
| 18 | + |
| 19 | +The main processor module is the Raspberry Pi Pico, which features: |
| 20 | + |
| 21 | +* A Raspberry Pi Silicon RP2040 SoC |
| 22 | + * Dual-core Cortex-M0+ @ 133 MHz |
| 23 | + * 264 KiB internal SRAM |
| 24 | + * No internal Flash |
| 25 | + * USB 1.1 |
| 26 | + * SPI, UART, I²C and _Programmable I/O_ peripherals |
| 27 | +* 26 GPIO pins |
| 28 | +* 2 MiB QSPI Flash |
| 29 | +* On-board LED |
| 30 | +* On-board 5V to 3.3V regulator |
| 31 | +* USB 2.0 Full-speed OTG micro-AB port |
| 32 | +* 4.00 USD / 3.60 GBP retail price |
| 33 | + |
| 34 | +The limited I/O on the Pico (we are using half the available pins just for the video output) is supplemented using a Microchip MCP23S17 SPI to GPIO expander, an octal buffer. The buffer allows the Pico to send its SPI bus data to either the MCP23S17 (to set a specific Chip Select line), or the rest of the system. Without the buffer, it would be impossible to command the MCP23S17 to disable a chip-select line once it had been set, without the traffic also going to the selected expansion slot! |
| 35 | + |
| 36 | +| Pin | Name | Signal | Function | |
| 37 | +| :--- | :--- | :------------- | :------------------------------------------------- | |
| 38 | +| xx | GPx | VGA_RED0 | Digital VGA signal, Red channel LSB | |
| 39 | +| xx | GPx | VGA_RED1 | Digital VGA signal, Red channel | |
| 40 | +| xx | GPx | VGA_RED2 | Digital VGA signal, Red channel | |
| 41 | +| xx | GPx | VGA_RED3 | Digital VGA signal, Red channel MSB | |
| 42 | +| xx | GPx | VGA_GREEN0 | Digital VGA signal, Green channel LSB | |
| 43 | +| xx | GPx | VGA_GREEN1 | Digital VGA signal, Green channel | |
| 44 | +| xx | GPx | VGA_GREEN2 | Digital VGA signal, Green channel | |
| 45 | +| xx | GPx | VGA_GREEN3 | Digital VGA signal, Green channel MSB | |
| 46 | +| xx | GPx | VGA_BLUE0 | Digital VGA signal, Blue channel LSB | |
| 47 | +| xx | GPx | VGA_BLUE1 | Digital VGA signal, Blue channel | |
| 48 | +| xx | GPx | VGA_BLUE2 | Digital VGA signal, Blue channel | |
| 49 | +| xx | GPx | VGA_BLUE3 | Digital VGA signal, Blue channel MSB | |
| 50 | +| xx | GPx | VGA_HSYNC | VGA Horizontal Sync (31.5 kHz) | |
| 51 | +| xx | GPx | VGA_VSYNC | VGA Vertical Sync (60 Hz) | |
| 52 | +| xx | GPx | I2C_SDA | I²C Data | |
| 53 | +| xx | GPx | I2C_SCL | I²C Clock | |
| 54 | +| xx | GPx | SPI_CLK | SPI Clock | |
| 55 | +| xx | GPx | SPI_CIPO | SPI Data In | |
| 56 | +| xx | GPx | SPI_COPI | SPI Data Out | |
| 57 | +| xx | GPx | SPI_CS_nIOCS | Low selects MCP23S17, High selects Expansion Slots | |
| 58 | +| xx | GPx | nIRQn | Interrupt Request Input from MCP23S17 | |
| 59 | +| xx | GPx | I2S_DAC_DATA | Digital Audio Output | |
| 60 | +| xx | GPx | I2S_ADC_DATA | Digital Audio Input | |
| 61 | +| xx | GPx | I2S_BIT_CLOCK | Digital Audio Bit Clock (1.536MHz) | |
| 62 | +| xx | GPx | I2S_LR_CLOCK | Digital Audio Sync (96kHz) | |
| 63 | +| xx | GPx | I2S_MAIN_CLOCK | Digital Audio Master Clock (12.288MHz) | |
| 64 | + |
| 65 | +### Super VGA output |
| 66 | + |
| 67 | +The Raspberry Pi Silicon RP2040 generates 12-bit VGA video at a range of standard resolutions (including 640x480 @ 60 Hz). |
| 68 | + |
| 69 | +* 15-pin D-Sub VGA interface |
| 70 | +* 12-bit (4-4-4) RGB R2R DAC |
| 71 | +* 3peak TPF133A or Texas Instruments THS7316 RGB video buffer |
| 72 | + * 36 MHz bandwidth - 1024x768@60Hz maximum |
| 73 | + * 6dB gain |
| 74 | + * Drives 75 ohm standard VGA interface |
| 75 | + * SOIC-8 package (1.27mm pitch) |
| 76 | +* Texas Instruments TPD7S019 Sync/DDC level shifter and RGB EMC filter |
| 77 | + * SSOP-16 package (0.635mm pitch) |
| 78 | + |
| 79 | +### Audio Codec |
| 80 | + |
| 81 | +The audio subsystem offers 16-bit 48 kHz stereo audio in and out through a classic blue/green/pink triple 3.5mm TRS jack. Input and Output volume can be software controlled. |
| 82 | + |
| 83 | +* Texas Instruments TLV320AIC23B |
| 84 | + * I²S + I²C interface |
| 85 | + * Amplified 32mW headphone output and line out |
| 86 | + * Microphone in and line in |
| 87 | + * TSSOP-28 package (0.635mm pitch) |
| 88 | +* Triple 3.5mm TRS jack (Kycon STX-4335-5BGP-S1) |
| 89 | + * Headphone Out (green) |
| 90 | + * Line In (blue) |
| 91 | + * Microphone In (pink) |
| 92 | +* AC'97 Pin Header for ATX cases with Audio Jacks |
| 93 | + * Headphone Out |
| 94 | + * Microphone In |
| 95 | +* Extra line-level output pin header (e.g. for additional RCA audio jacks - operates in addition to 3.5mm headphone jack output) |
| 96 | +* Internal line-level input pin header (e.g. for CD-ROM audio - disabled when 3.5mm line-in jack in-use) |
| 97 | + |
| 98 | +### Board Management Controller |
| 99 | + |
| 100 | +Power-on Reset sequencing, soft shutdown, voltage monitoring and PS/2 interfacing is handled by a separate STM32F0 SoC. |
| 101 | + |
| 102 | +* ST Micro STM32F0 (STM32F031K6T6) microcontroller |
| 103 | + * 32-bit Arm Cortex-M0+ Core |
| 104 | + * 3.3V I/O (5V tolerant) |
| 105 | + * 32 KiB Flash |
| 106 | + * 4 KiB SRAM |
| 107 | + * LQFP-32 package (0.8mm pitch) |
| 108 | +* Controls two PS/2 ports |
| 109 | +* Monitors 5V and 3.3V rails |
| 110 | +* Controls system reset, soft-on and soft-off for main CPU |
| 111 | +* Can the main 5V regulator on and off |
| 112 | +* Runs from 3.3V stand-by regulator |
| 113 | +* I²C interface (with dedicated IRQ line) with main CPU |
| 114 | + |
| 115 | +| Pin | Name | Signal | Function | |
| 116 | +| :--- | :--- | :------------ | :------------------------------------------------------ | |
| 117 | +| 14 | PB0 | - | Spare | |
| 118 | +| 15 | PB1 | - | Spare | |
| 119 | +| 26 | PB3 | - | Spare | |
| 120 | +| 27 | PB4 | PS2_CLK1 | Mouse Clock Input | |
| 121 | +| 28 | PB5 | PS2_DAT1 | Mouse Data Input | |
| 122 | +| 29 | PB6 | I2C_SCL | I²C Clock | |
| 123 | +| 30 | PB7 | I2C_SDA | I²C Data | |
| 124 | +| 2 | PF0 | - | Spare | |
| 125 | +| 3 | PF1 | - | Spare | |
| 126 | +| 6 | PA0 | MON_3V3 | 3.3V rail monitor Input (1.65V nominal) | |
| 127 | +| 7 | PA1 | MON_5V | 5.0V rail monitor Input (1.65V nominal) | |
| 128 | +| 8 | PA2 | UART_TX | UART Data Output | |
| 129 | +| 9 | PA3 | UART_RX | UART Data Input | |
| 130 | +| 10 | PA4 | /BUTTON_PWR | Power Button Input | |
| 131 | +| 11 | PA5 | STATUS_LED | Status LED Output | |
| 132 | +| 12 | PA6 | /BUTTON_RST | Reset Button Input | |
| 133 | +| 13 | PA7 | - | Spare | |
| 134 | +| 18 | PA8 | /IRQ | Interrupt Output | |
| 135 | +| 19 | PA9 | PS2_DAT0 | Keyboard Data Input | |
| 136 | +| 20 | PA10 | PS2_CLK0 | Keyboard Clock Input | |
| 137 | +| 21 | PA11 | /RESET | System Reset Output | |
| 138 | +| 22 | PA12 | DC_ON | PSU Enable Output | |
| 139 | +| 23 | PA13 | SWDIO | SWD Progamming Data Input | |
| 140 | +| 24 | PA14 | SWCLK_BOOT_TX | SWD Programming Clock Input OR Bootloader UART RX Input | |
| 141 | +| 25 | PA15 | BOOT_RX | Bootloader UART TX Output | |
| 142 | + |
| 143 | +### PS/2 Keyboard and Mouse |
| 144 | + |
| 145 | +* Kycon two-port stacked 6-pin DIN sockets (Kycon KMDGX-6S/6S-S4N) |
| 146 | +* Controlled via Board Management Controller |
| 147 | + |
| 148 | +### Power Supply |
| 149 | + |
| 150 | +* Unregulated 12V (8V to 28V) input fused with a PTC at 2A |
| 151 | +* 3A 5.0V main regulator (DC-DC switch-mode regulator module) |
| 152 | + * Morsun K7805-3AR3 |
| 153 | +* 30mA 3.3V stand-by regulator (a micropower linear regulator) |
| 154 | +* 1A 3.3V regulator (a high-power 1117 type linear regulator) |
| 155 | +* Controlled by the Board Management Controller |
| 156 | + |
| 157 | +## Expansion |
| 158 | + |
| 159 | +The seven expansion sockets allow you to add on I²C or SPI based devices at a later date. Each provides a single chip-select and a single IRQ line - the motherboard design should ensure each socket gets a unique signal for each of these. Each expansion device should also contain a AT24C256 or similar EEPROM device. To allow these EEPROM devices to be scanned, each slot also contains three `EEPROM_ADDRESS` pins, tied to Vcc or GND in a unique combination. These should be connected through to the EEPROM address lines on your AT24C256, thus ensuring that each expansion card has its EEPROM at a unique address - 0x50 on Slot 0 through to a maximum possible 0x57 for Slot 7. Where your board has on-board devices, you should fit an AT24C256 EEPROM for each device so that the on-board devices can be discovered, exactly as if they were on an expansion card. |
| 160 | + |
| 161 | +The expansion slot is a simple 2x10 header. We suggest the use of a TE card-edge connector, but you could equally use two 1x10 pin-headers if desired. |
| 162 | + |
| 163 | +The pin functions are: |
| 164 | + |
| 165 | +``` |
| 166 | + SPI_COPI 1 2 GND |
| 167 | + SPI_CIPO 3 4 GND |
| 168 | + SPI_CLK 5 6 GND |
| 169 | + ~SPI_CS 7 8 ~IRQ |
| 170 | + I2C_SDA 9 10 I2C_SCL |
| 171 | + EEPROM_ADDR0 11 12 EEPROM_ADDR1 |
| 172 | + EEPROM_ADDR2 13 14 ~RESET |
| 173 | + 5V 15 16 5V |
| 174 | + 3V3 17 18 3V3 |
| 175 | + GND 19 20 GND |
| 176 | +``` |
| 177 | + |
| 178 | +Four expansion slots line up with the ATX case expansion brackets, allowing you to use cards with external connectors. Three of the expansion slots are internal use only. |
| 179 | + |
| 180 | +## Expansion Ideas |
| 181 | + |
| 182 | +Why not design and build your own expansion card? You could try designing: |
| 183 | + |
| 184 | +* A dual Atari/SEGA 9-pin Joypad Interface |
| 185 | +* A Mikro Eletronika Click adaptor, allow many of the range of [Click board](https://www.mikroe.com/click) to be fitted |
| 186 | +* A Wi-Fi/Bluetooth card, using an Espressif ESP32 |
| 187 | +* A second processor card - perhaps with a RISC-V microcontroller, or classic Zilog Z80 |
| 188 | +* An OPL2 or OPL3 based FM synthesiser card |
| 189 | +* An ISA adaptor card (taking an ISA card at right-angles, i.e. parallel to the base board) - a simple microcontroller should be able to bit-bang the ISA bus at 8 MHz and offer an SPI peripheral interface to the Neotron Expansion Slot |
| 190 | +* An IDE interface card, allowing 40-pin IDE Hard Disk Drives and CD-ROM drives to be used - this will be quite similar to an ISA bus adaptor |
| 191 | +* A floppy drive controller card - either using an eSPI Super I/O chip, or connecting a legacy ISA bus floppy controller as per the ISA adaptor |
| 192 | +* A video card for a second monitor output, perhaps based on the CPLD used in the [VGAtonic](https://hackaday.io/project/6309-vga-graphics-over-spi-and-serial-vgatonic) |
| 193 | + |
| 194 | +## Changelog |
| 195 | + |
| 196 | +See [CHANGELOG.md](./CHANGELOG.md) for a list of detailed changes. |
| 197 | + |
| 198 | +## Licence |
| 199 | + |
| 200 | +These documents, schematics and PCB designs are Copyright (c) The Neotron Developers. |
| 201 | + |
| 202 | +[](http://creativecommons.org/licenses/by-sa/4.0/) |
| 203 | + |
| 204 | +This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). |
| 205 | + |
| 206 | +## Contribution Agreement |
| 207 | + |
| 208 | +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions. |
| 209 | + |
| 210 | +## Datasheets and References |
| 211 | + |
| 212 | +* Raspberry Pi Pico |
| 213 | +* Raspberry Pi Silicon RP2040 |
| 214 | +* ST Microelectronics STM32F031K6T6 |
| 215 | +* Morsun K7805-3AR3 |
| 216 | +* Texas Instruments TLV320AIC23B |
| 217 | +* Texas Instruments THS7316 |
| 218 | +* Texas Instruments TPD7S019 |
0 commit comments