mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uC für 0,20€ CH552 / CH554 von WCH Billig Micro mit USB Funktion, Chip vorstellung


Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:
Angehängte Dateien:

Bewertung
11 lesenswert
nicht lesenswert
Moin, da es Leider noch sehr wenig über die WCH Mikrocontroller im web 
zu finden gibt, erst recht nicht im Deutschen raum würde ich hiermit 
einen Thread eröffnen und ein wenig drauf aufmerksam zu machen.
Falls es was zu meckern gibt immer her damit :), heute ist aber nicht 
Freitag...

Es gibt eine Mikrocontroller Serie von der Firma WCH mit integriertem 
USB und auch USB Host für wenig Geld wie z.b. der CH552 oder CH554.

Bei LCSC gibt es sie in stock: https://lcsc.com/products/WCH_11013.html


Die Mikrocontroller haben einen von Werk aus Programmierten USB 
Bootloader also lassen sie sich ohne weitere Hardware programmieren.

Vielen wird der CH340 ein Begriff sein da dieser auf vielen China 
Arduino Clones usw. als USB zu UART Wandler eingesetzt wird.

Hier einige Eckdaten vom CH552:
-8051 Kern mit den Meisten Standard Register, befehlen usw. nur 10-15x 
Schneller
-Integrierter Oszilator bis 24Mhz
-3x Timer
-2x 8bit PWM
-1x SPI Master/Slave
-2x UART
-4x ADC 8bit
-6x Touch Input
-16K ROM
-1K xRAM
-256b iRAM
-i2c ist per Bitbanging kein Problem(Beispiel vorhanden)



Der CH554 Kann zusätzlich noch USB Host und DMA.

Zum Betrieb wird eigentlich nur eine 3.3-5V Spannungsquelle, ein 20KOhm 
Widerstand und 2 Kondensatoren benötigt.

Hier wird die Serie etwas genauer Beschrieben:
https://www.electrodragon.com/w/WCH#MCU_.2B_USB_CH55x_Series

zudem gibt es hier einige demos für Keil:
https://github.com/Edragon/WCH

hier weitere Demos für SDCC inkl. compilier Anleitung für Windows und 
Linux:
https://github.com/Blinkinlabs/ch554_sdcc


In einer Nächtlichen Langweile habe ich mal einige CH554G 
Mikrocontroller bestellt und mich nun etwas mehr damit beschäftigt,
Habe jegliche Hardware ansprechen können und mir eine kleine Platine bei 
JLCPCB angefertigt, anbei noch ein Paar Bilder.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das klingt interessant. Danke für den Hinweis!

Autor: Tim  . (cpldcpu)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Viel zu teuer, über 0.05USD kommt mir keine neue MCU ins Haus. :)

Ich warte noch darauf, dass die Chinesen etwas anderes als PIC and 8051 
kopieren. Immerhin gibt es auch schon einen günstigen CM0 bei LCSC. 
Allerdings ist ein STM32F030 auch schon für 0.3X USD zu haben.

Autor: Tim  . (cpldcpu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn der Unterschied zwischen dem 551 und 554? Letzterer ist 
deutlich teurer.

Autor: Doctor Snuggles (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Am interessantesten ist:

"Bugs

    The IC only can be flashed up to 200 times, please notice this.
"

Ansonsten ist die MCU ja nicht so interessant. Hat nix, was andere und 
besser dokumentierte AVRs oder Cortexe nicht haben.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WCH hat auch 32-Bit-MCUs mit ARM-Kern, wie z.B. den CH563.

Ein (natürlich chinesisches) Datenblatt gibts hier:
https://datasheet.lcsc.com/szlcsc/Jiangsu-Qin-Heng-CH563L_C87387.pdf

Auch ohne Chinesischkenntnisse kann man dem folgendes entnehmen:

ARM5TE, 224K Flash, 64K SRAM, 28K Dataflash, 10/100MBit-NIC, USB2.0 und 
die übliche Peripherie (2 16550-kompatible UARTs, 4 Timer, diverse I/Os, 
SPI).

Im 128poligen TQFP-Gehäuse kostet der dann bei LCSC aber "richtig" Geld, 
nämlich auch in der 6000er-Staffel mehr als 3 USD.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim  . schrieb:
> Was ist denn der Unterschied zwischen dem 551 und 554? Letzterer ist
> deutlich teurer.

Der CH551 hat nur 10K ROM und der CH554 hat 16K ROM zusätzlich noch USB 
Host, das unterscheidet eigentlich am meisten.

Heißt also der CH551 kann als Slave USB Gerät irgendwo angeschlossen 
werden wie Maus, Tastatur oder USB Stick an einen PC o.ä.

Bei dem CH554 kann man wider rum Geräte anschließen. also z.b. eine 
Tastatur oder Maus an den Mikrocontroller und der ließt diese dann aus 
und macht sache X bei bestimmten tastendruck auf der Tastatur.

Doctor Snuggles schrieb:
> Am interessantesten ist:
>     The IC only can be flashed up to 200 times, please notice this.

in einem Russischen Forum hat einer ein dauer test gemacht und mehr als 
1000 mal beschrieben ohne Probleme.

: Bearbeitet durch User
Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim  . schrieb:
> Ich warte noch darauf, dass die Chinesen etwas anderes als PIC and 8051
> kopieren.

Suche mal nach:
LGT8F88A
LGT8FX8D
MD-328D

In wie weit das Kopien sind, mag ich nicht beurteilen wollen.
Aber der AVR-GCC kompiliert dafür.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
4 lesenswert
nicht lesenswert
Habe gerade noch ein Video auf YouTube hochgeladen wo ich die 
Mikrocontroller etwas in nicht ganz gutem English erkläre.

Youtube-Video "CH552 0,30€ USB Mikrocontroller HowTo Programm, ISP Display I2C RTC"

: Bearbeitet durch User
Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>-8051 Kern mit den Meisten Standard Register, befehlen usw. nur 10-15x
>Schneller

Schneller als der Ur-8051 oder aktuelle Versionen?
Von Silabs hab ich vor über 10 Jahren einen eingesetzt der auch nur 1-2 
Clocks/Instruction benötigt.
Zugegeben ist der teurer als 0,20€.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
im Datenblatt steht 8 bis 15 Mal schneller als der Standard mcs51 würde 
also von dem Original ausgehen.
Die ch Reihe läuft zusätzlich ja noch mit max 24 Megaherz also noch mal 
doppelt so schnell

: Bearbeitet durch User
Autor: Guido Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STM8 und STM32 sind in ähnlichen Preislagen, dafür gibt es dann auch 
lesbare Doku ;)

Autor: Harald A. (embedded)
Datum:

Bewertung
4 lesenswert
nicht lesenswert
Guido Körber schrieb:
> STM8 und STM32 sind in ähnlichen Preislagen, dafür gibt es dann auch
> lesbare Doku ;)

Man sollte das doch einfach als Wissensbereicherung sehen (oder auch 
nicht). Microcontroller aus China werden uns in der nächsten Zeit 
vermehrt über den Weg laufen und eine Konkurrenz zu den Etablierten 
bilden. Das darf man in einem Forum wie diesem doch gerne vorstellen, 
oder nicht? Ich denke es war nicht die Absicht des TE hier den heiligen 
Gral vorzustellen, der alles Andere in den Schatten stellen soll.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald A. schrieb:
> Ich denke es war nicht die Absicht des TE hier den heiligen
> Gral vorzustellen, der alles Andere in den Schatten stellen soll.

Danke, so ist es.


Und zu der Doku, es gibt eine Übersetzung ins Englische und zudem kann 
man die Standards des 8051 einfach übernehmen.

Der Chip ist super für einfache Dinge mit USB, könnte ihn mir auch 
vorstellen als eine USB Bridge für esp8266 oder esp32.

Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Aaron,
gibt es hier noch neue Erkenntnisse? Hast du das Projekt weiter 
verfolgt? Dem Foto nach hast du davon ja einige verarbeitet.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald A. schrieb:
> Hallo Aaron,
> gibt es hier noch neue Erkenntnisse? Hast du das Projekt weiter
> verfolgt? Dem Foto nach hast du davon ja einige verarbeitet.

Moin, naja habe leider noch keinen super Einsatzzweck gefunden, es bahnt 
sich da aber eine Modellbau LED Steuerung an bei der 10 Leds in 
verschiedensten mustern leuchten sollen und neue muster per USB 
geschrieben werden können.
Dafür ist der Chip perfekt.

Also am Ball bleibe ich aufjedenfall, habe den 8051 ziemlich gut 
durchschaut und habe viel mit dem "Projekt" gelernt was interrupt, 
timmer etc angeht.

Leider ist bei so wenig Interesse anderer die Lust weniger geworden.

Grüße

: Bearbeitet durch User
Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Persönlich finde ich den CH554 interessant, denn für wenige Cent gibt es 
USB Host/Device Unterstützung, das ist schon ein Alleinstellungsmerkmal.

Forum-Disclaimer: Mir ist sehr klar, bei welchen Stückzahlen sich das 
lohnt bzw. nicht lohnt. Und ich weiß auch, dass es zahlreiche andere uCs 
mit ähnlichen/besseren Features gibt. Mich interessiert das trotzdem, 
insbesondere asiatische Produkte. Danke für das Verständnis!

Autor: Mehmet K. (mkmk)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Leider ist bei so wenig Interesse anderer die Lust weniger geworden.

