Forum: Mikrocontroller und Digitale Elektronik uC mit USB gesucht


von A. F. (artur-f) Benutzerseite


Lesenswert?

Hallo Leute,

ich suche ein uC o.ä. mit eingebauter USB Schnittstelle und folgenden 
Kriterien:
- DLL vom Hersteller, dass man mit Win10 etc. keine Probleme hat
- IO Toggling möglichst bis 4 MHz
- Bulk USB Transfer, wenig Verzögerung zw. den einzelnen Datenpaketen.
- I2C Schnittstelle
- Kein BGA package


Bin bei der Suche auf die PSOC's gestoßen, nun welcher ist dafür eher 
geeignet bzw. gibt es noch tolle Alternativen?

von 123 (Gast)


Lesenswert?

Hallo,

Und wieder eine der nicht ganz verstanden hat wie USB funktioniert, ... 
(sorry den konnte ich mir nicht verkneifen)

USB teilt sich bekantlich in mehrere Schichten auf.
- HW Layer (Physik),
- Endnpoints
- irgendwo kommem dann mal die Bulk  interrupt  ... endpoints
- USB Klassen Wie HID , Maass Storage, ...
Bitte entschuldigt die Unschärfe bei den Schichten.

Ein wie auch immer gearteter MC stellt die HW für USB zur Verfügung (bis 
leven Endpints. Was der Endpoint jetzt genau ist ob balk  interrupt  
... entscheidet die FW des MC. und was jetzt über den Bulk / interrupt 
enspoint geht wieder um die USB Klasse

Windows selber braucht für jedes USB Device einen Treiber. Windows kann 
zwar mit allen Endpoint typen umgehen, ... Stellt selber aber nur 
Standardtreiber für einige USB Klassen zur Verfügung. Alles andere sind 
dann Treiber der einzelnen Hersteller. Windows 10 braucht dummerweise 
Signierte Treiber (ja man kann das auch zur Entwicklung aus knipsen)

ggf hilft die USB Lib. die ermöglicht direkten zugriff auf endpoint 
ebene.
https://libusb.info/

ggf gibt es von FTDI einen Baustein der das gewünschte erfüllt. Gab hier 
vor kurzen jemanden der was ähnliches gesucht hat und das Datenblatt von 
FTDI nicht ganz verstanden hatte (RS232  SPI  I2C / ... geht nicht 
gleichzeitig) Aber ein 2 Port / 4 port baustein muss nicht auf allen 
ports das gleiche machen.

ggf ein IO-Warrior?

Grüsse aus dem Süden der Republick.

von A. F. (artur-f) Benutzerseite


Lesenswert?

123 schrieb:
> Und wieder eine der nicht ganz verstanden hat wie USB funktioniert, ...
> (sorry den konnte ich mir nicht verkneifen)

Gebe zu, kenne mich mit dem Gebiet nicht wirklich gut aus.


123 schrieb:
> ggf gibt es von FTDI einen Baustein der das gewünschte erfüllt.
Es ist kein Mikrocontroller, ich suche einen uC, und nicht einen 
einfachen Schnitstellenkonverter. Nebenbei soll der uC auch andere 
Sachen erledigen können.

123 schrieb:
> ggf ein IO-Warrior?

Nein, ich suche ein uS und keine fertige Lösungen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

A. F. schrieb:
> - DLL vom Hersteller, dass man mit Win10 etc. keine Probleme hat

Eine solche DLL würde mit einem dazu passenden Treiber kommunizieren, 
welcher wiederum ein bestimmtes USB-Protokoll spricht welches zu einem 
bestimmten USB-Baustein gehört (wie eben z.B. FTDI). Da du aber 
wahrscheinlich dein eigenes Protokoll bauen möchtest, gibt es keine 
solche DLL dafür vom uC-Hersteller.

Windows liefert aber einen eigenen Treiber namens WinUSB mit, welcher 
allgemein mit allen USB-Geräten reden kann, und welchen man aus eigenen 
Programmen verwenden kann. Damit kannst du dann auch ohne 
Treiber/Signatur-Problematik mit deinem eigenen Gerät und deinem eigenen 
Protokoll kommunizieren.

Das ist soweit für alle USB-fähigen Controller gleich.
USB-fähige Controller gibt es viele, z.B. die meisten STM32.

In meinem USB-Tutorial mit STM32 wird die USB-Programmierung bei den 
STM32F103-Controllern erläutert. Im Abschnitt
https://www.mikrocontroller.net/articles/USB-Tutorial_mit_STM32#Eigene_Anwendung_f.C3.BCr_PC-Seite
ist gezeigt wie man ohne eigenen Treiber/Signatur von eigenen 
Windows-Programmen (auch unter Windows 10) mit dem Gerät kommuniziert.

von jemand (Gast)


Lesenswert?

A. F. schrieb:
> Hallo Leute,
>
> ich suche ein uC o.ä. mit eingebauter USB Schnittstelle und folgenden
> Kriterien:
> - DLL vom Hersteller, dass man mit Win10 etc. keine Probleme hat
> - IO Toggling möglichst bis 4 MHz
> - Bulk USB Transfer, wenig Verzögerung zw. den einzelnen Datenpaketen.
> - I2C Schnittstelle
> - Kein BGA package

Also jede moderne µC-Familie....

Jeder USB-µC ist tauglich, solange er genug Endpoints und I2C hat.
Das sind alle modernen. Welche DLL du in Windows benötigst, hängt davon 
ab, welches USB-Device du im Controller umsetzt.

Also brauchst du ein anderes Kriterium.
Das Beste wird sein, du besorgst dir ein paar Demoboards, wie die hier:
https://www.st.com/en/evaluation-tools/stm32f4discovery.html
https://www.microchip.com/Developmenttools/ProductDetails/DM320104
https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/freedom-development-boards/wireless-connectivy/freedom-development-board-for-kinetis-kw0x:FRDM-KW019032

Und kuckst dir an, mit welchem davon du am Besten die Demos zum Laufen 
bekommst. Wichtig ist ja auch, ob dir die IDE und die mitgelieferten 
Libraries taugen. Der schönste µC nützt dir nichts, wenn du mit ihm auf 
Kriegsfuß stehst.

Zum Glück kostet das Zeug nicht so viel :-)

