Contents
Notes on the Penguino AVR drivers and interfaces
Warning
This page contains technical notes about the underlying protocols and libraries used by the Penguino AVR software and firmware. Most users will find the provided libraries will cover their needs.
USB Device
USB Vendor ID |
0x16D0 |
USB Product ID |
0x04CA |
Manufacturer String |
"Icy Labs" |
Product String |
"Penguino AVR" |
USB Interfaces
USB Interface Association Descriptor (IAD) used to enumerate the "programming" and "serial" functions as separate devices. See MSDN article
Using the IADs, 3 interfaces are grouped into 2 functions:
Interface |
Function |
Interface Description |
0 |
Serial |
Communications class - Control |
1 |
Serial |
Communications class - Data |
2 |
Programming |
Flipper programming/JTAG |
The 2 serial interfaces implement the "Control" and "Data" interfaces of the USB Communications Device Class ACM device, which acts as a modem, or more commonly as a USB-RS232 converter.
The last interface is an Icy vendor-specific interface used by Flipper to communicate JTAG with the user chip.
Firmware
The AT90USB82 on the Penguino AVR is factory loaded with firmware implementing the above interfaces. It also supports jumping to the on-chip Atmel bootloader, allowing for firmware upgrades.
The firmware is based on the brilliant LUFA library, which provides all the USB handling. Though only advised for advanced users, the sources are available through SVN:
cd LUFA-VER/Projects svn co https://dev.icy.com.au/svn/icyprog/penprog-firmware/PenFirm/ cd PenFirm make
Updating Penguino firmware manually
Warning
THIS CAN BRICK PENGUINOS
After flipping the Penguino into DFU mode:
dfu-programmer at90usb82 erase dfu-programmer at90usb82 flash penguino-avr-firmware-''DATE''.hex dfu-programmer at90usb82 reset
Drivers
The CDC ACM part of the Penguino USB firmware is standards compliant, so on smart operating systems like Linux, it enumerates without any special drivers. On both Windows and Mac OS X, special drivers are required to tell the OS which driver to use - in both cases, a driver already exists, it's just a matter of matching it.
![icy [labs]](/moin_static171/common/wikilogo.png)