Forum: Offtopic Feelin XR Pro Vape Podsystem Teardown


von Kilo S. (kilo_s)



Lesenswert?

Guten Tag Leute, neues Spielzeug!
Hab ich Freundlicherweise zugespielt bekommen.

Das Modell habe ich hier noch nicht antreffen können, ist mal eine ganz 
andere Nummer als die üblichen Einweg Systeme und auch als die hier 
anzutreffenden Podsysteme.

Deutlich hochwertiger verarbeitet, weniger Undichtigkeiten, 
verachraubter Korpus der PCB und Akku trägt, ganze Platine mit flexiblem 
Silikon versiegelt.
Deshalb hab ich auch noch nicht alle Beschriftungen erkennen können.

Als MCU kommt ein Cmsemicon BAT32G135 in QFN32 zum Einsatz.
Der kleinere IC links nebendran, ziemlich sicher der SPI Flash, der 
Haupt Transistor für die Heizung oben links am Display Laderegelung und 
ein Step Wandler sind drauf.

Display trägt keine Beschriftung auf der Rückseite, 13 Pins.

Ausgerechnet der MCU taucht nicht in der Liste bei JLink auf.
(G133/G157 hingegen schon?!)

Jetzt erst mal schauen, erster Versuch eine Verbindung zum MCU 
aufzubauen ist leider fehlgeschlagen, SWDIO/SWDCLK sind als Testpunkte 
verfügbar.

Wer hier hat mit diesen MCU schon mal etwas gemacht?

: Bearbeitet durch User
von Keks F. (keksliebhaber)


Lesenswert?

Schöner Akku, schönes Display.

Ich habe für die am Boden teils brach liegenden Akkus noch keine 
Verwendung gefunden. Gleichzeitig habe ich von Ali für umsonst eine 
Unmenge von 1-3W LED Platinen für Taschenlampen. Da suche ich noch nach 
einer sehr günstigen Quelle für Treiber und Lade-ICs. LCSC ist 
mittlerweile schweineteuer beim Versand.

Mach das Teil mal an und zähl die Pixel. Da findet sich schon was 
passendes bei Ali zur Identifizierung.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Keks F. schrieb:
> Mach das Teil mal an und zähl die Pixel.

Die Infos kommen bei Zeiten aus dem SPI Flash, Farbgebung/Bildaufbau ist 
weniger zum Zählen geeignet. Ja, es würde gehen, aber wieso abmühen wenn 
ich die Größe aus dem flash ziehen kann. ;-) Aber ich weiß gerade nicht 
wann ich genau dazu komme.

0,96 TFT, so viel verrät schon mal die Werbung. Angaben zur Auflösung 
gibt es leider aktuell nicht.

Hmm mit generischem M0+ connect geht's nicht mit JLink.
Ich muss gleich mal das Datenblatt genauer ansehen.

Vermutlich endet es damit das ich den MCU auf einen Adapter bringen 
werde, wenig Platz um ohne Verrenkungen an RESET (Pin 1=SWDIO, 2=RESET, 
3=SWDCLK) zu kommen, die sind direkt bei der Spule die ich für einen 
Step Wandler halte, mit der glibbergrütze eingekleistert. Da muss ich 
erst schauen ob ich mit meinen Testnadeln dran komme, ob es ein Stück 
Draht wird, oder ich ihn runter Nehmen werde.

Im zweiten Bild, roter Punkt, markiert Pin 1, gezählt wird von der 
rechten Seite gegen den Uhrzeigersinn.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Paar Details zum Display.
Also, was es halt zu zeigen gibt.

von Harry L. (mysth)


Angehängte Dateien:

Lesenswert?

Könnte passen:

https://de.aliexpress.com/item/1005010441457177.html

Controller wäre dann ST7735

Auflösung: 80x160

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Harry L. schrieb:
> Könnte passen:


Denke für deine Hilfe.
Ja, der Punkt (weiß) unten links passt auch.

Werde ich testen.

von Kilo S. (kilo_s)


Lesenswert?