von Volker S. (vloki)


Lesenswert?

jemand schrieb:
> Das Beste wird sein, du besorgst dir ein paar Demoboards, wie die hier:

Bisher sind die Spezifikationen ja noch nicht soooo besonders 
detailliert.
Vielleicht tut es ja auch was einfacheres:
https://hackaday.io/project/6258/gallery#ce5db455c4aad2b6bf7d99e26a6976f4

Ja, ich weiß, den muss man ja noch irgendwie programmieren ;-)
Ginge evtl. mit dem Curiosity DM164137 oder dem MPLAB SNAP PG164100

von A. F. (artur-f) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Das ist soweit für alle USB-fähigen Controller gleich.
> USB-fähige Controller gibt es viele, z.B. die meisten STM32.

Danke dir, hilfreich deine Infos. Auch wenn ich ein Fan von STM32 bin, 
finde ich die USB Geschichten zu dem STM sehr unüberschaubar. Aber 
vielleicht hilft mir dein Tutorial weiter.

Danke

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

A. F. schrieb:
> Danke dir, hilfreich deine Infos. Auch wenn ich ein Fan von STM32 bin,
> finde ich die USB Geschichten zu dem STM sehr unüberschaubar.

Ich glaub das wird bei anderen Controllern nicht viel anders sein. USB 
ist nunmal recht komplex...
Die STM32 gibt es mit 3 unterschiedlichen USB-Modulen:
- Das einfach nur USB genannte Modul der kleineren Controller 
unterstützt nur den Device-Modus und nur FullSpeed.
- Das OTG_FS-Modul unterstützt OTG und kann somit auch als Host agieren 
und ist komplizierter zu programmieren.
- Das OTG_HS-Modul unterstützt zusätzlich USB High Speed (480 MBit/Sec).

