The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. This makes it very easy to use the interface with a microSD card, USB stick or hard drive and access files on the FAT32 partition directly, without using a lot of CPU power or memory on the CPC.
It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...). It is simple enough that the mouse driver was initially written completely in BASIC.
* Access mass storage devices with [[UniDOS]]; use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive); load games and tools from the mass storage media
=<br> == 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.
Version 1.0 uses a TI TL16C550D chip. Version 1.1 uses a NXP SC16C650B chip.
==== Version 2.0 ====
Like the previous version, it provides one USB host port and one µSD slot with built-in support for mass storage and FAT filesystem. However, please note '''serial port has been removed'''. It is fully compatible (same port address). Of course, nothing is mapped on serial port addresses.
This will allow to, for example, use one board for mass storage, and the other to connect various USB devices: mouse, MIDI controller, printer, whatever you need (as long as you find someone to write a driver).
Strictly speaking, it might be possible to handle both a mouse and a USB stick on one card by using a USB hub. But this has to be coded and tested, the CH376 documentation is unclear on this topic. [https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/albireo-usbsd-interface-for-cpc-new-version-without-serial/msg248489/#msg248489 Source]
[[File:Albireo 2.0 top.jpg|500px]] [[File:Albireo 2.0 bottom.jpg|500px]]
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.
==== CH376 registers ====
== Links ==
*[https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/albireo-usbsdserial-interface-for-cpc/ Albireo] [https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/albireo-usbsd-interface-for-cpc-new-version-without-serial/ Albireo 2.0] Topics on CPCWiki forum
*[[Media:Albireo1.0 schematics.pdf|Albireo KiCad schematics]]
*[https://framagit.org/shinra/albireo Albireo project] [https://framagit.org/offset/albireo-acepansion Albireo ACEpansion] on Framagit
*[https://pulkomandy.github.io/shinra.github.io/albireo.html Albireo - Programmer's manual]
*[[Media:Ch376ds1.pdf|CH376 datasheet]] [[Media:CH376DS2.PDF|CH376 auxiliary commands]] USB flash drive and SD card controller