Bananen taal

Door Infant op zaterdag 14 juni 2014 18:44 - Reacties (29)
Categorie: Gepruts, Views: 4.611

Dit is in vervolg op de vorige post: Banana? en degene daarvoor Dooie Fiets

Deze post zal spelfouten, semi-technisch gebrabbel en eindeloze ritsen aan compleet nutteloze data bevatten. Als je daar allemaal geen zin in hebt, zou ik vooral niet verder lezen.

Ik was zover dat ik een accu en display op elkaar aansloot, en hij spontaan beeld gaf. Geweldig.
De eerst volgende stap was om er een scope aan te hangen, om een idee te krijgen wat er zo ongeveer gebeurt.

Snuf snuf
Er komen 3 draadjes uit het display zetten, de accu zet daar 5V, 24V en GND op.

De 24V lijn zou de data bus moeten voor stellen, dus dat is het eerste waar de scope wat aan mag ruiken.
Er komt gigantisch veel verkeer voorbij. Er zit wel wat structuur in, bijvoorbeeld:

Elke overgang van geen data, naar wel data, begint met het karakter 0x10.

Pakketje!


Uit de vorige post:
De Atmega die nog met 4V aan staat, geeft op de TX pin inderdaad signaal uit:
10 04 20 CC en af en toe 10 C1 21 22 80 5F.


Mooi. Het is nu toch wel 99% zeker, dat het standaard seriele communicatie is. Deze scope kan dat ook decoderen, maar om dat vervolgens allemaal met de hand te gaan zitten over krijten... daar heb ik niet zo'n zin in. Dat moet gemakkelijker kunnen.

Het eerste geschikte object wat ik op mijn plank tegen kom, is een USB naar RS-485 adapter.

RS-485 is een standaard, verzonnen in een donker verleden door een of ander instituut.

Om bitjes te kunnen lezen en zenden, heeft RS-485 twee signalen nodig die het tegenovergestelde van elkaar zijn. Als het ene signaal hoog is, en de andere laag, komt er een 1 uit zetten, en als de andere hoog is... en de ene laag, komt er een 0 uit zetten. Okee?

Die "andere" en "die ene" heten officiŰler A en B, en iedereen (lees: Infant) haalt ze altijd door de war:
The RS-485 signaling specification states that signal A is the inverting or '-' pin and signal B is the non-inverting or '+' pin.
This is in conflict with the A/B naming used by a number of differential transceiver manufacturers...
These manufacturers are incorrect, but their practice is in widespread use.
To avoid these confusions, some equipment manufacturers have created a third D+ and D- naming convention.

-Wiki

Okee, rant time. Kort samengevat:

De helft van de fabrikanten implementeert de standaard verkeerd. Dat vinden we met z'n allen dan onduidelijk. Vervolgens fixen we dat door de onduidelijkheid te voorzien van een nieuw label, die niet in de standaard genoemd is.

Dit is waarom elke handleiding die ik heb gelezen m.b.t. RS-485 ongeveer zo gaat:
"Sluit A op A aan, B op B. Doet ie ut niet? Draai ze om."

Anyhow, met een voeding en twee weerstanden, kan deze converter ervan overtuigd worden dat de 24V fiets bus een hele brakke RS-485 lijn is:

Weer zo'n super duidelijk schema.


Na dat zo aan te hebben gesloten, en de A en B een keer te hebben verwisseld, slinger ik mijn favoriete serial terminal aan en steek het display opnieuw in de accu.

Meteen wordt je overspoeld met een muur aan gegevens, dat gaat zo'n 10 seconden door. Het display toont de foutcode E0005 net als de vorige keer, en daarna gaat het hele zaakje uit.
banaan:
1
2
3
4
5
6
7
8
10 c1 21 22 06 5d 10 22 c2 22 00 ad 77 10 a4 20  .┴!".]."┬".şw.¤ 
ee 10 a4 20 ee 10 a4 20 ee 10 a4 20 ee 10 c1 21  ţ.¤ ţ.¤ ţ.¤ ţ.┴!
22 07 cc 10 22 c2 22 00 bc 2b 10 c1 21 22 08 39  ".╠."┬".¼+.┴!".9
10 22 c2 22 00 bd ba 10 c1 21 22 09 a8 10 22 c2  ."┬".½║.┴!".¨."┬
22 00 bf db 10 c1 21 22 0a 58 10 22 c2 22 00 c0  ".┐█.┴!".X."┬".└
cb 10 04 20 cc 10 04 20 cc 10 04 20 cc 10 04 20  ╦.. ╠.. ╠.. ╠.. 
cc 10 c1 21 22 0b c9 10 22 c2 22 00 d0 06 10 c1  ╠.┴!".╔."┬".đ..┴
21 22 0c fb 10 22 c2 22 00 d1 97 10 c1 21 22 0d  !".ű."┬".Đ—.┴!".
Kansloos!

Dit is een stukje uit dat gelogde verkeer, om je een idee te geven. Het hele bestand staat hier.

Zoals je kunt zien, komt er geen enkel nuttig leesbaar stukje tekst in voor. Niet dat ik dit echt verwachtte.

Stap twee was dan toch maar eens de motor er op aansluiten, want daar zal hij toch ook wel mee willen babbelen? De motor heb ik helaas uit elkaar gehaald, maar de ingewanden zijn nog heel:

En dit is een motor ... hoe precies?


Dus, die draadjes vrot ik in de daarvoor bestemde connector, start een nieuwe log sessie (dataverkeer wat er bij hoort.), en wat schetst de verbazing?
OMG!


OMFSM! Een getal!

Het eerste wat je dan natuurlijk op stom geluk doet, is kijken of dat getal ergens toevallig voorbij komt vliegen.

Ik heb de data in het log in regels opgesplitst, zodat op elke regel een begin van een pakketje staat.

Meerdere malen komt 10 C1 29 26 0c 0c c3 54 c0 00 f0 59 41 21 voorbij, en dat is het enige waar 59 41 zo pats boem in voor komt. (De hex waarde van 59 41 is 17 35 of 10 3F, afhankelijk van de endianness, maar beide komen niet voor.)

Dat is vrij veel belovend, maar nog niet echt een zekerheid.

De laatste banaan die ook nog een teken van leven toonde, heb ik er toen ook maar aan gehangen en gelogd.

Deze doet het ook, en zodra het display de km stand geeft haal ik hem er weer uit. Dit display geeft 7052 km aan, en what do you know: vlak bij het einde van het log staat:

10 C1 29 26 03 0c c0 00 c0 00 f0 70 52 49

Consistentie!

Veel meer kan ik van deze opstelling natuurlijk niet maken. De "motor" gaat nooit kunnen draaien, het is Řberhaupt een wonder dat hier leven uit komt.

De volgende stap leek mij daarom, uitvinden of ik zelf iets tegen het display kan zeggen, bijv een andere kilometer stand. Daarvoor moet ook terug gepraat kunnen worden, en dat vereist een iets andere en wellicht ook nettere opstelling.

Terug babbelen
In plaats van het gebeunde RS-485 ding nog langer te misbruiken, heb ik een oud Olimex bordje uit de kast gehaald.

Deze heeft er een RS-232 geval erop zitten, wat weer zo'n standaard is die gewoon hetzelfde op een andere manier doet, en daar heb ik het volgende op geprikt:

Hee, een leesbaar schema.


De communicatie bus, is een los draad wat d.m.v. een pull-up weerstand(R3) op 24V gehouden wordt. Als de bus 24V is, maakt de deling R4/R5 daar ietse van 8 keer minder van (3V ongeveer) zodat dat op het ontvangst pinnetje van het RS232 ic kan zonder dat die direct in rook op gaat.

