Monorailcat

Alimentation HP ESP135

icon 22/07/2016 - Comments are closed

Description
J'ai récupéré une alimentation HP ESP-135 qui vient d'un HP Proliant DL-380 G4 et fabriquée par Lite-On (modèle PS-3601-1C).
Ces alimentations peuvent se monter par paire et sont "hot swap". Par contre, je n'ai pas récupéré la carte d'interconnection entre les alimentations et la carte mère et qui permet de contrôler l'alimentation. Du coup il faudra faire un peu de reverse-engineering pour la faire fonctionner.

D'après l'étiquette, l'alimentation a un rail +5V (standby) sortant 7A, et un rail +12V capable de sortir 47A (600W).

Mesure
Le soucis, c'est que la connectique n'est pas documentée et ne respecte aucun standard, on peut trouver les lames de gauche qui sont reliées à la masse, et celle de droite au +12V (reliées par des busbars à l'intérieur).

Alimentation branchée, mais arrêtée :
  1. +5V
  2. +5V
  3. +5V
  4. 3~5V
  5. 0V
  6. 4.6V
  7. 0.2V
  8. 0V
  9. 0,2V
  10. 4.6V
  11. 1.5V
  12. 0V

Les pins en rouge sont des rails d'alimentation et ceux en bleu sont des signaux logique ou de feedback (forte impédance)

En identifiant un peu et en regardant le marquage sur le PCB, on peut trouver quelques signaux :

Identification :
  1. +5V SB
  2. +5V SB
  3. +5V SB
  4. FAN_V (out)
  5. -12V
  6. PS_ON_1?
  7. 12V FB?
  8. GND
  9. GND_FB?
  10. PS_ON_2?
  11. ?
  12. 5V_FB?
Uniquement les signaux en vert sont écrits explicitement sur le circuit imprimé. Les autres ont été "devinés" en mesurant et en testant.

Si on relie les deux signaux PS_ON à la masse (pins 6, 8 et 10), l'alimentation démarre.

Alimentation démarrée :
  1. +5V
  2. +5V
  3. +5V
  4. 3~12V
  5. -12V
  6. 0V_
  7. 12V
  8. 0V
  9. 0.2V
  10. 0V_
  11. 1.5V
  12. 4.5V

Câblage
Comme avoir des câbles qui pendent autour du connecteur n'est pas très pratique, j'ai voulu avoir un interrupteur en façade de l'alimentation.
switch wiring

Le PCB de connectique est relié à la carte principale de l'alimentation par des busbars et quelques câbles. Le connecteur CN8 est relié à un autre PCB de contrôle de l'alimentation.
Les signaux qui nous intéressent, PS_ON_1 et PS_ON_2, sont respectivement sur les pins 3 et 6 du connecteur CN8. On peut trouver un point de masse sur le connecteur de la LED D910.
ground signal

Pour éviter que l'alimentation ne fonctionne dans un serveur, on va enlever les fils 3 et 6 du connecteur CN8 et les câbler directement sur l'interrupteur.
J'ai utilisé un interrupteur bipolaire pour limiter la casse (je ne sais pas comment la carte-mère commande l'alimentation), mais on peut voir d'autres montages où les deux signaux PS_ON_1 et PS_ON_2 sont reliés en permanence.
modified PSU


Notes
La vis située à côté des busbars est l'unique point qui relie la masse du secondaire au le châssis de l'alimentation. Il faut noter que les transistors Q300 et Q302 (PFC?) chauffent avec l'alimentation à vide, lorsque la masse est isolée. Dans le cas où on voudrait mettre plusieurs alimentations en série (ce qui n'est pas une bonne idée), c'est ce point-là qu'il faut isoler.
Secondary ground point

Références
Convert HP server PSU for RC use - TjinTech

icon Tags de l'article : , ,

Réparation de disques durs

icon 07/07/2016 - Comments are closed

Il y a quelques semaines, un de mes disques durs s'est arrêté de fonctionner. Ça a été l'occasion de tenter de le réparer, et de voir s'il était possible de réparer d'autres disques en stock.

Hitachi Deskstar 7K3000
J'ai acheté deux disques identiques, de modèle HDS723020BLA642 (2To, 7200rpm, SATA 6Gbit/s) en août 2011.
Jusqu'en juin 2013, les deux disques fonctionnaient 24h/24 dans mes deux serveurs, dont les données étaient synchronisées quotidiennement.
Après 2013, un des deux disque n'a servi que pour des sauvegardes plus ou moins régulières.
En juin 2016, j'ai démarré le disque pour une sauvegarde, mais il n'a jamais fonctionné, même après plusieurs tests.

Curieusement, c'est le disque qui a le moins servi (< 200 start-stop, < 20 000 heures, température < 40°C) qui ne fonctionne plus.

Identification
Comme il n'y a pas de rotation du moteur ni de mouvement des têtes (d'habitude audibles), et que le disque n'est pas détecté par le PC, je suppose que le problème vient de l'électronique et pas de la mécanique ou du stockage.
Il y a quelques marquages sur le PCB (référence : 110 0A90302 01), mais aucune documentation, datasheet ou schéma n'est accessible, il y a quelques forums qui montrent des points de tests, mais ce n'est pas forcément facile à tester (le PCB est face contre le disque) ni fiable (certaines infos se contredisent).

Hitachi Deskstar 7K3000 0A90302 PCB
Un cas typique à l'air de venir de fusibles sur les rails 5V et 12V à proximité de diodes transil (TVS), mais tout est en bon état de ce côté là, et le disque consomme un peu sur le rail 5V. En testant le non-court-circuit des capacités, transistors/MOS et diodes, et la continuité de toutes les inductances, résistances de puissance, diodes et fusibles, je suis arrivé à un composant ressemblant beaucoup à un fusible (ou une capacité en mica, peu probable ici) ouvert.
Hitachi 7K3000 fuse replacement

