Auf dieser Seite möchte ich das Entwickeln von Schaltungen mit Hilfe von FPGAs und VHDL näher bringen. Sämtliche Beispiele sind in meinem Git-Repository zu finden.
Elektronik, Code & mehr
Auf dieser Seite möchte ich das Entwickeln von Schaltungen mit Hilfe von FPGAs und VHDL näher bringen. Sämtliche Beispiele sind in meinem Git-Repository zu finden.
Item-Tag | Beschreibung |
Usage Page |
Spezifiziert die Usage Page der verwendeten Elemente. |
Logical Minimum |
Kleinste logische Einheit die übertragen wird. |
Logical Maximum |
Größte logische Einheit die übertragen wird. |
Physical Minimum |
Das Feld Logical Minimum in physikalische Größen umgerechnet. |
Physical Maximum |
Das Feld Logical Maximum in physikalische Größen umgerechnet. |
Unit Exponent |
Einheitenexponent zur Basis 10 (z. B. 3 für Kilo) |
Unit |
Einheiten-ID um die Einheit des Datenfeldes festzulegen (z. B. 2 für Masse). |
Report Size |
Legt die Größe eines Datenfeldes für ein Element in Bit fest. |
Report ID |
Report ID für ein Element. Wenn ein Report ID-Element genutzt wird, werden alle Reports um ein 8-bit großes Datenfeld für die ID erweitert. |
Report Count |
Legt die Anzahl der Datenfelder für ein Element fest. |
Push |
Platziert eine Kopie der globalen Statustabelle der Elemente auf dem Stack. |
Pop |
Ersetzt die Statustabelle für die Elemente mit der aktuellen Tabelle vom Stack. |
Item-Tag | Beschreibung |
Input | Ausgelesene Daten von einem oder mehreren Steuerungselementen. |
Output | Daten für die Steuerung von einem oder mehreren Elementen. |
Feature | Ein- oder Ausgabedaten, die nicht für eine Interaktion mit dem Nutzer verwendet werden. |
Collection | Eine Gruppierung von Input-, Output- oder Feature-Items. |
End Collection | Markiert das Ende einer Collection. |
bmRequestType | bReqest | wValue | wIndex | wLength | Data |
0xA1 | GET_REPORT (1) |
Art des Reports und die Report-ID | Interface | Länge des Reports | Report |
0xA1 | GET_IDLE (2) |
0 | Interface | 1 | Idle-Zeit |
0xA1 | GET_PROTOCOL (3) |
0 | Interface | 1 |
0 – Boot-Protokoll 1 – Report Protokoll |
0x21 | SET_REPORT (9) |
Art des Reports und die Report ID | Interface | Länge des Reports | Report |
0x21 | SET_IDLE (10) |
Idle-Zeit und Report-ID | Interface | 0 | – |
0x21 | SET_PROTOCOL (11) |
0 – Boot-Protokoll 1 – Report Protokoll |
Interface | 0 | – |
Item-Tag | Beschreibung |
Usage |
Spezifiziert den Usage Index und ergibt zusammen mit der Usage Page die fertige Gruppe. |
Usage Minimum |
Definiert den Startwert für eine Gruppe von Anwendungszwecken für mehrere Eingabemethoden. |
Usage Maximum |
Definiert den Endwert für eine Gruppe von Anwendungszwecken für mehrere Eingabemethoden. |
Designator Index |
Bezeichner eines entsprechenden Physical-Deskriptors um die Art der Eingabe zu definieren. |
Designator Minimum |
Definiert den Startwert für eine Gruppe von Bezeichnern für mehrere Eingabemethoden. |
Designator Maximum |
Definiert den Endwert für eine Gruppe von Bezeichnern für mehrere Eingabemethoden. |
String Index |
Index des String-Deskriptors um die jeweilige Eingabemethode zu beschreiben. |
String Minimum | Legt den Startwert für eine Gruppe von Strings fest um mehrere Eingabemethoden zu benennen. |
String Maximum | Legt den Endwert für eine Gruppe von Strings fest um mehrere Eingabemethoden zu benennen. |
Delimiter |
Definiert den Angang (1) oder das Ende (0) eines lokalen Elements. |
bmRequestType | bReqest | wValue | wIndex | wLength | Data |
0x00 0x01 0x02 |
CLEAR_FEATURE (1) |
Feature |
Null Interface Endpunkt |
0 | – |
0x80 | GET_CONFIGURATION (8) |
0 | 0 | 1 | Konfiguration |
0x80 | GET_DESCRIPTOR (6) |
Deskriptortyp (H) und Deskriptorindex (L) |
Null oder Sprach ID | Länge des Deskriptors | Deskriptor |
0x81 | GET_INTERFACE (10) |
0 | Interface | 1 | Interface |
0x80 0x81 0x82 |
GET_STATUS (0) |
0 |
0 Interface Endpunkt |
2 | Gerät-, Interface- oder Endpunktstatus |
0x00 | SET_ADDRESS (5) |
Geräteadresse | 0 | 0 | – |
0x00 | SET_CONFIGURATION (9) |
Konfiguration | 0 | 0 | – |
0x00 | SET_DESCRIPTOR (7) |
Deskriptortyp (H) und Deskriptorindex (L) |
Null oder Sprach ID | Länge des Deskriptors | Deskriptor |
0x00 0x01 0x02 |
SET_FEATURE (3) |
Feature |
0 Interface Endpunkt |
0 | – |
0x01 | SET_INTERFACE (11) |
Interface | Interface | 0 | – |
0x82 | SYNCH_FRAME (12) |
0 | Endpunkt | 2 | Framezähler |
Offset | Feld | Größe | Beschreibung |
|
0 | bLength | 1 | Größe des Deskriptors in Bytes | |
1 | bDescriptorType | 1 | ENDPOINT Deskriptor (Feld = 5) | |
2 | bEndpointAddress | 1 | Adresse des Endpunktes | |
Bit 7: Richtung |
0 = OUT 1 = IN |
|||
Bit 6 – 4 | 0 | |||
Bit 3 – 0: Endpunktnummer |
0 – 15 | |||
3 | bmAttributes | 1 | Bit 7 – 6 | 0 |
Bit 5 – 4: Verwendung |
Nur für Isochrone Endpunkte. Andernfalls 0. 0 = Data endpoint |
|||
Bit 3 – 2: Synchronisation |
Nur für Isochrone Endpunkte. Andernfalls 0. 0 = No Synchronisation |
|||
Bit 1 – 0: Transfer |
0 = Control 1 = Isochronous 2 = Bulk 3 = Interrupt |
|||
4 | wMaxPacketSize | 2 | Maximale Paketgröße, die dieser Endpunkt senden oder empfangen kann | |
6 | bInterval | 1 | Polling Intervall für den Endpunkt in ms Schritten für Low und Full Speed Devices oder in 125 us Schritten für High Speed Devices |
Offset | Feld | Größe | Beschreibung |
0 | bLength | 1 | Größe des Deskriptors in Bytes |
1 | bDescriptorType | 1 | GERÄTE-Deskriptor (Feld = 0x01) |
2 | bcdUSB | 2 | Verwendete USB Version |
4 | bDeviceClass | 1 | Durch das USB-IF vergebener Klassencode |
5 | bDeviceSubClass | 1 | Durch das USB-IF vergebener Subklassencode |
6 | bDeviceProtocol | 1 | Durch das USB-IF vergebener Protokolcode |
7 | bMaxPacketSize0 | 1 |
Maximale Paketgröße für Endpunkt 0. Muss entweder 8, 16, 32 oder 64 sein |
8 | idVendor | 2 | Durch das USB-IF vergebene Vendor-ID |
10 | idProduct | 2 | Durch den Hersteller vergebene Produkt-ID |
12 | bcdDevice | 2 | Releasenummer des Gerätes |
14 | iManufacturer | 1 | Index des Stringdeskriptors, der den Hersteller beschreibt |
15 | iProduct | 1 | Index des Stringdeskriptors, der das Produkt beschreibt |
16 | iSerialNumber | 1 | Index des Stringdeskriptors, der die Seriennummer beschreibt |
17 | bNumConfigurations | 1 | Anzahl der Gerätekonfigurationen |
Offset | Feld | Größe | Beschreibung |
|
0 | bLength | 1 | Größe des Deskriptors in Bytes | |
1 | bDescriptorType | 1 | KONFIGURATIONS-Deskriptor (Feld = 0x02) | |
2 | wTotalLength | 2 | Größe dieses und aller anderen Deskriptoren | |
4 | bNumInterfaces | 1 | Anzahl der Interfaces, die durch diesen Deskriptor unterstützt werden | |
5 | bConfigurationValue | 1 | Index der durch eine SET_CONFIGURATION-Anfrage genutzt werden muss um diese Konfiguration zu laden | |
6 | iConfiguration | 1 | Index des Stringdeskriptors, der diese Konfiguration beschreibt | |
7 | bmAttributes | 1 | Bit 7 | 1 |
Bit 6 | Self-powered | |||
Bit 5 | Remote Wakeup | |||
Bit 4 – 0 | 0 | |||
8 | bMaxPower | 1 | Maximale Stromaufnahme des Gerätes in 2 mA Schritten |
Offset | Feld | Größe | Beschreibung |
0 | bLength | 1 | Größe des Deskriptors in Bytes |
1 | bDescriptorType | 1 | INTERFACE-Deskriptor (Feld = 0x04) |
2 | bInterfaceNumber | 1 | Interface ID |
3 | bAlternateSetting | 1 | Alternative Einstellungen für dieses Interface |
4 | bNumEndpoints | 1 | Anzahl der Endpunkte, die für dieses Interface genutzt werden (ohne Endpunkt 0) |
5 | bInterfaceClass | 1 | Durch das USB-IF vergebener Klassencode |
6 | bInterfaceSubClass | 1 | Durch das USB-IF vergebener Subklassencode |
7 | bInterfaceProtocol | 1 | Durch das USB-IF vergebener Protokollcode |
8 | iInterface | 1 | Index des Stringdeskriptors, der dieses Interface beschreibt |
Transferart | Paketgrößen in Bytes | Beschreibung |
Bulk |
Low Speed: Nicht erlaubt Full Speed: 8, 16, 32, 64 High Speed: Bis zu 512 |
Der Bulk Transfer wird immer dann genutzt, wenn viele Daten fehlerfrei übertragen werden müssen. In diesem Modus wird die Bandbreite auf Grund der Fehlerkontrolle nicht garantiert. |
Interrupt |
Low Speed: 1 bis 8 Full Speed: 1 bis 64 High Speed: Bis zu 1024 |
Der Interrupt Transfer wird dort eingesetzt, wo normalerweise Interrupts genutzt würden um das Vorhandensein von Daten zu signalisieren. Wird in den meisten Fällen für die Kommunikation vom Device zum Host genutzt. |
Isochronous |
Low Speed: Nicht erlaubt Full Speed: Bis zu 1023 High Speed: Bis zu 1024 |
Beim Isochronous Transfer wird eine feste Bandbreite im Austausch für die Fehlerfreiheit garantiert. Diese Art der Übertragung wird z. B. im Audio- oder Videobereich genutzt. |
Control |
Low Speed: 8 Full Speed: 8, 16, 32, 64 High Speed: 64 |
Ein bidirektionaler Transfer, der sowohl eine IN, wie auch eine OUT Transaktion nutzt. Der Control Transfer wird ausschließlich für die Konfiguration des Gerätes genutzt und überträgt Daten nur zum Endpunkt 0. Jeder Control Transfer besteht aus einer SETUP, einer DATA und einer STATUS Stage. Die SETUP Stage beschreibt die Anfrage vom Host und die DATA Stage beinhaltet die Daten vom Gerät, falls notwendig. |
Spezifiziert die unterstützten Sprachen der Strings
Offset | Feld | Größe | Beschreibung |
0 | bLength | 1 | Größe des Deskriptors in Bytes |
1 | bDescriptorType | 1 | STRING-Deskriptor (Feld = 0x03) |
2 | wLANGID[0] | 2 | LANGID Code 0 |
… | … | … | … |
2 + x * 2 | wLANGID[x] | 2 | LANGID Code x |
Offset | Feld | Größe | Beschreibung |
0 | bLength | 1 | Größe des Deskriptors in Bytes |
1 | bDescriptorType | 1 | STRINGDeskriptor (Feld = 3) |
2 | bString | n | n Zeichen langer String im Unicode Format |
Offset | Feld | Größe | Beschreibung |
0 | bLength | 1 | Größe des Deskriptors in Bytes |
1 | bDescriptorType | 1 | HID-Deskriptor (Feld = 0x21) |
2 | bcdHID | 2 | Verwendete Version der HID-Spezifikation |
4 | bCountryCode | 1 | Ländercode für die verwendeten Hardware |
5 | bNumDescriptors | 1 | Anzahl der Klassendeskriptoren (muss mind. 1 betragen). |
6 | bDescriptorType | 1 | Typ des nachfolgenden Deskriptors |
7 | wDescriptorLength | 2 | Länge des Deskriptors |
9 | [bDescriptorType] | 1 | Typ des optional nachfolgenden Deskriptors |
10 | [wDescriptorLength]] | 2 | Länge des optionalen Deskriptors |
Offset | Length | Description |
---|---|---|
0x00 | 3 bytes | Part of the bootstrap program. |
0x03 | 8 bytes | Optional manufacturer description. |
0x0b | 2 bytes | Number of bytes per block (almost always 512). |
0x0d | 1 byte | Number of blocks per allocation unit. |
0x0e | 2 bytes | Number of reserved blocks. This is the number of blocks on the disk that are not actually part of the file system; in most cases this is exactly 1, being the allowance for the boot block. |
0x10 | 1 byte | Number of File Allocation Tables. |
0x11 | 2 bytes | Number of root directory entries (including unused ones). |
0x13 | 2 bytes | Total number of blocks in the entire disk. If the disk size is larger than 65535 blocks (and thus will not fit in these two bytes), this value is set to zero, and the true size is stored at offset 0x20. |
0x15 | 1 byte | Media Descriptor. This is rarely used, but still exists. . |
0x16 | 2 bytes | The number of blocks occupied by one copy of the File Allocation Table. |
0x18 | 2 bytes | The number of blocks per track. This information is present primarily for the use of the bootstrap program, and need not concern us further here. |
0x1a | 2 bytes | The number of heads (disk surfaces). This information is present primarily for the use of the bootstrap program, and need not concern us further here. |
0x1c | 4 bytes | The number of hidden blocks. The use of this is largely historical, and it is nearly always set to 0; thus it can be ignored. |
0x20 | 4 bytes | Total number of blocks in the entire disk (see also offset 0x13). |
0x24 | 2 bytes | Physical drive number. This information is present primarily for the use of the bootstrap program, and need not concern us further here. |
0x26 | 1 byte | Extended Boot Record Signature This information is present primarily for the use of the bootstrap program, and need not concern us further here. |
0x27 | 4 bytes | Volume Serial Number. Unique number used for identification of a particular disk. |
0x2b | 11 bytes | Volume Label. This is a string of characters for human-readable identification of the disk (padded with spaces if shorter); it is selected when the disk is formatted. |
0x36 | 8 bytes | File system identifier (padded at the end with spaces if shorter). |
0x3e | 0x1c0 bytes | The remainder of the bootstrap program. |
0x1fe | 2 bytes | Boot block ’signature‘ (0x55 followed by 0xaa). |
Hallo Kampi,
kannst du schon sagen wann du mit dem Punkt 5 VGA im FPGA – Ausgabe eines Bildes fertig bist? Interessant wäre auch ein bewegtes Bild oder Abhängigkeiten wie bei Pong z.B.
Danke!!
Hallo Daniel,
ich habe da in der Tat schon weiter gemacht und bekomme es nun hin Texte etc. aus einem Display-RAM anzuzeigen.
Allerdings bin ich bisher noch nicht dazu gekommen das alles fest zu halten :(
Gruß
Daniel
Hi! Würde mich auch interessieren, auch wie du das mit dem Ball bei deinem Youtube Video umgesetzt hast!!!:-)
Hallo Tob,
schreib mir mal eine E-Mail, dann kann ich dir den Code zukommen lassen und ihn dir ggf. erklären.
Gruß
Daniel