Om de bus omlaag te trekken, moet het 5V tx-signaal ge-level-shift worden naar 24V. Dat kan met twee transistoren: Als tx hoog is en Q2 in gaat, is de ingang van Q1 laag en laat hij de bus met rust. De bus is dus 24V.

Als tx laag is, wordt de ingang van Q1 hoog, en trekt hij de bus door een 100 Ohm weerstand R2 naar de GND toe. De bus is dan nog ongeveer 2V, gedeeld door c.a. 8 is dat laag genoeg om als 0 gelezen te worden.

Een nuttige feature die deze bus automatisch heeft, is dat alles wat je nu over RS-232 verzend, ook direct terug krijgt. Als twee dingen op exact hetzelfde moment op deze bus proberen te praten, kun je dat direct vast stellen, je krijgt namelijk niet hetzelfde terug als wat je er op zet.

Het bordje ziet er nu zo uit. Er zit een connector op waar het display in geprikt kan worden. En als je dat doet, gebeurt er niks.

Hm...

Misschien moet hij eerst wat aan gemasseerd worden, door er data naar toe te slingeren. Dus ik verzend het stuk waarvan ik vermoed dat het 5941 km op het display weer gaat geven:

Hallo!
Blauw is verzonden, groen is ontvangen.


Ooh!

Voor een halve seconde ofzo verschijnt inderdaad dezelfde km stand op het display, en verdwijnt daarna weer. Als ik eerst dit bericht, en daarna allemaal onzin verzend blijft het display aan, net zolang tot ik ophoud met verzenden.

Veel interessanter nog, is dat het display kennelijk antwoord geeft:
10 22 c0 26 d9.

Het versturen van het pakket met de andere km stand, geeft hetzelfde antwoord.

Dat is heel aardig, want dan kan ik wat van het gelogde verkeer op een rijtje zetten:

10 C1 29 26 0C 30 C3 54 C0 00 FC CC C0 71
10 22 D0 26 D9
10 C1 29 26 03 0C C0 00 C0 00 F0 70 52 49
10 22 C0 26 D9
10 C1 29 26 0C 30 C3 4F C0 00 FC CC C0 4E
10 22 C0 26 D9

Die gaven allemaal hetzelfde antwoord, maar er is ook:

10 C1 29 27 03 30 C0 00 00 00 3C CC C0 D4
10 22 C0 27 48
10 C1 29 27 03 00 00 00 00 00 1e 00 05 b7
10 22 c0 27 48

Bij tet verzenden van deze twee pakketjes, gaat het display niet meer uit. En kijk:

10 C1 29 27 03 00 00 00 00 00 1e 00 05 b7
10 22 c0 27 48

Deze geeft de foutcode E0005 permanent weer!

Verder komt dit bericht vaak voorbij:
10 C1 21 22 00 FE.

Het een na laatste getal loopt steeds op:
10 C1 21 22 01 6F
... 02 9F
03 0E
04 3C
05 AD
06 5D
07 CC
08 39
09 A8
0A 58
0B C9
0C FB
0D 6A
0E 9A
0F 0B

En na 0F begint hij weer opnieuw.

Dit doet sterk vermoeden dat de laatste byte een CRC is. Als ik namelijk een bit aanpas in het bericht naar het display toe, en bijv. foutcode 0004 ervan maak, gebeurt er niks, en krijg ik ook geen antwoord.

En ik wil zo graag dat het display 666km aangeeft.

CRCs
CRC's zijn geweldige dingen. Het is een controle getal wat in dit geval achter het bericht geplakt zit.

Als tijdens de verzending de data in het bericht veranderd, komt de CRC niet meer overeen. Ze zijn ontworpen om bij een kleine verandering, van. bijv maar 1 bit, een zo groot mogelijke verandering in het controle getal op te leveren.

Maar een 8-bit CRC is natuurlijk niet zo veel. 8 bits zijn 256 verschillende mogelijkheden.

Als ik zo'n bericht compleet omgooi, en er een willekeurige CRC achter bengel, heb ik een 1 op 256 kans dat ik die goed gok.

En gezien dit display zo vriendelijk is om niks te zeggen als ik puin verstuur, en netjes te antwoorden als hij het met me eens is, kan ik in theorie gewoon maar wat getallen op het eind proberen totdat het goed gaat.

Nou, dat gehele proces heb ik samengevat in een quick and dirty programmaatje.