Réparation
Après l'avoir remplacé par un fusible 2A temporisé (il n'y avait aucun marquage clair d'origine, mais ça devrait se couper en cas de court-circuit franc), il n'y a toujours aucun fonctionnement, et le fusible est encore conducteur.
FAIL!
Si quelqu'un a un disque Hitachi Deskstar 7K3000 Hors-service avec le même PCB 110 0A90302 01, vous pouvez me contacter, je serais curieux de faire quelques tests.
If anyone has a non-working Hitachi Deskstar 7K3000 with a 110 0A90302 01 PCB, feel free to contact me, I would be interested to perform a few more tests.


Update (07.2016) :
Le fusible n'en est pas un. Il s'agit d'un accéléromètre piezo (d'où une capacité de quelques centaine de pF et pas de résistance parallèle quand je l'ai mesuré) et sert à détecter les chocs (probablement pour la garantie). Son remplacement par un fusible n'a rien dû changer...



IBM (HP) Ultrastar 36LZX
J'avais récupéré un array RAID de disques DDYS-T18350 (18.4Gio, 10krpm, SCSI Ultra 3) dans un serveur HP, et l'un d'eux ne fonctionnait pas. Je l'avais remplacé sans me poser de questions il y a plusieurs mois, mais je l'avais mis de côté pour une autopsie.

Identification
Le disque avait un comportement curieux, avec des temps d'accès très lents, quelques redémarrages, et la carte RAID qui affichait un problème pour ce disque.
J'ai supposé un problème mécanique, mais j'ai commencé par démonter le disque de son rack, et j'ai trouvé une capacité 0402 au fond du rack...

Réparation
Avec une soudure un peu grosse, mais faite avec du matériel accessible (panne de fer de 1.2mm, pas de flux, étain au plomb, pince à épiler), il y a quand même de quoi replacer proprement quelques composants en boitier 0402.
IBM Ultrastar capacitor replacement

Résultat
Le disque est détecté par la carte SCSI, mais renvoie l'erreur "Disk not ready", et le système d'exploitation renvoie un timeout pendant la detection des disques. L'absence de capacité a peut-être causé d'autres dégâts, ou alors c'est une coïncidence (probablement un choc durant le transport).
IBM Ultrastar still fails
FAIL!

Références

icon Tags de l'article : , ,

Préampli : Affichage et contrôle (bas-niveau)

icon 14/05/2016 - Comments are closed

J'avais récupéré un KVM qui avait quelques défauts (image bruitée sur certains canaux, clavier non-fonctionnel avec certains PC) et ne m'était pas utile. De ce fait, je n'ai gardé que le boîtier en acier et la face avant pour l'utiliser dans un projet de préampli.

reverse engineered KVM switch

Face avant
Il y a un PCB avec 2 latches 74HC273 et un latch 74HC374, 9 boutons poussoirs, 16 LEDs et un buzzer. Chaque groupe de boutons et de LEDs est relié à un latch, relié à un bus 8 bits.
Le second bus sert au contrôle des latches, du buzzer et du switch de droite.

Pinouts
Control_bus :
  • BUZ: 0
  • SWI: 1 (input)
  •  !CLR: 2 (active low)
  • CLKG: 3 (green)
  • CLKR: 4 (red)
  •  !OE: 5 (active low)
  • CLKS: 6 (switches)
  • NC: 7
  • Vdd: 8 (+5V)
  • Vdd: 9 (+5V)
  • Vdd: 10 (+5V)

Data_bus :
  • DATA: [0..7] (TTL in/out)
  • Vss: 8 (GND)
  • Vss: 9 (GND)
  • Vss: 10 (GND)

Interface bas-niveau
Pour commencer, j'ai utilisé un Arduino Mega en reliant le bus de données sur le port F ([A0..A7]), et le bus de contrôle au port K ([A8..A15]).

La fonction ledOut() permet d'allumer les LEDs vertes et rouges en fonction des variables ledG et ledR (uint8_t).
void ledOut(void) {
  //set bus out
  DDRF = 0xFF;
  // clear latches
  PORTK &= ~_CLR;
  ndelay();
  PORTK |= _CLR;
  // reset bus
  PORTF = 0x00;
  //write bit
  PORTF |= ledG;
  ndelay();
  //write CLK up
  PORTK |= CLKG; //1st row
  ndelay();
  //write CLK down
  PORTK &= ~CLKG;
  //reset bus
  PORTF &= ~ledG;

  //write bus
  PORTF |= ledR;
  ndelay();
  //write CLK up
  PORTK |= CLKR; //2nd row
  ndelay();
  //write CLK down
  PORTK &= ~CLKR;
  //reset bus
  PORTF &= ~ledR;
}
La fonction swIn() écrit l'état des interrupteurs dans les variables swstatus et oldswstatus.
void swIn(void) {
  // save old value
  oldswstatus = swstatus;
  //set bus in
  DDRF = 0x00;
  //write CLK (up)
  PORTK |= CLKS;
  ndelay();
  PORTK &= ~CLKS;
  ndelay();
  //write !OE
  PORTK &= ~_OE;
  ndelay();
  ndelay();
  ndelay();
  //read bus
  swstatus = ~PINF;
  //write OE
  PORTK |= _OE;
  //set bus out
  //DDRF = 0xFF;
  //Serial.print(swstatus);
}
Ici, la macro ndelay() est équivalente à un NOP, soit 1 cycle à 16MHz (62.5ns). Le latch 74HC374 est donné pour supporter un temps de transition de 45ns, en pratique, la transition entre !OE et les sorties donne quelques glitches lorsqu'on attend que 125ns, et le fonctionnement est correct avec une pause de 187.5ns (3 NOPs à la suite).

