Forum: Mikrocontroller und Digitale Elektronik Risc CPU im Pico-2 RP2350


von Martin O. (ossi-2)


Lesenswert?

Der neue Raspberry Pi Pico 2 Prozessor RP2350 enthält zwei Risc Kerne. 
Welchen Vorteil haben diese im Vergleich zu normalen CPU?

von Obelix X. (obelix)


Lesenswert?


von Martin M. (capiman)


Lesenswert?


von Axel S. (a-za-z0-9)


Lesenswert?

Martin O. schrieb:
> Der neue Raspberry Pi Pico 2 Prozessor RP2350 enthält zwei Risc Kerne.

Im Raspberry Pi waren schon immer ARM Kerne verbaut. Und der ARM 
Prozessor war schon immer RISC (ARM steht für Acorn RISC Machines).

Wenn du schon Wikipedia liest zu RISC dann lies gleich noch

https://de.wikipedia.org/wiki/Arm-Architektur

von Mikro 7. (mikro77)


Lesenswert?

Der TO meinte wohl RISC-V, also...

The unique dual-core, dual-architecture capability of RP2350 provides a 
pair of industry-standard Arm Cortex-M33 cores, and a pair of 
open-hardware Hazard3 RISC-V cores, selectable in software or by 
programming the on-chip OTP memory.

von Andreas M. (amesser)


Lesenswert?

Martin O. schrieb:
> Welchen Vorteil haben diese im Vergleich zu normalen CPU?

Man spart sich die Lizenzkosten für ARM. Risc-V ist eine freie ISA, es 
unterliegt auch nicht irgendwelchen Exportkontrollen etc. Man findet 
Risc-V deswegen in immer mehr Geräten.

Ein weiterer Vorteil bei Risc-V ISA ist, dass man als CPU Designer auch 
ohne weiteres eigene Instruktionen definieren kann.

von Michael (Firma: HW Entwicklung) (mkn)


Lesenswert?

Martin O. schrieb:
> zwei Risc Kerne.

Du meinst RISC-V.
Vermutlich haben die derzeit keine Vorteile.
Mittelfristig ist der Vorteil das man bereits damit spielen kann, die 
verwendetet RISC-V Architektur reifen kann und man einen direkten 
Vergleich mit den ARM Kernen anstellen kann, bei ansonsten gleicher HW.

Geht man davon aus das RISC-V langfristig bei ausreichender Reife ARM 
erkleckliche Marktanteile abnehmen wird, sind das doch ganz nette 
Vorteile für so wenig Geld.

ARM muss eben Geld verdienen für seine Eigner und tut das mit 
ausufernden Lizenzkosten.

von Martin O. (ossi-2)


Lesenswert?

Der TO meinte wohl RISC-V, also...

Genau! Danke für den Hinweis. Bei Reichelt gibts den Pico 2 schon. Mal 
sehen was man damit anfangen kann.

von Thomas W. (dbstw)


Lesenswert?

Martin O. schrieb:
> Der TO meinte wohl RISC-V, also...
>
> Genau! Danke für den Hinweis. Bei Reichelt gibts den Pico 2 schon. Mal
> sehen was man damit anfangen kann.

Notfalls auch bei Berrybase, Berlin.

Erwarte eine harte Lernkurve: Das SDK ist wirklich schlecht, CMake ist 
eine weitere Herausforderung. Z.Z. funktioniert die PicoDebug (oder 
PicoProbe) nicht, aber das wird sicher korrigiert.

Die einzige "Unterstuetzung" ist eine VSCode-Extension, die allerdings 
die Abhaengigkeiten nicht mit beruecksichtigt (d.h. Du musst alle 
Abhaengigkeiten sowohl im C-Code als auch im CMake-File mitziehen).

Ich hatte den 2040 mir (wg. der PIO) angeguckt: Das Ding ist von der 
Hardware interessant, die "Ausgestaltung" des Software-Environment 
laesst sehr viel zu wuenschen uebrig.

Bonne Chance.

: Bearbeitet durch User
von Martin O. (ossi-2)


Lesenswert?

An Thomas W.
Beziehen sich Deine Aussagen auf den RP2040 Pico 1 oder schon auf den 
neuen RP2350 Pico 2 ? Ich programmiere den RP2040 ganz gerne, auch die 
PIOs

von Christoph M. (mchris)


Lesenswert?

Martin O. (ossi-2)
>Erwarte eine harte Lernkurve: Das SDK ist wirklich schlecht,

Deshalb geht's damit
https://github.com/earlephilhower/arduino-pico
oder damit
https://circuitpython.org/board/adafruit_metro_rp2350/
deutlich einfacher.

von Thomas W. (dbstw)


Lesenswert?

Martin O. schrieb:
> An Thomas W.
> Beziehen sich Deine Aussagen auf den RP2040 Pico 1 oder schon auf den
> neuen RP2350 Pico 2 ? Ich programmiere den RP2040 ganz gerne, auch die
> PIOs

Dann bin ich das Problem: Ich komme mit dem Pico 1 (und Pico W) nicht 
sehr gut klar. Die Struktur der Doku, die "Anfaenger"-Doku war nicht 
Thomas-Kompatibel.

Kann aber an mir liegen, denn technisch ist das Ding genial (und auch 
der Preis).

von Martin O. (ossi-2)


Lesenswert?

So, ich habe jetzt die ersten Pico-2 Boards. Bei den ersten kleinen 
Tests ist die Risc-V CPU deutlich langsamer als die ARM CPU. Mit der 
neuen VisualStudioCode Extension lässt sich, meiner Meinung nach, ganz 
gut arbeiten.

von Flip B. (frickelfreak)


Lesenswert?

Martin O. schrieb:
> Risc-V CPU deutlich langsamer als die ARM CPU


Hm, und das wo ARM Aktienanteile an Raspberry Pi hat. Man könnte denken, 
das soll die Benutzer von den vorteilen der ARM-Kerne überzeugen.


Darf ich fragen, welche rechenoperationen in deien Tests langsamer sind?

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

Wahrscheinlich kommen die mit einem reinen Risc-V µC, da ist eine 
Development-Platform nicht verkehrt.

von Christoph M. (mchris)


Lesenswert?

Martin O. (ossi-2)
>So, ich habe jetzt die ersten Pico-2 Boards. Bei den ersten kleinen
>Tests ist die Risc-V CPU deutlich langsamer als die ARM CPU.

Dass die Risc-V deutlich langsamer sind, wundert mich nicht. Sie sind ja 
nur eingebaut, weil sie kaum Chipfläche benötigen. Die ARM Cortex 33 
hingegen sind mit DSP-Erweiterung und allem möglichen Schnickschnack, 
der entsprechend Chipfläche braucht. ARM hat ja eine Beteiligung bei 
Raspi, vielleicht hatten sie deshalb nichts dagegen, dass im PiPico auch 
Risc-V eingebaut sind, die dann entsprechend schlecht aussehen. Es ist 
ein unfairer Vergleich.

von 900ss (900ss)


Lesenswert?

Thomas W. schrieb:
> Das SDK ist wirklich schlecht

Thomas W. schrieb:
> Das Ding ist von der Hardware interessant, die "Ausgestaltung" des
> Software-Environment laesst sehr viel zu wuenschen uebrig.