(Mocht je het willen proberen... het werkt onder Linux of Windows + cygwin door make uit te voeren. Hij opent standaard /dev/ttyS23, maar je kunt een ander device als opstart argument mee geven. Bijv:
code:
1
./tryme /dev/ttyUSB0


Als je die opstart, vraagt hij weke waarde hij naar het display moet smijten:


Het getal wat je invoert gaat door een binare gehaktmolen heen:
C:
1
2
3
4
5
6
7
8
9
 //The encoding is kinda weird, it's the HEX representation of what you see:    
 uint8_t dec[3];
 //Break it into powers of 10.
 dec[0] = speed / 100;
 dec[1] = (speed - (100*dec[0])) / 10;
 dec[2] = speed % 10;
 //Convert it to ...something
 data[8] = 0x01 * dec[0];
 data[9] = ((0x10 * dec[1])) | dec[2];

Dat propt hij op de plek waar ik ondertussen stiekem van heb uitgevonden dat het de speedo locatie is, hij laat zien wat hij verzonden heeft en wat het vorige antwoord was:


En na een aantal pogingen komt er een antwoord terug van het display:


En verschijnt het getal automagisch op het scherm!
Evil!


Enig.

We zijn nu in ieder geval op het punt beland dat je Sparta Ion display in combinatie met deze enigszins lompe manier van communiceren, kan omtoveren tot bijv een kook wekker.

Hij piept alleen niet...

Banana?

Door Infant op maandag 09 juni 2014 12:37 - Reacties (16)
Categorie: Gemod / Gefix, Views: 6.911

Ik acht mij niet verantwoordelijk voor hoge bloeddruk en/of ongecontroleerde woede aanvallen veroorzaakt door spellingfouten.

Eens in de zoveel tijd struin ik rond op Marktplaats, gewapend met mijn favoriete zoektermen. Afgelopen week vond ik dat eindelijk een defecte banaan, waar ik al een hele tijd naar op zoek was. (Uiteraard was dat niet de zoekterm.) Het betreft een accu in de vorm van een banaan, voor in mijn kapotte zombie fiets.

Ik heb er drie gekocht, gezien ze zo schandalig goedkoop waren. Ze werden door een fietsen winkel aangeboden en ik kreeg er zelfs een mooie marge factuur bij opgestuurd. Ik blij, en de fietsenmaker in kwestie denk ik ook.

Hij neemt deze dingen in als iemand bij hem komt om nieuwe accu's te plaatsen.

Uiteraard mag zo'n klant dan 6 Euro verwijderingsbijdrage betalen bovenop de andere willekeurige kosten die hij in rekening gaat brengen. Normaliter moet hij dat bedrag weer afstaan aan de plek waar hij die dingen heen brengt, denk ik. De gemeente? Een donker plekje ergens in de bosjes? Chemisch afval?

In plaats daarvan krijgt hij nu nog meer geld, om het naar mij op te sturen. Een win situatie voor de de fietsenmaker, een verlies-verlies-verlies situatie voor de persoon die hem bij hem heeft ingeleverd.

Na een paar dagen komt de TNT/PostNL met een berg langwerpige dozen aan zetten:
Doosch.

De eerste 30 seconden van dit filmpje beschrijven extreem exact hoe je je dan voelt.

Open maken!
Na wat gepiel en gepeuter, gaat ook deze banaan open. Het gaat hier om een 9Ah accu, t.o.v. 10Ah , maar het printje is identiek aan degene die in mijn fiets zat. Het enige verschil is dat deze minder kapot lijkt, en helemaal geen coating heeft.

Ooh!


Uiteraard doet ook dit ding 10 keer niks.

Stiekem heb ik een tijdje geleden, toen ik me verveelde, een beginnetje gemaakt om het schema van dit printje te tekenen. Het is maar een twee-laags pcb, er zit alleen een idioot oerwoud aan analoge meuk op met weerstanden die overal overheen, naartoe en tussendoor gaan.

Ik dacht, ik begin bij de 6-pins connector, want die lijkt verdacht veel op de standaard 6-pins Atmel ISP header. Dit is de staat waarin ik het "schema" achter heb gelaten:

Hoeft niet aan elkaar?

Als je een ongesorteerde doos elektronica onderdelen zou weergeven in schema vorm, zou het er ook ongeveer zou uit zien.

Het fijne aan grote SMD onderdelen als deze (de weerstanden zijn 2 bij 1.25mm) is dat je er nog gemakkelijk draadjes aan kunt solderen. Nog handiger is dat in plaats van een idiote kleur codering, de waarde er gewoon met getallen op geschreven staat. Dus dat werk wel makkelijk.

Alle kleine zwarte onderdelen kun je niet altijd iets zinnigs over zeggen, helemaal niet als het potentieel stuk is. Een drie pootje kan een spannings regelaar, diode, mosfet of transistor zijn, en de waarde mag je raden want die staat er niet op.

Het goede nieuws is dat de 6-pins connector direct naar de programmeer pinnen van de Atmega gaat (door een 1k serie weerstand), en de voeding door een 10 Ohm weerstand op de Vcc pin aankomt. De pin-layout is niet standaard, maar een klein verloopje zit zo in elkaar.

Omdat het printje zelf geen spanning maakt, geef ik hem extern een beetje prik. Rond de 4 Volt ofzo zou moeten werken om in ieder geval met de Atmel te babbelen.

Netste opstelling tot nu toe.

Het is in de programmeer omgeving 1 keer raak: Hij wordt herkend! Jeej!

Daar houd het feestje helaas ook op. Niet geheel tegen de verwachting in zijn de lock bits ingeschakeld, wat betekend dat de applicatie niet uit het geheugen gelezen kan worden.



De chip start op in zogenaamde bootloader mode. (De BOOTRST fuse zorgt daar voor.) De lock bits staan zo ingesteld dat hij nooit de bootloader mag overschrijven, maar wel de applicatie. Als er niks ge-update hoeft te worden, wat bij normaal gebruik het geval is als je de fiets aan zeg, start hij de applicatie... en gaat hij banaan-management doen.

Deze lock-bits zijn dingen die op de chip letterlijk weg branden. Op deze wijze kunnen vervelende mensen zoals ik niet eenvoudig de applicatie uitlezen, maar kan een Sparta dealer wel de firmware in de accu updaten om er meer dubieuze en ongedocumenteerde functies in te prakken.

Op zich had iemand op het circuits online forum dit ook al bevestigd, 4 jaar geleden. Als je de chip wist, kun je wel het EEPROM uitlezen, en die inhoud heeft hij ook online gekwakt. Ik schiet daar nog niet zo veel mee op, dus ik ga deze niet wissen en laat hem verder met rust.

Hallo?!
Alle onderdelen in deze fiets praten met elkaar over een enkel geel draad, een bus. Deze staat normaal 24V op, en kan door een van de onderdelen (de motor, het display of de accu) gebruikt worden om over te communiceren.

Er is verder echt extreem weinig nuttigs te vinden over de elektronica in deze fiets, de enige hint komt wederom van CO, en die is dat er standaard USART op 9600 8N1 over die draad heen gaat.

De Atmega die nog met 4V aan staat, geeft op de TX pin inderdaad signaal uit:
10 04 20 CC en af en toe 10 C1 21 22 80 5F.

In banaan-taal zal dat hoogstwaarschijnlijk het volgende betekenen:
"Hello moto?"
"Hello display?"
(Of in andere volgorde.)

Op de ontvang pin verschijnt niks. De 24V bus wiebelt ook niet mee. Omdat de bus maar 1 enkel draad is om over te babbelen, kan deze print niet verzenden en ontvangen tegelijk. Sterker nog, als hij iets zegt op de bus hoort hij dat zelfde bericht ook weer terug. Dat is erg handig ter controle. Als de bus namelijk kapot is, zoals nu, kun je iets zeggen:
"Echo!"

En als er dan niks terug komt... weet je dat er iets niet goed is.

De communicatie vanuit het oogpunt van de microcontroller zou er normaliter (vertaald vanuit het banaans) ongeveer zo uit kunnen zien:
"Display?"
"Display?"
...
"Ja, wat is er?"
"Niks."
"Niks."
...
"Okee."

"Motor?"
"Motor?"
...
"Ja wat moet je?"

Als je geen dubbel bericht, of geen enkel antwoord terug krijgt... is er duidelijk iets mis.

In het display
De kassa forum leden klagen dat elk wissewasje een bezoekje aan de dealer vereist, die alles aan elkaar moet aanmelden via het internet.
Dit zou in houden, dat stel ik heb een werkende fiets, ik pak een willekeurige accu van Marktplaats af en prik hem er in, dan zegt de fiets: "Dat is niet mij accu, vriend." En vertikt het verder.

Verder wordt de suggestie op het CO forum gewekt dat er een of ander obscuur en horrific protocol overheen loopt, wat voorzien is van 1000 lagen encryptie, server communicatie, backdoors en andere ellende die geen enkele vorm van zinnige analyse toe staan.

Ik kan het me haast niet voorstellen. Deze accu heeft al vrij veel functies, hij moet een hele berg aan metingen doen, allerlei klant specifieke dingen bij houden, zichzelf kunnen updaten, en alles door babbelen over een enkel draad.

Dat is best een complexe applicatie. Dit ding heeft maar maar 32kB aan ruimte. (De kans bestaat dat het maar 16 kB is, als je eenvoudiger een applicatie update wilt kunnen doen.)
Stel dat je daar dat ook nog encryptie overheen wilt doen, moet je sleutels gaan zitten uit wisselen met de rest van de onderdelen.... het kan, maar ik schat de kans klein in.

Het display, wat ik vorige keer nog niet open had gemaakt, heeft verrassend weinig onderdelen:


Voorkant Achterkant

Aan de ene zijde zit een bosje passieve onderdelen, en een condensator die iemand er later tussen gevrot heeft. Aan de andere kant zitten de contactjes naar het LCD, en twee COBs.

Bijna elk LCD display wat je open maakt, in welk apparaat dan ook, heeft zo'n blob er op zitten. In 95% van de gevallen gaat het dan om een ASIC waar geen standaard verpakking omheen zit. Het chipje zit dan direct aan het PCB verbonden. Het kan ook dat ze er epoxy overheen gedaan hebben, gewoon om het je lastig te maken.

Het zou kunnen dat er een microcontroller onder de blob zit, maar ik verwacht het eigenlijk niet. Gezien er knopjes op het display zitten, en je de hele fiets met het display bedient, moet dit ook data terug kunnen sturen.

Er zit verder een stikker op, met een nummer, en met de hand is op de andere zijde... het zelfde nummer geschreven. Als er dingen op elkaar aangemeld moeten worden, zou dat wel eens voorbij kunnen komen?

Er is meer!
Ik heb nog een hele doos met bananen staan, waar nog niks mee gedaan is.

Wellicht is het nu wel interessant om te noemen dat deze bananen ongeveer 185 kCal aan energie bevatten. (10*24*3600 / 4184). En dat is ongeveer 4x zoveel als een echte banaan. :+

Alles is uiteraard ook verkocht als defect, dus ik verwacht er niet veel van. Maar de tweede uit de doos is wel het eerste exemplaar waar ik spanning op de display pinnen meet: 5V en 24V.

... :Y) ...