Références

icon Tags de l'article : , , ,

Écran LCD HP L1706 : Réparation

icon 27/03/2016 - Comments are closed

Écran
En général, il est assez facile de récupérer des écrans bas de gamme agés de 5 à 10 ans. Pour la majorité, le rétro-éclairage de l'écran clignote, puis finit par s'éteindre. En général, ce problème est dû à la faible durée de vie de certaines capacités (souvent sous-dimensionnées en ESR, en courant et en température). Parfois, les diodes de redressement s'abiment du fait des pics de courant non-absorbés par les capas usées. Mais en général, une réparation coûte moins de 5EUR.

Sur cet écran (plutôt milieu de gamme), le fusible côté secteur était fondu et les capacités du côté secondaire étaient en bon état.

/!\ Danger
Des tensions dangereuses sont présentes sur la carte d'alimentation, ne rien toucher sans l'avoir débranchée et déchargé la capacité primaire.
/!\ Warning
Dangerous voltages are present on the power board, do not touch it until it is unplugged and its primary capacitor is discharged.

Panne
Sur ces écran, seulement la carte d'alimentation (modèle 715G1502, fabriquée par AOC) est défectueuse, la dalle et la carte gérant l'affichage sont encore fonctionnelles.

En regardant la carte d'alimentation, la capacité qui lisse la tension du secteur (C905) fuit légèrement, et le mosfet de découpage (Q903) a l'air d'avoir bien chauffé.
Faulty 715G1502 power board, primary side
En sortant le multimètre, la capa de lissage n'est pas en court-circuit et n'a pas de résistance de fuite trop faible, par contre le mosfet de découpage est en court-circuit.

Après remplacement par un MOS équivalent, l'écran s'allume, mais le transformateur couine par intermittances à 100Hz, et le mosfet est brûlant (>100°C au toucher).
Mon voltmètre affiche "Hors-Calibre" quand je mesure la tension hachée au primaire du transformateur flyback (AC) et sur la capacité de lissage (DC).
Avec un autre voltmètre (2kV max), je mesure entre 500V et 800V DC et 200V AC aux bornes de la capacité C905, et du coup je n'ose pas mesurer au primaire du transfo...

Réparation
Cette carte converti la tension du secteur en +5V et +12V, permanents, avec un convertisseur flyback. Un deuxième convertisseur (activé uniquement quand l'écran fonctionne) convertit le +12V en 800V~2kV pour les tubes CCFL du rétroéclairage.
Comme la partie primaire ne fonctionne pas, et que le secondaire a des diodes de redressement fonctionnelles, on peut alimenter les sorties +5V et +12V directement, tant que le primaire n'est pas branché.

La première réparation rapide a concisté à brancher directement une alimentation de PC (connecteur Molex 8981) sur les pistes du +12V (Cathode de D902) et +5V (Cathode de D904). Ça fonctionne, mais l'encombrement des connecteurs et les câbles empêchent de fermer la coque de l'écran et d'éloigner l'écran de l'alimentation.
Temporarly fixed 715G1502 power board

La réparation définitive conciste à scier le primaire et le secondaire de l'alimentation (seule la partie "inverter" pour le rétroéclairage CCFL est gardée).
On ajoute un régulateur à découpage 12V -> 5V à base de LM2576 et une banque de capacités de découplage pour les rails 5V et 12V.
Le rail 12V est fourni par une alimentation externe (12V, >3A), via un connecteur "barrel" (DIN 45323 5-2mm ou IEC 60130-10 type A).
LM2576 quick fix

Le câblage du connecteur CN902 est identifiable :
CN902

Fixed 715G1502 power board
Il faut bien isoler la carte d'alimentation 12-5V, et utiliser du scotch isolant pour fixer la carte et les câbles.


Le seul défaut vient de la résistance DC du câble et du connecteur, qui fait légèrement chauffer le câble et le connecteur).
Fixed L1706 monitor

Références

icon Tags de l'article : , ,

Lecteur DVD Schneider SDV 436

icon 06/03/2016 - Comments are closed

Hardware
C'est un lecteur de DVD de salon vendu entre 2005 et 2007. Il date du moment où les lecteurs DVD ont commencé à bien supporter les DivX et sont devenus vraiment cheap.

Ce lecteur a plusieurs clones ou modèles très proches : Magnavox/Philips/Schneider MDV435, MDV437, SDV436, et probablement d'autres.

Celui-ci a 3 circuits imprimés :
  • une alimentation à découpage +3.3V, +5V, +12V, -12V et -24V (15W)
  • un panneau d'interface utilisateur : Contrôleur PT6312 (équivalent µPD16312), afficheur VFD, boutons, LED, capteur IR
  • une carte mère avec un SoC SunPlus SPHE8281D (ou SPHE8201D), un driver de puissance pour le lecteur CD (Moteurs brushless + DC), des régulateurs de tension, de la SDRAM et deux puces EEPROM (firmware + réglages sauvegardés)

Il y a plusieurs connecteurs et composants non-installés sur la carte-mère (P/N : 40-MDV435-MAC2G). le manuel de réparation indique que ce sont des connecteurs de debug (probablement RS-232), un micro/ampli pour un mode karaoké et un connecteur USB pour lire des fichiers depuis un disque dur externe. Par contre, il n'y a aucun connecteur JTAG.