Ich bin sicher, dass viele so wie ich mit Interesse Deine Beitraege 
lesen. Aus meiner Sicht waere es schade, wenn das Ganze im Sande 
verlaufen würde. Auch wenn ich für diesen Chip keine Verwendung habe: 
interessant finde ich ihn allemal.
Nochmals Danke für Deine bisherigen - und hoffentlich zukünftigen - 
Beitraege

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Also am Ball bleibe ich aufjedenfall, habe den 8051 ziemlich gut
> durchschaut und habe viel mit dem "Projekt" gelernt was interrupt,
> timmer etc angeht.

Ja, beim 8051 kann man schnell mit neuen Derivaten einsteigen. Das 
nötige include File mit den SFR-Definitionen für den Keil oder 
Wickenhäuser zu schreiben, ist ja kein Ding.
Der CH558L mit 12Bit-ADC sieht interessant aus. Und 32kB Flash sind ja 
beim effizienten 8051-Core geradezu riesig.

Autor: Mw E. (Firma: fritzler-avr.de) (fritzler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 559 sieht auch sehr interessant aus.
Mit integriertem RootHub.
Entweder 2 Hosts hat man dann oder 1 Host und 1 Slave.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mehmet K. schrieb:
> Aaron C. schrieb:
>> Leider ist bei so wenig Interesse anderer die Lust weniger geworden.
>
> Ich bin sicher, dass viele so wie ich mit Interesse Deine Beitraege
> lesen. Aus meiner Sicht waere es schade, wenn das Ganze im Sande
> verlaufen würde. Auch wenn ich für diesen Chip keine Verwendung habe:
> interessant finde ich ihn allemal.
> Nochmals Danke für Deine bisherigen - und hoffentlich zukünftigen -
> Beitraege


Vielen dank für die Netten Worte :)



ich fand den CH552 gerade wegen dem Preis super interessant, der CH554 
ist schon wieder so "Teuer", jedoch der CH551 mit dem 10Kb speicher 
wieder zu klein.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Guten Abend,


habe mich nun nochmal mit dem Mikro beschäftigt und dabei ist ein USB 
Tastatur Emulator bei raus gekommen, Quasi ein USB Rubber Ducky.

Dabei wird viel der vorhandenen Hardware genutzt, die Touch Sensoren, 
der Timer, software bootloader eingang und natürlich die USB 
pheripherie.

hier ein Video darüber: Youtube-Video "CH552 USB Keyboard Example and HOW TO"

zudem habe ich ein Blog eintrag erstellt dieser beinhaltet aber im 
grunde alles was hier steht: http://atcnetz.de

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Links nicht alle durchgearbeitet, könntest du mir kurz 
sagen, ob das alles mit SDCC kompiliert wurde?

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald schrieb:
> Ich habe die Links nicht alle durchgearbeitet, könntest du mir kurz
> sagen, ob das alles mit SDCC kompiliert wurde?



Bis  auf die USB-Stick Speicher Geschichte wurde alles mit sdcc 
kompiliert
Beim sdcc SDK ist aber auch ein Python Script dabei mit dem man die Keil 
Dateien größtenteils sdcc kompatibel machen kann also selbst das sollte 
kein Hindernis sein

Autor: Sigint 1. (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend zusammen,
  hab mir jetzt auch mal ein paar von den Teilen bestellt. Ich habe 
gesehen, daß der Bootloader wohl auch Seriell unterstüzt, beim CH552. 
Hat damit schon jemand erfahrungen gesammelt? Ich würde die Software 
gerne per WINE nutzen und das geht leider nicht, wegen der Treiber. 
Seriell ist dagegen kein Problem. Leider sind die Chips noch nicht 
angekommen. :-|
Mich würde auch interessieren, wie man den Chip flashen kann, sollte der 
Bootloader zufälligerweise defekt sein... hat jemand na Ahnung, ob es 
irgendwo dazu infos gibt? Ich hab bis jetzt noch nicht viel zu der 
Chipreihe gefunden.

Gruß,
   Sigint

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sigint 1. schrieb:
> Nabend zusammen,
>   hab mir jetzt auch mal ein paar von den Teilen bestellt. Ich habe
> gesehen, daß der Bootloader wohl auch Seriell unterstüzt, beim CH552.
> Hat damit schon jemand erfahrungen gesammelt? Ich würde die Software
> gerne per WINE nutzen und das geht leider nicht, wegen der Treiber.
> Seriell ist dagegen kein Problem. Leider sind die Chips noch nicht
> angekommen. :-|
> Mich würde auch interessieren, wie man den Chip flashen kann, sollte der
> Bootloader zufälligerweise defekt sein... hat jemand na Ahnung, ob es
> irgendwo dazu infos gibt? Ich hab bis jetzt noch nicht viel zu der
> Chipreihe gefunden.
>
> Gruß,
>    Sigint

Moin, habe mal die Serielle Programmierung versucht bin da aber nicht zu 
Erfolgs Ergebnissen gekommen.

Hier gibt es aber ein open Source Tool um die Chips auch in Linux über 
USB zu schreiben: https://github.com/rgwan/librech551

Das Protokoll ist eigentlich auch super simpel und kann einfach 
nachgebaut werden, habe mir überlegt eine Android App zu schreiben um 
auch mit dem Handy Uploaden zu können.

Der Bootloader ist fest im Chip eingebrannt und kann nicht Kaputt 
gemacht werden oder zerflasht werden. bzw, das schafft man nur wenn man 
es wirklich will.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Habe direkt mal mit der Android App Angefangen, erste erfolge sind zu 
sehen.

Kann mittels des Kommandos dafür über USB den Chip identifizieren.

Auch aus dem Bootloader ins normale Programm starten geht mittels 
Kommando.

Anbei ein Bild vom ersten versuch. die 52 ist der Identifier für den 
CH552

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Tim  . schrieb:
> Ich warte noch darauf, dass die Chinesen etwas anderes als PIC and 8051
> kopieren.

GigaDevice klont einige STM32 (heißen dann GD32xxxxx) und zwar machen 
die das mit so einer Hingabe und Inbrunst daß sie sogar eigene 
Handbücher dafür schreiben (komplett neu geschrieben, alles mit eigenen 
Worten formuliert, neue Tabellen und Diagramme gemalt, etc.) und auch 
eine selbstgeschriebene Standard Peripheral Library mit ausliefern.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Aaron
Ich finde die Chips schon sehr interesant, vorallem der CH552 sieht gut 
aus.
Ich hätte hier auch eine Anwendung als Ersatz für nicht mehr lieferbare 
Controller von Cypress. (AN2131)
Das Problem ist aber ein Datenblatt zu finden. Der link auf Github ist 
auch tot. Auserdem scheint was mit dem rar file auf deiner Seite nicht 
zu stimmen.

Thomas

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> @Aaron
> Ich finde die Chips schon sehr interesant, vorallem der CH552 sieht gut
> aus.
> Ich hätte hier auch eine Anwendung als Ersatz für nicht mehr lieferbare
> Controller von Cypress. (AN2131)
> Das Problem ist aber ein Datenblatt zu finden. Der link auf Github ist
> auch tot. Auserdem scheint was mit dem rar file auf deiner Seite nicht
> zu stimmen.
>
> Thomas


Mhh das mit dem rar File habe ich gerade nochmal probiert, das ist so 
richtig.
Es muss vorher die SDCC Umgebung, wie hier 
beschrieben:https://github.com/Blinkinlabs/ch554_sdcc, erfolgreich 
installiert sein und danach muss man den Inhalt in die SDCC Ordner 
einfügen.

Womit hattest du da Probleme?

Hier: 
https://github.com/Blinkinlabs/ch554_sdcc/blob/master/documentation/CH554%20manual%20english.pdf
Gibt es das Datenblatt per Google auf Deutsch Übersetzt. es ist das für 
den CH554 aber es ist bis auf den USB Host teil komplett gleich.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Womit hattest du da Probleme?

ich konnte dein Rar File zwar runterladen aber nicht öffnen. Ich hab das 
mehrmals probiert.

Ich habe den SDCC zwar installiert aber die Performance ist halt immer 
noch deutlich schlechter als der Keil. Zuletzt hab ich das mit meinen 
TEA Routinen erst wieder überprüft. Ergebnis: 30 % mehr code und ca 20% 
sclechtere Laufzeit. Zusätzlich besitze ich auch den Wickenhäuser 
Compiler aber der ist ja sowas von tot und auch noch schlechter als der 
SDCC.

Auserdem spiele ich immer mal wieder mit dem Turbo51 Pascal Compiler. 
Das ist aber mehr eine Spielerei (Ich habe vor vielen Jahren mal mit 
Pascal angefangen :-) ). http://turbo51.com

Im Moment kämpfe ich mich durch die chinesische Webside, da werde ich 
wohl meine Kontakte nach China aktivieren müssen.

Thomas

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Zusätzlich besitze ich auch den Wickenhäuser
> Compiler aber der ist ja sowas von tot und auch noch schlechter als der
> SDCC.

Komisch, ich meine mich zu erinnern, daß er gegenüber dem SDCC als 
besser optimierend beworben wurde.
Daß ein Compiler nicht mehr weiter entwickelt wird, schränkt in keinster 
Weise seine Verwendbarkeit ein. Ich benutze einen Keil C51 von 1995.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Habe die Datei nun nochmal als zip hochgeladen, einfach auf der Seite 
erneut runterladen.

Die SDCC Umgebung ist denke ich nicht sonderlich optimiert und deswegen 
so "schlecht" bin aber dennoch glücklicher damit, da keil ja leider 
nicht kostenlos verfügbar ist.

