SAM3SxA_Stick
Diesmal nun ein Spezial-Projekt, um ein kleines alltagstaugliches Gerät basierend auf einigen pC/..-Modulen zu kreieren.
Die Idee, ein USB-Stick mit SD/MMC-Slot, um darauf basierend einen Memory-Stick und/oder Web- und FTP-server laufen zu lassen. Sicherlich nichts besonders Außergewöhnliches, aber mal ein Mini-Projekt ohne gleich wieder 101 neue Software-Module zu benötigen.
Bisher sind nachfolgende pC/.. Module zur Verwendung vorgesehen:
- pC/OS RTOS kernel
- pC/USB using MSC, CCID (for ASSD) and/or CDC/RNDIS/EEM classes (as composite with alternates)
- pC/MMC SD/MMC-access using a SPI interface
- pC/FAT FAT16/32-filesystem with LFN support accessing the memory card
- pC/TCPIP TCP/IPv4 protocol stack for network communication (incl. DHCP & WINS)
- pC/HTTPd HTTP-server using memory-card for content
- pC/FTPd FTP-server for administation of HTTP content
Um dem Ganzen ein professionellse Aussehen zu verpassen und das Ganze wirklich Alltagstauglich zu gestalten, wurde diesmal das existierende und perfekt geeignete Gehäuse des Transcend TS-RDS5W wieder verwendet.
Also org. Innenleben raus - und Eigenentwicklung rein :-)
Als Netzwerkknoten wird er einfach über seine Adresse "http://S3Stick.intern" bzw. "ftp://S3Stick.intern" angesprochen, den Rest erledigt der kleine WINS-Server im Stick.
Dabei entscheidet sich beim Anstecken das USB-Host System des PC(Windows/Linux) für die jeweils unterstützte USB-Netzwerkvariante - also Windows verwendet RNDIS und Linux verwendet CDC-Ethernet(ECM).
Anschließend kann ganz normal mit einem Web-Browser und einem FTP-Client auf den Stick zugegriffen werden.
Als Memory-Stick wird er ganz normal, wie jeder Andere, verwendet. Einfach anstecken und einen Augenblick warten. Anschließend einfach auf das neue Laufwerk zugreifen. Dieses wird durch den Stick als "Removable Media" deklariert.
ScanDriveViewer:
Um die durch den pC/MMC-Code (SPI-mode) ermittelten Informationen auch ohne eigenes Display auslesen und anzeigen zu können, habe ich ein kleines Windows-Programm geschrieben, daß diese Informationen via SCSI-Inquiry (vendor-page 0xD0) ausliest und wieder gibt. Dazu sucht das Programm nach einem passenden Gerät via "SCSI-Inquiry page 0" VerdorID/ProductID (plus optional Revision) und fragt diesen nach der Vendor-page.
Wenn eine "secure micro SD" (ein Sicherheits-Element wie bei einer SmartCard ist integriert) gefunden wird, werden diese zusätzlichen Informationen optional wieder gegeben und ein einfaches APDU-Interface bereit gestellt.
Nach einer Portierung steht dieses Programm nun auch auf Android für Smartphones und Tablets zur Verfügung. Neben den üblichen Daten zur eingesetzten Karte, kann diese App auch die Daten des internen (e)MMC-Speichers und - wenn vorhanden - der im Gerät eingesetzten (micro)SD-Karte dekodieren und anzeigen.
Hier die beiden kleinen Programme zum Download:
|
|
Nachfolgend einige Screen-Shots der kleinen Programme bei verschiedenen Karten im Adapter.
Wenn die CCID USB-Klasse als Composite mit eingebunden wurde, stellt der Adapter für secure µSD Karten auch ein PC/SC Interface bereit, über den APDU's mit dem enthaltenen secure element ausgetauscht werden können. Er wird vom Host ganz normal als Kartenleser eingebunden (siehe Device-Manager) und kann von entsprechenden Standard-Anwendungen verwendet werden.
Windows | Linux | Android (Pcscdroid von seek-for-Android) |
Windows lädt den USBCCID WUDF Treiber auf alle Geräte mit CCID oder ICCD ohne volle ICCD Unterstützung, verwendet seine eigenen Beschreibungs-Strings und ignoriert die USB String-Descriptoren des Interfaces. | Linux mit PC/SC-lite arbeitet ausschließlich mit CCID-Readern aus einer white-list zusammen. Ein unbekannter Reader muss daher erst in diese Liste eingetragen werden, der dort hinterlegte Geräte Text wird verwendet und nicht die USB String-Descriptoren des Gerätes bzw. Interfaces ("Info.plist"). | Android benötigt Pcscdroid von seek-for-android. Zusätzlich zu allen Linux Besonderheiten (white-list & Device strings), die hier auch gelten, muss das Gerät außerdem geROOTed sein um mit CCID-Readern über USB kommunizieren zu können. |