Nou, displaytje erin prikken op hoop van zegen dan maar.

En wederom zit het mee: Het display gaat aan! (Ik dacht eigenlijk dat die ook stuk was.) Een relais in de accu zegt tik, en de display geeft een foutcode: E0005.

Als ergens veel documentatie over te vinden is in dit project, dan zijn het wel de foutcodes. De eerste online bron heeft dit over de foutcode te zeggen:

E05: Slechte verbinding naar de motor.

No shit.

Voor mij is dit veel belovend, want zo'n melding betekend data verkeer. En data verkeer, dient gesnoven te worden... met een snuiver...

Slimme Adapters

Door Infant op dinsdag 15 april 2014 13:28 - Reacties (26)
Categorie: Gemod / Gefix, Views: 4.000

Dit sluit een beetje aan op de vorige blogs: een oneindig lange hoeveelheid gepruts om de eigenaardigheden van HP laptops op het gebied van stroomvoorziening in kaart te brengen:
Domme Batterijen
Domme Batterijen - Accupologie
Domme Batterijen - Verkeer(de)informatie
Domme Batterijen - Spoof
Slimme Batterijen
Slimme Adapters

Door verder te lezen, accepteert u dat er wellicht her en der een aantal spellingsvoudten in kunnen zitten. Stuur maar een PM, dan soep ik ze er uit.

Once upon a time.

Een weekje geleden of zo, lag er een prachtige notebook adapter bij het afval, en dan wel precies degene die in mijn 2730p past. Hij zag er nog netjes uit, dus mee nemen die handel. Nieuw zijn die dingen toch weer 60 Euro of zo, dus het zou leuk zijn als deze stiekem gewoon nog werkte.

Helaas, te vroeg gejuicht. Als je hem in het stopcontact steekt, blijkt dat A: de stekker niet past:
Ja... dat past dus niet.
Maar dat is op zich nog wel op te lossen door een andere mickey-mouse stekker te pakken.

En vervolgens B: Hij maakt een tikkend geluid.

Mooi! Dat betekend stuk! En stuk, betekend dat het open mag. :Y)

Twee vleeswonden en ~15 minuten later, ligt het er als volgt bij:
Rubber rubber rubber...
De rede dat deze dingen 60 Euro kosten mag duidelijk zijn, als je hem bijv. naast mux' 4$ adapter legt:
Er zitten ongeveer 3 keer zoveel componenten op, alles zit netjes vast. En zelfs onder het rubbertje, staat dat er een rubbertje moet. Dat hebben condooms niet eens.

Maar toch is het stuk.

Wat ik nu eigenlijk wou uitvinden is hoe dit ding tegen mijn laptop verteld, dat het een 65W adapter is. Als ik namelijk een 65W adapter in een 8540W steek, plopt er een ballonnetje uit de taakbalk tevoorschijn die iets zegt in de trand van: "Deze adapter is sub-optimaal, overweeg er een moeilijk grote in te steken."

Dat overweeg ik dan altijd kort, en denk dan.... "Neuh, ik vind de kleine leuker." Het enige wat die grote adapter doet, is mijn accu's sneller opladen, en die zijn toch allemaal kapot. So what's the point.?

Mijn eerste gedachte, is dat het waarschijnlijk op dezelfde manier als bij Dell gaat: met een obscuur chipje.
Deze post bijvoorbeeld, is van iemand die zo'n ding uit elkaar gepeuterd heeft.
Kort samen gevat komt het er bij hem op neer, dat er in elke Dell adapter een ID-chipje zit die je notebook verteld of de adapter een 65W, 90W of 120W model is.
Als er niks verteld wordt, omdat het chipje bijv. stuk is, gaat de notebook ook niet aan.

Aan dit soort praktijken stoor ik mij echt enorm.
Mijn vorige notebook (een oude N410c) had een andere aansluiting dan deze nieuwe, terwijl die adapter hetzelfde vermogen had: 65 Watt bij 19.5V. En ik heb het in het vorige blog ook al genoemd: Die dingen kunnen werkelijk van alles lopen. 9V tm 20V, allemaal geen probleem. Waarom moet het stekkertje dan nu weer anders, en waarom moet er nu weer van alles extra overheen gebabbeld worden?

Maar het geeft allemaal niet.
Nu ik dit adapter karkas tot mijn beschikking heb, kan er aan gemeten worden.

Allereerst heb ik de drie draadjes log gemaakt, zodat ik een mooi lang snoer met een stekker aan 1 kant:
Zo ziet die er uit.
En drie losse draadjes aan de andere kant heb. Vervolgens 19V uit een labvoeding op de plus en min gezet....

KABAM!

Wat? Nu al kabam? Ik heb nog niks gedaan?

Het blijkt, dat de stroom door het draadje een kortere weg terug naar de voeding gevonden heeft: Hij is kort gesloten.

Na het eerste stukje weg gesnoeid te hebben:
Ergens tussen de linker en rechter kant is iets niet helemaal jofel.
doet in ieder geval het draad weer normaal.

Maar wacht! Als het draad stuk was... dan zou de adapter misschien nog wel eens kunnen werken?

En ja hoor, na alles weer op zijn plek terug te hebben gesoldeerd, is het getik weg, en gaat de notebook aan.

Weer een rede om een wat duurdere adapter te kopen: Als er kortsluiting in de draad zit, gaat hij netjes uit in plaats van dat er rook en vuur uit komt.

Dat is heel mooi! Want dan kan ik nu gaan kijken, wat er over dat 3e draadje heen loopt.

En dat is eigenlijk helemaal niet zo veel. Er staat een constante spanning spanning op het draad van het middelste pinnetje. Als je hem in de notebook prikt, zakt het wat naar beneden naar iets van 6 volt of zo, maar lijkt niet echt iets van communicatie overheen te lopen.

Hm... tijd om in het schema te duiken. Ja! Er is een schema van deze laptop! (Media fire link.) Of het ook overeenkomt weet ik niet, maar tot nu toe heeft het aardig geholpen.
Dit stukje ziet er interessant uit.

Het stukje hierboven komt uit het hoofdstuk genaamd ADP OCP, en het signaal waar het 3e pinnetje binnen komt heet limit_signal.

Dat signaal gaat als we dit schema mogen geloven naar twee opamps lm393 comperators toe: Waarvan de bovenste comperator het signaal genaamd ADP_ID op zijn uitgang heeft staan, en de tweede het signaal: ADP_EN.

ADP_EN: Dat zal wel adapter enable zijn. Die wil ik hebben.

Verder verdwijnt het signaal in een oerwoud aan comperators, opampt, mosfets diodes en ander grut. Maar dat lijkt zo op het eerste gezicht, allemaal niet zo interessant.

Maar wat dit alles betekend, is dat er niet echt iets digitaals aan te pas komt. Je zou gewoon de middelste pin ook aan de 19V moeten kunnen hangen, en dan zou de notebook de adapter in schakelen.

Zo gezegd, zo gedaan. En wat schetst de verbazing:
Het werkt! Het lampje op de notebook gaat aan!

Dat was te makkelijk, but I'll take it.

Nu kan ik wat aan de knopjes gaan draaien, en kijken bij welk voltage hij ophoud met werken.
Zo'n beetje rond de 11V valt hij uit.

Dus: Wederom de vraag: Waarom bieden we dure 12V reisadapters aan, als het ook gewoon allemaal direct in je notebook geprikt kan worden? Je hebt echt letterlijk niets anders dan een 12V sigaretten stekker, misschien een zekering en wat grut om overspanning af te vangen. That's it.

