Étape 4: DS2431 1-Wire EEPROM
Bus : 1-Wire, < 2.2Kohm résistance de pull-up requise.
Alimentation électrique : 2.8volts à 5.25volts.
Références : fiche technique, pirater une manifestation de la journée.
Journal de session complète Bus Pirate pour cette démonstration.
Je ne pouvais pas inclure certains mise en forme et des tableaux HTML dans une Instructable, vous pouvez voir l’original sur le blog de Prototypes dangereux.
Le DS2431 est alimenté à partir de la résistance de pull-up et ne nécessite pas une alimentation externe ou le condensateur de découplage.
1 fil a besoin d’une résistance pull-up fort, d’un maximum de 2.2Kohms. Résistances de pull-up bord de le Bus Pirate sont 10K, trop faible pour alimenter correctement le DS2431 au cours de l’écrit. , Vous devez utiliser un 2.2Kohm ou plus petite résistance externe entre le pouvoir et la broche 1-Wire bus. Si vous avez des difficultés à écrire des données, assurez-vous que votre résistance de pull-up est assez grand. Le Conseil de l’Explorateur 3EEPROM comprend une résistance de pull-up de 1800 ohms (R1) sur le bus 1-Wire donc aucune résistance externe n’est nécessaire.
Programme d’installation
Si vous utilisez un Bus Pirate, connectez-le au Conseil 3EEPROM ou DS2431 comme le montre l’image du graphique ci-dessous. Le DS2431 ne nécessite pas la broche de puissance, il est utilisé sur la carte de 3EEPROM pour alimenter la résistance grand pull-up pour le bus 1-Wire.
Entoilage
Suis de la presse ' en terminal et sélectionnez mode 1-Wire Bus Pirate. Activez les blocs d’alimentation embarquée (grand "W") et vérifier le moniteur de tension (v).
Étape 1, trouver l’adresse du périphérique
1-WIRE > (0xf0) <<< macro Rechercher 1-Wire
1WIRE COMMANDE ROM : RECHERCHER (0XF0)
Appareils trouvés à :
Adresse 1WIRE macro
1.0x2D 0 x 54 0xD2 0xEF 0x00 0x00 0x00 0x2B <<< DS2431 ID unique
* EEPROM DS2431 1K <<< type d’appareil est connu
Appareils de 0 x 01 trouvés.
Les premiers ID de 10 périphériques n’existent pas de MACRO, consultez (0).
1 fils >
Chaque périphérique 1-Wire possède un ID d’unique de 8 octets. 1-wire a une procédure de recherche qui détecte le ID de tous les périphériques connectés. Le Bus Pirate implémente la recherche 1-Wire comme macro (240). Tapez « (240) » dans le terminal de Bus Pirate pour démarrer la recherche 1-Wire.
Chaque adresse d’appareil est imprimé, dispositifs connus sont identifiés. Les dix premières adresses de périphérique 1-Wire sont stockés sous forme de macros, dans cet exemple, notre adresse DS2431 est disponible en tapant « (1) » dans le terminal.
Étape 2, écrire 8 octets dans le bloc-notes
1 fil > 0 x (55) (1) 0x0f 0 0 8 7 6 5 4 3 2 1
1WIRE réinitialisation du BUS OK <<< aussi {commande
COMMANDE de ROM WRITE 1WIRE : correspond à (0 x 55) * suivre avec adresse 64 bits
1WIRE ADRESSE MACRO 1: 0X2D 0X54 0XD2 0XEF 0X00 0X00 0X00 0X2B '
ÉCRITURE : 0x0F <<< DS2431 écrire scratch pad commande
ÉCRITURE: 0 x 00 <<< DS2431 écrire les octets de l’adresse 1
ÉCRITURE: 0 x 00 <<< DS2431 écrire adresse octet 2
ÉCRITURE: 0 x 08 <<< commencer 8 valeurs de données à écrire
ÉCRIRE: 0 X 07
ÉCRIRE: 0 X 06
ÉCRIRE: 0 X 05
ÉCRIRE: 0 X 04
ÉCRIRE: 0 X 03
ÉCRIRE: 0 X 02
ÉCRIRE: 0 X 01
1 fils >
Ensuite, nous allons écrire 8 octets vers un emplacement temporaire sur le DS2431 appelé le bloc-notes.
Début de l’opération avec une réinitialisation du bus 1-Wire et MATCH command (0 x 55). Les deux sont disponibles comme macro « 0 x (55) ». Cela peut aussi être fait sans une macro en tapant ' {0 x 55 ', {envoie le reset 1-Wire, 0 x 55 est le commandement MATCH 1-Wire.
Après la commande MATCH, envoyer l’ID 8 octets de l’appareil à l’adresse. Nous avons utilisé la macro (1) qui a été remplie avec l’ID DS2431 à l’étape 1. Vous pouvez également entrer l’ID 8 octets manuellement. À ce stade, que le DS2431 aurait dû recevoir, c’est adresse et être prêt pour les commandes.
0x0F est la commande "write" bloc-notes, il raconte la DS2431 de s’attendre à des données. Les deux octets lui dire où mettre les données, nous allons l’enregistrer au début (0 0). Enfin, nous envoyer 8 octets pour les valeurs à stocker, les numéros 8 à 1.
Vous devez écrire un total de 8 octets dans le DS2431. En outre, l’adresse de l’écriture doit être sur une limite de 8 octets. Voir la fiche technique pour une présentation complète des limitations écriture.
L’étape 3, vérifier le bloc-notes et obtenir le code d’autorisation
1-WIRE > (0x55)(1) 0xaa r: 3 r: 8 r: 2 r: 2
1WIRE réinitialisation du BUS OK <<< adresse de l’appareil
COMMANDE de ROM WRITE 1WIRE : correspond à (0 x 55) * suivre avec adresse 64 bits
1WIRE ADRESSE MACRO 1: 0X2D 0X54 0XD2 0XEF 0X00 0X00 0X00 0X2B
ÉCRITURE : 0xAA <<< lire le bloc-notes commande
En vrac lire octets 0 x 03 : <<< le code d’autorisation
0 x 00 0x00 0x07
En vrac lire les octets de 0 x 08 : <<< les données que nous avons envoyé
0x08 0x07 0x06 0x05 0x04 0x03 0x02 0x01
En vrac lire les octets de 0 x 02 : <<< CRC pour les données
0xC8 0x86
En vrac lire les octets de 0 x 02 : <<< tous les 1 après CRC
0xFF 0xFF
1 fils >
Vérifier que les données a été reçues correctement et obtenir un code d’autorisation écriture.
Recommencer avec un redémarrage à 1fil macro de commande MATCH (0 x 55) et la macro d’adresse de dispositif (1). Cet envoi de temps le DS2431 lire le bloc-notes (0xAA) de commande et puis lire un total de 15 octets.
Les 3 premiers octets lu (r: 3) sont le code d’autorisation écrire, nous aurons le besoin à l’étape suivante pour copier le bloc-notes dans l’EEPROM. Les prochaines 8 octets (r: 8) doit correspondre à des données que nous avons envoyé à l’étape 2. Les finales 2 octets (r: 2) sont un CRC16 pour les données. Lit après le CRC retourner tous les 1.
Étape 4, écrire le bloc-notes dans l’EEPROM
1 fil > (0x55)(1) 0x55 0x00 0x00 0x07
1WIRE réinitialisation du BUS OK <<< adresse de l’appareil
COMMANDE de ROM WRITE 1WIRE : correspond à (0 x 55) * suivre avec adresse 64 bits
1WIRE ADRESSE MACRO 1: 0X2D 0X54 0XD2 0XEF 0X00 0X00 0X00 0X2B
ÉCRITURE: 0 x 55 <<< copier scratch pad commande
ÉCRITURE: 0 x 00 <<< code d’autorisation de l’étape 3 de 3 octets
ÉCRIRE: 0 X 00
ÉCRIRE: 0 X 07
1 fils >
Nous avons tout ce dont nous avons besoin pour stocker les données de bloc-notes en permanence dans l’EEPROM.
Régler l’appareil, puis envoyer la commande de bloc-notes de copie de DS2431 (0 x 55) suivi du code d’autorisation de trois octets nous récupérées à l’étape 3 (0 x 00 0x00 0x07). Si le code d’autorisation est correct, les données sont transférées dans l’EEPROM.
Étape 5, vérifiez l’écriture de bloc-notes
1-WIRE > (0x55)(1) 0xaa r: 3
1WIRE réinitialisation du BUS OK <<< adresse de l’appareil
COMMANDE de ROM WRITE 1WIRE : correspond à (0 x 55) * suivre avec adresse 64 bits
1WIRE ADRESSE MACRO 1: 0X2D 0X54 0XD2 0XEF 0X00 0X00 0X00 0X2B
ÉCRITURE : 0xAA <<< lire le bloc-notes commande
EN VRAC, LIRE LES OCTETS 0 X 03 :
0 x 00 0x00 0x87 <<< mis à jour le code d’autorisation
1 fils >
Le DS2431 définit la tige peu la plupart de l’écriture de code d’autorisation après une commande de bloc-notes copie réussie. Envoyer un autre lire scratch pad commande (0xAA) pour obtenir le code d’autorisation de mise à jour, mais il suffit de lire les trois premiers octets (r: 3). La valeur précédente 0 x 07 a changé à 0 x 87, la commande de copie a été reçue avec succès.
Étape 6, collationné les valeurs
1-WIRE > (0x55)(1) 0xf0 0x00 0x00 r: 8 r: 8
1WIRE réinitialisation du BUS OK <<< adresse de l’appareil
COMMANDE de ROM WRITE 1WIRE : correspond à (0 x 55) * suivre avec adresse 64 bits
1WIRE ADRESSE MACRO 1: 0X2D 0X54 0XD2 0XEF 0X00 0X00 0X00 0X2B
ÉCRITURE : 0xF0 <<< DS2431 lu commande
ÉCRITURE: 0 x 00 <<< 2 octet lu adresse
ÉCRIRE: 0 X 00
LECTURE en vrac 0 x 08 octets : <<< lire les octets 8 nous avons écrit
0x08 0x07 0x06 0x05 0x04 0x03 0x02 0x01
LECTURE en vrac 0 x 08 octets : <<< lu plus de valeurs
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
1 fils >
Vérifier l’écriture a fonctionné correctement en récupérant les valeurs. Adresse de le DS2431, puis envoyer la lecture command (0xf0) et l’adresse pour lire à partir (0x00 0x00).
Il est possible de lire la plage de mémoire entière avec une seule commande. Nous avons lu les huit octets, nous avons écrit plus tôt (r: 8), qui retourne les valeurs attendues. Les huit octets au-delà de ces valeurs n’ont pas été rédigés et retourne 0.