Hab ich nicht so gesehen für den ersten Pico. Sicher gibt es etwas zu 
verbessern, aber ich fand es sogar recht gut gelungen. Für für 
Einbindung in unterschiedliche IDEs ist etwas mager aber sonst? Und es 
funktioniert, jedenfalls bei mir.
Und ich bin mit der Docu gut klargekommen. War  auch Neueinsteiger bei 
dem Pico. Klar gibt's da auch Dinge die besser sein könnten aber ich 
kenne deutlich schlimmeres.

: Bearbeitet durch User
von Thomas W. (dbstw)


Lesenswert?

900ss schrieb:
> Thomas W. schrieb:
>> Das SDK ist wirklich schlecht
>
> Thomas W. schrieb:
>> Das Ding ist von der Hardware interessant, die "Ausgestaltung" des
>> Software-Environment laesst sehr viel zu wuenschen uebrig.
>
> Hab ich nicht so gesehen für den ersten Pico. Sicher gibt es etwas zu
> verbessern, aber ich fand es sogar recht gut gelungen.

OK, dann werde ich es noch einmal versuchen (Try, Fail, try again, I 
will suceed).

Aber warum ich ueberhaupt mit dem Ding angefangen habe war die Existenz 
des Debuggers (der Pico-Probe/Pico-Debug). Und das funktioniert (auch in 
der Arduino-Umgebung https://github.com/earlephilhower/arduino-pico) 
sehr gut. Wer will, auch in der Arduino-IDE 2.

Gruesse

Th.

P.S.: Ich glaub schon, dass ich das Problem war. Deswegen: Noch ein mal.

: Bearbeitet durch User
von 900ss (900ss)


Lesenswert?

Thomas W. schrieb:
> die Existenz des Debuggers (der Pico-Probe/Pico-Debug

Ich habe den nicht probiert. Black Magic Probe funktioniert und am 
besten der J-Link. Der ist dann auch genutzt worden bis das Projekt 
fertig war.

von Christian B. (casandro)


Lesenswert?

Also ich persönlich sehe die RISC-V Kerne als spannende Entwicklung für 
Leute die sich mit Low-Level Computertechnik beschäftigen wollen. Man 
hat damit jetzt einen sehr billigen Mikrocontroller mit ziemlich viel 
RAM, der Leistungsmäßig in der selben Klasse spielt wie "Personal 
Computer" der 1980er. Sprich die sind noch nicht so groß, dass man dafür 
ein komplexes Betriebssystem braucht, aber völlig ausreichend um darauf 
ein System in der Komplexitätsklasse von CP/M oder MS-DOS laufen zu 
lassen.

Darauf könnte man, wie beim Raspberry Pi, auch gleich die 
Entwicklungsumgebung laufen lassen um ein "self hosting"-System zu 
haben. Das ist für mich als Hobbyist spannend. Man kann einen eigenen 
Computer bauen, der zumindest dazu taugt, seine eigene Entwicklung zu 
unterstützen.

Natürlich ginge das auch mit ARM, aber bei ARM ist es schwierig eigene 
freie Kerne zu haben. Spätestens, wenn das Gerät damit verkauft wird, 
und sei es nur an Hobbyisten, so muss man Lizenzabgaben zahlen. Da bei 
einfachen Betriebssystemen häufig eine Abhängigkeit zwischen Befehlssatz 
und Betriebssystem existiert (manche Teile sind halt zwangsläufig in 
Assembler geschrieben) kann ich verstehen, dass man sich da nicht ARM 
ans Bein binden will.

Also wie gesagt, ich finde das für Hobbyisten spannend, denke aber, dass 
für den Rest die praktischen Auswirkungen quasi Null sind.

von Vanye R. (vanye_rijan)


Lesenswert?

> Das ist für mich als Hobbyist spannend. Man kann einen eigenen
> Computer bauen, der zumindest dazu taugt, seine eigene Entwicklung zu
> unterstützen.

Nicht das ich sie gezaehlt habe, aber ich habe den Eindruck es gibt
inzwischen mehr eigen entwickelte Computer als Probleme die man
damit loesen koennte. :)

Vanye

von Michael D. (nospam2000)


Lesenswert?

Wie ist denn der Stromverbrauch im direkten Vergleich zwischen den ARM 
und den RISC-V Kernen für den RP2350?

Kann man die CPU als Big/Little Design verwenden? Klar, den compilierten 
Code müsste man doppelt vorhalten und das Umschalten ohne Reset wäre 
sicher nicht trivial.

von Christoph M. (mchris)


Lesenswert?

Michael D. (nospam2000)
>Wie ist denn der Stromverbrauch im direkten Vergleich zwischen den ARM
>und den RISC-V Kernen für den RP2350?

Vielleicht brauchen die RISC-V wirklich etwas weniger Strom, weil sie im 
Vergleich zum Cortex-M33 sehr viel weniger aufwändig sind.
Hier gibt es sogar den Verilog-Source Code:

https://github.com/wren6991/hazard3

Die Cortex-M33 dagegen sind ziemlich aufgebohrt (RP2350 Datenblatt):
Each Arm Cortex-M33 processor in RP2350 is configured with the following 
features:
• FPU: Single precision FPU
• DSP: DSP extension
• SECEXT: Security extensions
• CPIF: coprocessor interface
• MPU_NS: 8 non-secure MPU regions
• MPU_S: 8 secure MPU regions
• SAU: 8 SAU regions ( was wohl die Säue machen? )

The Cortex-M33 features a coprocessor port which transfers up to 64 bits 
per cycle between the processor and certain closely-coupled hardware.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

"No Risc - No fun !" ;-)

von Jens B. (dasjens)


Lesenswert?

Martin O. schrieb:
> Der neue Raspberry Pi Pico 2 Prozessor RP2350 enthält zwei Risc Kerne.
> Welchen Vorteil haben diese im Vergleich zu normalen CPU?

Was ist schon normal?
Ist diese CPU anormal?

von Martin O. (ossi-2)


Angehängte Dateien:

Lesenswert?

Die Integer Performance versuche ich mit dem angehängten Code zu messen.
Für Float und Double nehme ich einen ähnlichen Code nur mit Float bzw. 
Double Variablen.

von A. B. (funky)


Lesenswert?

Martin O. schrieb:
> An Thomas W.
> Beziehen sich Deine Aussagen auf den RP2040 Pico 1 oder schon auf den
> neuen RP2350 Pico 2 ? Ich programmiere den RP2040 ganz gerne, auch die
> PIOs

was benutzt du dafür?

Mittlerweile scheint auch Keil uVision den über ein pack zu supporten 
wenn ich das richtig gesehen habe?

von Christoph M. (mchris)


Lesenswert?

Martin O. (ossi-2)
>Die Integer Performance versuche ich mit dem angehängten Code zu messen.

Eine Tabelle mit den Ergebnissen wäre nicht schlecht.

von Harald K. (kirnbichler)


Lesenswert?

Wobei man bei solchen Vergleichen berücksichtigen muss, daß nur die 
Kombination verwendeter Compiler/Prozessorkern ermittelt wird.

Und es ist ja nicht so, daß alle Compiler gleich sind, geschweige denn, 
daß sie gleich guten Code abliefern.

