Monorailcat

Billets d'avion

icon 2019-04-21 - No comments

Boarding pass British Airways
Ce billet a été imprimé sur un automate dans l'aéroport, simplement à partir d'un numéro de réservation.
M1Bxxxx/XAVIER MR EU4ABCD LHRMUCBA 0956 040M009F0087
13C>

M: Type d'encodage du billet
1: Une seule correspondance enregistrée sur ce billet
Bxxxx/XAVIER MR : Nom/Prénom, titre
E: Billet électronique
U4ABCD: Code de réservation du billet
LHR: Code IATA de l'aéroport de départ (London Heathrow)
MUC: Code IATA de l'aéroport de destination (Munich)
BA: Code IATA de l'opérateur (British Airways)
0956: Numéro du vol
040: Date du vol (9 Février, 40ème jour de l'année)
M: Type de compartiment et code de tarif propre au transporteur (classe économique non-remboursable)
009F: Numéro de place
0087: Sequence d'embarquement, 87ème personne à imprimer le boarding pass
1: Statut du passager?
3C: ?
>: Début de la section de sécurité (102 caractères)

E-Billet Lufthansa
Ce billet a été envoyé par e-mail par le transpoxxxxr après avoir chocodela place.
M1Bxxxx/XAVIER ES9ABC LYSMUCLH 2253 330Mcode0045
35D>

M: Type d'encodage du billet
1: Une seule correspondance enregistrée sur ce billet
Bxxxx/XAVIER : Nom/Prénom, titre
E: Billet électronique
ES9ABC: Code de réservation du billet
LYS: Code IATA de l'aéroport de départ (Lyon Saint-Exupéry)
MUC: Code IATA de l'aéroport de destination (Munich)
LH: Code IATA de l'opérateur (Lufthansa)
2253: Numéro du vol
330: Date du vol (26 Novembre, 330ème jour de l'année)
M: Type de compartiment et code de tarif propre au transporteur (classe économique non-remboursable)
012F: Numéro de place
0045: Sequence d'embarquement, 45ème personne à imprimer le boarding pass
3: Statut du passager?
5D: ?
>: Début de la section de sécurité (102 caractères)

Références

icon Tags de l'article : ,

Autoradio Tuner List (4) : Écran LCD

icon 2018-03-17 - 3 comments

J'ai toujours voulu afficher n'importe quoi sur l'afficheur au centre du tableau de bord, qui affiche normalement la station de radio et l'heure, et il se trouve que c'est tout à fait possible.
displaying funny words

Hardware
Ici, on a un autoradio Renault/VDO Tuner List (modèle 22DC259/62T, 77 00 434 422) et un afficheur Renault (82 00 028 364), avec un connecteur gris connecté au tableau de bord et à la radio, et un connecteur rouge connecté aux commandes situées sous le volant.

Je n'ai pas eu confiance dans les documentations que j'ai pu trouver, avec des couleurs de fils incorrectes, des brochages de connecteurs parfois à l'envers, différentes version de l'afficheur ou de l'autoradio.
pin identification
Mais ce n'est pas un problème, il suffit de démonter pour vérifier qu'on ne va rien faire de dangereux. On peut rapidement identifier les pins à la masse, ceux des alimentations, et certains signaux de puissance.

Connecteur Gris :
  1. NTC
  2. GND
  3. NC
  4. NC
  5. GND
  6. Éclairage feux? (in)
  7. Éclairage backlight? (in)
  8. +12V (contact?, in)
  9. +12V (permanent?, in)
  10. NC
  11. GND
  12. LCD_ENABLE (12V, in)
  13. SDA (TTL, io)
  14. SCL (TTL, io)
  15.  !MRQ (TTL, io, active-low)

Connecteur Rouge (TTL) :
  1. NC
  2. NC
  3. NC
  4. NC
  5. NC
  6. NC
  7. NC
  8. NC
  9. Commun 1
  10. Retour A
  11. Commun 2
  12. Retour B
  13. Commun 3
  14. Retour C
  15. NC

Ça permet de comprendre la majorité du câblage :
lcd + stalk + head unit connections

Et on peut aussi reverse-engineerer la matrice des boutons utilisés pour les commandes au volant:
FonctionPin communPin retour
OKA1
VOL-A2
VOL+A3
Source LB1
Source RB2
PauseB3
Molette 1C1
Molette 2C2
Molette 3C3
Curieusement, la molette n'est qu'un interrupteur rotatif à 3 positions, ça suffit à détecter le sens de rotation ça donne l'impression de bien plus de positions (6 par tour).

Câble
Dans ce cas, la solution la plus pratique est de prendre une rallonge avec des câbles mini-ISO branchés sur l'autoradio, de couper chaque fils et de les brancher sur un connecteur à 0.1", pour y mettre des cavaliers pour une connection directe, des fils en Y pour espionner le bus ou bien des fils vers un MCU ou un analyseur logique.
man in the middle cable

Connecteur jaune C1 :
  1. SDA (TTL 5V)
  2. SCL (TTL 5V)
  3.  !MRQ (TTL 5V)
  4. LCD_ENABLE (+12V)
  5. GND
On peut se contenter de n'utiliser que ce connecteur pour afficher ce que l'on veut, et reverse-engineerer une partie du protocole.
tuner list i2c bus reverse engineering in-situ
Comme je ne voulais pas décharger la batterie ni passer plusieurs heures dans le froid, j'ai préféré démonter l'afficheur et l'autoradio pour les utiliser à l'intérieur.
tuner list i2c bus reverse engineering on a bench


Protocole
Ça nous avance bien de connaître le matériel, mais il faut encore comprendre comment l'autoradio communique avec l'écran LCD.
Pour ça, on va utiliser un analyseur logique (Cypress FX2 et sigrok/pulseview) et regarder tout ce qui passe sur le bus i2c.
cheap logic analyzer

On peut voir que le bus i2c fonctionne à 7.14kHz et que le signal !MRQ est constamment tiré à 0 avant que quelque chose ne soit transféré sur le bus.

En débranchant le signal MRQ de chaque côté, on peut voir que l'afficheur le force à 0 en attendant une trame de l'autoradio, mais que l'autoradio le force aussi à 0 avant d'envoyer une tram à l'autoradio. On peut aussi voir que l'autoradio est maître sur le bus i2c, et identifier l'adresse de l'écran LCD (0x23).

On peut voir plusieurs messages de 2 octets de long [0x01, 0x10] ou [0x01, 0x11], demandés au moins toutes les 500ms par l'autoradio (initié par l'afficheur qui tire le signal MRQ à 0, puis répond lorsque l'autoradio envoie une requête).
i2c line on idle

Commandes au volant
Il y a aussi une trame répondue par l'afficheur lorsqu'on appuie sur un bouton des commandes au volant, et qui permet de déduire le code de chacune des commandes au volant. L'afficheur tire le signal MRQ à 0, l'autoradio envoie une requête, puis l'afficheur envoie la trame correspondant aux boutons pressés.
i2c line button
Boutonoctet 0octet 1octet 2octet 3octet 4action
OK0x040x820x910x000x00press
OK0x040x820x910x000x40hold
Source R0x040x820x910x000x01press
Source R0x040x820x910x000x81hold
Source L0x040x820x910x000x02press
Source L0x040x820x910x000x82hold
Volume +0x040x820x910x000x03press
Volume +0x040x820x910x000x43hold
Volume -0x040x820x910x000x04press
Volume -0x040x820x910x000x44hold
Pause0x040x820x910x000x05press
Wheel up0x040x820x910x010x41
Wheel down0x040x820x910x010x01
Les valeurs 0x41 et 0x42 pour le dernier octet sont aussi interprétées par l'autoradio comme les boutons Source R et Source L maintenus appuyés, et il n'y a pas de code lorsqu'on maintient appuyé le bouton Pause ou pour la molette.

Affichage
L'afficheur est rafraichi uniquement en cas de besoin, on peut l'observer en appuyant sur un bouton de l'autoradio, qui va forcer le signal MRQ à 0, puis va envoyer une trame entre 13 et 16 octets avec les caractères à afficher.
i2c line display
Affichage12345678910111213141516
98.50x0f0x900x7f0x290xff0x3f0x350x810x200x200x200x200x390x380x350x20
CASS [=]0x0f0x900x7f0x550xff0xff0x600x010x430x410x530x530x200x040x050x06
BAYERN 30x0f0x900x7f0x550xff0x3f0x750x010x420x410x590x450x520x4E0x200x33
Bingo ! Les trames à partir de l'octet 9 ressemblent à de l'ASCII (les caractères clignotent si le MSB est à 1), l'octet 7 permet d'afficher le point décimal et le digit de mémoire/piste, et l'octet 6 permet d'afficher les pictogrammes Tuner Preset, Tuner Manu, Dolby et MSS.

Programme
On va remplacer l'autoradio par un Arduino Mega (n'importe quel micro-contrôleur avec un périphérique i2c et des IO TTL suffit), pour pouvoir écrire sur l'afficheur et lire l'état des boutons.

Avec un Atmel AVR, il faut forcer le bitrate/prescaler à environ 7kHz avec les lignes suivantes:
void conf() {
TWBR = 0xff;
TWSR = 0x01;
}


Comme c'est un programme de test qui n'a qu'une seule fonction et un MCU surpuissant pour son utilisation, il est possible d'écrire un code peu optimisé (polling au lieu d'interruptions, copy/paste).

On va initialiser l'écran en envoyant quelques trames [0x01, 0x10] et [0x01, 0x11], puis on peut écrire un peu ce qu'on veut :
void writerandom(byte *data, int len) {
while(digitalRead(2)); // polling the MRQ line
Wire.beginTransmission(0x23);
conf(); // overwrites the bitrate/prescaler after the Wire lib configures the i2c
Wire.write(data, len);
Wire.endTransmission();
}

Dans ce cas, on peut commencer par copier/coller des trames récupérées en sniffant celles envoyées par l'autoradio, puis on va reverse-engineerer le protocole complet en bouclant sur tous les caractères entre 0x00 et 0xFF, et en testant les pictogrammes.

On va aussi pouvoir lire l'état des boutons, qui sont des trames de 5 octets :
void read01() {
while(digitalRead(2)); // polling the MRQ line, pulling the MRQ line low and waiting 500us also works
conf(); // overwrites the bitrate/prescaler after the Wire lib configures the i2c
Wire.requestFrom(0x23, 5);
TWBR = 0xff;
TWSR = 0x01; // 0x00 appears to work as well
for(i = 0; i < 5; i++) {
READDATA[i] = Wire.read();
}
}


Références

icon Tags de l'article : , , , , ,

Autoradio Tuner List : Entrée Aux

icon 2016-10-30 - No comments

J'ai un autoradio Tuner List (Renault/VDO, modèle 22DC259/62T), avec un lecteur cassettes qui m'est inutile, mais je voulais ajouter une entrée analogique pour y brancher un smartphone ou un lecteur audio.

/!\ Danger
La tension maximale n'est que de <15V, mais tout est sous tension, même lorsque le contact n'est pas mis, ou que l'autoradio est éteint. Le fusible permet de sortir 15A, largement de quoi tout casser et se blesser avant qu'il ne fonde.
/!\ Warning
The maximum voltage is only <15V, however, the radio is always powered, even when switched off or when the engine is turned off. The fuse is rated for 15A, more than enough to blow the radio and hurt yourself before it melts.


Démontage
Sur les Renault Mégane, la face avant de l'autoradio est plus large que celle des autres voitures, mais les fixations sont à peu près au même standard.
Il suffit d'insérer deux clous de 4mm dans les deux trous en bas sur les côtés, pousser les clous vers l'extérieur, et de faire bouger l'autoradio sur les côtés en le tirant. Deux mains sont nécessaires, mais c'est faisable sans outils spéciaux.
Removing the radio from the car's front panel

Une fois l'autoradio tiré, il y a un connecteur DIN/ISO (parfois séparé en deux parties) à gauche, puis un connecteur (jaune dans ce cas), pour relier les commandes au volant et l'afficheur (I²C). Il y a aussi parfois aussi un connecteur (bleu) dans le cas où un chargeur de CD serait présent. Le câble d'antenne (Coax à droite) est aussi à débrancher. Il est souvent clipsé à l'arrière de l'autoradio.

Code
Quand l'alimentation de l'autoradio a été débranchée, il est nécessaire d'entrer un code (normalement fourni, sinon trouvable à partir du numéro de série).
Quand l'autoradio affiche "0000", avec le premier '0' clignotant et qu'il faut entrer le code "1234", il faudra taper une fois sur la touche "1", une fois sur la touche "2" pour choisir le 2nd caractère (qui doit clignoter), puis deux fois sur cette touche (l'écran doit afficher "1200"), idem avec les touches 3 et 4 pour les derniers digits.
Une fois le code complet, il faut maintenir la touche 6 appuyée jusqu'à ce que l'autoradio fonctionne normalement.

Teardown
Le haut de l'autoradio se démonte simplement en déclipsant 4 clips avec un tournevis plat.

Il faut retirer deux connecteurs Würth WR-MM et dévisser 4 vis Torx T8 pour démonter le lecteur de cassettes en le tirant vers l'arrière (il faut retirer la cassette présente avant de retirer le lecteur).

La carte n'a de composants que sur la face, le PCB vertical à l'arrière contient uniquement le tuner FM/AM, et le PCB vertical à l'avant supporte des boutons poussoirs et des LEDs.

Il y a 3 composants qui nous intéressent :
  • TEA0676T : Préampli de cassette, à proximité du connecteur WR-MM à 4 pins des têtes du lecteur de cassette
  • SAA7708H : ADC + DSP + DAC + MUX + décodage RDS + décodage SPDIF, ASIC "magique" conçu pour les autoradios
  • 93CW44DF : Microcontrôleur OTP ou ASIC custom, sans documentation, semble tout contrôler
  • TAA276H (TDA7385H) : Ampli de puissance 4*20W (bridge)

Les autres gros circuits intégrés concernent le tuner, l'ampli de puissance ou de la glue logique.
VDO/Renault Tuner List taken apart

Sur cet autoradio, il est possible d'utiliser l'entrée SPDIF (disponible sur le connecteur du chargeur de CD), mais le périphérique doit communiquer avec l'autoradio (RS232 0-12V, 9600, 8N1).

Entrée
Le circuit SAA7708H supporte 3 entrées analogiques (phone, tape, CD), mais elles sont contrôlées par le chip 93CW44DF (contrôle par un bus I²C).
Comme le lecteur de cassettes ne me sert pas, je vais câbler l'entrée à la place de celui-ci.

Au niveau des têtes de lecture, le niveau est très faible (~1mV), et surtout le signal est remis en forme (filtres, égaliseur). Il est nettement plus simple de récupérer le signal en sortie du préampli (signal déjà égalisé, filtré et amplifié), à environ 1V (compatible avec une sortie casque/ligne au volume maximal).

En regardant entre la sortie du TEA0676T l'entrée du SAA7708H, on voit des capacités pour bloquer une composante DC, et un filtre passe-haut (entrée d'ADC). On va donc câbler l'entrée juste à la sortie du TEA0676T.

Adding an analog input to the VDO tuner list
Adding an analog input to the VDO tuner list

Les pins 1 et 16 sont dessoudés et isolés de leurs pastilles, et le câble d'entrée est soudé sur des points de test et la masse sur un plan.

Après un test, l'entrée fonctionne uniquement si le lecteur de cassettes (connecteur à 10 pins) est branché et si une cassette est présente (il n'y a pas besoin de brancher le câble à 4 pins).

Lecteur de cassettes
Par un peu de rétro-ingéniérie, il est possible d'identifier chaque signal du connecteur WR-MM à 10 pins :
PinFonction
1Auto-reverse switch
2GND
3Presence switch (C)
4Presence switch (T)
5Motor (+)
6Mute switch
7Solenoid
8Solenoid
9NC
10CrO2 switch
Avec quelques tests, seulement les fils en gras sont utiles pour activer le lecteur de cassette.
Le pin 6 (Mute switch) est à relier au pin 2 (GND). Les pins 2 et 3 (presence switch) sont à relier entre eux.
fooling the cassette deck controls on the VDO tuner list


Remarques
Attention, il y a très peu de place entre le volant et le levier de vitesse, un faux mouvement fait vite des dégâts. En pratique, il faut isoler le mécanisme de cassette et le PCB de contrôle avec des sachets antistatiques, et aussi débrancher le connecteur WR-MM à 10 pins avant chaque modification.

À la moindre erreur, il peut y avoir de gros dégâts :
what happens when you're not careful enough

L'autoradio est soumis à de larges cycles de température et doit supporter des vibrations. Pour cela, tous les câbles ont été isolés avec de la gaine thermo-rétractable ou plusieurs couches de ruban de kapton ou de vinyl.
Il faut aussi prendre en compte le fait que le jack peut être tiré depuis l'extérieur. Un simple noeud permet d'éviter de casser les soudures.
careful wiring

Les boutons eject et avance/retour rapide ont été fixés par des morceaux de PVC pris en sandwich entre la face avant et le haut du boitier. Il a été nécessaire de percer les boutons pour laisser passer le câble.
Front face of the modded Tuner List. One could barely tell it has been deeply modified.

Tests
Une fois toutes les modifications testées in-situ, puis faites de façon définitive, on a gagné un jack 3.5mm (de quoi faire des envieux chez les propriétaires d'iPhones 7)

Avec mon lecteur audio Sandisk Sansa et mon smartphone HTC Desire X, le volume doit être au maximum pour avoir le même volume que le tuner FM, mais le son est bien en stéréo et de bonne qualité.


Références

icon Tags de l'article : , , , ,

Alimentation HP ESP135

icon 2016-07-22 - No comments

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 2016-07-07 - No comments

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 2016-05-14 - No comments

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 2016-03-27 - No comments

É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 2016-03-06 - No comments

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 2016-01-03 - No comments

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 2015-12-14 - No comments

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 : , , ,