Changes

Albireo

1,326 bytes added, 15:17, 26 August 2017
Update with info and changes from hw revision 1.1.
Albireo is an expansion for the Amstrad CPC computers (all models). Its main goal is to provide reliable, fast, cheap and large storage, which it achieves by using a MicroSD card. But the board has a lot of features packed in:
* USB host port, allowing to connect USB mass storage, mouse, and other USB peripherals * USB device port, allowing to link the CPC to a modern computer with maximal link speed (faster than the z80 can handle, and with on-board buffer and hardware flow control).
The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.
 
=== Board revisions ===
 
The hardware went through multiple iterations before reaching final state. Each version identifies itself on the USB link and the version should be visible in Windows device manager or lsusb on Linux.
 
==== Initial prototypes ====
 
The first prototype was an hand-wired one. There were some changes to I/O ports used since then, so it is not usable anymore.
 
==== Version 0.9 ====
 
The first 5 boards were manufactured with an early PCB design, which required some wire-patches to get things working. With the wire-patches, this version behaves the same as 1.0.
 
==== Version 1.0 ====
 
About 20 boards were shipped with version 1.0. Unfortunately, as people started to write software using it it turned out that the serial port chip has compatibility problems with the z80 timings. As a result, this version of the board can use the serial port only with the FIFO disabled, which makes it impossible to reach high baudrates. The board is still perfectly usable if you are interested only in the microSD and USB host port.
 
==== Version 1.1 ====
 
This version of the board replaces the serial chip with a slightly different one. The board still reads "v1.0" as it is the same PCB, only the chip used has changed.
 
You can identify your board from the info it sends on the USB device port, or by checking the serial chip (square chip on the back of the board).
Version 1.0 uses a TI TL16C550D chip. Version 1.1 uses a NXP SC16C650B chip.
=== How does it work? ===
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a TL16C550DSC16C650B, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 24MHz 48MHz clocks for the two other chips.* The 16C550 16C650 "modem control" lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.
=== What is it useful for? ===
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.
 
There is a driver in SymbOS to use Albireo with an USB mouse.
== Hardware ==
=== I/O ports ===
Albireo is largely built around two independant chips, the CH376 and the TL16C550D. Because of cost and chip count limitations in address decoding, they each have slightly separate address ranges. The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.
* FE81: "COMMAND" (write) and "STATUS" (read) port
==== TL16C550D SC16C650B registers ====
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.
==== Individual interrupts control ====
The TL16C550D SC16C650B manages several different interrupt sources. These can be individually configured using the interrupt enable register.
* Bit 0: data receive interrupt, triggered whenever a byte is received on the serial line
* CH376: USB-Host and SD card controller (part 1 readily available as "CH376DS1.PDF", and [http://pulko.mandy.pagesperso-orange.fr/shinra/CH376_ext.shtml part 2], with help from Google translate.
* TL16C550DSC16C650B: UART for hi-speed link (also used for interrupts control)
* FT231X: UART to USB converter for hi-speed link (also used for clock generation)
1,144
edits