Le problème, c'est que sur ce SoC, les pins de l'UART sont partagés avec la synchro horizontale/verticale, et ne sortent pas grand chose qui ressemble à un signal série.

Pour avoir de la place, j'ai démonté le bloc du lecteur DVD, sans lequel la carte-mère est incapable de démarrer. Mais il est possible de la leurrer en reliant le pin TRAYI à la masse, sur le connecteur CN?.

Dézonage
Ce modèle a été vendu en Europe et ne lit que les DVDs de Region 2.

Region setting on MDV435/SDV436 DVD players

Le dézonage est assez rapide et se fait de la même façon sur d'autres modèles Philips/Magnavox/Schneider :
  • Démarrage du lecteur DVD,
  • Ouverture du tiroir,
  • 4 appuis successifs sur la touche 7 de la télécommande (7-7-7-7),
  • Selection du champ REGION sur le menu affiché,
  • Choix de l'option REGION 0,
  • Fermeture du tiroir.

Software
La recherche d'un firmware n'a rien donné. Ce qui est assez dommage, puisque même le firmware d'origine aurait permis de comprendre son fonctionnement.

Utilisation de l'écran VFD
La carte d'interface utilisateur a besoin d'alimentation +12V, -24V (afficheur VFD) et d'une interface SPI (connectée à l'ASIC PT6312) pour afficher des caractères.
hooking a microcontroller board to the VFD controller

D'après la documentation de la puce, il faut plusieurs commandes d'initialisation, puis balayer la mémoire avec les positions des segments (chaque digit est séparé en deux blocs de 7 segments).
uPD16312/PT6312 vfd driver

Références

icon Tags de l'article : ,

Billets de train

icon 03/01/2016 - Comments are closed

En voyant une vidéo parlant des données présentes sur les divers codes barres des billets d'avion, j'ai regardé si les billets de train que j'avais en stock étaient pareil.
https://www.youtube.com/watch?v=jM4_iz3RqE8

J'ai trouvé 4 types de billets avec des codes-barres différents :
  • Billets cartonnés (code PDF417)
  • E-Billets TGV et IC (code PDF417 ou Aztec)
  • E-Billets TER (code Aztec)
  • Billets "Online-Ticket" ÖBB imprimés (code Aztec)

Billet cartonné
"Billet classique", commandé puis retiré a un guichet/borne, avec un code PDF-417 imprimé à gauche
Billet SNCF cartonné

