Objectifs: Interfaçage Des Périphériques Dans Les Systèmes Embarqués - Création de Drivers de Communication
Objectifs: Interfaçage Des Périphériques Dans Les Systèmes Embarqués - Création de Drivers de Communication
Objectifs
L’objectif de ce travail pratique est d’apprendre à concevoir des drivers de haut niveau, réutilisables,
pour des protocoles de communication (par exemple, I2C, SPI) sur différentes plateformes, telles
que mikroC pour le PIC16F877A, MicroPython pour l’ESP8266 et Python pour le Raspberry Pi.
Ce travail implique une compréhension approfondie des fonctions de bas niveau fournies par chaque
plateforme, ainsi que l’acquisition des compétences nécessaires pour lire et analyser les fiches techniques
des périphériques afin de concevoir les drivers appropriés en se basant sur les informations qu’elles
contiennent. De plus, ce TP a pour but d’implémenter une gestion robuste des erreurs et d’optimiser
les drivers pour garantir une communication efficace et fiable. Des exemples pratiques permettront
d’illustrer l’application de ces drivers dans des scénarios réels, accompagnés de tests et d’une phase
de débogage afin d’assurer leur bon fonctionnement sur toutes les plateformes.
Introduction
Les systèmes embarqués occupent une place prépondérante dans un large éventail d’applications
modernes, allant des objets connectés aux systèmes industriels complexes. Ces systèmes requièrent
une communication fiable et performante avec leurs périphériques externes. Les protocoles de com-
munication, tels que I2C, SPI et UART, jouent un rôle central dans cette interaction, fournissant
des solutions efficaces pour l’échange de données entre le microcontrôleur et les composants périphé-
riques. L’adoption généralisée de ces protocoles s’explique par leur efficacité, leur faible consommation
énergétique et leur large diffusion dans de multiples secteurs industriels.
La création de drivers constitue un aspect fondamental du développement des systèmes embarqués.
Un driver agit en tant qu’intermédiaire entre le matériel (périphérique) et le logiciel (application ou
système d’exploitation), facilitant ainsi la gestion des échanges de données. Les fonctions de bas niveau
contrôlent directement les protocoles de communication, en gérant les aspects matériels tels que les
registres et les interactions avec le périphérique à un niveau élémentaire. À l’inverse, les drivers de
haut niveau reposent sur ces fonctions de bas niveau pour offrir des interfaces abstraites, simplifiant
ainsi l’interaction avec les périphériques pour les développeurs d’applications.
Cependant, pour concevoir des drivers efficaces, il est impératif de comprendre de manière ap-
profondie les spécifications et les caractéristiques des périphériques avec lesquels le système interagit.
Cela nécessite notamment la capacité de lire et d’interpréter les fiches techniques (datasheets) des
composants, qu’il s’agisse de capteurs, de mémoires ou d’autres dispositifs. Ces documents fournissent
des informations essentielles concernant la configuration, les registres, les modes de communication
et les contraintes de fonctionnement des périphériques. Une lecture attentive et une compréhension
SDA
SCL
VDD
VDD
VDD
VDD
SDA
SDA
SDA
SDA
SCL
SCL
SCL
SCL
GND
GND
GND
GND
GND
SDA/SCL
Slave or Master
RPU
VBUS
VBUS
Logic
V
Time
(a) Tirer le Bus I2C Vers le Bas avec une Sortie à Drain Ouvert
SDA/SCL
Slave or Master
RPU
VBUS
VBUS
Logic
V
Time
(b) Tirer le Bus I2C Vers le Haut avec une Résistance de Tirage
Dans une opération d’écriture typique, le maître commence par envoyer une condition de début
suivie de l’adresse de l’esclave avec le bit R/W réglé à 0, indiquant une opération d’écriture. Le maître
envoie ensuite l’adresse du registre auquel il souhaite écrire, après quoi l’esclave reconnaît la transmis-
3/13
sion. Le maître transmet ensuite les données, et l’esclave reconnaît chaque octet. La communication
se termine par une condition d’arrêt, comme le montre la Figure 3.
Device (Slave) Address (7 bits) Register Address N (8 bits) Data Byte to Register N (8 bits)
S A6 A5 A4 A3 A2 A1 A0 0 A B7 B6 B5 B4 B3 B2 B1 B0 A D7 D6 D5 D4 D3 D2 D1 D0 A P
La lecture depuis un dispositif esclave est similaire à l’opération d’écriture, mais implique des
étapes supplémentaires pour indiquer à l’esclave quel registre lire. Le maître commence par envoyer
une condition de début et l’adresse de l’esclave avec le bit R/W réglé à 0, suivie de l’adresse du
registre. Après que l’esclave ait reconnu cette adresse de registre, le maître génère une condition
de début répétée et envoie à nouveau l’adresse de l’esclave, mais cette fois avec le bit R/W réglé
à 1, signalant une opération de lecture. L’esclave transmet alors les données demandées au maître,
qui continue à générer des impulsions d’horloge pendant que l’esclave envoie les bits de données.
Après avoir reçu le nombre d’octets souhaité, le maître envoie un NACK pour signaler la fin de la
communication, suivi d’une condition d’arrêt. Cette séquence est illustrée dans la Figure 4.
Device (Slave) Address (7 bits) Register Address N (8 bits) Device (Slave) Address (7 bits) Data Byte From Register N (8 bits)
S A6 A5 A4 A3 A2 A1 A0 0 A B7 B6 B5 B4 B3 B2 B1 B0 A Sr A6 A5 A4 A3 A2 A1 A0 1 A D7 D6 D5 D4 D3 D2 D1 D0 NA P
START R/W = 0 ACK ACK Repeated START R/W = 1 ACK NACK STOP
4/13
2 Manipulation
2.1 Mémoire EEPROM 24C08B/16B
L’EEPROM 24C08B/16B est une mémoire de 8 Kbits (pour la 24C08B) ou 16 Kbits (pour la
24C16B), basée sur une interface série I2C. Elle est organisée en blocs de 256 x 8 bits, ce qui permet de
structurer la mémoire de manière logique pour un accès facile. Cette EEPROM supporte les opérations
d’écriture par octet ainsi que des écritures par page pouvant atteindre 16 octets de données, ce qui
offre une flexibilité importante pour les applications nécessitant des écritures rapides et multiples.
A0 1 8 VCC
• VCC → 5V
• VSS → 0V
24C08B/16B
A1 2 7 WP
• SCL et SDA → Bus I2C
A2 3 6 SCL • A0, A1, A2 (flottantes)
• WP : VCC =⇒ protection contre l’écriture
VSS 4 5 SDA
VSS =⇒ écriture autorisée.
Cette EEPROM est dotée d’une adresse I2C fixe : 0xA0 pour l’écriture et 0xA1 pour la lecture.
Les broches A0, A1 et A2, non utilisées pour la sélection d’adresse, peuvent être laissées flottantes
ou reliées à VSS (masse) ou VCC (alimentation). Cette caractéristique simplifie l’interface, particu-
lièrement lorsque l’on utilise un seul périphérique.
Il existe deux modes d’écriture pour la mémoire EEPROM 24C08B/16B, à savoir l’écriture par
octet et l’écriture par page. L’écriture par octet suit la séquence illustrée dans Figure 5, tandis que
l’écriture par page suit la même procédure, mais permet d’envoyer jusqu’à 16 octets de données en
une seule opération, au lieu de les envoyer un par un, avant d’envoyer le signal de fin (voir FIGURE
4-2, page 6 de [1]). Dans Figure 5, WORD ADDRESS fait référence à l’adresse au sein d’un bloc spécifié.
FIGURE 4-1: BYTE WRITE
S S
BUS ACTIVITY T CONTROL WORD T
MASTER A BYTE ADDRESS DATA O
R P
T
SDA LINE S P
A A A
BUS ACTIVITY C C C
K K K
De plus, trois modes de lecture sont disponibles : la lecture à la position actuelle, la lecture à partir
d’une adresse spécifique, et la lecture d’une page à une adresse donnée. La lecture d’un seul octet est
illustrée dans Figure 6. La lecture par page suit une structure similaire (voir FIGURE 7-3, page 8
de [1]).
NB. Il convient de souligner que le cycle d’écriture nécessite un délai de 10 ms pour être achevé.
En ce qui concerne le CONTROL BYTE, il est structuré comme illustré dans Figure 7. Les bits B2B1B0
correspondent à l’adresse du bloc (par exemple, 010=2 signifie la lecture/écriture depuis/vers le bloc
numéro 2).
Travail demandé 1. Réalisez le montage illustré dans la Figure 8. Ensuite, créez un nouveau projet
pour le microcontrôleur et ajoutez les fichiers C08.c et C08.h au répertoire du projet. Ces deux
5/13
S S
T T S
BUS ACTIVITY A CONTROL WORD A CONTROL T
MASTER R BYTE ADDRESS (n) R BYTE DATA (n) O
T T P
S S P
SDA LINE
A A A N
C C C O
K K K
BUS ACTIVITY A
C
K
1 0 1 0 B2 B1 B0
fichiers servent de bibliothèque pour les mémoires 24C08B/C16B. Bien que diverses fonctions aient
été implémentées par votre Prof., certaines restent à compléter par vous-même (La page d’aide de
mikroC relative à la classe I2 C [2] est essentielle pour comprendre le code). Le contenu du fichier
d’en-tête C08.h, qui contient les prototypes des fonctions, est présenté dans le Listing 1.
Saisissez, compilez, puis téléversez le code présenté dans le Listing 2 sur le microcontrôleur.
6/13
SCL
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1 SDA SDA
35 4.7k 4.7k
2
3
4
RA0/AN0
RA1/AN1
RB2
RB3/PGM
RB4
36
37
38 U1
SCL SCL I2C
RA2/AN2/VREF-/CVREF RB5 TRIG
5 39 6
RA3/AN3/VREF+ RB6/PGC SDA SCK
6 40 5
RA4/T0CKI/C1OUT RB7/PGD SDA
7 7
RA5/AN4/SS/C2OUT WP
15
RC0/T1OSO/T1CKI
8 16 24C08B
RE0/AN5/RD RC1/T1OSI/CCP2 LM016L
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL SCL
23
RC4/SDI/SDA SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
VDD
VSS
VEE
RW
19
RS
D0
D1
D2
D3
D4
D5
D6
D7
RD0/PSP0 RS
E
20
RD1/PSP1 E
21
RD2/PSP2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
22
RD3/PSP3
27
RD4/PSP4 D4
28
RD5/PSP5 D5
29
RD6/PSP6 D6
30
RS
D4
D5
D6
D7
RD7/PSP7 D7
PIC16F877A
21 void main () {
22 byte dataa , dataa2 [16];
23 I2C1_Init (100000) ; Lcd_Init () ; Lcd_Cmd ( _LCD_CURSOR_OFF ) ;
24 byteWrite (3 , 5 , 0 xAB ) ;
25 byteWrite2 (772 , 0 xDE ) ;
7/13
1. Expliquez le rôle des deux résistances de 4.7 kΩ.
2. Dans le fichier C08.c, en analysant les implémentations des fonctions byteWrite et byteWrite2,
mettez en évidence les différences entre les deux et justifiez leur utilité respective.
3. Après l’exécution du programme, expliquez les résultats affichés sur l’écran LCD.
4. Concernant les sorties de l’analyseur logique/I2C, les résultats obtenus sont présentés dans la
Figure 9. Interprétez ces résultats (les Figure 3 et 4 peuvent s’avérer utiles).
Chaque mémoire AT24C512 utilise un code d’adresse sur 7 bits pour la communication I2 C. Les
deux bits inférieurs de cette adresse (A1 et A0) sont configurés via les broches correspondantes du
dispositif, permettant d’utiliser jusqu’à huit mémoires AT24C512 sur un même bus. La figure 10
illustre la relation entre les broches d’adresse et le code d’adresse I2 C.
1 0 1 0 0 A1 A0 R/W̄
8/13
2.2.2 Modes d’accès à la mémoire : Lecture et écriture
L’AT24C512 nécessite un adressage sur 16 bits, impliquant l’envoi de deux mots d’adresse pour
spécifier une position mémoire précise. La figure 11 illustre la séquence d’écriture d’un octet, tandis
que la figure 12 présente la séquence de lecture d’un octet.
Ces figures mettent en évidence l’importance de l’utilisation de deux mots d’adresse, particulière-
ment pour des applications nécessitant l’accès à des données réparties sur une mémoire étendue.
Travail demandé 2. Dans le montage présenté dans la Figure 13, deux AT24C512 sont connectés à
un même bus I2 C. Les broches d’adresse A0 et A1 permettent de différencier les deux composants en
configurant leurs adresses respectives. Ce dispositif offre ainsi une capacité totale de 128 kB, adressable
via un schéma cohérent.
Votre tâche consiste à développer un pilote (driver) pour gérer ce système à deux mémoires
AT24C512, en vous appuyant sur les informations présentées dans ce TP ainsi que sur celles four-
nies dans la fiche technique (datasheet) de l’AT24C512 [3].
9/13
6 1
SCL SCL A0
13 33 5 2
OSC1/CLKIN RB0/INT SDA SDA A1
14 34 4.7k 4.7k 7
OSC2/CLKOUT RB1 WP
35
RB2 SDA SDA
2 36 AT24C512
3
4
5
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RB3/PGM
RB4
RB5
37
38
39
SCL
6
5
SCL A0
1
2
SCL SCL I2C
RA3/AN3/VREF+ RB6/PGC SDA SDA A1 TRIG
6 40 7
SDA
SCL
RA4/T0CKI/C1OUT RB7/PGD WP
7
RA5/AN4/SS/C2OUT
15 AT24C512
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2 LM016L
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL SCL
23
RC4/SDI/SDA SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
VDD
VSS
VEE
RW
19
RS
D0
D1
D2
D3
D4
D5
D6
D7
RD0/PSP0 RS
E
20
RD1/PSP1 E
21
RD2/PSP2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
22
RD3/PSP3
27
RD4/PSP4 D4
28
RD5/PSP5 D5
29
RD6/PSP6 D6
30
RS
D4
D5
D6
D7
RD7/PSP7 D7
PIC16F877A
(a) Identifiez les limitations des fonctions read et write et proposez des améliorations possibles
pour les optimiser.
(b) Comme le montre le Listing 3, la fonction erase efface 16 octets à la fois, c’est-à-dire une
page complète. Cette méthode constitue une approche par page pour l’effacement. Une autre
approche consisterait à effacer la mémoire octet par octet (byte-wise approach). Expliquez
pourquoi l’approche par page est préférable.
2. Dans l’annexe B, un programme (présenté dans le Listing 4) est conçu pour être exécuté sur
un Raspberry Pi 2 . Ce programme permet de transférer le contenu de la mémoire EEPROM
dans un fichier texte dans un format lisible. Il lit les quatre blocs de la mémoire 24C08B. Un
exemple du résultat obtenu est présenté dans la Figure 14.
(a) Expliquez les lignes 18 et 19 du Listing 4 et leur relation avec les 12 premiers octets du
Block 0 illustrés dans la Figure 14.
(b) Supposons l’existence d’un fichier binaire "f24.bin", de taille appropriée, présent dans le
système de fichiers du Raspberry Pi. Écrivez un programme en Python qui lit les octets du
fichier et les écrit sur la mémoire EEPROM 24C08B.
4 Mini-Projet
Under Construction
Will be completed by next week
2. Bien que le programme puisse théoriquement être utilisé sur n’importe quelle version du Raspberry Pi, il convient
de noter qu’il a été testé uniquement sur le modèle Raspberry Pi 2 Model B.
10/13
Annexes
A Code Micro-Python pour le 24C08B
Listing 3 – Exemple de code MicroPython pour implémenter des opérations de base pour la mémoire
EEPROM 24C08B
1 """
2 Created by Dr . TERCHI Younes as part of the lab on Embedded Systems
3 for Master 2 students , Department of Electronics , Setif 1 Ferhat Abbas
University
4 """
5 from machine import Pin , I2C
6 import utime
11/13
B 24C08B avec Raspberry pi et python
Listing 4 – Code Python pour le vidage (dump) et l’analyse du contenu de la mémoire EEPROM
24C08B
1 """
2 Created by Dr . TERCHI Younes as part of the lab on Embedded Systems
3 for Master 2 students , Department of Electronics , Setif 1 Ferhat Abbas
University .
4 This program serves as a dumper for the 24 C08B EEPROM . It reads the EEPROM
content block by block and writes it to a file in a formatted structure
for analysis and debugging .
5 """
6 import smbus , time
12/13
Block 0 Block 2
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0000-00: 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 FF FF FF FF 0200-00: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0010-10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0210-10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0020-20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0220-20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0030-30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0230-30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0040-40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0240-40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0050-50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0250-50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0060-60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0260-60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0070-70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0270-70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0080-80: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0280-80: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0090-90: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0290-90: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00A0-A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02A0-A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00B0-B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02B0-B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00C0-C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02C0-C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00D0-D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02D0-D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00E0-E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02E0-E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00F0-F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02F0-F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Block 1 Block 3
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0100-00: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0300-00: 00 11 22 33 44 55 66 FF FF FF 2F FF FF FF FF FF
0110-10: FF FF 52 74 FF FF FF FF FF FF FF FF FF FF FF FF 0310-10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0120-20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0320-20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0130-30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0330-30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0140-40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0340-40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0150-50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0350-50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0160-60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0360-60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0170-70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0370-70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0180-80: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0380-80: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0190-90: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0390-90: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
01A0-A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03A0-A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
01B0-B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03B0-B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
01C0-C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03C0-C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
01D0-D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03D0-D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
01E0-E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03E0-E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
01F0-F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03F0-F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Références
[1] Microchip, “24c08b/16b, 8k/16k 5.0v i2c serial eeproms,” accessed : 2024-11-15. [Online].
Available : https://ww1.microchip.com/downloads/en/devicedoc/21081G.pdf
[2] Mikroe, “Mikroc i2 c library help,” accessed : 2024-11-16. [Online]. Available : https:
//download.mikroe.com/documents/compilers/mikroc/pic/help/i2c_library.htm
[3] ATMEL, “At24c512, two-wire serial eeprom,” accessed : 2024-11-16. [Online]. Available :
https://ww1.microchip.com/downloads/en/devicedoc/doc1116.pdf
[4] MicroPython, “class i2c – a two-wire serial protocol¶,” accessed : 2024-11-16. [Online]. Available :
https://docs.micropython.org/en/latest/library/machine.I2C.html
[5] ElectronicWings, “Python based i2c functions for raspberry pi,” acces-
sed : 2024-11-17. [Online]. Available : https://www.electronicwings.com/raspberry-pi/
python-based-i2c-functions-for-raspberry-pi
13/13
Table des matières
Objectifs 1
Introduction 1
2 Manipulation 5
2.1 Mémoire EEPROM 24C08B/16B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Mémoire EEPROM AT24C512–Dépassement des limitations du 24C08 . . . . . . . . 8
2.2.1 Adressage des dispositifs AT24C512 . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2 Modes d’accès à la mémoire : Lecture et écriture . . . . . . . . . . . . . . . . . 9
3 Perspectives d’approfondissement 9
4 Mini-Projet 10
Annexes 11
A Code Micro-Python pour le 24C08B . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
B 24C08B avec Raspberry pi et python . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Références 13