Aus dem hohlen Bauch heraus würde ich annehmen, daß ein ARM-Compiler 
erst mal besseren Code liefern dürfte, einfach, weil mit dieser 
Architektur schon länger gearbeitet wird und daher mehr Gehirnschmalz in 
Compiler, Optimierer und auch Libraries geflossen sein dürfte.

von Andreas M. (amesser)


Lesenswert?

Martin O. schrieb:
> Die Integer Performance versuche ich mit dem angehängten Code zu messen.
> Für Float und Double nehme ich einen ähnlichen Code nur mit Float bzw.
> Double Variablen.

Dieser Testcode sollte bei angeschalteten Compiler Optimierungen 
unabhängig vom verwendeten CPU Kern gleich schnell ab laufen, in etwas 0 
Zeit. Die Eingangsparameter sind dem Compiler nämlich bereits zur 
Compile-Zeit bekannt, er kann das Ergebniss vorberechnen. (In Deinem 
Code werden die globalen Variablen von Lokalen überdeckt)

Mit welchen Compileroptionen wurde für jeweils ARM & Risc-V übersetzt?

von Christoph M. (mchris)


Lesenswert?

Harald K. (kirnbichler)
>daß ein ARM-Compiler erst mal besseren Code liefern dürfte,

ARM ist nicht gleich ARM und Risc-V ist nicht gleich Risc-V. Der 
verwendete ARM Cortex M33 im RP2350 ist eine ganz anderer Prozessor als 
der im RP2040 verwendete M0+. Aber das ist hier wohl nur schwer 
vermittelbar.
Nichtsdestotrotz ist es interessant die Geschwindigkeit des selben 
Compilats auf einem RP2040 und RP2350 zu vergleichen. Insbesondere wenn 
komplexzahlige 16 Bit Faltungsoperationen verwendet werden.

von Harald K. (kirnbichler)


Lesenswert?

Christoph M. schrieb:
> ARM ist nicht gleich ARM und Risc-V ist nicht gleich Risc-V.

Ach was. Hab' ich irgendwas gegenteiliges behauptet?

> Der verwendete ARM Cortex M33 im RP2350 ist eine ganz anderer
> Prozessor als der im RP2040 verwendete M0+.

Auch das habe ich noch nicht mal mit einem Satzzeichen irgendwo in Frage 
gestellt.

> Aber das ist hier wohl nur schwer vermittelbar.

Ich gehe stark davon aus, daß Martin sein Testprogramm auf den im RP2350 
verbauten Kernen betreiben will, nicht, daß er die Performance von 
RP2040 mit der des RP2350 vergleichen möchte.
Ja, das ist dann ein Vergleich des M33 (so, wie er im RP2350 vorhanden 
ist) mit einem Hazard 3.

(wohl der hier: https://github.com/Wren6991/Hazard3)

Daß die in unterschiedlichen Ligen spielen, ist stark anzunehmen, 
allein, das macht einen Vergleich dennoch nicht sinnlos, denn beide sind 
nun mal im RP2350 verbaut.


Vielleicht hast Du von Deiner hohen "vermittelbarkeits"-Kanzel herab gar 
nicht so recht verstanden, worum es geht?

von Bauform B. (bauformb)


Lesenswert?

Jens B. schrieb:
> Ist diese CPU anormal?

Die einzelne CPU nicht, der Chip als Ganzes ist wirklich abartig. Man 
hat wohl die beiden M33 und die Peripherie sauber auf dem Silizium 
angeordnet und dann sind ein paar µm² frei geblieben. Dann konnte man 
sich nicht auf ein Motiv für eine Grafik oder einen blöden Spruch 
einigen...

Zum Ausgleich hat man an allen anderen Stellen gespart. Kein 
zuverlässiges BOR, kein brauchbarer interner Oszillator (der ROSC ist 
nicht wirklich trimmbar), keine USB-Serienwiderstände, der ADC ist so 
peinlich, dass man ihm genau 4 Zeilen im Datenblatt spendiert... :( 
Immerhin gibt es ein ganz normales Datenblatt, fast schon vorbildlich.

Christoph M. schrieb:
> SAU: 8 SAU regions ( was wohl die Säue machen? )
1
An internal processor peripheral called the Security Attribution Unit
2
(SAU) defines, from the processor’s point of view, which address ranges
3
are accessible to the Secure and Non-secure domains. The number of
4
distinct address ranges which can be decoded by the SAU is limited,
5
which is why system-level bus filters are provided for assigning
6
peripherals to security domains.

Auf jeden Fall ist es ein überaus interessanter Chip. Das beste Feature 
ist die integrierte Selbstzerstörung: max. Core Spannung = 1.21V, 
Spannungsregler programmierbar bis 3.3V :) :)

von Martin O. (ossi-2)


Lesenswert?

Ich habe bis gestern die relativ "alte" VisualStudioCode Variante 
benutzt. Gestern hab ich die ersten Pico-2 Boards bekommen. Dafür habe 
ich die neue VisualStudioCode Extension installiert und benutze diese 
nun. Da kann man die CPU Version wählen und ob man die Risc-V CPUs 
benutzen will.

von Christoph M. (mchris)


Lesenswert?

Bauform B. (bauformb)
>Auf jeden Fall ist es ein überaus interessanter Chip. Das beste Feature
>ist die integrierte Selbstzerstörung: max. Core Spannung = 1.21V,
>Spannungsregler programmierbar bis 3.3V :)

Endlich wieder mal ein Gerät mit "Killer Poke" :-)
Kann mal jemand ausprobieren, ob das funktioniert? Vielleicht reicht die 
Leistung der Spannungsregler nicht aus.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Christoph M. schrieb:
> Der verwendete ARM Cortex M33 im RP2350 ist eine ganz anderer Prozessor
> als der im RP2040 verwendete M0+.

Falls Du es noch nicht mitbekommen hast: Im RP2350 sind sowohl ARM- als 
auch RISC-V-Kerne verbaut, die wechselseitig aktiviert werden können.

Es geht um einen Benchmark ARM vs. RISC-V auf dem RP2350. Mit dem RP2040 
hat das überhaupt nichts zu tun.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Falls Du es noch nicht mitbekommen hast: Im RP2350 sind sowohl ARM- als
> auch RISC-V-Kerne verbaut, die wechselseitig aktiviert werden können.

Ist die DSP-Extension auch von dem RISC-V-Kern nutzbar oder sollte man 
bei Faltungsoperationen wie bei ML heftig benötigt doch auf den ARM-Core 
samt extension setzen ?

von Martin O. (ossi-2)


Angehängte Dateien:

Lesenswert?

Die Laufzeiten sind für Pico1,Pico2,RiscV und jeweils Int,Float,Double 
in der angehängten Tabelle.

von Bauform B. (bauformb)


Angehängte Dateien:

Lesenswert?

Bradward B. schrieb:
> Ist die DSP-Extension auch von dem RISC-V-Kern nutzbar

Unwahrscheinlich. Der hängt doch am Coprozessor Interface der M33-CPU 
oder ist sogar noch enger gekoppelt.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

OK nach den gemessenen Laufzeiten ist IMHO deutlich, das Fliesskomma im 
ARM -M3  drastisch beschleunigt ist.