A|B|CC|DDDDDD|EEEEEEEEE|F|G|HH|0000000000|II|JJ|KK|L|MMM|NNN|OOO|
PPPPP|QQQQQ|RRRRRR|SSSS|TTT|UUU|VVV|W|XXXX|YY|
     |     |      |    |   |   |   |*|    |  |

  • A : Type de format ('e' dans ce cas)
  • B : Code d'imprimante (E pour les guichets)
  • C : Code de ticket
  • D : Numéro de dossier
  • E : Numéro de billet
  • F : Drapeau de spécimen (0 pour un faux ou 1 pour un vrai)
  • G : Version de codage du billet (1)
  • H : Ticket A de B
  • 0 : Réservé (10 caractères)
  • I : Type de carte de réduction (deux espaces en cas d'absence)
  • J : Nombre de voyageurs adultes
  • K : Nombre de voyageurs enfants
  • L : Dernier digit de l'année du voyage
  • M : Date d'impression (nombre de jours depuis le 01.01)
  • N : date de début de validité, idem
  • O : Date de fin de validité, idem
Premier segment :
  • P : Gare de départ (code ISO3166-1 du pays puis code de la gare sur 3 digits)
  • Q : Gare d'arrivée, idem
  • R : Numéro de train (6 digits, ou 5 digits + '\0', ou '0' + 4 digits + '\0')
  • S : Code antifraude
  • T : Date de départ du train (nombre de jours depuis le 01.01)
  • U : Numéro de voiture
  • V : Numéro de place
  • W : Classe du voyage
  • X : Code du tarif
  • Y : Conditions du services/payements

Le premier segment (de M à V) peut être complété par un second segment suivant la même syntaxe si le voyage a des correspondances. En cas d'absence, il y a 29 espaces, la classe est notée '*', puis 6 espaces.

A|B|CC|DDDDDD|EEEEEEEEE|F|G|HH|0000000000|II|JJ|KK|L|MMM|NNN|OOO|
PPPPP|QQQQQ|RRRRRR|SSSS|TTT|UUU|VVV|W|XXXX|YY|
     |     |      |    |   |   |   |*|    |  |

e|E|DV|RUZNxx|58361xxxx|1|1|11|0000000000|  |01|00|3|165|166|226|
FRLPD|CHGVA|96506 |    |166|   |   |2|LJ25|B |
     |     |      |    |   |   |   |*|    |  |

Ici on a un un billet au format "e" pour le numéro de dossier RUZNxx, un numéro de billet 58361xxxx, le billet est valide, et il n'y a qu'un seul billet pour ce voyage. Le billet n'est pas lié à une carte de réduction, il est pour un adulte sans enfant, est vallable pour l'année 2013, a été acheté le 14.06 et est vallable du 15.06 au 14.08.
Le premier segment est au départ de Lyon Part-Dieu (France, LPD) et à destination de Genève-Cornavin (Suisse, GVA), pour le train 96506, le code est illisible, le train circule le 15.06, n'a pas de place/voiture réservée, est en 2nde classe, pour un tarif "illico Jeunes -25%" et n'est pas échangeable après le départ.

Dans tous les cas, ces billets ne posent aucun risques une fois le voyage effectué dans sa totalité (par contre il est possible de l'annuler ou de le reproduire si il n'a pas encore été utilisé).


E-Billet TGV/IC
Les E-billets sont fournis par des agences de voyages (Voyages-SNCF, Capitaine-train, E-billet-SNCF) et ont un code Aztec pour ceux imprimés soi-même ou un code PDF-417 pour ceux imprimés sur les bornes de la SNCF. Dans les deux cas ils utilisent la même organisation.

A|B|CC|DDDDDD|EEEEEEEEE|F|G|HH|II/JJ/KKKK|
LLLLL|MMMMM|NNNNN|OO/PP|
QQQQQQQQQQQQQQQQQQQ|RRRRRRRRRRRRRRRRRRR|SSSSSSSSSSSSSSSSSSS|T|UU|VVVVV|
LLLLL|MMMMM|NNNNN|

  • A : type de format (i)
  • B : 1 pour un billet imprimé à une borne (code PDF-417), 0 pour un billet imprimé soi-même (code Aztec)
  • C : Confirmation Voyage (CV)
  • D : Numéro de Dossier
  • E : Numéro d'E-Billet
  • F : Drapeau de spécimen (0 pour un faux ou 1 pour un vrai)
  • G : Version du codage du billet (2)
  • H : Ticket A de B
  • II/JJ/KKKK : date de naissance du voyageur

  • L : Gare de départ (code ISO3166-1 du pays puis code de la gare sur 3 digits)
  • M : Gare d'arrivée, idem
  • N : Numéro de train
  • OO/PP : date du trajet
  • Q : Numéro de client
  • R : Nom du voyageur (suivi ou précédé par des espaces, 19 caractères max)
  • S : Prénom du voyageur (suivi ou précédé par des espaces, 19 caractères max)
  • T : Classe
  • U : inconnu, possiblement un caractère de contrôle ou un code antifraude
  • V : Code du tarif
Le 2nd segment est facultatif et remplacé par des 0 et des espaces
  • L : Gare de départ (code ISO3166-1 du pays puis code de la gare sur 3 digits)
  • M : Gare d'arrivée, idem
  • N : Numéro de train

A|B|CC|DDDDDD|EEEEEEEEE|F|G|HH|II/JJ/KKKK|
LLLLL|MMMMM|NNNNN|OO/PP|
QQQQQQQQQQQQQQQQQQQ|RRRRRRRRRRRRRRRRRRR|SSSSSSSSSSSSSSSSSSS|T|UU|VVVVV|
LLLLL|MMMMM|NNNNN|

E-Billet SNCF cartonné

i|1|CV|RIKNxx|248713xxx|1|2|11|01/01/1990|
FRCMF|FRPAZ|05706|13/05|
0029009166230xxxxxx|BOxxxxxx          |XAVIER             |2| 2|PR112|
FRPMO|FRDLY|16757|

Ici on a un billet au format "i", imprimé sur une borne SNCF, le billet est une "Confirmation de voyage" pour le dossier RIKNxx, un numéro de billet 248713xxx, le billet est valide, et il n'y a qu'un seul billet pour ce voyage.
Le billet est au départ de Chambéry-Challes-les-eaux (France, CMF), à destination de Paris-Austerlitz (France, PAZ), avec le train 05706 le 13/05.
Le numéro d'identifiant du trajet est 0029009166230xxxxxx, porté par "Xavier Bo", voyageant en seconde classe avec un tarif "preum's"
La seconde partie du trajet est au départ de Paris Montparnasse (France, PMO) vers La-Ferté-Bernard (France, DLY), avec le train 16757.

A|B|CC|DDDDDD|EEEEEEEEE|F|G|HH|II/JJ/KKKK|
LLLLL|MMMMM|NNNNN|OO/PP|
QQQQQQQQQQQQQQQQQQQ|RRRRRRRRRRRRRRRRRRR|SSSSSSSSSSSSSSSSSSS|T|UU|VVVVV|
LLLLL|MMMMM|NNNNN|

i|0|CV|QZWKx|482593xxx|1|2|11|01/01/1990|
CHGVA|FRLPD|09744|19/12|
00290290169300xxxxxx|BOxxxxxx         |XAVIER             |2|  |    0|00000

Ici on a un billet au format "i", imprimé par ses propres moyens, le billet est une "Confirmation de voyage" pour le dossier QZWKxx, un numéro de billet 482593xxx, le billet est valide, et il n'y a qu'un seul billet pour ce voyage.
Le billet est au départ de Genève-Cornavin (Suisse, GVA), à destination de Lyon Part-Dieu (France, LPD), avec le train 09744 le 19/12.
Le numéro d'identifiant du trajet est 00290290169300xxxxxx, porté par "Xavier Bo", voyageant en seconde classe. Par contre les informations de tarif sont vides et le voyage n'a pas de correspondance (champs remplis par des espaces ou des '0').

Le ticket à plutôt l'air de servir à identifier le voyageur (I, J, K, Q, R) et à porter un numéro d'identifiant (Q) qui doit pointer dans une base de donnée mieux remplie (et non-modifiable).
Certains paramètres (O, P, T, V) ont l'air d'être présent en cas de base de donnée injoignable ou pas à jour pour au moins vérifier sommairement que personne ne tente de frauder.

E-Billet TER imprimé
Le billet a été commandé sur le site web des TER-Rhône-Alpes et a un code Aztec assez grand.
Le début contient des données encodées, puis la chaîne :

T00T100xx|0000738xx|FRLYL|FRHCZ|
S|28122015|2|NG02|INTERNET BILLET IL|BOUxxxxx XAVIER |01011990|ADULTE| |01| 00|28122015|28122015|000000000000|28122015|1313|0000000200

En interprêtant sommairement, on remarque plusieurs chaînes contenant la date du 28.12.2015 (date de commande, début et fin de validité du ticket).
La chaîne 1313 correspond à l'heure de la commande du billet, "NG02" semble être un tarif, et plusieurs champs peuvent correspondre à la classe.
Les champs FRLYL et FRHCZ sont au format des autres billets et indiquent les gares de départ et d'arrivée (France, Lyon Gorge-de-Loup et Fleurieux-sur-l'Arbresle).