Zudem ist die Android App fertig und kann hier vom Google Playstore 
runtergeladen werden: 
https://play.google.com/store/apps/details?id=com.atcnetz.de.ch55xprogrammer

sie ist derzeit nur mit bin Files kompatibel aber man kann die hex 
Dateien ja zu bin umwandeln, denke ist gant hilfreich wenn man mal 
schnell eine andere Firmware flachen will. Wird sich schon ein nutzen 
finden :D

Dazu hier auch noch ein kurzes Video: Youtube-Video "Programming the CH552 Chip directly via Android, CH55x Programmer Manual"

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Komisch, ich meine mich zu erinnern, daß er gegenüber dem SDCC als
> besser optimierend beworben wurde.

Ja die Werbung... Er hat auch behauptet besser zu sein als Keil. War 
wohl sein Wunschtraum. Ebenso die Garantie das er sichergestellt hat das 
man seinen Compiler immer aktivieren kann. Die 100 Euro jedenfalls hätte 
ich mir damals sparen können.

Ich geb dir aber recht. Am Keil hat sich seit den Dos v3 Versionen jetzt 
nicht so viel geändert.

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Habe die Datei nun nochmal als zip hochgeladen, einfach auf der Seite
> erneut runterladen.

Dank dir das ZIP kann ich öffnen

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im übersetzten Datenblatt fehlen leider die beiden für mich wichtigsten 
Kapitel über die InSystem Programmierung des Fash Roms (6.4  6.5)
ich habe mir deshalb das Original Datenblatt beschafft und diese 
Abschnitte mal übersetzt. Das Englisch der Google Übersetzung it zwar 
etwas seltsam aber durchaus verständlich.
Ich werde das mal meinem Bekannten zeigen. Vieleicht kann der mir noch 
ein paar Hinweise geben. Er ist allerdings nicht vom Fach kann also 
nichts zur Technik sagen.
So wie ich das verstanden habe werden beim Flash Rom immer 16 Bit 
programmiert. Unklar ist mir noch welches Byte des ROM_DATA Registers 
dabei an den geraden Addressen landet.

Thomas

Autor: Andreas R. (daybyter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem USB Host und dem günstigen Preis könnte man mit dem 554 z.B. 
einen Adapter bauen, um USB Joysticks/pads an Retro Computer wie den c64 
anzuschließen?

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat schonmal jemand den Keil PK51 von Silabs ausprobiert?
Wenn man sich registriert, bekommt man den product key.

https://www.silabs.com/products/development-tools/software/8-bit-8051-microcontroller-software#keil

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Thomas schrieb:
> Das Englisch der Google Übersetzung it zwar etwas seltsam aber durchaus
> verständlich.

Nimm deepl. Das übersetzt um Längen besser als Google, es kennt nur 
deutlich weniger Sprachen.

https://www.deepl.com/translator

Autor: Christoph M. (mchris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Autor: Aaron C. (Firma: atcnetz.de) (atc1441)

Du bist auf Hackaday:
https://hackaday.com/2019/02/17/how-to-program-a-really-cheap-microcontroller/

Mittlerweile glaube ich ja fast, dass Hackaday das MC-Netz mit liest.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph M. schrieb:
>>Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
>
> Du bist auf Hackaday:
> https://hackaday.com/2019/02/17/how-to-program-a-really-cheap-microcontroller/
>
> Mittlerweile glaube ich ja fast, dass Hackaday das MC-Netz mit liest.

:D Ja denke auch das dort bestimmt welche hier mitlesen, diesmal hab ich 
da aber selber drauf hingewiesen und einen sehr netten Kontakt mit einem 
"Hackadayer" gehabt.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Nimm deepl. Das übersetzt um Längen besser als Google, es kennt nur
> deutlich weniger Sprachen.

Chinesisch ist da hält nicht dabei

Thomas

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Chinesisch ist da hält nicht dabei

Hrgmrnmpf. Mistverdammter. Ich hatte aus irgendeinem Grund den Eindruck, 
Du wolltest was aus dem Englischen ins Deutsche übersetzen --- da wäre 
Deepl von Vorteil. Aber natürlich, WCH-Datenblätter sind verm. auf 
Mandarin geschrieben ...

Vergiss' also das geschriebene.

Autor: Mehmet K. (mkmk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Hat schonmal jemand den Keil PK51 von Silabs ausprobiert?
> Wenn man sich registriert, bekommt man den product key.

Diese Frage lag auch mir auf der Zunge :)

Autor: Sigint 1. (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Aaron: Wow... der Android Flashloader ist ja wirklich klasse :-D 
Schade, daß ich von Androidprogrammierung nicht wirklich viel Ahnung 
habe... hätte gerne einen C-Compiler für die 8051er in Android. Einen 
Assembler gibts ja schon. :-)

@Thomas: Wenn ich das richtig lese, dann kann man die CH55x auch ohne 
Bootloader ISP flashen. Wäre interesannt das Protokoll zu haben... 
leider hab ich nichts gefunden. Auf der Webseite gibts auch keine 
passende Hardware.
Aber selfprogramming scheint wohl machbar zu sein. Damit könnte man 
wahrscheinlich den Bootloader von innen heraus tauschen.
Möglicherweise kann man den internen Flash wie ein SPI-Flash 
ansprechen... werd das mal testen, wenn die Chips angekommen sind.

@Anreas R: Die Idee mit dem C64-Adapter ist cool... mit Pegelwandler 
sollte das doch machbar sein :-D

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin wir inzwischen sicher wie das Schreiben ins Flash Rom und ins 
Datenflash funktioniert. Die Google Übersetzung des Original Datenblatts 
für den 552 hat mich weitergebacht. Das Vorgehen ist wie schon 
geschrieben In Kapitel 6.4 und 6.5 beschrieben. Und genau diese 
Abschnitte fehlen ja im oben genannten PDF.
Ich werde  vermutlich morgen abend eine englische Beeschreibung hier 
einstellen.

Soviel vorab:
- Das Flash wird 16 Bit weise beschrieben, start immer an geraden 
Addressen.
- Ob das Flash vorher gelöscht werden muss hab ich noch nicht gefunden
- im Moment gehe ich von einem Autoerease aus.
- Das Flash geht bis 0x3FFF ab 0x3800 liegt der Bootloader.
- Solange ein Byte programmiert wird die Codeausführung angehalten
- Wenn man also den Bootloader nicht braucht kann man den überschreiben

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mehmet K. schrieb:
> Peter D. schrieb:
>> Hat schonmal jemand den Keil PK51 von Silabs ausprobiert?
>> Wenn man sich registriert, bekommt man den product key.
>
> Diese Frage lag auch mir auf der Zunge :)

ja das geht du hat halt dann nur Silabs devices. Der Compiler is aber 
nicht eingeschränkt nur halt nicht die aktuellste Version. Das spielt 
aber keine Rolle solange man eigene Headerfiles benutzt.

Wie sch schon geschrieben habe hat sich am compiler selbst nich mal 
soviel seit den DOS Zeiten geändert. Der Simulator und die Debug 
Möglichkeiten sind der eigentliche Hit.
Die Einschränkungen liegen in der Datenbank (Bequemlichkeit) und der 
Simulator kann halt nicht mehr zyklen genau arbeiten wenn du was anderes 
als Silabs benutzt.
Er ist aber immer noch besser als alles andere was ich bisher gesehen 
habe.

Thomas

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sigint 1. schrieb:
> hätte gerne einen C-Compiler für die 8051er in Android.

Alle Schaltjahre stolpere ich mal über ein Posting wo sich jemand sowas 
(oder was vergleichbar bizzarres) wünscht. Ich frag mich dann jedesmal 
wozu in aller Welt sollte jemand ein Verlangen danach danach verspüren 
auf dem Handy auf dem noch nicht mal ne vernünftige Tastatur vorhanden 
ist C zu programmieren?

"OK, Google: uint8_t m = ((uint8_t*)&a)[i++ * 4] >> s;"

???

Ich persönlich finds wesentlich entspannter gemütlich am Tisch zu sitzen 
mit ner greifbaren Tastatur und mehreren großen Bildschirmen und einer 
frei einteilbaren Tastatur/Maus/Fenster-Oberfläche.

Bitte erhelle mich, was ist der Zweck eines C-Compilers auf einem 
hochgradig auf einhändigen (zweifingrigen) Medienkonsum optimierten 
System?

: Bearbeitet durch User
Autor: Goodwill (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd K. schrieb:

> Alle Schaltjahre stolpere ich mal über ein Posting wo sich jemand sowas
> (oder was vergleichbar bizzarres) wünscht.

2019 ist kein Schaltjahr.

> "OK, Google: uint8_t m = ((uint8_t*)&a)[i++ * 4] >> s;"

Statt des WorldWideWebSnoopers(WWWS) nimmt man duckduckgo.com.

> Bitte erhelle mich, was ist der Zweck eines C-Compilers auf einem
> hochgradig auf einhändigen (zweifingrigen) Medienkonsum optimierten
> System?

Android gehört zum WWWS, also nur offline verwenden.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> ja das geht du hat halt dann nur Silabs devices.

Das betrifft dann aber nur den Debugger und Simulator.
Compilieren kann der Keil ausnahmslos jedes 8051 Derivat. Nur die 
Spezialfeatures sind dann eingeschränkt, z.B. Banking ab >64kB.

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
3 lesenswert
nicht lesenswert
hier wie versprochen die Übersetzung zusammen mit etwas code. Da ich 
noch keine Chips habe ist das nur eine Trockenübung Fehler sind nicht 
ausgeschlossen.

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Das betrifft dann aber nur den Debugger und Simulator.
> Compilieren kann der Keil ausnahmslos jedes 8051 Derivat. Nur die
> Spezialfeatures sind dann eingeschränkt, z.B. Banking ab >64kB.

genau aber mal ganz dumm gefragt:
Hast du banking auf einem 8051 jemals benutzt? Und damit meine ich nicht 
jetzt sondern vor 20 Jahren?

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> hier wie versprochen die Übersetzung zusammen mit etwas code. Da ich
> noch keine Chips habe ist das nur eine Trockenübung Fehler sind nicht
> ausgeschlossen.
>
> Thomas

Danke dafür :), aber mal eine Frage zu dem Code, damit schreibt sich ja 
das Programm selber in den Flash, möchtest du damit den Bootloader 
tauschen? man muss ja sowieso schon das Programm geflasht haben damit es 
sich selber flashen kann ?!

Grüße

Autor: Peter D. (peda)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Thomas schrieb:
> Hast du banking auf einem 8051 jemals benutzt? Und damit meine ich nicht
> jetzt sondern vor 20 Jahren?

Nein, noch nie.
Mein größtes Programm ist über viele Jahre auf ~48kB angewachsen.

Ich wollte damit auch nur ausdrücken, daß alle 8051 sehr sauber 
zueinander kompatibel sind. Der Compiler muß also gar nicht wissen, 
welches Derivat er compilieren soll. Zusätzliche SFRs kann man ganz 
einfach in einem h-File definieren.

Z.B. bei den AVRs sieht das ganz anders aus. Die unterscheiden sich 
durchaus im Befehlssatz und anderen Dingen, die der Compiler wissen muß.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Danke dafür :), aber mal eine Frage zu dem Code, damit schreibt sich ja
> das Programm selber in den Flash, möchtest du damit den Bootloader
> tauschen? man muss ja sowieso schon das Programm geflasht haben damit es
> sich selber flashen kann ?!