von Harald K. (kirnbichler)


Lesenswert?

Der Unterschied in der int-Variante ist zwischen M33 und Hazard3 aber 
gar nicht so groß.

Hier wäre ein zusätzlicher Test (dhrystone?) interessant.

Daß man die Float-Performance nicht vergleichen sollte, ist klar, der 
M33 hat eine FPU, der Hazard3 nicht.

Aber wie sieht z.B. die Performance von memmove aus, wie schnell sind 
übliche Schleifenkonstrukte etc., wie sehen die IRQ-Latenzen aus ...

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

Harald K. schrieb:
> Der Unterschied in der int-Variante ist zwischen M33 und Hazard3 aber
> gar nicht so groß.

Um ein Drittel (17 zu 26) schneller ist aber deutlich, bei bis zu 10% 
Unterschied könnte man noch über "nicht spürbar" sprechen.

> Hier wäre ein zusätzlicher Test (dhrystone?) interessant.

Test werden leider nur verwendet um Raum für Interpretation zu schaffen.
Wobei eigentlich nur eine Messung gelungen ist, die keinen "Raum für 
Interpretationen" bietet.

von Axel S. (a-za-z0-9)


Lesenswert?

Bradward B. schrieb:
> OK nach den gemessenen Laufzeiten ist IMHO deutlich, das
> Fliesskomma im ARM -M3  drastisch beschleunigt ist.

Vor allem sieht man, daß beide ARM CPU eine FPU haben, die RISC-V CPU 
jedoch nicht. Das macht einen Vergleich eher sinnlos. Äpfel sind nun mal 
keine Birnen.

Man sieht auch daß die ARM FPU anscheinend nativ in double rechnet und 
daß die Umwandlung double → float in Software gemacht wird. Deswegen 
braucht auf ARM float sogar länger als double. Bei der Emulation in der 
RISC-V CPU dauert hingegen double länger als float, wie man es auch 
erwarten würde.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Vor allem sieht man, daß beide ARM CPU eine FPU haben,

??? Das seher ich eher nicht, auch lt. Doku ist für ARM-M0 keine 
FPU-Extension möglich.


>  Das macht einen Vergleich eher sinnlos. Äpfel sind nun mal
> keine Birnen.

Doch ein Vergleich der Nicht-float-Eigenschaften ist schon sinnvoll, 
erst recht wenn nicht vorhandene float-Hardware durch integer rechnung 
emuliert werden muß.

Und egal, ob man jemanden einen Apfel oder eine Birne an die Rübe 
knallt, der Effekt beim Getroffenen ist nicht nur vergleichbar, er ist 
auch nahezu gleich.

von Harald K. (kirnbichler)


Lesenswert?

Bradward B. schrieb:
> Um ein Drittel (17 zu 26) schneller ist aber deutlich, bei bis zu 10%
> Unterschied könnte man noch über "nicht spürbar" sprechen.

Das Ergebnis nur eines Tests hat wenig Aussagekraft, daher eben mein 
Vorschlag, ausführlichere Tests zu veranstalten.

Bei Desktop-PCs sind übrigens Geschwindigkeitsunterschiede unter 50% 
mess-, aber kaum spürbar.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Das Ergebnis nur eines Tests hat wenig Aussagekraft, daher eben mein
> Vorschlag, ausführlichere Tests zu veranstalten.

alle speedtests sind halt synthetisch, eine "echte" Applikation wäre da 
entscheidender, beispielsweise ob die Bremsen in einem Autonomen 
Fahrzeug 100 ms früher oder später mittels prognostischer Erkennung eine 
potentiell gefährlichen Situation einsetzen.

> Bei Desktop-PCs sind übrigens Geschwindigkeitsunterschiede unter 50%
> mess-, aber kaum spürbar.

Naja, ein Desktop-PC läuft ja auch im GHz Bereich, wären die Picos 
(default) bei 125 MHz liegt.
Je langsamer die Geschwindigkeitsklasse, desto stärker fallen auch 
Unterschiede im einstelligen Prozentbereich auf.
und dann wäre noch die Frage nach der Laufzeit. Ob nun ein umfangreicher 
built 20 oder 22 Minuten dauert ist schon relevant, ob es 20 oder 22 
Sekunden sind - eher nicht.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Bradward B. schrieb:
> und dann wäre noch die Frage nach der Laufzeit. Ob nun ein umfangreicher
> built 20 oder 22 Minuten dauert ist schon relevant, ob es 20 oder 22
> Sekunden sind - eher nicht.

Nein. Ob der Buil_D_ zehn Prozent länger braucht oder nicht, ist genauso 
relevant, wie ob der Build zehn Prozent länger braucht oder nicht.

Es sind nur zehn Prozent Unterschied.

von Markus K. (markus-)


Lesenswert?

Martin O. schrieb:
> Die Laufzeiten sind für Pico1,Pico2,RiscV und jeweils Int,Float,Double
> in der angehängten Tabelle.

Ich finde es erstaunlich, dass der RiscV bei float und insbesondere 
double soviel langsamer ist als der Pico1. Die haben ja beide keine FPU. 
Vielleicht fehlen da ja optimierte Libs und das ist der Grund, warum man 
die RiscV-Kerne überhaupt eingebaut hat.

von Harald K. (kirnbichler)


Lesenswert?

Markus K. schrieb:
> Ich finde es erstaunlich, dass der RiscV bei float und insbesondere
> double soviel langsamer ist als der Pico1.

Könnte vielleicht am "integer divider" und "interpolator" liegen, die es 
im RP2040 gibt. Jemand, der sich besser in RISC-V eingelesen hat als 
ich, wird sicherlich mit der Beschreibung des Hazard3 auf 
https://github.com/Wren6991/Hazard3 herausfinden können, ob es da 
Äquivalente zu diesen Funktionen gibt.

von Martin O. (ossi-2)


Angehängte Dateien:

Lesenswert?

Ich habe das angehängte Programmm mit dem ARM und dem RiscV laufen 
lassen. Die Stromaufnahme ist bei beiden ziemlich genau 18mA. Also kein 
deutlicher Unterschied zwischen beiden CPUs.

von Christoph M. (mchris)


Lesenswert?

Martin O. (ossi-2)
28.08.2024 12:30
>Die Laufzeiten sind für Pico1,Pico2,RiscV und jeweils Int,Float,Double
>in der angehängten Tabelle.

Super, danke :-)
Ich zieh's mal aus dem Text in die Sichtbarkeit:
1
Für die Integer Version habe ich die folgenden Laufzeiten in us:
2
  Pico 1  49
3
  Pico 2  17
4
  RiscV   26
5
6
Für die Float Version habe ich die folgenden Laufzeiten
7
  Pico 1 1190
8
  Pico 2  264
9
  RiscV  3864
10
11
Für die Double Version habe ich die folgenden Laufzeiten
12
  Pico 1  1146
13
  Pico 2   203
14
  RiscV   6132
15
16
Bei allen Varianten sieht man dass der Pico2 deutlich vorne liegt.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Bradward B. schrieb:
>> Vor allem sieht man, daß beide ARM CPU eine FPU haben,
>
> ??? Das seher ich eher nicht, auch lt. Doku ist für ARM-M0 keine
> FPU-Extension möglich.