Par contre je n'ai qu'un seul ticket de ce type pour l'instant, je pourrais compléter quand j'aurais comparé avec des tickets du même type pour des trajets.

Internet-Ticket ÖBB imprimé
Les tickets à imprimer soi-même sont les seuls à comporter un code-barres unique. Par contre le codage a l'air similaire et compatible avec celui utilisé par la DB (Allemagne) et les SBB (Suisse).

Pour l'instant le code comporte une en-tête dépendant du type de ticket/carte, du transporteur et de la longueur du message. Le reste est encodé en binaire mais semble décodable.

Références

icon Tags de l'article : , , ,

D-Link DWL-G700AP

icon 14/12/2015 - Comments are closed

J'ai récupéré deux points d'accès D-Link DWL-G700AP hors-service, chacun de révision B3, le premier fabriqué au milieu de l'année 2006 et le 2nd au milieu de l'année 2007.
D-Link DWL-G700 AP overview

Point d'accès #1
Au branchement, il ne démarre pas et aucune LED n'est allumée.
En l'ouvrant, la tension est à 0V en sortie des selfs de choke de l'entrée d'alimentation (fonctionnelle). L'Ohm-mètre affiche un court-circuit sur le rail 3.3V (sortie du régulateur qui alimente quasiment toute la carte).
Quelques capacités sont gonflées, mais aucune n'est en court-circuit.

Point d'accès #2
Au branchement, seulement la LED D1 (Power) est allumée, mais aucune réponse par le réseau ou par le port série.
En mesurant un peu de partout, la sortie du régulateur U9 (GS1117AX-18) donne 0.95V à la place des 1.8V attendus.

Le simple échange de régulateur entre les deux points d'accès à suffit à en rendre un fonctionnel.
D-Link DWL-G700 AP motherboard

Notes :
  • Le régulateur U9 chauffe beaucoup et a une surface de dissipation trop petite...
  • Il est possible d'alimenter le routeur avec n'importe quelle tension entre 5V et 16V (tension limite des capacités, le régulateur Buck supporte au moins 20V).

Port série

Le connecteur J2 est cablé directement sur le SoC RTL8186 (signaux 3.3V) :
  1. 3.3V
  2. GND
  3. CTS*
  4. RTS*
  5. TX
  6. RX
*Non-testé et non-indispensable

La connection est en 38400, 8N1 et donne un accès au bootlog de Linux et à un shell busybox.
D-Link DWL-G700 AP serial and JTAG connections

Flash
En cas de flash du mauvais firmware, le point d'accès à un bootblock qui permet de reflasher "facilement" le point d'accès.
  1. Débrancher l'alimentation
  2. Tenir le bouton RESET appuyé
  3. Brancher l'alimentation
  4. Lâcher le bouton RESET après 5s
  5. Brancher un PC en ethernet avec l'adresse 192.168.1.xx (différente de 192.168.1.6)
  6. uploader le firmware par tftp :
tftp 192.168.1.6
tftp> binary
tftp> put DWLG700AP_FW231b02.bin
Sent 1025832 bytes in 2.6 seconds
tftp>


