Forum: Mikrocontroller und Digitale Elektronik LPC1343 als RS232 Wandler mit Dekompression, möglich?


von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

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

von Pd G. (pdg)


Lesenswert?

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
von husten (Gast)


Lesenswert?

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
}

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

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.

von Achim K. (aks)


Lesenswert?

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).

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

Super, danke. Ich habe je ein Board mit diesen beide Prozessoren 
bestellt. Ich freu mich drauf. Könnte mein neuer Lieblingsprozessor 
werden. ;-)

von Jojo S. (Gast)


Lesenswert?

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.

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

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
von Lothar (Gast)


Lesenswert?

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.

von Jojo S. (Gast)


Lesenswert?

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.

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

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.

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

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
Noch kein Account? Hier anmelden.