Wieso bringst Du jetzt ARM-M0 ins Spiel? Wie bereits festgestellt, sind 
wird hier bei ARM Cortex M33. Dass diese eine FPU haben, ist 
unbestritten.

von Christoph M. (mchris)


Lesenswert?

Es wäre mal interessant, die SIMD-Instructions für einen Filterbenchmark 
zu nutzen, wie hier:

https://mcuoneclipse.com/2019/11/19/investigating-arm-cortex-m33-core-with-trustzone-dsp-acceleration-1/

von Markus K. (markus-)


Lesenswert?

Harald K. schrieb:
> Markus K. schrieb:
>> Ich finde es erstaunlich, dass der RiscV bei float und insbesondere
>> double soviel langsamer ist als der Pico1.
>
> Könnte vielleicht am "integer divider" und "interpolator" liegen, die es
> im RP2040 gibt. Jemand, der sich besser in RISC-V eingelesen hat als
> ich, wird sicherlich mit der Beschreibung des Hazard3 auf
> https://github.com/Wren6991/Hazard3 herausfinden können, ob es da
> Äquivalente zu diesen Funktionen gibt.

Ich steck da auch nicht drin, aber auf der Seite steht zumindest, dass 
er den RV32I Befehlssatz implementiert u.a. mit der Erweiterung M: 
"integer multiply/divide/modulo". Das hört sich ja schonmal nicht 
schlecht an.

von Markus K. (markus-)


Lesenswert?

Frank M. schrieb:
> Bradward B. schrieb:
>>> Vor allem sieht man, daß beide ARM CPU eine FPU haben,
>>
>> ??? Das seher ich eher nicht, auch lt. Doku ist für ARM-M0 keine
>> FPU-Extension möglich.
>
> Wieso bringst Du jetzt ARM-M0 ins Spiel? Wie bereits festgestellt, sind
> wird hier bei ARM Cortex M33. Dass diese eine FPU haben, ist
> unbestritten.

Der Pico1 hat benutzt Cortex-M0+ und der Pico2 den Cortex-M33.

von Harald K. (kirnbichler)


Lesenswert?

Markus K. schrieb:
> Der Pico1 hat benutzt Cortex-M0+

Und, hat der 'ne FPU?

von Martin O. (ossi-2)


Lesenswert?

Dass der RiscV bei double Operationen so langsam ist könnte natürlich 
auch an einer schlechten double-Bibliothek liegen. Es wäre mal 
interessant die Pico-2 RiscV CPU mit anderen RiscV CPUs zu vergleichen.

von Martin O. (ossi-2)


Lesenswert?

Und, hat der 'ne FPU?

Soweit ich weiss hat der RP2040 (Pico 1) keine FPU. Das erklärt warum 
der RP2350 bei float und double deutlich schneller ist. Mal sehen ob ich 
ne FFT auf den CPUs vergleiche.

von Andreas M. (amesser)


Lesenswert?

Markus K. schrieb:
> Die haben ja beide keine FPU.
> Vielleicht fehlen da ja optimierte Libs und das ist der Grund, warum man
> die RiscV-Kerne überhaupt eingebaut hat.

Der Pico 1 hat einen (8 Takte) Hardware Integer Divider den man parallel 
zur CPU laufen lassen kann, die Hazard Risc V können zwar auch Integer 
Divide, allerdings nicht parallel und das auch nur langsamer (18/19 
Takte)

Lt. der Hazard3 Webseite erreicht der 3.74 CoreMark/MHz und sollte damit 
in echten Applikationen deutlich schneller sein als ein Cortex M0+ mit 
seinen typischerweise 2.42 CoreMark/MHz.

Die ganzen präsentierten Benchmarkergebnisse sind sowieso nur Schall und 
Rauch ohne die Angabe von Compiler, Version und den benutzen 
Compile-Flags. (Und Taktfrequenz)

: Bearbeitet durch User
von Markus K. (markus-)


Lesenswert?

Andreas M. schrieb:
> Markus K. schrieb:
>> Die haben ja beide keine FPU.
>> Vielleicht fehlen da ja optimierte Libs und das ist der Grund, warum man
>> die RiscV-Kerne überhaupt eingebaut hat.
>
> Der Pico 1 hat einen (8 Takte) Hardware Integer Divider den man parallel
> zur CPU laufen lassen kann, die Hazard Risc V können zwar auch Integer
> Divide, allerdings nicht parallel und das auch nur langsamer (18/19
> Takte)

Danke für die konkreten Zahlen.

> Lt. der Hazard3 Webseite erreicht der 3.74 CoreMark/MHz und sollte damit
> in echten Applikationen deutlich schneller sein als ein Cortex M0+ mit
> seinen typischerweise 2.42 CoreMark/MHz.

Der Cortex-M33 macht 4,1 CoreMark/MHz und ist demnach nur knapp 10% 
schneller als der Harzard3. Bei dem, was so ein Benchmark halt misst.

> Die ganzen präsentierten Benchmarkergebnisse sind sowieso nur Schall und
> Rauch ohne die Angabe von Compiler, Version und den benutzen
> Compile-Flags. (Und Taktfrequenz)

Stimmt. Ist mir auch gerade aufgefallen, als ich mir den Compileroutput 
anschauen wollte. Es gibt ja diese Seite https://godbolt.org/ , bei der 
man Code einkippen kann und dann aus dutzenden Compilerversionen 
auswählen kann und dann schön vergleichen kann, was der Compiler daraus 
macht. Dazu muss man aber eben die genaue Version und auch die Flags 
kennen.

von Andreas M. (amesser)


Angehängte Dateien:

Lesenswert?

Markus K. schrieb:
> Es gibt ja diese Seite https://godbolt.org/

Stimmt, da war etwas. Ich bin jetzt etwas erstaunt, wie schlecht der gcc 
inzwischen doch ist, ich hätte erwartet, das er das mit der 
Constant-Value Optimierung kann, tut er aber nicht. der clang machts

von J. S. (jojos)


Lesenswert?

Die M3 FPU hilft doch nur bei float, nicht bei double. Double können 
einige M7 FPU.

Da passt es nicht das double auf dem Pico2 schneller sein sollen als 
float. Wird die FPU wirklich genutzt?

: Bearbeitet durch User
von Christoph M. (mchris)


Lesenswert?

DSP-SIMD im PiPico 2 wäre interessant. Das sollte deutlich schneller als 
auf dem PiPico 1 laufen.

In etwas so was
1
    #include <arm_math.h>   // Include CMSIS DSP header for intrinsics
2
    // Perform the IQ demodulation
3
    for (int i = 0; i < length; i += 2) {
4
        // Pack two 16-bit I and Q samples into 32-bit registers
5
        int32_t i_pair = __PKHBT(I[i], I[i + 1], 16);
6
        int32_t q_pair = __PKHBT(Q[i], Q[i + 1], 16);
7
8
        // Calculate I^2 and Q^2 using SIMD multiplication (SMUAD)
9
        int32_t i_squared = __SMUAD(i_pair, i_pair);
10
        int32_t q_squared = __SMUAD(q_pair, q_pair);
11
12
        // Calculate the demodulated values
13
        int32_t result_pair = __QADD16(i_squared, q_squared);
14
15
        // Store the results back to memory
16
        demodulated[i]     = (int16_t)(result_pair & 0xFFFF);           // Lower 16-bit
17
        demodulated[i + 1] = (int16_t)((result_pair >> 16) & 0xFFFF);   // Upper 16-bit
18
    }