Firmwares Wive et Wive-NG
Ces deux firmware alternatifs sont disponibles et permettent plus de choses que le firmware D-Link de base (qui n'a pas les commandes ls, vi, mount ou ping...).
Par contre les firmwares Wive sont un peu buggés (un des firmware détecte aléatoirement 8 ou 16Mio de RAM et plante dès qu'on utilise une zone de mémoire inexistante), très mal documentés et il y a quelques instabilités qui freezent la machine ou la redémarrent.

Firmware Realtek/D-Link Custom
Le firmware et une partie de la toolchain RTL8186 sont fournie sur le site de D-Link, et il est possible d'y modifier pas mal de choses.
Il faut juste éviter de bricker la machine en cassant le bootloader.
ÉCHEC

JTAG
Comme j'ai brické le point d'accès en cassant le bootloader, j'ai essayé de le reflasher en utilisant le bus JTAG (12 pins),

  1. nTRST (NC)
  2.  GND
  3. TDI (D0)
  4. GND
  5. TDO (!Select)
  6. GND
  7. TMS (D2)
  8. GND
  9. TCK (D1)
  10. GND
  11. nSRST (NC)
  12. GND

Je n'ai pas de programmateur JTAG générique, du coup j'ai copié un programmateur Xilinx DLC5 sur port parallèle (adresse 0x378 sur ma machine), en le réglant à 250kHz (mais ça ne fonctionne pas, peu importe la fréquence).

jtag> cable DLC5 parallel 0x378
Initializing parallel port at 0x378
jtag> frequency 250000
Setting TCK frequency to 250000 Hz
requested frequency 250000, now calibrating delay loop
new real frequency 241253, delay 0
done
jtag> detect
Warning: TDO seems to be stuck at 1

ÉCHEC


Références

icon Tags de l'article : , , ,

D-Link DIR-615

icon 10/12/2015 - Comments are closed

J'ai un point d'accès Wifi/routeur D-Link DIR-615 (rev. H2) qui sert à couvrir la maison. Le routeur s'est arrêté de fonctionner du jour au lendemain (après 3 ans d'utilisation).

/!\ Échec des réparations

Réparation
Quand on le branche, la LED "POWERLED" (D30) reste allumée en orange et rien d'autre ne fonctionne.

Il faut enlever deux patins en caoutchouc pour acceder aux vis (1), puis déclipser le dessus du boitier (2).
DIR-615 screws

L'entrée de l'alimentation est tout de suite convertie en 3.3V par un régulateur buck IT2602M. Comme rien d'autre n'est alimenté directement par le bloc d'alimentation, il (5V/1A) peut fournir entre 12V/200mA et 4.5V/800mA sans que ça ne pose de réel problème.
En sortie du régulateur, on mesure ~3.34V, mais il y a un petit glitch au démarrage. Un voltmètre en AC mesure 200mV de ripple en moyenne (et probablement bien plus quand le SoC tente de démarrer).
DIR-615 board

En posant un tournevis (en acier, non-aimanté) sur l'inductance L33, sa valeur augmente légèrement et suffisament pour que le routeur démarre et fonctionne.
En pratique, la capacité C244 (Lelon RGA 105°C, 16V) est mesurée à 426µF au lieu de 470µF (peu gênant), mais son ESR est mesurée à 1.2Ω, ce qui est critique pour une capacité en sortie d'une alimentation buck.

On peut la remplacer par une capacité 1000µF/6.3V "low-ESR" (n'importe quelle capacité entre 470µF et 1500µF de tension >6.3V devrait suffire, tant que l'ESR est faible). Pour éviter une usure rapide, on y ajoute une capacité en céramique de 4.7nF (ESR de <100mΩ).
DIR-615 board bottom

Seconde réparation
Après quelques jours, le bloc d'alimentation et le SoC se sont mis à couiner. Il a suffit de changer le bloc d'alimentation par un bloc 7.5V/1A pour corriger le problème et supprimer le couinement.
Il est aussi popssible que la capacité de découplage de l'alimentation soit usée.

Échec
Après encore quelques jours, le SoC couine toujours (buzz à 100~1kHz) et est incapable de démarrer. Le système n'est pas debuggable facilement sans oscilloscope ni doc détaillée du SoC.

Port série
Le connecteur J4 donne accès au port série du SoC Ralink.

  1. 3.3V
  2. GND
  3. TX
  4. RX

Branché à un convertisseur USB-Série 3.3V, on accède à une console qui affiche le bootlog du routeur. Il est possible d'accèder à un shell en tapant ctrl + C, puis sn2450.

Références

icon Tags de l'article : , ,

Canon Pixma MX700 : Lecteur de cartes SD/CF

icon 19/10/2015 - Comments are closed

Cette imprimante a un lecteur de cartes SD et Compact Flash sur une carte séparée (réf. QK1-3752-03, QM3-2812).

vue de la carte
vue de la carte


Identification

La carte utilise 3 puces : deux puces qui ressemblent à des régulateurs LDO, mais sans documentation vallable (marquages illisibles ou références introuvables), et le chip Genesys Logic GL819SA111 en boitier TQFP.

D'après le pinout de la puce, et un Ohmmètre, on en déduit une partie du brochage du connecteur :
  1. Vdd (3.3V)
  2. USB D-
  3. USB D+
  4. GND
  5. ?
  6. ?
  7. ?
  8. GND

En identifiant le connecteur de la carte mère de l'imprimante à l'Ohmmètre et au Voltmètre, on arrive à identifier quelques autres pins :
  1. Vdd (3.3V)
  2. USB D-
  3. USB D+
  4. GND
  5. +3.3V
  6. Pin tiré à Vdd via un pullup de 15kΩ, à forcer à GND pour activer la puce.
  7. +5V
  8. GND

Câblage

Une fois les pins identifiés au connecteur USB et sur la carte, il ne reste plus qu'a tout souder.
USB pinouts board side
USB pinouts bottom side

Comme le +3.3V n'est pas disponible sur un port USB, et que la puce accepte une tension de 2.7V à 3.6V (idem pour les cartes SD), il est possible de relier le +5V à Vdd avec 3 diodes Si en série (les 1N400x conviennent et donnent une chute de tension proche de 0.65V en charge et à vide).

câblage connecteur USB


Par contre, la carte fonctionne en USB2.0 Hi-Speed, il faut donc un câble USB relativement propre (paire torsadée 90Ω).
En pratique, un câble sale (fils volants) fonctionne seulement si les fils sont de mêmes longueur (±5%) et courts (<50mm), La qualité des soudures peut aussi poser des problèmes.


Tests
En le branchant sur un PC (Linux), on peut avoir les messages d'erreur suivants (affichables avec la commande dmesg) :

usb 1-1.1.2: new high-speed USB device number n using ehci-pci, avec n bouclant entre 0 et 127.
Cette erreur arrive lorsque le câble est trop "sale" pour communiquer en mode high-speed.

usb 1-1.1.2: device descriptor read/64, error -n
usb 1-1.1-port2: Cannot enable. Maybe the USB cable is bad?
usb 1-1.1-port2: unable to enumerate USB device

Ces erreurs arrivent typiquement lorsque les pins D+ et D- sont échangés.

usb 1-1.1.2: reset high-speed USB device number 19 using ehci-pci
Si ces resets arrivent fréquemment, il est possible que l'alimentation de la puce ne fournisse pas assez de courant ou soit mal découplée.
Ils peuvent aussi arriver si le câble USB est trop long et non-torsadé/blindé.

Si aucun message n'apparaît lorsque la carte ou même un autre périphérique USB est branché sur ce port, c'est parce que les ports sont individuellement désactivés lorsqu'ils ont généré trop d'erreurs. Il est nécessaire de recharger les modules le gérant (ehci-hcd et ehci-pci sur ma machine)

Lorsque tout est fonctionnel, le noyau doit renvoyer :
usb 1-1.1.2: new high-speed USB device number 8 using ehci-pci
usb 1-1.1.2: New USB device found, idVendor=05e3, idProduct=070e
usb 1-1.1.2: New USB device strings: Mfr=0, Product=1, SerialNumber=2
usb 1-1.1.2: Product: USB Storage
usb 1-1.1.2: SerialNumber: 000000009514
usb-storage 1-1.1.2:1.0: USB Mass Storage device detected
scsi145 : usb-storage 1-1.1.2:1.0
scsi 145:0:0:0: Direct-Access Generic STORAGE DEVICE 9514 PQ: 0 ANSI: 0
sd 145:0:0:0: Attached scsi generic sg2 type 0
sd 145:0:0:0: [sdb] 7698432 512-byte logical blocks: (3.94 GB/3.67 GiB)
sd 145:0:0:0: [sdb] Write Protect is off
sd 145:0:0:0: [sdb] Mode Sense: 37 00 00 08
sd 145:0:0:0: [sdb] No Caching mode page found
sd 145:0:0:0: [sdb] Assuming drive cache: write through
sdb: sdb1
sd 145:0:0:0: [sdb] Attached SCSI removable disk


Références/Liens

icon Tags de l'article : , , ,

Afficheurs à LEDs

icon 22/12/2014 - Comments are closed

Récupération
J'ai récupéré un équipement de laboratoire fabriqué par Sofraser avec un module d'interface pour des capteurs de viscosité et deux modules de contrôle et d'affichage. Cet équipement est trop ancien et la documentation n'est plus disponible sur le site web du constructeur, mais il est possible d'en récupérer des pièces.

Tests et mesures
Les modules de contrôle et d'affichage sont formés de 3 cartes emboitées :
  • Carte d'alimentation (transfo, régulateurs de tension), d'interfaces analogiques (comparateurs et amplis) et d'actionneurs (sorties à relais)
  • Carte à MCU (Intel 8031, EPROM, SRAM, NV-SRAM)
  • Carte d'affichage (afficheurs 7 segments, LEDs, boutons, drivers NPN et registre à décalage UCN5812AF d'Allegro)