Die "OTG"-Peripherie ist ohne die Hersteller-Library kaum zu nutzen, die 
"USB" Peripherie schon eher (und natürlich auch mit). Je nach 
Anforderung würde ich daher zu einem Controller mit der "USB"-Peripherie 
raten, wie STM32F103, und nicht den von "jemand" genannten STM32F407, 
welcher gleich 2 "OTG"-Module hat.

von Patrick C. (pcrom)


Lesenswert?

A. F. schrieb:
> Bin bei der Suche auf die PSOC's gestoßen, nun welcher ist dafür eher
> geeignet

Bin selber sehr zufrieden mit Cypress PSOC5lp. Anfangen mit CY8CKIT-059 
der fuer $10 alles gibt was benoetigt is. Incl programmer

Von Cypress aus gute unterstuetzung (ich spreche ueber die neuen 
PSOC3/4/5lp/6, nicht die alte PSOC1) und viele beispiele. So wird, neben 
anlieferung vieler Libraries mit IDE auch automatisch der USB driver 
fuer windows gemacht.

Ich benutze virtual comm-port (CDC), aber ansteuerung via andere Wegen 
so wie HID, Mass Storage Device oder direct via endpoints sind aus 
moeglich.
Und man bekommt einfach eine eigene VID/PID combination.

Mit die neue 6 series habe ich keine erfahrung.

Gute documentation, zB
https://www.cypress.com/documentation/component-datasheets/full-speed-usb-usbfs

Grusze Patrick

von PittyJ (Gast)


Lesenswert?

Ich habe gute Erfahrungen mit dem NXP LPC11U68 gemacht.
Der hat eine Rom-Api für USB, und die Programmierung damit war ein 
Kinderspiel.

https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc11u68:OM13058

von Lothar (Gast)


Lesenswert?


von Frank K. (fchk)


Lesenswert?

A. F. schrieb:

> - DLL vom Hersteller, dass man mit Win10 etc. keine Probleme hat

Implementiere eine der USB-Standardklassen, dann brauchst Du das nicht.

> - IO Toggling möglichst bis 4 MHz

aber nicht während der Prozessor Dein USB-Paket verarbeitet. Sofern Du 
kein Multicore-System hast, kann der Prozessor immer nur eine Sache zur 
Zeit machen. Es sei denn, Du hast zusätzliche Hardware.

> - Bulk USB Transfer, wenig Verzögerung zw. den einzelnen Datenpaketen.

Das kannst Du nicht steuern, da hast Du keinen Einfluß drauf. Das Timing 
wird vom Host gesteuert. USB ist NICHT echtzeitfähig, erst recht nicht 
bei BULK Transfers. Wenn Du ein bestimmtes Zeitverhalten brauchst, bist 
Du bei USB und Bulk Transfers falsch.

> - I2C Schnittstelle

unkritisch.

> - Kein BGA package

Aha. Ein Selberätzer.

So. Bevor Du jetzt weitere Salamischeiben rauslässt, sag erstmal, was Du 
genau machen willst. Was ist Deiner Anwendung? Warum sind IO Toggles 
wichtig? Vielleicht hast Du ja schon den komplett falschen Ansatz.

Und sage, ob Du Full (12), High (480) oder Super Speed (5000Mbps) 
brauchst.

fchk

von Alexander S. (alesi)


Lesenswert?

Kleine USB-Bibliothek für ATMEL®-USB-AVRs® (|||)

http://www.weigu.lu/microcontroller/avr_usb_libs/index.html

von max123 (Gast)


Lesenswert?

Hallo,
schau Dir den Arduino  DU an. Hat hardwareseitig  2 USB (eine an der 
RS232),
ist leicht zu bedienen und , das wichtigste, es gibt viele Libs.


https://forum.arduino.cc/index.php?board=87.0

von The Mule (Gast)


Lesenswert?

Wie wäre es denn mit dem ATmega32U4?

von A. F. (artur-f) Benutzerseite


Lesenswert?

Frank K. schrieb:
> ber nicht während der Prozessor Dein USB-Paket verarbeitet. Sofern Du
> kein Multicore-System hast, kann der Prozessor immer nur eine Sache zur
> Zeit machen. Es sei denn, Du hast zusätzliche Hardware.

Das ist schon klar!