__SMUAD:
https://developer.arm.com/documentation/dui0472/m/ARMv6-SIMD-Instruction-Intrinsics/--smuad-intrinsic

__PKHBT
https://developer.arm.com/documentation/dui0489/i/arm-and-thumb-instructions/pkhbt-and-pkhtb

von J. S. (jojos)


Lesenswert?

Das float Testprogramm arbeitet auch mit Double durch die Konstanten 1.0 
und 1.234. Die müssen als 1.0f und 1.234f geschrieben werden.

Der Klassiker wenn man AVR Code für ARM kopiert.

von Bauform B. (bauformb)


Lesenswert?

J. S. schrieb:
> Die M3 FPU hilft doch nur bei float, nicht bei double. Double
> können einige M7 FPU.

Ja, der M33 (die M3 haben ja nicht einmal float). Aber der RP2350 hat 
noch ein paar tausend Gatter zusätzlich. Die Frage ist nur, wie benutzt 
man die? Kennt der GCC solche Erweiterungen?
1
3.6.2. Double-precision Coprocessor (DCP)
2
Each Cortex-M33 CPU core is equipped with two instances of a
3
double-precision coprocessor that provides acceleration of
4
double-precision floating point operations including add, subtract,
5
multiply, divide and square root. The design is implemented in just
6
a few thousand gates and so occupies much less silicon die area than
7
a full double-precision floating-point unit. Nevertheless, these
8
coprocessors considerably speed up basic double-precision operations
9
compared to pure software implementations. The coprocessors also
10
offer support for some single-precision operations and conversions.
11
12
The two coprocessor instances are assigned to the Secure and Non-secure
13
domains. [...] This duplication avoids saving and restoring the
14
coprocessor context during Secure/Non-secure state transitions.
15
16
The RISC-V processors on RP2350 do not have access to the Cortex-M33
17
coprocessors.

von J. S. (jojos)


Lesenswert?

Ok, das macht den sicher interessant für einige Rechnereien.

Und das langsamere float beim Test dürfte dann an den zusätzlichen 
Konvertierungen liegen.

: Bearbeitet durch User
von Martin O. (ossi-2)


Lesenswert?

Hier ein paar neue Zahlen. Für eine 4096 Punkte Double FFT braucht der 
Pico2 52ms, der RiscV 1237ms und der Pico1 348ms.

von Martin O. (ossi-2)


Lesenswert?

Danke an jojos. Ich habe die float Programme nochmal neu laufen lassen 
wobei die Konstanten in xx.xxf Weise geschrieben wurden. Neue 
Laufzeiten:
Pico2 32us(vorher 264us). Pico1: 49us (vorher 1190us) und RiscV 2167us 
(vorher 61342us). Wieder ist die RiscV Version ziemlich langsam.

von Norbert (der_norbert)


Lesenswert?

Ich find's Klasse dass ihr Benchmarks macht, aber das ganze IO Subsystem 
scheint bei dem Ding kaputt zu sein. Werde zwar noch ein bisschen 
testen, aber befürchte das sie eine überarbeitete zweite Version 
auflegen müssen.

: Bearbeitet durch User
von Christoph M. (mchris)


Lesenswert?

>das ganze IO Subsystem
>scheint bei dem Ding kaputt zu sein. Werde zwar noch ein bisschen
>testen, aber befürchte das sie eine überarbeitete zweite Version
>auflegen müssen.

Des scheint einen Bug zu geben:
1
The newly released RP2350 microcontroller has a confirmed new bug in the current A2 stepping, affecting GPIO pull-down behavior. Listed in the Raspberry Pi RP2350 datasheet as errata RP2350-E9, it involves a situation where a GPIO pin is configured as a pull-down with input buffer enabled. After this pin is then driven to Vdd (e.g. 3.3V) and then disconnected, it will stay at around 2.1 – 2.2 V for a Vdd of 3.3V

https://hackaday.com/2024/08/28/hardware-bug-in-raspberry-pis-rp2350-causes-faulty-pull-down-behavior/

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

>>das ganze IO Subsystem
>>scheint bei dem Ding kaputt zu sein.

> Des scheint einen Bug zu geben:
>
>
1
> The newly released RP2350 microcontroller has a confirmed new bug in the 
2
> current A2 stepping, affecting GPIO pull-down behavior. Listed in the 
3
> Raspberry Pi RP2350 datasheet as errata RP2350-E9, it involves a 
4
> situation where a GPIO pin is configured as a pull-down with input 
5
> buffer enabled. After this pin is then driven to Vdd (e.g. 3.3V) and 
6
> then disconnected, it will stay at around 2.1 – 2.2 V for a Vdd of 3.3V
7
>

Also diese Beschreibung eines suboptimalen Pull-Down bei "unorthodoxen 
IO-Einstellungen" kann man jetzt nicht wirklich als ' Ganz kaputtes IO 
Subsystem ' bezeichnen. Wer dergleichen tut, dessem Charakter muß man 
schon einen besonderen Hang zur (Maßlosen) Übertreibung attestieren.

Gleichzeitig Pull-Down und direction Input ist schon mal eine leicht 
widersprüchliche (und somit eher "seltene") Configuration, 
Tristate-Output mit Pulls wäre da schon eher nach Lehrbuch.
Es ist aber tatsächlich ein Fehler wenn man dann von außen an den 
anschliessend von High auf hochohmig geschalteten (Input-) pin statt dem 
Pull-Dwn-Level (Low also GND) eine Spannung um 2 Volt, also verbotener 
Bereich misst.

: Bearbeitet durch User
von Martin O. (ossi-2)


Lesenswert?

Die oben gemachte Angabe der Float Laufzeit (49us) ist falsch. Richtig 
ist 658us. Ich hoffe ich habe jeetzt alle Fehler beseitigt.

von Bauform B. (bauformb)


Lesenswert?

Bradward B. schrieb:
> Gleichzeitig Pull-Down und direction Input ist schon mal eine leicht
> widersprüchliche (und somit eher "seltene") Configuration

??? wie meinen ??? Wie selten ist denn vergleichsweise "Pull-Up und 
Input"?

Selten ist eher, dass an dem Fehler ein "Input Isolation Latch" 
beteiligt ist, das korrekt programmiert werden muss. Das wird eine FAQ 
:)
> Ganz kaputtes IO Subsystem
ist sicher übertrieben, immerhin gibt es einen Workaround:
1
When pull-down behaviour is required, clear the pad input enable in
2
GPIO0.IE (for GPIOs 0 through 47) to ensure that only the pull-down
3
resistor is enabled.
4
5
To read the state of a pulled-down GPIO from software, enable the
6
input buffer by setting GPIO0.IE immediately before reading, and then
7
re-disable immediately afterwards. Note that if the pad is already a
8
logic-0, re-enabling the input does not disturb the pull-down state.

Norbert schrieb:
> Werde zwar noch ein bisschen testen, aber befürchte das sie eine
> überarbeitete zweite Version auflegen müssen.