Sofraser 6001 power-analog, digital-MCU and display boards

Reverse Engineering Hardware
En fonctionnement normal, sans capteurs branchés, l'afficheur affiche quelque chose sur chaque afficheur.
Sofraser 6001 Display
Comme l'afficheur fonctionne, on peut mesurer les tensions d'alimentations et vérifier rapidement l'allure des signaux au voltmètre.

Pour identifier la suite, il faut débrancher l'afficheur, sortir la datasheet du registre à décalage et tester à l'Ohm-mètre.

Ce qui nous donne le pinout du connecteur :
  1. VDD (Power, 3~60V), il est peu probable que les transistors apprécient plus de 15V
  2.  ?
  3. ?
  4.  Blank/Strobe
  5.  VDD (Logic, 3~15V), à adapter aux niveaux des signaux
  6. SW2
  7. CLK
  8. SW1
  9. SDIN
  10. SW3
  11.  GND
  12. SW4
Les pins en vert sont connectés directement au registre à décalage et acceptent des signaux TTL et LV-TTL.
Comme on a un registre à décalage, on peut être tenté d'utiliser un périphérique SPI, sauf que ceux des AVR et des MSP430 sont incapables de sortir des mots de 20bits... Il faudra faire du bit-bang en software.

En regardant la datasheet, on observe que les signaux SDIN et CLK permettent de charger le registre à décalage. Ensuite le signal Strobe permet d'activer le latch et le signal Blank permet d'activer le buffer.
Sur ces cartes, les signaux Strobe et Blank sont reliés. Ainsi on économise un fil.
UCN5812AF register schematics

Reverse Engineering Software
En balayant le registre, on peut se rendre compte de l'adresse de chaque afficheur, segment et LED.
display schematic

Afficheurs :
  1. 0x002000
  2. 0x001000
  3. 0x000800
  4. 0x000400
  5. 0x080000
  6. 0x040000
  7. 0x020000
  8. 0x010000
  9. 0x004000
LEDs :
  1. 0x008004
  2. 0x008020
  3. 0x008040
  4. 0x008080
  5. 0x008100
  6. 0x008200

On remarque aussi que tout est câblé ensemble. On peut choisir d'allumer les segments et les digits un par un, mais pas indépendamment (il est possible d'afficher " 1 1", mais pas "1234").
Pour afficher autre chose, il faut utiliser la persistance rétinienne et balayer chaque valeur par digit.

On peut associer les segments aux nombres et lettres que l'on va afficher :
  • 0 - 0x3F0
  • 1 - 0x180
  • 2 - 0x368
  • 3 - 0x3C8
  •  4 - 0x198
  •  5 - 0x2D8
  • 6 - 0x2F8
  • 7 - 0x380
  • 8 - 0x3F8
  • 9 - 0x398
  • A - 0x3B8
  • b - 0x0F8
  • C - 0x270
  • d - 0x1E8
  • E - 0x278
  • F - 0x238
  • . - 0x004

Le programme est bêtement formé de LUTs (afficheur, LED et digits) et de boucles (SPI bit-banging et selection de l'afficheur/LED).
LED display first try


Chaînage
Le pin 2 est une sortie du registre à décalage et n'est pas câblée, mais il est possible de chaîner plusieurs afficheurs, seule la "longueur" du mot est doublée (40bits).
chaining LED displays


Références

icon Tags de l'article : ,