Nun die kurze Antwort ist ganz einfach: Das Programm kann sich nicht 
programmgesteuert selbst überschreiben.
Nun die Lösung: Es gibt auf dem Chip 2 Programme. Das ist kein Problem 
und ein Bootloader macht das ja ganz genauso. Der Trick an der Sache 
sind die Interrupt Vectoren. Einfach verlängern geht nicht.
Der Bootloader kommt nur genau einmal während der Inbetriebnahme zum 
Einsatz. Danach ist er gesperrt oder vieleicht sogar üeberschrieben 
falls der Speicherplatz nicht ausreicht.
Danach muss sich das Device selbst über irgend einen Kanal updaten 
können. Bei einem USB Device bietet sich ja an, ein FW update per USB 
einzuspielen.

Ich hab das in der Vergangenheit schon ein paar mal gemacht (u.A mit 
einem 89c51RB2). Dazu werden alle Interrupt Vectoren die in beiden 
Programmen verwendet werden nicht mehr direkt aufgerufen, sondern die 
Vectoren werden dynamisch zugewiesen. Es gibt für jeden Vektor dazu 2 
Bytes im DATA seg. Die bei beiden Programmen an genau der gleichen 
Stelle liegen. Ich benutze dazu den Speicherplatz der 3. Registerbank 
(0x18) da haben dann 4 Vectoren Platz.
Den C Compiler muss man dazu anweisen keine Irq Einträge zu erzeugen das 
wird manuell in einem ASM file gemacht.

Beispiel mit dyn Interrupt (ext Irq 0) Der Updater liegt bei 0x0000 der 
Appcode irgendwo im Speicher
dseg    at 18h          ;must be the same address in BOOT
                        ;and App Code
irq0vect: DS 2  

CSEG at BOOT
        LJMP Init         ;c startup code
org  Boot +3h             ;ext irq 0
        PUSH  irq0vect+1  ;2 cycles LSB first  
        PUSH  irq0vect+0  ;2 cycles   
        RET               ;2 cycles never do a RETI here
        ;....
org  Boot +23h
        LJMP AppCode +23h ;SIO is used only in App
        ;...
Bevor nun irgendwelche Interrupts aktiviert werden müssen alle dyn. 
Vectoren initialisiert werden. In c beispielsweise mit
  irq0_vect = &Irq0Isr;
Beide Brogramme können ganz normal in C geschrieben werden Sie werden 
einfach auf unterschiedliche Startaddressen gelinkt. Bis eine 
Interruptroutine angesprungen wird dauert es ein paar Zyklen länger. Die 
App Firmware wird dann in Boot ins Flash geschrieben

Thomas

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas vielen dank für deine doch sehr ausführliche antwort.

Ich glauhe ich verstehe nun deinen grund, für mich persönlich wäre diese 
lösung aber zu aufwendig.

Es gibt ja so die möglichkeit via programm in den Bootloader zu gehen in 
dem man adresse 0x3800 direkt anspringt, dort kann ja das firmware 
update stattfinden und man geht zurück ins normale programm.
Wenn wieklich der platz zu klein wird kann man ja immer noch die nächst 
grössere variante nehmen mit mehr speicher.

Denke aber natürlich das dort jeder seine eigenen vorlieben hat.

Ein software update über eine funk verbindung oder ähnliches wäre damit 
aber natürlich deutlich einfacher bzw. Überhaupt Möglich.


Im übrigen hat WCH auch ein Forum in dem auch gut was an beispielen zu 
verfügung gestellt wird. Ist auf Chinesich aber google übersetzt es doch 
ausreichend.

http://www.wch. * cn/bbs/thread-65023-1.html

Sternchen wegnehemen, .cn ist hier wohl nicht erlaubt.