Maar wacht: Ik heb te vroeg gejuicht. In de 15 minuten dat ik in dat schema heb zitten snuffelen, is de notebook nog steeds niet opgestart. Het lijkt wel of hij vast gelopen is.

Hm... ?

Laat ik mijn zelf geknutselde stekker er eens uit trekken...
Jahoor, het Windows-laad-animatietje gaat verder en 2 seconden later is hij opgestart.

Dat is vreemd.

Stekker er weer in terug: Laad lampje gaat aan, ventilator gaat ietsje harder draaien. Stekker icoontje zegt dat er een adapter in zit, maar het duurt nu makkelijk een minuut om het start menu tevoorschijn te toveren. Het ding is niet vooruit te branden.

Stekker er uit, en hij loopt weer als een raket.

Hm... Laten we er eens wat programmas bij pakken.
Met de stekker er uit, en de notebook op accu, geeft taakbeheer tussen de 0 en 5% CPU gebruik, en CPU-z zegt dat alles geweldig gaat:
Jeez wat veel processen zeg. En nog steeds loopt het als een raket?
(800MHz is de snelheid van de processor als er niks te doen is, en hij op accu werkt. Als je 1 kern aan het werk zet, gaat hij naar 2100MHz, en bij twee gaan ze beide op 1800MHz lopen. In deze generatie processors heet dat Speedstep.)

Maar kijk nu wat er gebeurt als ik de stekker er weer in doe:
Ja.... dat is anders?
Wat? Hij loopt op 133 MHz! Een Pentium I is sneller dan 133 MHz!

De notebook heeft zichzelf terug geklokt tot stenen-tijdperk snelheden, en besteed nu 42% van zijn reken kracht aan het aan mij vertellen dat hij 42% van zijn reken kracht gebruikt.... aan het aan mij vertellen... (Volg je dat? Volgens mij gaat deze zin oneindig verder.)

Hij is dus voornamelijk bezig om het taakbeheer tabelletje te updaten.

But why?

Het blijkt, dat dat oerwoud aan componenten en grut, waar ik het net over had, nog een belangrijk signaaltje de notebook in schiet.

Een signaal genaamd OCP#, wat waarschijnlijk overcurrent protection betekend. (Dat is ook wel een beetje hoe dat hele hoofdstuk heette...)

Nu begint ineens de keuze voor een derde draad duidelijk te worden:
Door dit 3e signaal draad loopt nauwelijks stroom. Als er door de notebook om een of andere reden te veel stroom uit de adapter gehaald wordt over de 2 andere draden, zakt de spanning van die twee draden bij de connector wat omlaag. Er zit namelijk een aardig lang draad tussen de notebook en adapter, deze zorgt dan voor een spanningsval.

De spanning uit de 3e pin is nu hoger, als de spanning uit het positieve draad.

Wat de notebook dan automatisch doet, is zoveel mogelijk zijn best om zo min mogelijk energie te gebruiken: Dat betekent, geen accu opladen en alles als een idioot terug klokken.

Eigenlijk best handig dus.

Het enige wat nu nodig is, om de laptop fatsoenlijk van een willekeurige spanning te laten lopen, is een eenvoudige weerstands-deling waarvan het midden naar het middelste pinnetje gaat.

Ik heb het een beetje zitten meten.
De voeding spanning Vin staat links, en het bereik op de ID pin waarbij de notebook normaal werkt staat rechts:

12V bij 4.2V - 4.8V
15.4V bij 5.3V - 5.9V
17.5V bij 5.6V - 6.5V
19.5V bij 6.0V - 6.9V

Helaas gaat het laad circuit pas aan vanaf 17.5V, wat een logisch getal is, gezien hij ook 4 cell's accu's moet kunnen opladen (Ook al verkoopt HP die niet voor dit type.)

Als de IDpin spanning boven het bovengenoemde bereik gaat, wordt de notebook intens traag, en er onder koppelt hij de adapter los.

Wat dit alles betekend, is dat je deze notebook heel eenvoudig direct uit een 4-cells accu kan laten lopen. Het enige wat dus nodig is, is een weerstands deling.
Z'n grotere broertje, een 8450W is er nu ook van overtuigd dat mij labvoeding een adapter is. Beide zijn ze met bijvoorbeeld een 39k / 22k deling vrij content:

Alweer gefopt. Hij blijft maar denken dat ik er orginele HP onderdelen in steek.

Dit maakt het extreem eenvoudig om een extra accu voor je notebook te maken. Je hebt 4 lithium cellen, twee weerstanden en een kappotte adapter nodig(zodat je de stekker + draad daaruit kan kannibaliseren) Misschien wat tape...

Wat ik dus niet wist, maar wat dus nu een handig weetje is: Als je notebook tergend langzaam is, is waarschijnlijk je adapter gaar.

BootToeterę«

Door Infant op woensdag 05 maart 2014 17:18 - Reacties (19)
Categorie: -, Views: 2.807

Het volgende verhaal is een warrige aaneenschakeling van omstandigheden, met als resultaat 8 bytes aan code die je pc oneindig lang laat piepen... u bent wederom... gewaarschuwd.
Disclaimer: Ik kan niet spellen. Als er geen rood streepje onder staat, is het goed. Als er iets stuk gaat, of in de fik vliegt heb ik het niet gedaan.

Once upon a time...
... ondertussen al weer een heel tijdje geleden was de Rabobank op het lumineuze idee gekomen om mij een verdachte envelop op te sturen, met daarin een soort van usb sleutel achtig ... ding....

It smells funny...
Dit is exact hoe hij eruit zag.

Met daarop zoals u ziet de vraag: Is dit de sleutel tot je nieuwe woning?

...

Ehm... moet ik die vraag beantwoorden?
Ik zet in op: Nee.
(Tenzij mijn nieuwe huis USB heeft. Dat zou vet zijn, zolang het maar backwards compatible is met 1.0).

Stiekem hoopte ik natuurlijk dat het wederom een gratis flashdrive betreft. Ik heb al een hele stapel met USB sticks liggen, maar heb er nog nooit eentje gekocht. Ik krijg ze altijd overal bij, echt heel bizar.

Ik had hem bijna in de PC gestoken om uit te vinden hoe groot hij was, toen mijn alu-hoedje heftig begon te vibreren. (Mijn alu-hoedje spreekt met een zwaar Amsterdams accent.)

Alu-hoedje: Ja ho! Wacht eens even! Je gaat nu toch zeker niet zomaar een wilde USB stick in je PC zitten vrotten! Ben je gek ofzo? Wat als een of andere oost-europeaan er een vieze rootkit op heeft gezet? Of wat als het eigenlijk zo'n prank stick is, die elk kwartier lekker je CAPSLOCK aan zet. Of wat nou als het de hele tijd vieze(re) berichtjes op je facebook pagina plemt?

Ja, daar kon het alu-hoedje wel eens gelijk in hebben. Misschien is het wel helemaal niet van de Rabobank. Misschien is dit wel de nieuwe manier van phishing. Je weet het niet.

Qua phising is hardware natuurlijk de beste manier om op plekken waar geld overgemaakt wordt, eens lekker tussen jouw en de bank te gaan zitten.

De de facto methode om dan toch uit te vinden wat we nu in huis hebben (en of het inderdaad de sleutel tot mijn nieuwe huis betreft) is door een zo veilig mogelijke digitale omgeving op te zetten, waar werkelijk niks fout kan gaan, en alles mag.

U kunt dit thuis ook:

Pak een notebook. Het liefst een beetje recent, en trek alle vormen van rf-chips eruit die niet strikt noodzakelijk zijn voor de normale werking. Hierbij moet u denken aan:
- WiFi a/b/c/d/e/f/g/h
- WiMax chips
- Bluetooth V1/2/3/4 dan wel met of zonder LE/EDR of HS.
- Modems met draade
- Modems met HSDPA/GMS/UMTS/EDGE en andere rommel.