:) Nur eine zweite? Wobei dieser Pull-Down Fehler ja total harmlos ist, 
reproduzierbar, rein analog. Spannend werden die Timing Probleme und 
Race Conditions, der Chip hat ja reichlich exotische Hardware. Das wird 
viele Workaround-Empfehlungen geben, so in der Art "dann mach das halt 
nicht" ;)

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> ist sicher übertrieben, immerhin gibt es einen Workaround:

GEfühlt 90% der Schreiber in diesem Forum lesen keine Datenblaetter, 
wieviel Prozent lesen dann wohl Erratas? :-D

Vanye

von Harald K. (kirnbichler)


Lesenswert?

Vanye R. schrieb:
> Erratas

Was ist der Plural eines Plurals?

von Axel S. (a-za-z0-9)


Lesenswert?

Harald K. schrieb:
> Vanye R. schrieb:
>> Erratas
>
> Was ist der Plural eines Plurals?

Ein Pluralissimo. War das ne Fangfrage?

von Harald K. (kirnbichler)


Lesenswert?

Axel S. schrieb:
> War das ne Fangfrage?

Wenn der zitateverstümmelnde "vanye" Erratas schreibt, müsste er auch 
Datenblätters schreiben. Und Schreibers oder Schreiberse.

Denn so ein Plural muss ja konsequent pluralisiert werden. Sonst ist es 
ja nicht genügend viele.

Ja, ist mir völlig klar, ist OT.

von Thilo L. (bc107)


Lesenswert?

Harald K. schrieb:
> Denn so ein Plural muss ja konsequent pluralisiert werden. Sonst ist es
> ja nicht genügend viele.

Politisch vollkommen korrekt wäre:

"Denn so ein Plural /eine Pluralin müssen ja konsequent pluralisiert 
werden. Sonst ist es ja nicht genügend gender-gerecht."

Bei einer Genderisierung von "Schreibers" muss ich allerdings passen...

von Harald K. (kirnbichler)


Lesenswert?

In die Richtung wollte ich jetzt nicht abbiegen.

von Vanye R. (vanye_rijan)


Lesenswert?

Euer langweiliges Leben möchte ich auch mal haben. Vom Blockwart gleich 
in die Fruehrente gerutscht?

Vanye

von Norbert (der_norbert)


Lesenswert?

Ich antworte mal all denjenigen, welche etwas Substantielles zum Thema 
schrieben.

RP2350-E9 ist weit weniger deskriptiv als es sein sollte.
Man könnte meinen das man um die Probleme herumprogrammieren könnte. Das 
sehe ich zur Zeit nicht, denn:

Das Latch-Up scheint unabhängig von Pull-Down oder Pull-Up

Einmal oben bleibt's oben, zumindest wenn man meinem ersten Test nach 
etwas hochohmiger heran geht. Möglicherweise ›schnappt‹ das Ding zurück 
wenn man sehr niederohmig auf Vcc oder Masse legt.

Ansonsten konnte ich die korrekte Funktionsweise bisher nur durch einen 
Reset des gesammten IO-Subsystems wieder herstellen. (Kurzfristig, bis 
zum nächsten High)

Sollte sich das alles bestätigen und die andere Peripherie (PIO,I2C,…) 
ebenso betroffen sein, dann kann man das Ding nur zum Rechnen aber nicht 
zu Steuern benutzen.

von Bauform B. (bauformb)


Lesenswert?

Norbert schrieb:
> Das Latch-Up scheint unabhängig von Pull-Down oder Pull-Up
> Einmal oben bleibt's oben, zumindest wenn man meinem ersten Test nach
> etwas hochohmiger heran geht.

Ist das vielleicht nur der normale Effekt mit einem offenen Eingang? 
Also ohne Pull-Down, weder intern noch extern, also wirklich hochohmig, 
ist das doch normal?

Ich verstehe den E9 Workaround so, dass der Input Buffer nach einem 
Power On Reset aus ist und dass man ihn wirklich nur ganz kurz zum Lesen 
einschalten soll. Normalerweise initialisiert man ja alle Pin-Register 
gleich beim Start. Das darf man in diesem Fall nicht, GPIO0.IE muss aus 
bleiben.

> Sollte sich das alles bestätigen und die andere Peripherie (PIO,I2C,…)
> ebenso betroffen sein

das betrifft sicher alle (bis auf QSPI und SWD); es passiert ja "ganz 
außen", direkt am Pin. Die Multiplexer zum I2C usw. sind ja dahinter, 
weiter "innen".

von Norbert (der_norbert)


Lesenswert?

Bauform B. schrieb:
> Ist das vielleicht nur der normale Effekt mit einem offenen Eingang?
> Also ohne Pull-Down, weder intern noch extern, also wirklich hochohmig,
> ist das doch normal?

Gutes Argument, muss ich wenn ich wieder im Lab bin noch testen.
Allerdings verhält sich der 2040 eindeutig anders als der 2350.
Die Tatsache, das man mit Pull-Down eine 0 liest, innerhalb von wenigen 
Mikrosekunden den Pull-Down wegnimmt und immer noch 0 liest, mit Pull-Up 
eine 1 liest, dann ohne Pull-Up weiterhin eine 1 liest, sieht erst 
einmal gut aus.
Problem: Von da an kann man tun und lassen was man will,die obige 
Sequenz beliebig oft wiederholen, es bleibt bei einer 1.

Reset des IO-Subsystems erlöst das Ding dann von seinem Elend.


> Ich verstehe den E9 Workaround so, dass der Input Buffer nach einem
> Power On Reset aus ist und dass man ihn wirklich nur ganz kurz zum Lesen
> einschalten soll. Normalerweise initialisiert man ja alle Pin-Register
> gleich beim Start. Das darf man in diesem Fall nicht, GPIO0.IE muss aus
> bleiben.

Muss ich noch testen, aber wie soll das zufriedenstellend mit einem 
PIO_ASM-Programm gehen? Das sehe ich noch gar nicht.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

>> Gleichzeitig Pull-Down und direction Input ist schon mal eine leicht
>> widersprüchliche (und somit eher "seltene") Configuration
>
> ??? wie meinen ??? Wie selten ist denn vergleichsweise "Pull-Up und
> Input"?

Es ist gemeint, das Pull auf eine Pin "schreibende" Funktion hat, 
während
man ein Pin auf Input (-only) konfiguriert, wenn man davon lesen will.
Also im gewissen Sinne gleichzeitig schreibend und lesend was irgendwie 
widersinnig ist. Ein Pull gehört eher an einen (tristate-fähigen) 
output,
damit auch im Falle einer Output-Abschaltung ("hochohmnig) die Leitung 
nicht floated sondern einen definierten Pegel aufweist. Bei I²C ist der 
Pull extern mittig.


> Latch-Up

Nein, da ist kein Latch-Up Effekt, jedenfalls nicht wie er üblicherweise 
gelehrt wird.

https://de.wikipedia.org/wiki/Latch-up-Effekt

von Christoph M. (mchris)


Lesenswert?

Bradward B. (Firma: Starfleet) (ltjg_boimler)
29.08.2024 12:02

>Ein Pull gehört eher an einen (tristate-fähigen) output,

Das siehst du falsch. Es war ein Pull-Up bzw. Pull-down Widerstand 
gemeint und die macht man üblicherweise an einen Eingang.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> gemeint und die macht man üblicherweise an einen Eingang.

 (ungetriebene) Konfig/Bootstrap-signale ja.

Ansonsten macht man die Pulls  extern (intern nur wenn man extern im 
schematic vergessen hat) und halt so, das man keine mehrere Pulls 
parallel an der selben Leitung hat. Und bei I2C mit einem Master und 
mehreren Slaves ist das eher der Master-Output und nicht die bis zu 127 
Slave-Eingänge.

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> Reset des IO-Subsystems erlöst das Ding dann von seinem Elend.

Das zeigt aber das es kein LatchUp ist sondern irgendwas im
Bereich der Logic. Wobei interessant waere zu schauen ob
sich beim eintreten der Stromverbrauch signifikant erhoeht
weil da z.B zwei Ausgaenge (im Controller) gegeneinander
arbeiten.

Vanye

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

>> Reset des IO-Subsystems erlöst das Ding dann von seinem Elend.
>
> Das zeigt aber das es kein LatchUp ist sondern irgendwas im
> Bereich der Logic.

Ja kein Latch-Up, lediglich das zwei Punkte mit unterschiedlichen 
elektrischen Potential sind durch die Schaltlogik elektrisch verbunden. 
Und der eine der beiden "Punkte", wird auch als "Latch" bezeichnet, also 
ein aus der digitalen Schaltungstechnik bekannte zustandsgesteuerte 
FlipFlop.

https://de.wikipedia.org/wiki/Latch

> Wobei interessant waere zu schauen ob
> sich beim eintreten der Stromverbrauch signifikant erhoeht
> weil da z.B zwei Ausgaenge (im Controller) gegeneinander
> arbeiten.

Der Stromverbrauch im Controller ist sicherlich erhöht weil der 
Inputzweig über den internen PullDown-Zweig gespeist wird. Um das zu 
verhindern, muss die Firmware entweder die elektrische Verbindung von 
der Quelle (PD)  oder die Verbindung zur Senke (Input-Pad-Zweig( 
deaktivieren Deshalb steht ja auch im Workaround das man den Input-zweig 
explizit abschalten muss (aka das GPIO in Output-richtung betreiben), 
damit nur der PD-Treiber aktiv ist


"... clear the pad input enable in GPIO0.IE ... to ensure that only the 
pull-down resistor is enabled. "

von Christoph M. (mchris)


Lesenswert?

Bradward B. (Firma: Starfleet) (ltjg_boimler)
>Ja kein Latch-Up, lediglich das zwei Punkte mit unterschiedlichen
>elektrischen Potential sind durch die Schaltlogik elektrisch verbunden.
>Und der eine der beiden "Punkte", wird auch als "Latch" bezeichnet, also
>ein aus der digitalen Schaltungstechnik bekannte zustandsgesteuerte
>FlipFlop.

Dieses "Semi-Verständnis" kling ein wenig nach ChatGPT.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Dieses "Semi-Verständnis" kling ein wenig nach ChatGPT.

Obige nichtssagende, nebulös alles-meinende Floskel sollte man sich in 
Zukunft sparen, da dergleichen nix zur Klärung der Sachfragen beiträgt.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Bradward B. schrieb:
> Deshalb steht ja auch im Workaround das man den Input-zweig
> explizit abschalten muss (aka das GPIO in Output-richtung betreiben),
> damit nur der PD-Treiber aktiv ist

Nur weil man Input abschaltet (~IE) ist nicht automatisch Output aktiv. 
Da gibt's noch so ein Bit (OD) welches man setzen und löschen kann.

von Bauform B. (bauformb)


Lesenswert?

Norbert schrieb:
>> Bauform B. schrieb:
>> Ich verstehe den E9 Workaround so, dass der Input Buffer nach einem
>> Power On Reset aus ist und dass man ihn wirklich nur ganz kurz zum Lesen
>> einschalten soll. Normalerweise initialisiert man ja alle Pin-Register
>> gleich beim Start. Das darf man in diesem Fall nicht, GPIO0.IE muss aus
>> bleiben.

Im wirklichen Leben ist es viel einfacher: GPIO0.IE muss aus bleiben, 
bis der Pull-Down abgeschaltet ist. Fertig.

Für den einen Eingang, bei dem ein Pull-Down sinnvoll ist, spendiert man 
eben einen externen. An Ausgängen findet man eher einen Pull-Down, aber 
da tritt dieser Fehler nicht auf. Bei anderen uC muss der sowieso immer 
extern sein, beim RP2350 könnte man sich drauf verlassen, dass die 
internen auch bei Power On und Brown Out zuverlässig funktionieren.

> Muss ich noch testen, aber wie soll das zufriedenstellend mit einem
> PIO_ASM-Programm gehen? Das sehe ich noch gar nicht.

Es wird nichts so heiß gegessen... ;)

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Bauform B. schrieb:
> Norbert schrieb:
>>> Bauform B. schrieb:
>>> Ich verstehe den E9 Workaround so, dass der Input Buffer nach einem
>>> Power On Reset aus ist und dass man ihn wirklich nur ganz kurz zum Lesen
>>> einschalten soll. Normalerweise initialisiert man ja alle Pin-Register
>>> gleich beim Start. Das darf man in diesem Fall nicht, GPIO0.IE muss aus
>>> bleiben.
>
> Im wirklichen Leben ist es viel einfacher: GPIO0.IE muss aus bleiben,
> bis der Pull-Down abgeschaltet ist. Fertig.
>
> Für den einen Eingang, bei dem ein Pull-Down sinnvoll ist, spendiert man
> eben einen externen. An Ausgängen findet man eher einen Pull-Down, aber
> da tritt dieser Fehler nicht auf. Bei anderen uC muss der sowieso immer
> extern sein, beim RP2350 könnte man sich drauf verlassen, dass die
> internen auch bei Power On und Brown Out zuverlässig funktionieren.
>
>> Muss ich noch testen, aber wie soll das zufriedenstellend mit einem
>> PIO_ASM-Programm gehen? Das sehe ich noch gar nicht.
>
> Es wird nichts so heiß gegessen... ;)

Hehe, schöner Gedanke. Beschreibe doch einmal grob wie ein 
PIO_ASM-Programm das alles zufriedenstellend bewerkstelligen soll.

Ach ja, noch ein Gedanke. Der SIO hieß so, weil's früher mal ein ›Single 
Cycle IO‹ war. Isser nu auch nicht mehr.

Reine Outputs machen keine Probleme, Inputs mit kräftigem, niederohmigem 
externen Pull-Down auch nicht. Wenn's hochohmig wie gewohnt sein soll, 
dann müssen überall externe und sehr, sehr schnelle Buffer davor.

Wenn man dynamisch umschalten muss, dann braucht's extreme externe 
Hardware-Clownereien.

Letzten Endes muss jeder für seinen Anwendungsfall entscheiden ob die 
Anzahl der Gehhilfen noch akzeptabel ist.

Achtung _Meinung_: Ich habe bei mir schon drei Fälle bei denen ich 
eigentlich das Ding sehr gerne einsetzen wollte, jedoch aus 
verschiedenen Gründen nicht kann.

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.