: Bearbeitet durch User
Autor: Mehmet K. (mkmk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Beispiele beziehen sich auf CH558 und CH559; keine Ahnung, ob man 
diese bei den günstigen CH552 oder CH554 1:1 benutzen kann.
Wenn nicht, kommt man preislich in die Naehe von Silabs-MCUs.

LCSC     CH559L    1St. 1,60 USD
Digikey  C8051F385 1St. 2,29 USD

Kleiner Hinweis: der STM32F072C8 ist bei Aliexpress schon für 1 USD zu 
haben.

: Bearbeitet durch User
Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Mehmet K. schrieb:
> Die Beispiele beziehen sich auf CH558 und CH559; keine Ahnung, ob man
> diese bei den günstigen CH552 oder CH554 1:1 benutzen kann.
> Wenn nicht, kommt man preislich in die Naehe von Silabs-MCUs.
>
> LCSC     CH559L    1St. 1,60 USD
> Digikey  C8051F385 1St. 2,29 USD
>
> Kleiner Hinweis: der STM32F072C8 ist bei Aliexpress schon für 1 USD zu
> haben.


Achso hätte ich vielleicht noch erwähnen sollen, die sind untereinander 
alle recht kompatibel, ausser wenns natürlich um beispiele geht die 
hardware verwendet die der CH552 z.b. nicht hat. wie usb host Funktion.

Hatte soweit auch alle Beispiele einmal getestet und zu SDCC portiert, 
dabei z.b. Dataflash lesen/schreiben, PWM, SPI, TouchKey, ADC usw. noch 
garnicht angesehen hatte ich mir die USB-C funktion, glaube damit kann 
man auch die Ladepower von USB-Ladegeräten umschalten und sowas aber da 
bin ich mir nicht so sicher.

Kann auch noch diese datei: 
http://www.wch.*cn/download/CH554EVT_ZIP.html empfehlen.
Dort sind auch noch sehr gute Hardware beispiele dabei.

Inkl. express versand hatte ich pro stück damals 0,25€ gezahlt, waren 
aber auch 400 Stück :D

Autor: Mehmet K. (mkmk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> ... waren aber auch 400 Stück

Zum Erfolg-Haben verdammt :)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Es gibt ja so die möglichkeit via programm in den Bootloader zu gehen in
> dem man adresse 0x3800 direkt anspringt, dort kann ja das firmware
> update stattfinden und man geht zurück ins normale programm.

das ist auch für das Development vollkommen ok. Bei einem kommerziellen 
Device geht sowas schon aus Sicherheitsgründen nicht. Niemand auser dem 
Hersteller des Devices sollte in der Lage sein einfach mal so irgend 
welche FW auf die HW aufzuspielen. Es ist also ein Muss den Bootloader 
abzuschalten. Ich benutze für FW updates gerne die HID Schnittstelle.

Noch ein paar Hinweise zu meinem Code. Die Klimmzüge mit den Odd 
Addressen
sind sehr wahrscheinich gar nicht notwendig. Ich habe Hinweise gefunden 
dass der Chip wohl kein Autoerase hat und wohl Page weise gelöscht 
werden muss.
(PageSize 2k??). Wenn dem so ist kann man sich das Klimbim sparen.

Ich hab mal WCH dazu angeschrieben mal schauen ob da was kommt.

Thomas

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Niemand auser dem
> Hersteller des Devices sollte in der Lage sein einfach mal so irgend
> welche FW auf die HW aufzuspielen.

Man will doch eher das Auslesen verhindern damit keiner mal eben ohne 
Aufwand Klone auf den Markt werfen kann.

Aber ob einer imstande ist sein gekauftes Gerät zu schrotten oder zu 
einer Kaffeemaschine umzufunktionieren indem er komplett eigene Firmware 
dafür schreibt sollte doch dem Hersteller herzlich egal sein.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Aaron C. schrieb:
>> Es gibt ja so die möglichkeit via programm in den Bootloader zu gehen in
>> dem man adresse 0x3800 direkt anspringt, dort kann ja das firmware
>> update stattfinden und man geht zurück ins normale programm.
>
> das ist auch für das Development vollkommen ok. Bei einem kommerziellen
> Device geht sowas schon aus Sicherheitsgründen nicht. Niemand auser dem
> Hersteller des Devices sollte in der Lage sein einfach mal so irgend
> welche FW auf die HW aufzuspielen. Es ist also ein Muss den Bootloader
> abzuschalten. Ich benutze für FW updates gerne die HID Schnittstelle.
>
> Noch ein paar Hinweise zu meinem Code. Die Klimmzüge mit den Odd
> Addressen
> sind sehr wahrscheinich gar nicht notwendig. Ich habe Hinweise gefunden
> dass der Chip wohl kein Autoerase hat und wohl Page weise gelöscht
> werden muss.
> (PageSize 2k??). Wenn dem so ist kann man sich das Klimbim sparen.
>
> Ich hab mal WCH dazu angeschrieben mal schauen ob da was kommt.
>
> Thomas


Ok, diesen einwand verstehe ich 100% dafür ist es wirklich besser ein 
sicheres update verfahren zu entwickeln, am besten dann ja 
verschlüsselt.

Die PageSize vom erase ist 1kByte


Wegen des auslesens der firmware kann man code protect aktivieren dann 
sollte er sich nicht mehr auslesen lassen.

Grüsse

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach einen Youtube Kommentar wurde ich auf Bascom 51 
https://www.mcselec.com/index.php?option=com_content&task=view&id=16&Itemid=104 
aufmerksam gemacht, habe dort mal ein Blink example Kompiliert und das 
auf den CH552 geflasht. das Hat erstaunlicherweise ohne weitere 
modifikation funktioniert.

Habe mich zudem Gestern an ein Video gesetzt in dem ich einfach mal 
zeige wie ich eins der USB Boards Löte, ist nicht besonders informativ 
aber vielleicht hilft es ja dem einen oder anderen.

Youtube-Video "CH552 usb Pcb soldering, How to Solder SOP16 chips and other parts"

: Bearbeitet durch User
Autor: Thomas (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
ich habe Rückmeldung von WCH erhalten.

Hier die Ergebnisse:

1. Es ist nicht notwendig den Chip per Page Erase zu löschen. Ich habe 
zwar im Headerfile ch559.h ein define gefunden mit Kommentar dass damit 
eine 1 KByte Flashrompage gelöscht wird: #define ROM_CMD_ERASE 0xA6
WCH hat aber geschrieben das ein Löschen nicht notwendig ist. Das 
FlashRom
ist also gar kein herkömliches Flash.

2. Der Bootloader ist wohl gegen überschreiben speziell geschützt. Den 
kann man nicht so einfach überschreiben.

3. Mit meiner Vermutung über die Endianess lag ich falsch. Mein code 
wird also definitiv falsche Daten flashen.
CHS schreibt: MSB wird an geraden Adressen geschrieben LSB an ungeraten.

Ich werde meine IAP Flash Routinen anpassen und auch noch eine Funktion 
einauen, dass nur dann geflashed wird wenn sich das Zielword vom zu 
schreibenden word unterscheitet.

Thomas

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das war ja eine sehr schnelle Antwort von denen.

Ich meine auch das in der Übersicht der austausch des Bootloaders nur ab 
dem CH554 beworben wird. Dazu ein Bild als Anhang.

Wird es denn dann schwieriger das sich der Chip selber flasht oder kann 
man theoretisch einfach zwei Programm trotzdem nebeneinander auf dem 
flash speichern? also sagen wir 2K für den Bootloader opfern und den 
Rest fürs normale Programm, dann dürften sich nur nie die Adresse 
aufrufe kreuzen wenn ich das richtig verstehe.

: Bearbeitet durch User
Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Wird es denn dann schwieriger das sich der Chip selber flasht oder kann
> man theoretisch einfach zwei Programm trotzdem nebeneinander auf dem
> flash speichern?

Ne Bemerkung mal nebenbei: Guckt euch evtl auch mal die M051x von 
Nuvoton an. Das sind zwar Cortex M0 und gehören hier nicht rein, aber 
die haben eine nette Sache, nämlich einen separaten Flashrom von m.W. 
4K, der für einen Bootlader gedacht ist. Dieser Flashrom kann anstelle 
des normalen Flashrom's eingeblendet werden.

W.S.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Aaron C. schrieb:
>> Wird es denn dann schwieriger das sich der Chip selber flasht oder kann
>> man theoretisch einfach zwei Programm trotzdem nebeneinander auf dem
>> flash speichern?
>
> Ne Bemerkung mal nebenbei: Guckt euch evtl auch mal die M051x von
> Nuvoton an. Das sind zwar Cortex M0 und gehören hier nicht rein, aber
> die haben eine nette Sache, nämlich einen separaten Flashrom von m.W.
> 4K, der für einen Bootlader gedacht ist. Dieser Flashrom kann _anstelle_
> des normalen Flashrom's eingeblendet werden.
>
> W.S.

Ist das aber nicht auch wie hier der bootloader bereich der sich ab dem 
ch554 frei beschreiben lässt ?!. Es ist halt standartmässig der wch usb 
bootloader dort "installiert"

Schaue es mir nach der Arbeit einmal an.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei dem Flashloaader halten die sich etwas bedeckt. Ev ist es einfach 
so, dass der nur mit einem ext SPI programmer überschrieben werden kann.
Ich denke dass die einfach nicht alles öffentlich dokumentieren.

Mein Konzept wird weiterhin funktionieren, nur halt mit etwas weniger 
ROM, da der Bereich ab 0x3800 später dann brach liegt. Auf der anderen 
Seite wird es nicht notwendig sein, die Programe an Flashpage Grenzein 
auszurichten. Dies wäre ja notwenig gewesen wenn ich das Flash pageweise 
hätte löschen müssen.

Thomas

Autor: Sigint 1. (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade, meine Chips sind immer noch nicht da. Kann es kaum erwarten mit 
den Teilen rumzuspielen.

 Hmm... hatte gehofft, daß WCH etwas mehr Infos preisgibt. Laut 
Datenblatt kann man ja schon bei den CH552 mit einem externen Programmer 
den Bootloader tauschen. Ich denke, daß es bei der ganzen Reihe gehen 
dürfte.
Ich würde den Loader gerne gegen einen HEX-Loader tauschen. Dann kann 
man per serieller Verbindung (CDC) einfach ne neue HEX-Datei 
rüberschicken.
Ich werd mal mit dem ISP-Interface rumspielen, wenn die Chips da sind. 
Vielleicht kann man durch ausprobieren das Protokoll herausfinden... 
leider hab ich damit aber keine Erfahrung.

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ein update der Flash Routinen. Ohne Entschlüsselung sind es etwa 
300 byte code. Mit TEA decoder etwa 800 Byte. Der code ist ausfürlich 
komentiert, die Funktionen somit verständlich sein.

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei der Durchsicht der USB Beispiele ist mir die komplexe USB Interrupt 
Routine aufgefallen. Das werde ich auf jedenfall versuchen zu änderen. 
Ich habe hier ein Framework was z.B die SetupRequests in main 
bearbeitet.
Der USB interrupt muss dann nur ein paar Flags setzen und entsprechende 
ACK  NAK  STalls setzen und ev die Endpoints befüllen.

Dadurch wird die USB Funktionalität meiner Meinung nach wesentlich 
übersichtlicher. Zusätzlich ist mir aufgefallen, dass keinerlei Abfragen 
vorhanden sind ob das Device einen SetConfigure erhalten hat. Lt spec 
dürfen vorher nur Requests auf dem EP0 bearbeitet werden.

Mal schauen wie weit ich da komme.

Thomas

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Bei der Durchsicht der USB Beispiele ist mir die komplexe USB Interrupt
> Routine aufgefallen. Das werde ich auf jedenfall versuchen zu änderen.
> Ich habe hier ein Framework was z.B die SetupRequests in main
> bearbeitet.
> Der USB interrupt muss dann nur ein paar Flags setzen und entsprechende
> ACK  NAK  STalls setzen und ev die Endpoints befüllen.
>
> Dadurch wird die USB Funktionalität meiner Meinung nach wesentlich
> übersichtlicher. Zusätzlich ist mir aufgefallen, dass keinerlei Abfragen
> vorhanden sind ob das Device einen SetConfigure erhalten hat. Lt spec
> dürfen vorher nur Requests auf dem EP0 bearbeitet werden.
>
> Mal schauen wie weit ich da komme.
>
> Thomas


Find ich gut wie weit du kommst. Mir fehlt dann doch in die richtung das 
wissen.

Wenn du möchtest kann ich dir ein paar chips/boards zukommen lassen ?!

Grüsse

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn ich der Anleitung für Windows

https://github.com/Blinkinlabs/ch554_sdcc

folge bekomme ich in der Gitbash den folgenden Fehler

bash: mingw32-make.exe: command not found

Kann es sein dass Qt in u.A. Version installiert sein muß?

# Mingw tools (for Make)
export PATH=$PATH:/c/Qt/Qt5.10.0/Tools/mingw530_32/bin

Die Installation kam mir aber ein wenig groß vor (35GB) und im Text wird 
darauf hingewiesen dass es wohl auch anders geht.

TODO: Use standalone mingw tools instead of the ones from Qt

Wie habt ihr das gemacht?

Grüße
Stephan

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan schrieb:
> Hallo,
>
> wenn ich der Anleitung für Windows
>
> https://github.com/Blinkinlabs/ch554_sdcc
>
> folge bekomme ich in der Gitbash den folgenden Fehler
>
> bash: mingw32-make.exe: command not found
>
> Kann es sein dass Qt in u.A. Version installiert sein muß?
>
> # Mingw tools (for Make)
> export PATH=$PATH:/c/Qt/Qt5.10.0/Tools/mingw530_32/bin
>
> Die Installation kam mir aber ein wenig groß vor (35GB) und im Text wird
> darauf hingewiesen dass es wohl auch anders geht.
>
> TODO: Use standalone mingw tools instead of the ones from Qt
>
> Wie habt ihr das gemacht?
>
> Grüße
> Stephan

Hatte damal auch ein problem damit, es musste noch der genaue include 
pfad in der git bashrc datei angegeben werden,

in ordner c:\users\BENUTZER eine datei namens .bashrc anlegen und 
folgendes einfügen.

# SDCC compiler tools
export PATH=$PATH:/c/Program\ Files/SDCC/bin

# Mingw tools (for Make)
export PATH=$PATH:/c/mingw/bin

alias make=mingw32-make.exe

ist alles aus dem Kopf und bin gerade nicht mehr ganz sicher, am besten 
etwas probieren.

hoffe das hilft weiter.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun es liegt ganz einfach daran dass ich mich mit USB, mit 
Unterbrechungen, seit fast 20 Jahren beschäftige. Ich habe in der Zeit 
mit verschiedensten USB Chips gearbeitet. Mit der Zeit ist dann dieses 
Framework entstanden. Zuletzt habe ich das für den STM gemacht.
Im Prinzip ist es so, dass ich für jeden Chip eine Lib baue. In den 
Projekten linke ich dann nur noch die Lib für den entsprechenden chip. 
Immer dann wenn ich merke dass in der Lib was fehlt portiere ich die 
fehlende Funktionaltiät auf alle anderen Chips. So ist in der 
Zwischenzeit eine ganz ordentliche Sammlung enstanden. Einige Projekte 
sind auch im Auftrag für komerzielle Produkte entstanden.
Hab grad noch mal nachgeschaut: Es sind inzwischen mehr als 20 VID / PID 
Kombinationen.

Aaron C. schrieb:
> Wenn du möchtest kann ich dir ein paar chips/boards zukommen lassen ?!
Vielen Dank ich werde mich vielleicht Ende nächster Woche bei dir 
melden.


Thomas

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo AAron vielen Dank für Deine schnelle Antwort,

die Pfade hab ich, so wie das in der Anleitung stand, in die vorhandene 
bashrc. im Verzeichnis von Git gemacht.

C:\Users\Stephan\AppData\Local\Programs\Git\etc

Deshalb sucht er beim Aufruf von make auch nach der mingw32-make.exe. 
Soweit funktioniert das scheinbar.

Es ist nur so daß auch ein Pfad eben für QT angegeben ist,

> # Mingw tools (for Make)
> export PATH=$PATH:/c/Qt/Qt5.10.0/Tools/mingw530_32/bin

ich aber kein QT installiert habe. Darauf geht die Anleitung auch nicht 
ein. Es steht da im Grunde nur, daß diese Schritte noch beschrieben 
werden müssen.

Ist denn bei dir ein Ordner mit Qt s.o. vorhanden?

Grüße, Stephan

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan schrieb:
> Ist denn bei dir ein Ordner mit Qt s.o. vorhanden?

Nein, ich habe nur MinGw installiert, glaube das konnte man bei dem 
Installer einzeln anwählen.

Ist leider auch schon etwas länger her, erinnere mich aber wie gesagt 
daran das es da auch eine stunde haperte

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Pfad in die Mingw Installation ist richtig.

export PATH=$PATH:/c/MinGW/bin
alias make=mingw32-make.exe

funktioniert.

Hat gestern irgendwie nicht gklappt aber möglicherweise hab ichs auch 
nicht richtig gespeichert. Jetzt geht es.

Danke nochmal, Stephan

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan schrieb:
> funktioniert.


Sehr gut, dann schonmal viel erfolg :)

Autor: Sigint 1. (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erfolg! Meine Chips sind angekommen und funktionieren perfekt. 😀 
Allerdings will librech551 nicht funktionieren. Der erkennt den Chip, 
bleibt aber ohne Ausgabe in einer Dauerschleife hängen. Hatte das 
Problem auch jemand? Das WCH-Tool funktioniert. Jetzt muss ich mir noch 
ne schöne Platine designen... Lochraster sieht so unprofessionell aus.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs mal testweise mit -e durchlaufen lassen das ging.
Es muss sich natürlich im programming mode befinden sonst findet er 
nichts.

Libre CH551 Flasher 2018
Detected device CH552
Device rom capacity 16384, data flash capacity 128
Device bootloader version: 1.1

Now performing erase...
Erase done

Excited! 0..0

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwendetes System war übrigens:

Version Linux Mint 19 Tara 64-bit
Kernel Linux 4.15.0-43-generic x86_64

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sigint 1. schrieb:
> Erfolg! Meine Chips sind angekommen und funktionieren perfekt. 😀
> Allerdings will librech551 nicht funktionieren. Der erkennt den Chip,
> bleibt aber ohne Ausgabe in einer Dauerschleife hängen. Hatte das
> Problem auch jemand? Das WCH-Tool funktioniert. Jetzt muss ich mir noch
> ne schöne Platine designen... Lochraster sieht so unprofessionell aus.

Sehr gut.

Hast du eine bin oder hex datei probiert mit librech551? Leider kann das 
nähmlich derzeit nur bin files.

-e muss man nicht extra beim flashen eingeben das wird dann automatisch 
gesetzt.

Habe mal testweise eine hexdatei in diesen simulator geladen 
https://www.edsim51.com wird erfolfgreich ausgeführt. War mir vorher 
nicht 100% bewusst aber die ch serie ist ja im endeffelt einfach nen 
8051 mit zusatz hardware integriert :D


Hier habe ich nun mein usb stick pcb öffentlich gemacht: 
https://easyeda.com/editor#id=|16fcda923b0e480093d7de9a6e215691|c61357efe74646b28d6abb5bdbe1d837
Die beiden fehler sind dort nun auch behoben und die Power led lässt 
sich auch via pin schalten.


Viel spass beim basteln.

: Bearbeitet durch User
Autor: Thomas (Gast)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
ich habe mich inzwischen etwas intensiver mit dem usb core beschäftigt 
und
auch angefangen erste Teile neu zu schreiben. Hier die Initialisierung 
wie
Sie im Hid Beispiel gemacht werden allerdings etwas strukturierter und
mit englischen Kommentaren.

Thomas
/** configure and init the usbcore
    
    Configure EP0 and additionally the two  HID EPs EP1 and EP2.
    Enable USB interupt for transfer, usb reset and usbsuspend.
    Finally the usb core is switched on as a fullspeed device since
    the pullup is connected to D+.
    
*/
void UsbDeviceConfigure(void)
{
    IE_USB      = 0;                                          // disable usb irqs
    USB_CTRL    = bUD_PD_DIS;                                 // Usb off, no pulldowns  
    //
    // setup ep0 todo the next line is possibly wrong 
    // depends previous settings check this carefully
    //
    UEP0_CTRL   = UEP_R_RES_ACK | UEP_T_RES_NAK;              // IN ready, OUT busy  
    UEP0_DMA    = (uint16_t) EP0_Buffer;                      // Set Ep0 DMA to the EP0 Buffer
    //
    // setup ep1 in single buffer mode with auto toggle
    //
    UEP4_1_MOD  = UEP4_1_MOD & ~bUEP1_BUF_MOD | bUEP1_TX_EN;  // EP1 enable 
    UEP1_CTRL   = bUEP_AUTO_TOG | UEP_T_RES_NAK;              // autotoggle NAK on recieve
    UEP1_DMA    = (uint16_t)EP1_Buffer;                       // Set the DMA
    //
    // setup ep2 in single buffer mode with auto toggle
    //
    UEP2_3_MOD  = UEP2_3_MOD & ~bUEP2_BUF_MOD | bUEP2_TX_EN;  // Enable EP2 
    UEP2_CTRL   = bUEP_AUTO_TOG | UEP_T_RES_NAK;              // autotoggle NAK on recieve
    UEP2_DMA    = (uint16_t)EP2_Buffer;                       // set the DMA
    // 
    // disable remaining eps 
    //
    UEP2_3_MOD &= ~(bUEP3_RX_EN | bUEP3_TX_EN);               // EP 3 is disabled   
    UEP4_1_MOD &= ~(bUEP4_RX_EN | bUEP4_TX_EN);               // EP 4 is disabled
    //
    // this may go to main changed the order of commands
    // so enableing the usb port will be the last action 
    // the following code activates the usb core
    //
    USB_DEV_AD  = 0x00;                                         // device address = 0
    UDEV_CTRL   = bUD_PD_DIS;                                   // already done but does not hurt
    USB_CTRL    = bUC_DEV_PU_EN | bUC_INT_BUSY  | bUC_DMA_EN;   // Connect use dma set busy
    USB_INT_EN  = bUIE_SUSPEND  | bUIE_TRANSFER | bUIE_BUS_RST; // enable usb irqs
    USB_INT_FG  = 0xFF;                                         // clear all usb int flags
    UDEV_CTRL  |= bUD_PORT_EN;                                  // enable usb port 
    IE_USB      = 1;
    EA          = 1;
}

Autor: Sigint 1. (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmpf... ich hab irgendwie ne Denkblockade. Irgendwie bekomme ich 
librech551 auf keinem Rechner ans laufen. Hab 2 Linux-Systeme (VMs) und 
3 Windows-Systeme (cygwin) getestet. Auf keinem will das laufen. Auf 
einem Cygwin bekomme ich immer libusb_error_io bei BULK_IN.
Ausserdem spinnt SDCC auch rum. Ich wollte den gesamten Programmspeicher 
mit MOVC auslesen und seriell übertragen. SDCC erzeugt da aber irgenwie 
eine komische loop, die nicht vorhanden ist. Seltsamerweise auch nicht 
im Assembler Listing... das Programm hängt aber trotzdem in einer 
Schleife fest.
Anscheinend kann man aber den Bootloader auslesen... an entsprechender 
Stelle kommt Programmtext. Leider hab ich noch Probleme mit 
Übertragungsfehlern... deshalb ist der Code nicht brauchbar.

Ich versuch es mal direkt in Assembler. By the way: Welche Baudrate kann 
ich bei 6MHz Takt verwenden, ohne Übertragungsfehler zu haben. Konnte 
noch keine finden, mit 0% Fehlerrate. :-(

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich werde ich am Wochenende meine FW fertig haben die wird dann 
auch den Bootloader auslesen können. Bei 6MHz bleibt nur T2 zur genauen 
Baudratenerzeugung.

Thomas

Autor: Stephan K. (nightowl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab nur die dev Version von der libusb nachinstallieren müssen und 
dann lief make durch.
Dann noch einmal make Install und fertig.
Ich habe allerdings nur mit -e also nur einen Löschvorgang getestet.
Bei Bedarf kann ich aber auch nochmal ein File flashen.

Stephan

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier die neuen header Fiels für den CH552. Sie sind kompatible mit Keil 
und SDCC, die Unterscheidung passiert automatisch einfach mit #include 
"ch552_new.h" einbinden.
In den Header Files habe ich die USB Definitionen und Typ Deklatationen 
rausgeschmissen.

Thomas

Autor: Sigint 1. (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So langsam kotzt es mich an. :-(
Nichts was ich versuche funktioniert wirklich. Ich schaffe es nichtmal 
den UART0 mit Timer2 ans laufen zu bringen. Welche Register muss ich 
anfassen, damit das läuft?!? Hab meherer Beispiele im Netz probiert, 
z.B. folgende:
SCON=0x50;
T2MOD|=(bTMR_CLK|bT2_CLK);
T2CON=0x34;
RCAP2=0xFB1e;
EXF2=0;
EXEN2=0;
RCLK=1;
TCLK=1;
C_T2=0;
CP_RL2=0;
TR2=1;

oder

SCON = 0x50;      /* uart in mode 1 (8 bit), REN=1 */
T2MOD|=(bTMR_CLK|bT2_CLK);
T2CON =0x34;      /* RCLK = 1; TCLK=1; */
T2COUNT=0xFB1E;
RCAP2=0xFB1E;
TR2 = 1;      /* Timer 2 run */
TI = 1;
RI = 0;


Nichts läuft. Mit Timer1 kein Problem, abgesehen von den 
Übertragungsfehlern. :-(

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann zeig mal ein vollständiges Programm so mit Clocks, kommentierte 
T2Initialsierung Interrupt Aktivierung....
Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt sect 12.4.2 Timer2 Serial Port 0 Baud Räte Generator
und sect 13.2.2 UART.
Dort ist alles beschrieben inc. Berechnung der Reload Werte für die 
Baudrate

Das ist die normale x51 Hardware Beispiele sollten sich in jedem HW 
Tut.befinden. Nur die 2. ser. Schnittstelle ist spezieller.

Thomas

Autor: Sigint 1. (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hiermit funktioniert die Schnittstelle endlich:
#include<mcs51/ch55x.h>

__code unsigned char *prog=0;


void wait(int v)
{
  int i;
  for(;v>0;v--){
    for(i=1;i<600;i++){}
  }
}


void putc(unsigned char c)
{
  SBUF=c;
  TI=0;
  while(!TI){};
}


void main(void)
{
  long int adr=0;
  SP=0xfe;
  EA=0;


  SCON = 0x40;
  T2CON =0x34;
  T2MOD=0xc0;
  RCAP2=0xFD8F;
  TI = 1;

  for(adr=0;adr<0xFFFE;adr++)
  {
    putc(*prog);
    prog++;
  }

  while(1);
}

Leider funktioniert das Auslesen des Programmspeichers nicht so, wie ich 
es mir gedacht habe.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum  SP= 0xFE. Das ist hoffentlich nicht der Stackpointer...

Üblicherweise macht der Compiler das selbst.

Thomas

Autor: Sigint 1. (sigint)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab den Bootloader ausgelesen und der Code scheint korrekt zu sein. 
Irgendwie schaffe ich es aber nicht die fehlenden .DB Stellen zu 
disassemblieren. Aber schon mal ein erster Erfolg.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum  SP= 0xFE. Das ist hoffentlich nicht der Stackpointer...

Üblicherweise macht der Compiler das selbst.

Thomas

Sigint 1. schrieb:
> Ich hab den Bootloader ausgelesen und der Code scheint korrekt zu sein.
> Irgendwie schaffe ich es aber nicht die fehlenden .DB Stellen zu
> disassemblieren. Aber schon mal ein erster Erfolg.

Lad das Teil mal als bin File hoch, ich schicke es dann durch den IDA

Thomas

Autor: Sigint 1. (sigint)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Bin. Der Bootloader steht bei 0x3800

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das IDA disassembly. Ich habe die Funktionen schon umbenannt und 
ein paar Referenzen aufgelöst und teiweise die Formatierung angepasst. 
Die IDA Ausgabe ist nicht wirklich toll.

Das Teil wurde wohl mit Keil C51 geschrieben.

Thomas

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cool. Wäre ja interessant ob es auch ein funktion zum auslesen des 
flashes im bootloader gibt.

Habe so beim durchscrollen leider nichts eindeutiges gefunden.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja wenn dann ist es in einer der 11 Funktionen des Dispatchers 
verborgen.
Die Analyse wird aber nicht so ganz einfach weil dazu die Bedeutung 
aller
Ram Referenzen im idata notwendig ist.
Vielleicht mach ich das mal später oder sigint macht da was...

Generell hat das für mich keine Prio weil ich das nicht brauche. Für das 
Verständnis des Teils ist es aber hilfreich.
Der Bootloader kann wohl auch über die serielle Schnittstelle 
angesprochen werden. Ich vermute mal dass sigint dort einsteigt.

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
da ich mit meiner App noch ein paar Probleme habe (Ich kämpfe momentan 
mit LibUsb sowie mit de Implementierung der Makros für SDCC), hier ein 
kleiner Zwischenstand zum Bootloader.
Diie Mainfunktion des Bootloaders in C. Sie ist nicht 100% identisch zum 
Original sollte aber funktionsgleich sein und das Wesentliche zeigen.

Thomas
bit      bit00;         // ??? 
bit      bSoftReset;    // 1  for going to reset
bit      bFirstSer;     // 1  for first serial
bit      bit03;         // ???

uint32_t Key;
uint8_t  Bootkey[8];
uint8_t  RAM_2A;
  
void main (void)
{
   uint8_t cfg;
   uint8_t pins;
   uint8_t i;

   SAFE_MOD   = 0x55;
   SAFE_MOD   = 0xAA;
   WAKE_CTRL |= bWAK_RST_HI & ~(bWAK_RST_HI | bWAK_P3_2E_3L | bWAK_RXD0_LO);

   bSoftReset = 0;
   bit00      = 1;
   bFirstSer  = CHIP_ID & 0x01;
   EA         = 0;
   TR0        = 0;
   TF0        = 0;

   if(bFirstSer)
   {  // setup first serial
      SCON  = 0x50;
      T2CON = 0;
      PCON  = SMOD;               // double speed
      TMOD  = 0x20;               // T1 8 Bit autoreload
      T2MOD = bTMR_CLK | bT1_CLK; // clock speed
      TH1   = 0xF3;               // reload value
      TR1   = 1;
   }
   else
   {  // setup second serial
      SCON1  = 30;
      SBAUD1 = 0xF3;
   }

   cfg = CBYTE[0x3FF4];  //bootloader config
   if (cfg & 0x02)
   {  // check boot pins
      if ((UDP)  || (MOSI)) pins = 1;
      else                  pins = 0;
   }
   //
   //  check boot contitions
   //
   if ( (pins)                                                  // pin boot
        || (GLOBAL_CFG & bBOOT_LOAD)                            // software boot
        || ((CBYTE[0x0000] == 0xFF) && (CBYTE[0x0001] == 0xFF)) // no code
      )
   {  // init usb
      USB_CTRL   = 0;
      IE_EX      = 0x0C;
      UEP0_DMA   = 0;
      UEP2_DMA   = 0x00C0;
      USB_CTRL   = bUC_DEV_PU_EN | bUC_INT_BUSY | bUC_DMA_EN;
      UDEV_CTRL  = bUD_PD_DIS | bUD_PORT_EN;
      USB_INT_FG = 0xFF;
      USB_INT_EN = bUIE_SUSPEND | bUIE_TRANSFER | bUIE_BUS_RST;
   }
   else
   {  // no boot contition
      if(cfg & 0x01)
      {  //init timer0
         TMOD |= 0x01;
         TL0   = 0xC0;
         TH0   = 0x63;
         TR0   = 1;
      }
      else bSoftReset=1;
   }
   //
   // init a 128 bit bootkey
   //
   for (i=0;i < 8; i++) Bootkey[i]=Scrambled();

   while (1)
   {
      if (bSoftReset)
      {  // do a reset
         SAFE_MOD   =  0x55;
         SAFE_MOD   =  0xAA;
         GLOBAL_CFG =  bSW_RESET;
         while(1);
      }
      else
      {  // handle serial and usb
         if ((U1TI) || (RI))
         {
            RAM_2A = 0x96;
            SerialDispatcher();
         }

         if (USB_INT_FG & 0x07)
         {
            RAM_2A = 0x96;
            HandleUsbEvents();
         }
      }
      if (TF0)
      {  //timeout
         TF0        = 0;
         TR0        = 0;
         bSoftReset = 1;
      }
   }
}

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ein update zum bootloader asm file. Es sind ein paar Fehler korrigiert 
sowie die idata Referenzen aufgelöst. Das File erzeugt mit Keils A51 ein 
zum Original identisches bin File.Der Keil A51 kann ja zum Glück mit den 
SFR Files von C umgehen. Der Funktionsdispatcher hat immer noch große 
Lücken bei den Komentaren.

Was ich anfangs für Stackchecks gehalten habe, sind wohl nur 
Endlosschleifen falls bestimmte Funktionen nicht korrekt aufgerufen 
werden. Keine Ahnung was die damit erreichen wollen.

Für mich interesant ist die Code Flash Routine. Dort sind Bereichs 
überprüfungen drinn, die ein Überschreiben des Loaders verhinderen. 
Vieleicht kann man den Bootloader doch einfach überschreiben...

Thomas

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Sourcecode, bekomme den aber leider nicht compiliert mit 
Keil  51 muss ich was bestimmtes beachten ?

Habe heute auch endlich die Neue PCB version von dem "USB Stick" 
erhalten.
nun endlich ohne Fehler und alle LED's Schaltbar.

Wenn bedarf besteht kann ich davon welche weiter geben.

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, Keil hat den Bootloader nun erfolgreich Kompiliert, mann muss auch 
den/das richtige target auswählen :D

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaron C. schrieb:
> Danke für den Sourcecode, bekomme den aber leider nicht compiliert mit
> Keil  51 muss ich was bestimmtes beachten ?

Eigentlich nicht das Header File hast du im Suchpfad oder im gleichen 
Ordner wie das Assembler File?

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die blinden Stellen im Bootloader werden weniger....
Es gibt wohl auch eine Verfy Funktion. Wenn ich das richtig verstehe, 
werden die Daten verschlüsselt übertragen. Als Schlüssel benutzen Sie 
die bootkey variable und es gibt einen Dispatcher call um den Schlüssel 
zu tauschen.
Die Beschreibung im librech551 master mainfile sind leider falsch/ 
unvollständig.

Thomas

Autor: Aaron C. (Firma: atcnetz.de) (atc1441)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Die blinden Stellen im Bootloader werden weniger....
> Es gibt wohl auch eine Verfy Funktion. Wenn ich das richtig verstehe,
> werden die Daten verschlüsselt übertragen. Als Schlüssel benutzen Sie
> die bootkey variable und es gibt einen Dispatcher call um den Schlüssel
> zu tauschen.
> Die Beschreibung im librech551 master mainfile sind leider falsch/
> unvollständig.
>
> Thomas


Ja das mit der verschlüsselung hatte ich auch schon ansatzweise gesehen. 
I  librech551 nutzen sie ja einen standart key für die übertragung um es 
einfacher zu machen wenn ich das richtig verstanden habe, habe das in 
der android app auch einfach so übernommen.

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ein paar Kommentare vom Dispatcher
JmpTable:                     ;
    ljmp  JumpFunction0       ;a1 detect chip V2  
    ljmp  JumpFunction1       ;a2 BootControl
    ljmp  JumpFunction2       ;a3 newkey?
    ljmp  JumpFunction3       ;a4 erase Code Flash  (2k page)
    ljmp  JumpFunction4       ;a5 write  encoded code flash
    ljmp  JumpFunction5       ;a6 verify encoded code flash
    ljmp  JumpFunction6       ;a7 
    ljmp  JumpFunction7       ;a8 write Boot Options
    ljmp  JumpFunction8       ;a9 erase Data Flash
    ljmp  JumpFunction9       ;aa write encoded data flash
    ljmp  JumpFunction10      ;ab read data flash 

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch ein update zum bootloader.
die Erase Page Funktion ist m. E. kaputt die lässt jedes 2 WORD aus und 
kann nur die erste Page löschen

Die zusätzlichen Klammern sind nur wegen dem Code Folding im Editor 
drin.
Thomas
      case 0xA4:  // erase code Flash page 2k
           {  // <a4> <x> <x> <page>
              if (cmdbuffer[3] < 8) 
              {
                 addr = ((uint16_t) cmdbuffer[3]) << 10;
                 i    = 4;
                 do
                 {
                    result = WriteCodeFlash(addr ,0xFFFF);
                    addr  += 2;
                    if (!(addr & 0x3FF)) i--;
                 } while(i);
                 bWrProtect = 0;
              } 
              /* the original broken one
              if (cmdbuffer[3] < 8) 
              {
                 cmdbuffer[3]=4;
                 addr        =0;  //bugbug just page 0
                 do
                 {
                    result= WriteCodeFlash(addr ,0xFFFF);
                    addr+=4;  // bugbug should be 2
                    if (!(addr & 0x3FF)) cmdbuffer[3]--;
                 } while(cmdbuffer[3]);
                 bWrProtect = 0;
              } 
              */
           }
           break;

Autor: Peter W. (pe_wi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bei meinen ersten Progammierversuchen mit dem CH554 (mit WCHISPTool - 
V2.60) über USB, wurde vermutlich der Bootloader überschrieben. Leider 
gibt es zum Programm (WCHISPTool) keine englische Beschreibung!
Der CH554 ist über USB nicht mehr ansprechbar. Ein anderer CH554 
funktioniert noch. Aber an den trau ich mich im Moment gar nicht mehr 
ran.
Wie kann ich den Bootloader wieder herstellen - mit ISP, aber wie?
Hat jemand eine Idee?


mit freundlichen Grüßen

Peter Winges

Autor: GBert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

Peter W. schrieb:
> Bei meinen ersten Progammierversuchen mit dem CH554 (mit
> WCHISPTool -
> V2.60) über USB, wurde vermutlich der Bootloader überschrieben. Leider
> gibt es zum Programm (WCHISPTool) keine englische Beschreibung!
> Der CH554 ist über USB nicht mehr ansprechbar. Ein anderer CH554
> funktioniert noch. Aber an den trau ich mich im Moment gar nicht mehr
> ran.
> Wie kann ich den Bootloader wieder herstellen - mit ISP, aber wie?
> Hat jemand eine Idee?
>
> mit freundlichen Grüßen
>
> Peter Winges

ich denke, Du musst einfach nur Prog brücken. Dann solltest Du flashen 
können.

Gruß

Gerd

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist nach meinem Verständniss, solange du nur mit dem ISP tool 
arbeitest, technisch nicht möglich den Bootloader zu überschreiben. 
Anders sieht es aus wenn du selbst eine Flasher App programmierst und im 
Bereich 0x3800 ohne Sicherheitsabfragen programmierst. Siehe auch das 
Bootloader.a51
Wenn der Bootloader wirklich weg ist funktioniert das ISP Tool sowieso 
nicht mehr da dann das USB Device nicht mehr kommt.
Du must dich durch die chin. Webside wühlen. Es gibt wohl einen SPI 
Flasher inc. Schaltpläne.

Thomas

Autor: Peter W. (pe_wi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das Modul ist erst mal gerettet!
Die USB Schnittstelle ist zwar defekt (warum auch immer), aber die 
serielle Übertragung hab ich jetzt zum Laufen gebracht. Vom MAX_232 auf 
Modul Stift RxD_(P12) und TxD_(P13) geschaltet. Zum Test habe ich das 
Blinkprogramm übertragen und es funktioniert!
Also ist der Bootloader, zumindest die serielle Funktion i.O. Vielleicht 
sind ja die Ports USB - µC defekt. Das muß ich noch testen.

@Thomas
Ich habe auch versucht den Bootloader zu überschreiben und deine 
"bootloader.hex" übertragen. Das hat leider nicht funktioniert. Bei 25% 
kam Fehler! Also scheint der Bootloader wirklich geschützt zu sein.

mit freundlichen Grüßen

Peter

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter W. schrieb:
> Ich habe auch versucht den Bootloader zu überschreiben und deine
> "bootloader.hex" übertragen. Das hat leider nicht funktioniert. Bei 25%
> kam Fehler! Also scheint der Bootloader wirklich geschützt zu sein.

Wenn du versucht hast den Bootloader mit dem WCH ISP Tool zu 
überschreiben, das geht nicht. Erstens kann kein Programm sich selbst 
überschreiben und zweitens ist der Bereich ab 0x3800 bis 0x3ff0 in der 
Flashroutine durch Range Checks geschützt.
Ich bin aber mit meinen tools so gut wie fertig da sollte das dann gehen

Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.