Étape 3: 24AA - / 24LC I2C EEPROM
Bus: I2C, résistances de pull-up nécessaires.
Alimentation électrique : 1.8volts à 5.5volts (24AA), 2.5volts à 5.5 volts (24LC).
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.
IC4 est un 24AA-série I2C EEPROM de Microchip, ces mémoires EEPROM viennent dans une tonne de tailles. AA parties travaillent de 1.8volts à 5.5volts, tandis que les pièces-24LC ont une exigence minimale de 2,5 volts.
Un 0.1uF condensateur (C2) découple IC4 du bloc d’alimentation. L’écriture protéger broche (WP) puisse être commandé par un microcontrôleur, mais pour cette simple démonstration nous désactivez-le avec une connexion à la terre. Les broches de bus I2C, SDA et SCL, sont mis en évidence à en-tête JP2.
L’adresse de la plupart des EEPROMs 24AA est 1010AAAS, avec les quatre bits finales déterminées par l’adresse-goupilles (A0, A1, A2) et le bit de sélection de mode de lecture/écriture (S). Tous les bits de l’adresse sont mis à la terre dans cet exemple, l’adresse de l’écriture de l’EEPROM est 10100000 (détails page 6).
Programme d’installation
Si vous utilisez un Bus Pirate, connectez-le à le 3EEPROM ou 24AA-ci comme sur l’image du graphique ci-dessous. I2C est un bus bidirectionnel qui nécessite des résistances de pull-up sur les deux axes. Vous pouvez utiliser des résistances de pull-up bord du Bus Pirate en reliant la broche Vpullup (Vpu) à l’alimentation 3,3 volts et de leur permettre dans le terminal.
Entoilage
Remarque : Pas tous les EEPROMs I2C fonctionnent de la même. Le petit 24AA01, par exemple, possède un système de commande et de traiter complètement différent. N’oubliez pas de vérifier la feuille de données pour votre puce.
Suis de la presse "dans l’I2C Bus Pirate de terminal et sélectionnez dans le menu mode. Activez les blocs d’alimentation (gros "W") et les résistances de pull-up (« p », option 2) à l’invite de commandes I2C. Obtenir un rapport de tension ("v") pour s’assurer que les blocs d’alimentation sont sur et la broche de Vpullup est reliée à une tension.
I2C > (0) <<< obtenir la liste des macros
0 menu macro
recherche d’adresse bit 1,7
I2C > (1) <<< utiliser la macro de recherche d’adresse
La recherche d’espace d’adressage de 7 bits I2C.
Appareils trouvés à :
0xa0 0xA1 <<< trouvé des dispositifs
I2C >
Nous savons déjà que l’adresse I2C est 10100000, mais nous pouvons aussi utiliser des macros de recherche du Pirate Bus I2C (1) pour rechercher le 24AA-. La macro de recherche trouvé le périphérique à l’écriture attendue (0xA0) et lire les adresses (0xA1).
Étape 1, écrire certaines valeurs
I2C > [0b10100000 0 0 3 2 1]
CONDITION de démarrage I2C <<< I2C commencer condition
ÉCRITURE : 0xA0 GOT ACK : oui <<< 24AA / écriture adresse
ÉCRITURE: 0 x 00 obtenu ACK : oui <<< écrire les octets de l’adresse 1
ÉCRITURE: 0 x 00 obtenu ACK : oui <<< écrire les octets de l’adresse 2
ÉCRITURE: 0 x 03 obtenu ACK : oui <<< 3 valeurs d’écrire (3,2,1)
ÉCRITURE: 0 X 02 EU ACK : OUI
ÉCRITURE: 0 X 01 A OBTENU ACK : OUI
CONDITION de STOP I2C <<< condition d’arrêt I2C
I2C >
Commencer l’écriture avec une condition de départ I2C ([]), suivi de l’adresse 24AA-écriture (0xa0). Ensuite, envoyez l’adresse de 16 bits à écrire à (0 0) et les données à écrire (3-1 de 2). Mettre fin à la transaction I2C avec une condition d’arrêt (]).
Étape 2, placez le pointeur de lecture
I2C > [0b10100000 0 0]
CONDITION de démarrage I2C <<< I2C commencer condition
ÉCRITURE : 0xA0 GOT ACK : oui <<< 24AA / écriture adresse
ÉCRITURE: 0 x 00 obtenu ACK : oui <<< écrire les octets de l’adresse 1
ÉCRITURE: 0 x 00 obtenu ACK : oui <<< écrire les octets de l’adresse 2
CONDITION de STOP I2C <<< condition d’arrêt I2C
I2C >
Il faut deux opérations pour lire de la 24AA-. On positionne le pointeur de lecture/écriture, l’autre retourne les valeurs.
Commencer par une condition de départ I2C ([]) et l’adresse de l’écriture (0xa0). Envoyer l’adresse de 16 bits à lire (0 0) et puis la condition d’arrêt (]). Nous n’envoyons toutes les données à écrire cette fois, que nous avons juste positionné le pointeur de lecture/écriture au début des données que nous avons écrit à l’étape 1.
Étape 3, lire certaines valeurs
I2C > [0b10100001 r: 3]
CONDITION de démarrage I2C <<< I2C commencer condition
ÉCRITURE : 0xA1 GOT ACK : oui <<< 24AA-lecture adresse
LECTURE en vrac octets de 0 x 03 : <<< lu 3 valeurs
0 x 03 0x02 0x01
CONDITION de STOP I2C <<< condition d’arrêt I2C
I2C >
Étape 2 Réglez le pointeur de lecture/écriture au début des données que nous avons envie de lire. Maintenant, nous pouvons lire les données en utilisant l’adresse 24AA-lecture.
Commencer par la condition de départ I2C ([]) et l’adresse de 24AA-lecture (0xa1). Lire les trois valeurs que nous avons écrit à l’étape 1 (r: 3) et se terminent par une condition d’arrêt (]). Si les valeurs correspondent, alors votre écriture a réussi.