Frank K. schrieb:
> Das kannst Du nicht steuern, da hast Du keinen Einfluß drauf. Das Timing
> wird vom Host gesteuert. USB ist NICHT echtzeitfähig, erst recht nicht
> bei BULK Transfers. Wenn Du ein bestimmtes Zeitverhalten brauchst, bist
> Du bei USB und Bulk Transfers falsch.

Das ist mir ebenfalls bewusst, aber bei der HID Klasse z.B. sind die 
Pausen extrem lang!

Frank K. schrieb:
> So. Bevor Du jetzt weitere Salamischeiben rauslässt, sag erstmal, was Du
> genau machen willst. Was ist Deiner Anwendung? Warum sind IO Toggles
> wichtig? Vielleicht hast Du ja schon den komplett falschen Ansatz.
>
> Und sage, ob Du Full (12), High (480) oder Super Speed (5000Mbps)
> brauchst.
USB sollte idealerweise HS und die toggling Frequenzt brauche ich um die 
MDIO Schnittstelle einer PHY zu füttern. Ist zwar keine synchrone 
Schnittstelle, aber je schneller, desto besser ist es.

max123 schrieb:
> Hallo,
> schau Dir den Arduino  DU an. Hat hardwareseitig  2 USB (eine an der
> RS232),
> ist leicht zu bedienen und , das wichtigste, es gibt viele Libs.

Nein Danke, es muss kompliziert zu bedienen sein :)

Alexander S. schrieb:
> Kleine USB-Bibliothek für ATMEL®-USB-AVRs® (|||)
>
> http://www.weigu.lu/microcontroller/avr_usb_libs/index.html

Es handelt sich um die HID Schnittstelle, sehr ungeeignet in meinem 
Fall.

Frank K. schrieb:
>> - Kein BGA package
>
> Aha. Ein Selberätzer.
Nö, aber die ersten Prototypen löte ich gerne, bevor ich den Bestücker 
bauftrage.

von Jim M. (turboj)


Lesenswert?

A. F. schrieb:
> USB sollte idealerweise HS und die toggling Frequenzt brauche ich um die
> MDIO Schnittstelle einer PHY zu füttern.

Ist das Ethernet Phy? Denn es gibt µC mit Ethernet und USB.

USB HS stellt schon "interessante" Anforderungen ans Platinen Layout.

A. F. schrieb:
> - Bulk USB Transfer, wenig Verzögerung zw. den einzelnen Datenpaketen.

Dann wirst Du selber mit WinUSB hantieren müssen.

Übrigens kann man Windows (IIRC ab Win7) vom USB Gerät selbst aus 
anweisen den WinUSB.sys Treiber zu laden, ohne das der $User ein .inf 
File installieren muss. Suche mal nach "MicroSoft OS Descriptors".

von Dergute W. (derguteweka)


Lesenswert?

Moin,

A. F. schrieb:
> die toggling Frequenzt brauche ich um die
> MDIO Schnittstelle einer PHY zu füttern. Ist zwar keine synchrone
> Schnittstelle, aber je schneller, desto besser ist es.

Hm. Also das MDI das ich kenne, arbeitet schon synchron und braucht auch 
keine 4MHz Takt. Wenn da nicht gerade ein kompletter Ethernetswitch-IC 
mit zig Phys dranhaengt, tun's da durchaus auch z.B. 4kHz Takt.
Da geht doch kaum was rueber; vielleicht alle par zig Millisekunden mal 
nachgucken, ob sich der Linkstatus geaendert hat...

Gruss
WK

von fchk (Gast)


Lesenswert?

A. F. schrieb:
>> So. Bevor Du jetzt weitere Salamischeiben rauslässt, sag erstmal, was Du
>> genau machen willst. Was ist Deiner Anwendung? Warum sind IO Toggles
>> wichtig? Vielleicht hast Du ja schon den komplett falschen Ansatz.
>>
>> Und sage, ob Du Full (12), High (480) oder Super Speed (5000Mbps)
>> brauchst.
> USB sollte idealerweise HS und die toggling Frequenzt brauche ich um die
> MDIO Schnittstelle einer PHY zu füttern. Ist zwar keine synchrone
> Schnittstelle, aber je schneller, desto besser ist es.