Ahhh, immerhin kurz!
1
Reset: Core did not halt after reset, trying to disable WDT.
2
Reset: Halt core after reset via DEMCR.VC_CORERESET.
3
Reset: Reset device via reset pin
4
Reset: VC_CORERESET did not halt CPU. (Debug logic also reset by reset pin?).
5
Reset: Reconnecting and manually halting CPU.
6
Found SW-DP with ID 0x0BC11477
7
DPv0 detected
8
CoreSight SoC-400 or earlier
9
AP map detection skipped. Manually configured AP map found.
10
AP[0]: AHB-AP (IDR: Not set, ADDR: 0x00000000)
11
AP[0]: Core found
12
AP[0]: AHB-AP ROM base: 0xE00FF000
13
CPUID register: 0x410CC601. Implementer code: 0x41 (ARM)
14
Found Cortex-M0 r0p1, Little endian.
15
16
**************************
17
WARNING: CPU could not be halted
18
**************************

Brauch nen anderen programmer, meiner hat kein reset!
Glitchen ist hier aber wegen WDT scheinbar nicht machbar, oder timing 
stimmt noch nicht.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Moin.

Erst mal 1000ccm Kaffeeinfusion.

Brutal wie der KI slob alles nützliche in den Suchergebnissen so 
unglaublich weit nach hinten drängt, das GitHub bezüglich PA1 (RESET) an 
meinem China JLink-OB war so weit am Ende der liste das hätte ich fast 
nicht gefunden!

Keks F. schrieb:
> Ich habe für die am Boden teils brach liegenden Akkus noch keine
> Verwendung gefunden.

Wollte ich gestern schon kurz drauf eingehen, irgendwie verloren 
gegangen.

Erster Beitrag, letztes Bild, die mit Isolierband umwickelte Plastik 
umverpackung von "Fugenglättern", gefüllt mit 10x850mAh 3,7V Vape 
Zellen, altes Powerbank PCB drauf gepappt.
Meine "is mir egal was damit passiert" Powerbank. Egal was ich an 5V 
Geräten finde, ob ich weiß es funktioniert oder nicht, bekommt seine 
Reanimation über diese Powerbank!
Die hat mich an Material absolut nichts außer kurz bisschen Strom zum 
löten gekostet. Das PCB der Powerbank hab ich ebenfalls "gerettet".

Sind die Zellen irgendwann ganz oll, kommen einfach neue rein.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Kaffee hilt.

Dumps!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Am Pullup des Reset war genug Platz.

Generic M0, 1kHz, keinerlei FW/Read protection.

von Kilo S. (kilo_s)


Lesenswert?

