Feelin XR Pro Vape Podsystem Teardown

#8021533
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
#8021682
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.

#8021745
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.

Angehängte Dateien:
: Bearbeitet durch User
#8021806
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.

#8021997
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.

Angehängte Dateien:
: Bearbeitet durch User
#8022104
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren