Hallo, Kurze Frage für Leute mit Erfahrung mit dem LPC1343: kann ich ohne grossen Aufwand mit diesem Chip einen USB-zu-UART Wandler bauen, der direkt und ohne Treibe mit OS X, MSWindows und Linux läuft? Hintergrund: Ich habe ausgiebige Erfahrung mit PIC und Atmel, will aber die Programmierbarkeit des LPC1343 durch den User nutzen. Ich will eine Handvoll Module für den Apple Newton MessagePad aus den 90ern bauen, damit diese per USB synchronisiert werden können. Das geht mit den üblich RS232 Wandlern nicht, weil das Protokoll mit heutigen Hostrechnern massive Timingprobleme bekommt. Der LPC1343 soll also einen Full Speed Seriellen Port auf der USB Seite bieten, die Daten dekomprimieren und interpretieren, und dann Pausen in den Datenstrom einbauen, damit sich der Newton nicht verschluckt. Theoretisch müsste das alles mit bis zu 230.4Kb/sec passieren. Schafft der LPC1343 das, oder sollte ich mich nach einem anderen Chip umsehen? Wo bekomme ich den entsprechenden Cross Compiler und den USB Stack? Was ich bis jetzt im Netz gefunden habe ist eher verwirrend. Danke! Matthias
Prinzipiell kannst du das machen. Schau dich mal auf folgender URL um: http://www.lpcware.com/content/nxpfile/lpcopen-platform U.a. bietet NXP kostenlos einige PID/VID aus deren Pool, damit kleine und mittlere Anwendungen USB-Geräte entwickeln können, ohne gleich Mitglied der USB-SIG werden zu müssen. Infos hier: http://www.lpcware.com/content/project/usb-vid-pid-program Allerdings könnte es Probleme mit den Pausen geben, wenn du nicht steuern kannst, dass der Sender währenddessen wartet. Falls er dazu nämlich nicht überredet werden kann, müsstest du mit einem FIFO die auflaufenden Daten puffern und dann könnte es schon etwas eng werden... Der Compiler in der LPCXpresso IDE ist mittlerweile übrigens bis 256K Binärcode frei für allgemeine Benutzung ohne Einschränkung. PdG
:
Bearbeitet durch User
der USB stack ist bei dem 1343 schon im flash mit drauf ... auszug aus der appnote
1 | #define EN_TIMER32_1 (1<<10)
|
2 | #define EN_IOCON (1<<16)
|
3 | #define EN_USBREG (1<<14)
|
4 | |
5 | static USB_DEV_INFO DeviceInfo; |
6 | static HID_DEVICE_INFO HidDevInfo; |
7 | static ROM ** rom = (ROM **)0x1fff1ff8; |
8 | |
9 | void USB_IRQHandler(){ |
10 | (*rom)->pUSBD->isr(); |
11 | }
|
12 | |
13 | void USBHIDInit( USB_fpInReport infunc, uint8_t incnt , USB_fpOutReport outfunc ,uint8_t outcnt){ |
14 | volatile int n; |
15 | LPC_SYSCON->SYSAHBCLKCTRL |= (EN_TIMER32_1 | EN_IOCON | EN_USBREG); |
16 | |
17 | HidDevInfo.idVendor = USB_VENDOR_ID; |
18 | HidDevInfo.idProduct = USB_PROD_ID; |
19 | HidDevInfo.bcdDevice = USB_DEVICE; |
20 | HidDevInfo.StrDescPtr = (uint32_t)&USB_StringDescriptor[0]; |
21 | HidDevInfo.InReportCount = incnt; |
22 | HidDevInfo.OutReportCount = outcnt; |
23 | HidDevInfo.SampleInterval = 0x20; |
24 | HidDevInfo.InReport = infunc; |
25 | HidDevInfo.OutReport = outfunc; |
26 | DeviceInfo.DevType = USB_DEVICE_CLASS_HUMAN_INTERFACE; |
27 | DeviceInfo.DevDetailPtr = (uint32_t)&HidDevInfo; |
28 | |
29 | (*rom)->pUSBD->init_clk_pins(); |
30 | for (n = 0; n < 75; n++){ |
31 | __NOP(); |
32 | }
|
33 | (*rom)->pUSBD->init(&DeviceInfo); |
34 | (*rom)->pUSBD->connect(TRUE); |
35 | }
|
Danke Euch beiden! Prima Hilfe. Das sieht ja wirklich ganz gut aus. Die Übertragung findet in Blöcken statt, die in MNP5 komprimiert sind. Dabei gibt es an jedem Blockende einen Handshake mit Checksumme. Irgendwie brauch das MessagePad nach dem Paket relativ lange, bis es wieder bytes empfangen kann. Das war in den 90ern egal, weil die Kontrolle der Checksummp noch viel länger dauerte. Heute sieht das ganz anders aus, und das ACK wird gesendet, bevor das MessagePad empfangen kann, geht also verloren. Und ohne ACK wird eben auch ein neuer Block gesendet. Also hängt die Übertragung. Ich muss also (wahrscheinlich) nur das ACK verzögern. Danach sollte alles wieder wie gewohnt laufen. Das Problem kann aber auch viel komplexer sein, weswegen ich die Rechenleistung und die Programmierbarkeit per USB genial finde. Ich werde mir mal ein Board bestellen.
Der 1343 ist meines Wissens durch den 1347 ersetzt. Der USB ROM Stack des 1343 hat übrigens Treiber für HID und MEMSTICK, der 1347 auch für CDC-ACM. Es gibt aber im jeweiligen openlpc Package für beide Controller Beispiele für CDC-ACM (beim 1343 ist es halt etwas mehr code).
Super, danke. Ich habe je ein Board mit diesen beide Prozessoren bestellt. Ich freu mich drauf. Könnte mein neuer Lieblingsprozessor werden. ;-)
Matthias Melcher schrieb: > Könnte mein neuer Lieblingsprozessor > werden. ;-) Hurra, da sind wir schon zwei :-) Leider sind die LPCs nicht so weit verbreitet und ich war erstaunt das deine Frage hier doch so schnell beantwortet wurde. > Ich habe je ein Board mit diesen beide Prozessoren > bestellt. Die Auswahl ist da ja eher bescheiden bzw. sind die Boards deutlich teuerer als solche mit AVRs, welche hast du denn gefunden? Für den 1343 kenne ich das Quickstart Board von EA, kostet knappe 20€ bei Watterott. Atmel Boards gibt es beim Ali für deutlich unter 10€, aber mit dem 1343 finde ich nur das WaveShare Board 'OpenLPC1343'. Das ist gut als Experimentierboard, aber zu gross um es in eigene Designs einzubauen wie es mit dem QSB1343 ganz gut geht. Das QSB hat ein externes EEPROM drauf, so etwas fehlt dem 1343 nämlich. Da ist der 1347 besser, der hat EEPROM auf dem Chip, nur der 1347 ist noch seltener. Es gibt ein LPCXpresso mit dem 47er, das ist ok aber auch schon recht gross und kostet knappe 25€. Mein Favorit ist da der 'EzSBC2' aus den USA, kostet aber mittlerweile durch den schlechten Dollarkurs etwas über 25€. Ali kennt den LPC1347 gar nicht und schon der nachte Prozessor ist recht teuer und nur bei Distris wie Farnell, Digikey & Co. zu bekommen. Der EzSBC2 kann gut mit der mbed Umgebung programmiert werden, es gibt noch ein ähnliches mbed Board 'Dip Cortex M3' von SolderSplash aus GB (aber mit knapp 40 € uninteressant). Schade das der 1347 nicht populärer ist. Wenn man auf mbed C++ verzichtet kann man noch die Lib von microbuilder.eu nutzen. Die ist gut strukturiert und enthält schon einige Treiber für Displays und Sensoren. Hier hat sich auch mal jemand die Mühe gemacht und die 1343 Codebase Doku auf Deutsch übersetzt. Diese Lib gibt es auf Github auch für den 1347. Da wurde zwar seit zwei Jahren nix mehr dran gemacht, aber das Wichtigste ist da schon drin.
Ja, ich hatte die gleichen Probleme. Ich will am Ende eine kleine Serie machen, die dann zum Selbstkostenpreis an die verbleibenden Apple MessagePad User verteilt wird, also vielleicht 25 Boards. Mir ist es wichtig, dabei extrem flexibel zu bleiben (Programmierbarkeit durch den Anwender per USB) und ich wenig Bauteile auf meiner Platine brauche (CPU, Pegelwandler, fertig). Die Protobords brauch ich erstmal nur zum spielen. Da ich aber USB und die Serielle Implementation mit der CPU geschenkt bekomme, relativiert sich der Preis ganz gewaltig. Idealerweise hätte ich dieses Board genommen: https://coderwall.com/p/x8gb_g/cortex-m3-lpc1347-eval-board-and-template-project Aber das gibt es nicht fertig bestückt, und ich habe weder Zeit noch Lust dazu. Vielleicht macht man mal hundert und stellt sie Online, aber das ist eine ganz andere Geschichte. Das DipCortex M3 ist ohne guten Grund viel zu teuer. Schwachsinn. Das LPCXPRESSO habe ich dann genommen, stinkt mir aber, weil das Board zehn mal mehr Bauteile hat, die ich nicht brauche, die niemand braucht. Was soll das? Das Watterott LPC1343 ist mir eigentlich am liebsten. Hatte schon überlegt, einfach den Controller auf dem Board zu tauschen, falls die Dinger Pin-kompatibel sind. Naja, jetzt habe ich die beiden bestellt und freue mich über die zusätzliche Rechenleistung. Der Port Adapter bekommt jetzt noch eine MicroSD Karte, die so tut, als wäre sie ein PS am Kommunikationsport. Da passt dann locker alle Software drauf, die jemals für das MessagePad geschrieben wurde. Das wird lustig ;-)
:
Bearbeitet durch User
Achim K. schrieb: > Der USB ROM Stack des 1343 hat übrigens Treiber für HID und MEMSTICK, > der 1347 auch für CDC-ACM. Es gibt aber im jeweiligen openlpc Package > für beide Controller Beispiele für CDC-ACM (beim 1343 ist es halt etwas > mehr code). Falls es ein M0 statt M3 tut, der LPC11U35 hat dieselben USB-ROM-Treiber wie der LPC1347 und es gibt ein QuickStart Board. Dazu kommt noch, dass NXP für die LPC11Uxx freie USB VID/PID auch für die kommerzielle Nutzung vergibt.
Matthias Melcher schrieb: > Das Watterott LPC1343 ist mir eigentlich am liebsten. Hatte schon > überlegt, einfach den Controller auf dem Board zu tauschen, falls die > Dinger Pin-kompatibel sind. ja, das müsste passen, nur ein paar Portfunktionen sind anders. Hatte ich auch mal kurz überlegt, aber der Proz auf dem Board ist im HVQFN33 Gehäuse, das ist nicht gerade bastelfreundlich. Da ist das QSB mit dem 11U35 sicher die bessere Lösung, der M0 hat ja auch schon ordentlich Power.
Auch eine gute Idee. Das Board wäre wohl für die Anwendung auch gegangen. SMDs löte ich nur noch im Dampfbad. Billig, schnell und perfekt. Spargeltopf auf alter Kochplatte und fertig.
OK, ich habe vor einer Stunde mein LPCXpresso board bekommen. Nachdem ich gestern Nacht einige Problem gehabt habe, mich auf der LPCWare Seite zurecht zu finden, ging es heute eigentlich ziemlich schnell. Software installiert, Board eingesteckt, über die Software geärgert, Compiler, halbe Stunde lang den Debugger gesucht, und schon funktioniert mein virtuelle serieller Port. SUPI! Naja, bis zur fertige Schnittstelle ist noch einiges zu tun. Aber so lässt es sich schon mal arbeiten. Einen Debugger mit Breakpoint im Embedded Board ist für mich noch neu ;-) Nochmals Danke für die Hilfestellungen!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.