Zolang het meuk de ether in strooit, bent u niet veilig.
Zorg vervolgens voor een volle accu. (Agreggaat mag ook, maar dan wel op diesel.)

Sloop de harde schijf en/of elke andere vorm van opslag er uit. Ook brakke optische WORM-media mogen er eigenlijk niet in.
Neem vervolgens met deze notebook plaats in een stalen container zover mogelijk van uw huis vandaan. (Al verkrijgbaar vanaf 89 Euro.) of onder water. (Water werkt bijna evengoed als lood tegen straling.)

Alles wat nu nog resteert is een USB-live-key met een van de volgende linux-distributies er op (u mag zelf kiezen welke, ik heb Mint gekozen.)
And we are good to go!

Dus... ik steek de rabo-stick in mijn kaal geplukte notebook, en wacht tot elk teken van activiteit ontbreekt. Helaas, er gebeurt niks.

Het commando usb-device vertelt mij dat het helaas geen mass storage device is, maar een usbhid. :( En dat betekend dat er naar alle waarschijnlijkheid geen data opgezet kan worden.

Dus...

Nou, verhaal afgelopen. WTF Rabobank? Why! Why?!
In ieder geval doet internet bankieren het nog.

Toch maar eens wat verder kijken, het was toch een regenachtig weekend.

Het manufacturer veld van de rabo-stick gaf aan dat het door WebKey gemaakt is.
Je kunt het zo gek niet verzinnen, of je kunt het krijgen. USB sticks met PMS kleur bijvoorbeeld: rood zal dat wel zijn denk ik.

Nader onderzoek leert dat PMS nog meer betekenissen heeft...

Zijn wij nu verder nog iets wijzer geworden? Nee.
En toch wou ik dit weekend graag iets nieuws gaan leren. Deze usb-rommel bracht mij op een idee:
De boot-toeter. (Spreek uit als: boet toeter)

Ik wou een key maken waar je je computer of notebook van op kan starten. En het enige wat er dan gebeurt, is dat je pc gaat piepen. Verder niks. Dit zou al meer functionaliteit bieden als de rabo-key (die doet namelijk niks.) en het is vast heel leerzaam.

Het geluidje wat ik bedoel, is het geluid wat de pc speaker maakt.
Als je een laptop of pc aan zet, en zoveeel mogelijk toetsen tegelijk ingedrukt houd, kun je het waarschijnlijk horen. Er zijn meerdere manieren om dit geluidje uit uw apparaat te dwingen. Onder windows kun je een command promp starten, CTRL+G en dan Enter in drukken, dat wil wel eens werken.


Anyway, de vraag die nu opkomt is: Hoe maak je iets opstartbaar?

Een gemiddelde PC gebruiker met gemiddelde kennis van hoe het internet en google werkt, denkt nu:

"Ah, ik heb een vraag. Ik vertaal hem naar het Engles, en plemp hem in google. Vervolgens klik ik op elk ding wat ik tegenkom net zolang tot ik het antwoord vind."

Prima. De eerste link was bij mij Utility to make flash drives bootable - O'Reilly Media

Het eerste antwoord op deze site levert een link naar mijn favoriete fabrikant op, namelijk HP.
De link die ze noemen, is deze.

Zoals bijna elke link op elk forum wat meer dan 10 jaar oud is, gaat de link nergens heen. En belanden we netjes op de support pagina van HP. (Waarschuwing! Sluit onmiddellijk het tabblad/venster met de HP support pagina! De HP support pagina is een doolhof van kapotte links en niks zeggende informatie. Voor je het weer ben je een uur verder, en voel je grijze massa je neus uit druipen.)

Ik stop hier eigenlijk ook gewoon.Ik wil helemaal niks downloaden. Ze zijn toch niet g.v.d. met een Nokia bezig?

Ik wil gewoon dingen in kunnen tikken op mijn toetsenbord, en dat dat dan gebeurt. Op mijn rekenmachine kan ik ook gewoon 1+1 in drukken, en dan doet hij dat. Waarom kan dat op een PC niet?
Het antwoord hierop weet ik niet.
Ergens tussen 1970 en 2014 is het doel van een PC zoek geraakt. Als je nu een PC koopt voor 2000 Euro, krijg je na het aanzetten een zwart scherm met een knipperend streepje en geen mogelijkheid om er iets mee te doen.

Maf he?

Het enige "programma" wat er op een lege PC zonder besturings systeem draait, is in 99% van de gevallen het BIOS.
Als je je notebook of pc aan zet, gaat het BIOS meestal allerlei testjes zitten doen, om vervolgens het eerste apparaat waarvan hij op kan starten te benaderen.
Van dit apparaat leest hij vervolgens de eerste 512 bytes aan gegevens in, en plemt deze in het geheugen.
Deze 512 bytes komen uit de zogenaamde boot secor van een opslag apparaat.

Nadat deze 512 bytes volledig automatisch in het geheugen zijn ingeladen, gaat de CPU van je computer de eerste byte bekijken en proberen uit te voeren.

Dat klinkt eenvoudig toch?

We hoeven dus alleen maar een manier te hebben om iets in die 512 bytes te zetten, en we're done. Hier moeten instucties komen te staan (opcodes), die uw pc kan uitvoeren met als ultiem eind doel, een irritant piepje te maken.

Normale(re) mensen zouden nu een stukje assembly schrijven, wat vervolgens door een assembler vertaald wordt naar byte code.
Maar dat is veel te high-level voor onze toepassing. Assembers doet denken aan compilers, en compilers zijn vandaag evil. Plus, die zouden we moeten downloaden, en dat willen we niet.

Je kunt de opcodes ook gewoon met de hand in typen. We hoeven alleen maar een tabelletje te hebben zodat we een grof idee hebben welke instructie wat doet. (Ik vond deze persoonlijk wel duidelijk.) en we moeten een manier hebben om bytes in de eerste sector van een usbstick te zetten. (Kan ook met bovengenoemde hex editor.)

Het maken van... een irritant piepje.

De benodigdheden om een stuk code te schrijven op een PC, is een PC met daarop een reeds draaiend stuk code. Dit is een beetje een kip-ei probleem. Om mijn voorgenoemde apparaat met een knipperende streepje enig leven in te blazen, heb je dus eerst een werkende PC nodig.

Je moet hier gewoon niet te lang over na willen denken, dus we gaan snel verder.

Onder Linux is dingen tikken en op usb-sticks zetten allemaal vrij eenvoudig. Je kunt bij bijna elke distributie out of the box in C gaan zitten programmeren, of nog beter: commando's in de shell in tikken:

Je kunt met bijv. het commando:

code:
1
echo -en "\x12" >file

De hexadecimale waarde waarde van 12 (wat 18 is in een decimaal stelsel) in het bestand genaamd 'file' weg schrijven.

Met hexdump of xxd kun je het vervolgens weer terug lezen.

code:
1
2
hexdump file
xxd file

En met dd kun je het bestand naar een willekeurig apparaat weg schrijven. De usbstick in mijn geval is sdb. Het commando wordt dan:

code:
1
dd if=file of=/dev/sdb bs=1 count=512

Makkelijk he?

Dit is natuurlijk wel een gruwelijk onoverzichtelijke trage manier om een programma te schrijven. Stel je voor dat je op deze manier flappy-fucking-bird in elkaar moet zetten. Jeez.

Onder Windows is het een heel ander verhaal, en kun je eigenlijk out of the box....
...helemaal niks.

Het eerste wat je in Windows altijd moet doen, is zo snel mogelijk een nieuwe browser downloaden die niet Internet Explorer heet.

Omdat ik nog niet echt een programma heb gevonden wat bij Windows 7 mee geleverd word om bits heen en weer te wiebelen, raad ik in dit geval voor het algehele gemak een hex-editor aan. Deze bijvoorbeeld.

Er is een character in de ASCII-tabel, wat dus ook gelijk mijn favoriete nummer is: 0x07, het zogenaamde beep character.
Als je dit karakter op een of andere manier uit je toetsenbord weet te persen, piept de computer.

Het voldoet bij ons om dit karakter oneindig vaak naar het scherm te printen. Dit kan door middel van een BIOS interrupt call, en de wiki heeft hier zelfs een extreem bruikbaar voorbeeld wat maar een klein beetje verbouwd hoeft te worden:
Invoking an interrupt can be done using the INT x86 assembly language instruction. For example, to print a character to the screen using BIOS interrupt 0x10, the following x86 assembly language instructions would be executed:

code:
1
2
3
mov ah, 0x0e
mov al, '!'
int 0x10
Je kunt dit als volgt lezen: de mov instructie (kort voor move) gevolgd door 0x0E zet de waarde 0x0E in het AH register.
Vervolgens zet hij het character ! in het AL register met een soortgelijke instructie, en vervolgens wordt de instructie int met als argument 0x10 uitgevoerd.

Gewapend met de gekleurde tabel van een paar alinea's terug, en eventueel deze pagina, kunnen we kijken waar dit naar vertaalt.
Er bestaat werkelijk een hele rits aan MOV instructies, allemaal met een aparte opcode. Degene die naar register AH schrijft, heeft als code 0xB4, en moet dus als argument 0x0E hebben.

Vervolgens willen wij graag de waarde 0x07 in het AL register plaatsen. De opcode die een mov naar het AL regiser doet heeft als opcode 0xB0.

Vervolgens moeten we de INT instructie aanroepen (0xCD) met het interrupt die we willen uitvoeren. (0x10).

Het enige wat we nu nog willen, is dat de code telkens bij het begin begint. Als we verder geen code schrijven gaat de CPU namelijk dood vrolijk verder met de volgende byte uitvoeren. Deze zal hoogst waarschijnlijk de waarde 0x00 hebben, wat geen geldige instructie is.

In plaats daarvan moeten we een JUMP doen. Een JMP instructie met opcode 0xEB verwacht als argument het aantal regels dat hij terug of verder moet. In dit geval kan hij alle voorgaande instructies overbruggen, zodat gewoon de eerste instructie weer uitgevoerd wordt en het hele feestje opnieuw begint.

Tot nu toe ziet het zaakje er als volgt uit:

code:
1
B4 0E B0 07 CD 10 EB

Dat zijn 7 bytes. De jump moet dus 7 bytes terug.

Om eenvoudig achter de hex-waarde van -7 te komen stelt de windows calculator een beetje teleur. Als omweg kunt u in windows calc in de programmer mode gaan zitten (Alt+3) en 255 - 7 in toetsen in dec mode. Verervolgens dient u op het hex bolletje duwen. Het antwoord is 0xF8. Dat is -7 in 2's complement notatie.

Dat hoeft er dus alleen nog maar achter. Verder is het belangrijk dat onze bootsector op de laatste twee plekken 0x55 0xAA heeft staan:
The BIOS merely passes control to whatever exists there, as long as the sector meets the very simple qualification of having the boot record signature of 0x55, 0xAA in its last two bytes.
Okee, whatever.

Het eind resultaat is dan:

code:
1
B4 0E B0 07 CD 10 EB F8

Dit hoeft dus alleen maar op een USB-stick geknalt te worden. In het HxD venstertje ziet dat er zo uit:


Venstertje met wat meuk.


En het resultaat klinkt ongeveer exact zo: Youtube link.

Dit is denk ik het meest korte programma wat ik ooit gemaakt heb, wat ook nog iets doet. Het is net iets langer als een telefoon nummer, maar geen probleem om uit je hoofd te leren.

Voor het gemak heb ik de sector hier in een zipje staan, zodat u hem met bijv. deze net iets gebruikersvriendelijkere tool ook eens op een USB stick kan kwakken. Ik heb er als redelijk wat collega's mee ge´rriteerd.

Ohja, bedankt Rabobank. Echt waar. Bedankt.

Slimme Batterijen

Door Infant op zaterdag 25 mei 2013 12:25 - Reacties (18)
Categorie: Gemod / Gefix, Views: 4.390

Volgorde:
Domme Batterijen
Domme Batterijen - Accupologie
Domme Batterijen - Verkeer(de)informatie
Domme Batterijen - Spoof
Slimme Batterijen

In de vorige posts heb ik een poging gedaan uit te leggen wat allemaal gebeurt in de accu van een notebook. Het enige wat jouw als gebruiker in de weg staat om gewoon een setje AA batterijen in je laptop te steken is een klein stukje (ongedocumenteerde) hardware en software.

Als je dit zou hebben, heb je in principe alle vrijheid om je notebook naar hartenlust op elke willekeurige accu of stroombron aan te sluiten, zolang het voldoende vermogen kan leveren.

Mijn doel was nu als eerst om gewoon de interne accu na te bouwen.

Het moment dat ik begon, stopte mijn Chinese namaak accu spontaan met werken. Hij zag de bui al hangen. Des te meer reden om aan het werk te gaan.

Eigenlijk elke notebook accu bestaat uit de volgende onderdelen:

- Een willekeurig aantal cellen.
- Een stuk plastic.
- Een connector.
- Een stuk elektronica.

Cellen
De cellen in mijn notebook zijn een standaard maat, die vooral in kleinere notebooks wel eens gebruikt wordt. Maar, als notebook fabrikant kun je zelf bedenken wat je in je notebook propt, en welke standaarden je gaat negeren.

Interessant genoeg gebruiken ze allemaal TI chipjes. Allemaal. Kennelijk gaat daar nog wel eens wat fout mee. Van het hele scala aan problemen wat ik heb waargenomen, is de interessantste waar het chipje zegt:

"Ik heb geen zin meer."

Voor de onwetende en spaarzame gebruiker betekent dit:
- Nieuwe accu kopen bij een Chinees voor zo min mogelijk.
Voor een bedrijf betekent dit:
- Nieuwe accu kopen... bij een bedrijf, het liefst in het land waar we nu zitten.
Voor de monteur van HP betekent dit:
- "Voor 150 Euro heeft u een nieuwe."

Voor mij betekent dit: Gratis accu's.

Zo heb ik bijvoorbeeld:
Van alles en nogwat.Uit een dell D430.
Van links naar rechts: 73Wh cellen uit een Macbook Pro, 44Wh uit een Dell D630 DVD-bay, 55Wh Hoofdaccu uit een HP 6550b. En, dezelfde cellen als mijne: Een accu uit een Dell D430.

Al dit spul lag bij het elektronisch afval (Niet het klein chemisch afval.... waar het hoort.) en is eigenlijk nog prima in orde, als je de elektronica weg sloopt.

Wat ik nu nodig heb, is een behuizing.

Behuizing
Sinds ik nog 0 ervaring had met dingen 3D printen, leek dit me een nuttig experiment.

Om te beginnen heb ik het hele zaakje in Solidworks gezet, zodat de behuizing los besteld kan worden bij Shapeways.

Zij kunnen vrij nauwkeurig en ook redelijk goedkoop de meest gekke vormen voor je maken.
Aangezien je per hoeveelheid gebruikt materiaal betaalt, heb ik de wanden vrij dun gehouden. 1mm in dit geval. En terwijl ik toch bezig was, heb ik de kleine plastic inkepingen die de accu op zijn plek houden er ook maar in getekend, gewoon.. omdat het kan.


Solidworks render van een 2730p Tablet accu.
Plastic houder met cellen, connector en printje.


Eigenlijk was het lastigste om uit te vinden welke connector HP gebruikt voor zijn accu's. De notebooks uit deze serie gebruiken allemaal dezelfde aansluiting, maar nergens stond een partnummertje waar ik iets aan had.
Bij toeval kwam ik deze tegen. De zwarte connector is een TE Connectivity stekker, nummer 5787253-1. En die zijn zo aardig om naast een datasheet, een 3D model ter download aan te bieden. Is dat niet geweldig?

Helaas voor mij, zijn die vrij prijzig als je er maar 1 of 2 wilt, een eurotje of vier per stuk, dus mijn exemplaren worden uit defecte accu's gesloopt.

Verder heb ik de case getekend aan de hand van meten met een schuifmaat.

Terwijl dat zaakje naar de fabriek in Eindhoven gaat, was het tijd om het printje zo miniem mogelijk te krijgen.

Electronica
De elektronica had ik al werkend, alleen nog niet op een formaat dat het in deze accu ging passen.

De accu is maar iets van 12 mm dik, en er is weinig lucht aanwezig voor mij om iets in te proppen.

Het printplaat ontwerp was 50 x 50mm en had een hele andere functie, en is nu gereduceerd tot 10 x 50mm:

Gewoon heet wassen...
Van links dus, naar rechts.

Wat heeft het nu nog nodig?

Code, met een paar (hierbij gedocumenteerde) fratsen.

Het is super interessant wat zo'n accu allemaal doet. Ik ken zo ondertussen het 60+ pagina's tellende datasheet uit mijn hoofd. En er zijn nog veel meer varianten, die allemaal ongeveer hetzelfde werken.

Ik ga proberen uit te leggen, wat het probleem van een originele accu is, en hoe ik dat op los:

Stel, de HP accu is de tel kwijt. Hij weet niet meer hoeveel energie er in zit, en roept maar wat. Hij is bijvoorbeeld van mening, dat er nog maar 2000 mAh in kan, terwijl er in werkelijkheid nog 3700 mAh in kan.

Mijn accu kan dit ook, want ik schrijf de code.
Ik zet in de code dat hij moet aangeven dat er 2000 mAh in kan. Ik weet zelf ook niet wat deze cellen kunnen, dus ik moet wel een gokje doen.

Vervolgens laat ik m'n notebook bitcoins minen... (wat energie gebruikt) en op een gegeven moment ben ik 2000 mAh verder.

In het geval van de HP accu, zou deze tegen mijn notebook, en dus Windows, zeggen:

"Jow gast, ik ben leeg."

Windows en elk ander OS, gaat in al zijn wijsheid netjes uit, of in slaapstand.
Dit kun je omzeilen. In Windows 7 moet je daarvoor een klein beetje rommelen. Prima.

Maar stel dat je deze half lege accu in je notebook stopt, terwijl hij uit staat.... wie maakt er nu uit of de notebook aan gaat?

Niet het OS, want die draait niet.

Het IC in het moederbord, wat met de accu praat, krijgt van de accu te horen dat hij leeg is.
En van een lege accu, kun je niet opstarten... dus, de notebook mag niet aan.

Voila. Dit is het probleem.

Wat deze nep accu nu doet, is gewoon nooit zeggen dat hij leeg is.
Als hij denkt dat hij leeg is, zegt hij tegen de notebook dat er nog een klein beetje prik in zit. In plaats van 100-0%, gaat deze van 100-10%.

Ik kan nu nog steeds zonder hacks Windows netjes laten afsluiten, door te zeggen: "Als de accu minder dan 11% is, afsluiten." Maar ik kan nu ook altijd de notebook aan zetten, zelfs als mijn accu in de war is. Want de accu zegt dat er nog 10% in zit. Meer dan voldoende om van op te starten.

Ik kan er ook voor kiezen om gewoon tot het bittere einde door te gaan, en dat betekent in dit geval dat ik nog 1700 mAh eruit kan zuigen... voordat de cellen echt leeg zijn.

En dan valt de notebook zonder enige waarschuwing uit.

Voor de code in mijn accu is dit de cue om het tellertje op 0 te zetten. Voor de originele HP accu, betekent dit een van de volgende dingen (meerdere opties mogelijk):

- Niks.
- Een kleine correctie in de capaciteit.
- Total mayhem.

Meanwhile...
Door de magie van editing, is het weken later ... en is de shit gearriveerd:

Lege behuizing.Groot, kleiner, kleinst.
Links: het bakje. Rechts: het kleine printje onderin.

Het printje geloofde ik wel, daar heb ik er ondertussen al genoeg van ontvangen zonder problemen. De behuizing was nieuw voor mij. Het verbaasde me dat zelf alle hoekjes en uitstulpingen die de accu op zijn plek moeten houden, allemaal aanwezig waren... en na een klein beetje tweaken met de soldeerbout... ook passen!

Na het op solderen van alle onderdelen, ziet het printje er zo uit:

Er zit ook nog wat grut aan de achterkant.
Om een gevoel te geven voor de afmeting, ligt er een AA batterij naast.


Nu was het de cellen netjes los peuteren uit in dit geval een Toshiba accu (Ja... geen enkel merk blijft gespaard.), en in de case leggen. (Niet proppen, ruimte zat!)

Ze voelen al werk aankomen...


De hele bende aan elkaar knopen, kleine beetje tape toe voegen...

Tadaa!


En na wat testen, kan hij waar hij hoort:

In zijn holletje.


Om hem dicht te maken, kan er een stukje plastic op geplakt worden, dat stelt niet zo veel voor. De accu is nu ook weer te verwijderen, net als de originele.
Ik kan hem met een andere lader opladen, en de cellen balanceren mochten ze uit balans raken.

En nu?
Nu is het wellicht interessant om een kosten plaatje te zien, voor dit exemplaar. (in oplages van 1 dus):

- Printjes: 15 Euro voor 10 stuks, inc. Verzending.
- Elektronica: 13 Euro. (ex connector).
- Case: 35 Euro inc. Verzending.
- Cellen: 0 Euro, maar als je ze zou moeten kopen, c.a. 5 Euro per stuk = 30 Euro-ish.
- Gruwelijk veel tijd (ook inc. Verzending).

Het voordeel komt natuurlijk als deze cellen versleten zijn... want dan hoef ik er alleen nieuwe in te doen (die dan ongetwijfeld ook nog bij het afval liggen) en verder helemaal niks. Dat is dus 0 Euro tot in het einde der tijd.
Het nieuwe model van deze notebook, is de 2760p. En die gebruikt precies dezelfde accu.

Ik ben nu een ding aan het bouwen, die onder de notebook kan en hem onder een hoek plaatst. Dat typt fijner, en zorgt voor iets betere koeling.
Wat hier in komt, zijn houdertjes voor 18650 cellen.

Die kun je er dan gewoon in klikken zoals je AA batterijen in ELK ANDER APPARAAT IN HET UNIVERSUM zou klikken. Als die leeg zijn, switch de notebook automatisch naar de interne accu In de tussentijd kun je nieuwe 18650's erin prikken... (of niet) en dan switcht hij daar weer naar terug, en verteld hij het OS een educated guess van de capaciteit, met de 10% als ondergrens.. zodat de notebook pas de interne accu aanbreekt als het echt nodig is.

Ik snap werkelijk niet, anders dan dat alle fabrikanten geldwolven zijn, waarom niemand dit ooit heeft gemaakt... ik wil gewoon losse cellen in mijn notebook kunnen proppen, terwijl hij aan staat. Ben ik de enige die daar last van heeft?