Es gibt genug Prozessoren, die das in Hardware können. Der hier z.B.

https://www.microchip.com/wwwproducts/en/PIC32MZ1024EFH100

Der hat HS USB Host/Device/OTG und Ethernet MAC mit MII/RMII und 
MDC/MDIO.

TQFP100, Software gibt bei Microchip.

Ich werde aber das Gefühl nicht los, dass Du uns hier noch nicht die 
volle Wahrheit gesagt hast. Also nächste Salamischeibe, bitte.

fchk

von A. F. (artur-f) Benutzerseite


Lesenswert?

Jim M. schrieb:
> Ist das Ethernet Phy? Denn es gibt µC mit Ethernet und USB.
Es handelt sich um MDIO 45 
(https://en.wikipedia.org/wiki/Management_Data_Input/Output) es geht 
darum die HW zu testen. Ich habe was da, aber neue Tester sind nicht 
mehr verfügbar.

> USB HS stellt schon "interessante" Anforderungen ans Platinen Layout.
Für eine differentielle Übertragung, bei 1.5cm Abstand von der USB 
Buchse bis zur CPU wohl kaum. Die Paar Platinen mit HS USB, die ich in 
Eagle erstellt habe, waren ohne Impendanzanpassung etc. auch ok.

Jim M. schrieb:
> Dann wirst Du selber mit WinUSB hantieren müssen.
Wenn es nötig ist, ist es in Ordnung.

Jim M. schrieb:
> Übrigens kann man Windows (IIRC ab Win7) vom USB Gerät selbst aus
> anweisen den WinUSB.sys Treiber zu lade

Interessant, ich werde mich da noch einlesen. Danke.

Dergute W. schrieb:
> Hm. Also das MDI das ich kenne, arbeitet schon synchron und braucht auch
> keine 4MHz Takt. Wenn da nicht gerade ein kompletter Ethernetswitch-IC
> mit zig Phys dranhaengt, tun's da durchaus auch z.B. 4kHz Takt.
> Da geht doch kaum was rueber; vielleicht alle par zig Millisekunden mal
> nachgucken, ob sich der Linkstatus geaendert hat...

Ja synchron zum Master Takt, aber nicht zu eigenem Systemtakt wie bei 
UART, deshalb ist es ähnlich easy, wie SPI. MDIO45 läuft mit bis zu 
2.5Mhz. Möchte es gerne aber schneller testen, als an der spec. Grenze.



Und eigentlich geht es mir darum, einen passenden UC rauszusuchen, als 
über die Anforderungsdetails zu sprechen. Diese habe ich grob geäußert.

Ich werde mir den PSOC5 näher anschauen. LPC scheint auch nicht die gute 
Wahl zu sein.

von Michael (Gast)


Lesenswert?

A. F. schrieb:
> Es handelt sich um die HID Schnittstelle, sehr ungeeignet in meinem
> Fall.

Wieso? Du wolltest doch kurze Paketabstände? Es gibt sowohl 
Interrupt-In- als auch Interrupt-Out-Endpoints, damit schafft man Daten 
in beide Richtungen in festen Intervallen und da der Interrupt-Transfer 
höher priorisiert ist, stören auch andere Vorgänge (Dateioperationen auf 
externen Festplatten usw.) nicht!

Wir nutzen HID für das Programmiergerät unserer Steuerungssysteme, die 
Firmware (16 Megabytes) laden wir in knapp zehn Minuten in das Gerät, 
einfacher geht es praktisch nicht - beim Kunden reicht jedes beliebige 
Notebook/PC und ein USB-Stick mit dem Flash-Tool drauf.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

A. F. schrieb:
> Interessant, ich werde mich da noch einlesen. Danke.

Ist auch im genannten Tutorial erläutert, Abschnitt "Windows: Laden von 
WinUSB".

A. F. schrieb:
> Für eine differentielle Übertragung, bei 1.5cm Abstand von der USB
> Buchse bis zur CPU wohl kaum.

Und für das parallele ULPI zwischen µC und USB-HS-PHY (nur wenige µC 
haben den integriert)?

Michael schrieb:
> einfacher geht es praktisch nicht - beim Kunden reicht jedes beliebige
> Notebook/PC und ein USB-Stick mit dem Flash-Tool drauf.

Mit WinUSB Devices geht es wie erwähnt auch ohne HID oder andere 
Standardklassen genauso einfach, und man kann USB voll ausnutzen, insb. 
alle Transfer-Typen.

Michael schrieb:
> (16 Megabytes) laden wir in knapp zehn Minuten

Also 28 KiB/s, ein Fünzigstel der Brutto-Datenrate von USB-FS?

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Niklas G. schrieb:
> Also 28 KiB/s, ein Fünzigstel der Brutto-Datenrate von USB-FS?

Schneller ist halt der Bootloader in der Steuerung nicht (wird über eine 
SPI-Verbindung bedient.) Wenn es nur um die USB-Übertragung ginge, wäre 
auch knapp das 2,5-fache noch drin.

von Frank K. (fchk)


Lesenswert?

A. F. schrieb:

> Und eigentlich geht es mir darum, einen passenden UC rauszusuchen, als
> über die Anforderungsdetails zu sprechen. Diese habe ich grob geäußert.

Ohne genau Kenntnis der Applikation sind die Vorschläge eben nicht sehr 
passend.

> Ich werde mir den PSOC5 näher anschauen. LPC scheint auch nicht die gute
> Wahl zu sein.

PSOC5 ist durch 5LP ersetzt. Hat kein USB HS.
PSOC6 hat kein USB HS.

Die ideale Plattform für Deinen Tester wäre ein Xilinx Zynx Board, wo 
die Testsoftware auf dem ARM läuft und das Interface im FPGA in Hardware 
implementiert wird. So teuer sind diese Boards auch nicht.

Ich gehe davon aus, dass die Stückzahlen sich sehr in Grenzen halten.

fchk

von Aaron C. (Firma: atcnetz.de) (atc1441)


Lesenswert?


von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

A. F. schrieb:
> Gebe zu, kenne mich mit dem Gebiet nicht wirklich gut aus.

Ja, das merkt man. Hinzu kommt auch noch Ignoranz, denn:

> 123 schrieb:
>> ggf gibt es von FTDI einen Baustein der das gewünschte erfüllt.
> Es ist kein Mikrocontroller, ich suche einen uC, und nicht einen
> einfachen Schnitstellenkonverter. Nebenbei soll der uC auch andere
> Sachen erledigen können.

Du hast es also trotz oder wegen Deiner Ahnungslosigkeit oder 
Engstirnigkeit nicht nötig, Dir die Produkte von FTDI anzuschauen. Für 
Dein Spatzenhirn ist also jedes Produkt von FTDI ein einfacher 
Schnittstellenkoverter? Da Du so beratungsresistent bist und Dein 
Weltbild zusammenbräche, wenn Du einmal selbst auf deren Webseiten 
schauen würdest, bringt es wohl auch nichts, Die die entsprechenden 
Microcontrollerfamilien zu nennen.

von A. F. (artur-f) Benutzerseite


Lesenswert?

Andreas S. schrieb:
> Du hast es also trotz oder wegen Deiner Ahnungslosigkeit oder
> Engstirnigkeit nicht nötig, Dir die Produkte von FTDI anzuschauen. Für
> Dein Spatzenhirn ist also jedes Produkt von FTDI ein einfacher
> Schnittstellenkoverter? Da Du so beratungsresistent bist und Dein
> Weltbild zusammenbräche, wenn Du einmal selbst auf deren Webseiten
> schauen würdest, bringt es wohl auch nichts, Die die entsprechenden
> Microcontrollerfamilien zu nennen.

FTDI kenne ich und es ist nicht das, was ich suche. Oder habe ich etwa 
einen FTDI mit MDIO45 übersehen? Bitbanging wäre das zu langsam. Also 
lass Mal deine Beleidigungen sein und deine Frust wo anders raus! Deine 
"Expertenmeinung" hilft hier auch nicht weiter.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.