Ghidra output mal durch die KI gejagt:
1
void display_init(void) {
2
3
    // === 1. HARDWARE RESET ===
4
    // Basis: DAT_40040000 = 0x40040000 (GPIO-Port-Basisadresse)
5
    // Bit 3 (0x08) = RESET-Pin
6
7
    GPIO[0x07] |= 0x08;          // RESET → HIGH
8
    delay_ms(1);                 // FUN_00004df8(1)
9
    GPIO[0x07] &= 0xF7;          // RESET → LOW  (AND mit ~0x08)
10
    delay_ms(1);                 // FUN_00004df8(1)
11
    GPIO[0x07] |= 0x08;          // RESET → HIGH
12
    delay_ms_with_check(10);     // FUN_00004e34(10)
13
14
    // Zusätzlich: CS-Pin setzen (DAT_40040001, Bit 5 cleared via AND 0xDF)
15
    GPIO[0x01] &= 0xDF;          // CS → LOW (Chip Select aktiv)
16
17
    // === 2. REGISTER UNLOCK (GC9A01-spezifisch) ===
18
    spi_write_byte(CMD, 0xFE);   // Inter-register command unlock 1
19
    spi_write_byte(CMD, 0xEF);   // Inter-register command unlock 2
20
21
    // === 3. DISPLAY KONFIGURATION ===
22
    spi_write_byte(CMD,  0xB0);
23
    spi_write_byte(DATA, 0xC0);  // Interface mode
24
25
    spi_write_byte(CMD,  0xB2);  // FRMCTR2 - Frame rate normal mode
26
    spi_write_byte(DATA, 0x24);
27
28
    spi_write_byte(CMD,  0xB3);  // FRMCTR3 - Frame rate partial mode
29
    spi_write_byte(DATA, 0x03);
30
31
    spi_write_byte(CMD,  0xB7);  // ETMOD - Entry mode
32
    spi_write_byte(DATA, 0x01);
33
34
    spi_write_byte(CMD,  0xB6);  // DISSET5 - Display function control
35
    spi_write_byte(DATA, 0x19);
36
37
    spi_write_byte(CMD,  0xAC);
38
    spi_write_byte(DATA, 0xDB);
39
40
    spi_write_byte(CMD,  0xAB);
41
    spi_write_byte(DATA, 0x0F);
42
43
    spi_write_byte(CMD,  0x3A);  // COLMOD - Pixel format
44
    spi_write_byte(DATA, 0x05);  // 16-bit RGB565
45
46
    spi_write_byte(CMD,  0xB4);  // INVCTR - Display inversion control
47
    spi_write_byte(DATA, 0x04);
48
49
    spi_write_byte(CMD,  0xA8);
50
    spi_write_byte(DATA, 0x0C);
51
52
    spi_write_byte(CMD,  0xB8);  // Power control sequence
53
    spi_write_byte(DATA, 0x08);
54
55
    spi_write_byte(CMD,  0xED);
56
    spi_write_byte(DATA, 0x03);
57
58
    spi_write_byte(CMD,  0xEA);
59
    spi_write_byte(DATA, 0x9F);
60
61
    spi_write_byte(CMD,  0xC6);  // FRCTRL2
62
    spi_write_byte(DATA, 0x2A);
63
64
    spi_write_byte(CMD,  0xC7);
65
    spi_write_byte(DATA, 0x10);
66
67
    // === 4. GAMMA POSITIV (0xF0) — 13 Bytes ===
68
    spi_write_byte(CMD,  0xF0);
69
    spi_write_byte(DATA, 0x09);
70
    spi_write_byte(DATA, 0x35);
71
    spi_write_byte(DATA, 0x2A);
72
    spi_write_byte(DATA, 0x4A);
73
    spi_write_byte(DATA, 0xA9);
74
    spi_write_byte(DATA, 0x39);
75
    spi_write_byte(DATA, 0x35);
76
    spi_write_byte(DATA, 0x60);
77
    spi_write_byte(DATA, 0x00);  // ← Sonderfall: mov r0,r1 bei 0x364A
78
    spi_write_byte(DATA, 0x14);
79
    spi_write_byte(DATA, 0x0A);
80
    spi_write_byte(DATA, 0x16);
81
    spi_write_byte(DATA, 0x10);
82
    spi_write_byte(DATA, 0x1F);
83
84
    // === 5. GAMMA NEGATIV (0xF1) — 14 Bytes ===
85
    spi_write_byte(CMD,  0xF1);
86
    spi_write_byte(DATA, 0x13);
87
    spi_write_byte(DATA, 0x24);
88
    spi_write_byte(DATA, 0x55);
89
    spi_write_byte(DATA, 0x3C);
90
    spi_write_byte(DATA, 0xC6);
91
    spi_write_byte(DATA, 0x16);
92
    spi_write_byte(DATA, 0x3F);
93
    spi_write_byte(DATA, 0x60);
94
    spi_write_byte(DATA, 0x08);
95
    spi_write_byte(DATA, 0x06);
96
    spi_write_byte(DATA, 0x0D);
97
    spi_write_byte(DATA, 0x1F);
98
    spi_write_byte(DATA, 0x1C);
99
    spi_write_byte(DATA, 0x10);
100
101
    // === 6. SLEEP OUT + DISPLAY ON ===
102
    spi_write_byte(CMD, 0x11);   // SLPOUT - Exit sleep mode
103
    delay_ms_with_check(100);    // Pflicht-Delay nach SLPOUT (r0=0x64)
104
105
    spi_write_byte(CMD, 0x29);   // DISPON - Display on
106
    delay_ms_with_check(10);
107
108
    // === 7. BACKLIGHT EINSCHALTEN ===
109
    GPIO[0x01] |= 0x20;          // BL-Pin → HIGH (Bit 5 setzen)
110
    set_pwm_backlight(0);        // FUN_00005666(0) → PWM init mit Standardhelligkeit
111
}

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Und der Flashdump des SPI flash.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Der Adapter hat sich mehr als lange Zeit gelassen um aus China hier 
Einzutrudeln, hat sich aber echt gelohnt!

Wer sowas sucht: https://amzn.eu/d/07pQ0dVY

Seine 5€ ist er jedenfalls wert.

: Bearbeitet durch User
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.